Automatically detect and build libsodium from source on systems with old or missing libsodium's.
Fix caching on Travis.
This commit is contained in:
parent
1f6446b6f5
commit
a5d1d14297
14
.travis.yml
14
.travis.yml
@ -5,18 +5,14 @@ os:
|
||||
# - osx
|
||||
|
||||
install:
|
||||
- ./travis-install-lib-sodium.sh
|
||||
- COX_BUILD_DEBUG=1 LIBSODIUM_BUILD_DIR=$HOME/libsodium ./build/libsodium_install.sh
|
||||
before_script:
|
||||
- export C_INCLUDE_PATH=$LD_LIBRARY_PATH:`pwd`/sodium/include
|
||||
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/sodium/lib
|
||||
- env | egrep PKG
|
||||
- export PKG_CONFIG_PATH=`pwd`/sodium/lib/pkgconfig
|
||||
- env | egrep LD_
|
||||
- env | egrep PKG
|
||||
- pwd
|
||||
- export LIBSODIUM_BUILD_DIR=$HOME/libsodium
|
||||
after_failure:
|
||||
- "[ -f libsodium_install.out ] && cat libsodium_install.out"
|
||||
cache:
|
||||
directories:
|
||||
- sodium
|
||||
- "$HOME/libsodium"
|
||||
|
||||
#addons:
|
||||
# apt:
|
||||
|
34
build/env.sh
Normal file
34
build/env.sh
Normal file
@ -0,0 +1,34 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Overridable.
|
||||
[ -z "$LIBSODIUM_BUILD_DIR" ] && LIBSODIUM_BUILD_DIR=`pwd`/build
|
||||
|
||||
|
||||
# Upgraded from time to time.
|
||||
export MIN_LIBSODIUM_VERSION=1.0.18
|
||||
export LIBSODIUM_SHA256=6f504490b342a4f8a4c4a02fc9b866cbef8622d5df4e5452b46be121e46636c1
|
||||
|
||||
|
||||
[ ! -z "$COX_BUILD_DEBUG" ] && export COX_BUILD_VERBOSE=1
|
||||
|
||||
function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
|
||||
|
||||
if `pkg-config libsodium --exists`; then
|
||||
PKG_VER=`pkg-config libsodium --modversion`
|
||||
|
||||
if [ $(version "$PKG_VER") -ge $(version "$MIN_LIBSODIUM_VERSION") ]; then
|
||||
[ ! -z "$COX_BUILD_VERBOSE" ] && echo "Using packaged libsodium."
|
||||
else
|
||||
[ ! -z "$COX_BUILD_VERBOSE" ] echo "System packaged libsodium is too old."
|
||||
export LIBSODIUM_INSTALL=1
|
||||
fi
|
||||
else
|
||||
[ ! -z "$COX_BUILD_VERBOSE" ] && echo "Missing libsodium system package."
|
||||
export LIBSODIUM_INSTALL=1
|
||||
fi
|
||||
|
||||
|
||||
if [ "$LIBSODIUM_INSTALL" = "1" ]; then
|
||||
export LIBSODIUM_INSTALL_PATH="$LIBSODIUM_BUILD_DIR"/libsodium
|
||||
export PKG_CONFIG_PATH="$LIBSODIUM_INSTALL_PATH"/lib/pkgconfig
|
||||
fi
|
68
build/libsodium_install.sh
Executable file
68
build/libsodium_install.sh
Executable file
@ -0,0 +1,68 @@
|
||||
#!/bin/bash
|
||||
# The purpose of this file is to install libsodium when:
|
||||
# 1. No packaged version is found.
|
||||
# 2. The packaged version is older than the version specified in this repository.
|
||||
# pkg-config is used to find the library and determine it's version.
|
||||
# You may replace the libsodium library with your own installed version by setting PKG_CONFIG_PATH before compiling.
|
||||
|
||||
set -e
|
||||
|
||||
# Always use bash. `dash` doesn't work properly with . includes. I'm not sure why.
|
||||
. ./build/env.sh
|
||||
|
||||
#export LIBSODIUM_INSTALL=1
|
||||
if [ "$LIBSODIUM_INSTALL" != "1" ]; then
|
||||
[ ! -z "$COX_BUILD_VERBOSE" ] echo "Skipping libsodium build."
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
mkdir -p "$LIBSODIUM_BUILD_DIR"
|
||||
cd "$LIBSODIUM_BUILD_DIR"
|
||||
|
||||
|
||||
if [ ! -f "$LIBSODIUM_INSTALL_PATH/include/sodium.h" ]; then
|
||||
[ ! -z "$COX_BUILD_DEBUG" ] && set -x
|
||||
|
||||
DIRNAME=libsodium-"$MIN_LIBSODIUM_VERSION"
|
||||
TGZ_FILENAME="$DIRNAME".tar.gz
|
||||
|
||||
if [ ! -f "$TGZ_FILENAME" ]; then
|
||||
wget https://download.libsodium.org/libsodium/releases/"$TGZ_FILENAME"
|
||||
# wget https://download.libsodium.org/libsodium/releases/"$TGZ_FILENAME".minisign
|
||||
fi
|
||||
|
||||
SHA=`openssl sha256 -hex < "$TGZ_FILENAME" | sed 's/^.* //'`
|
||||
if [ "$SHA" != "$LIBSODIUM_SHA256" ]; then
|
||||
echo "SHA256 sum doesn't match."
|
||||
echo "$SHA" != "$LIBSODIUM_SHA256"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "$DIRNAME" ]; then
|
||||
tar xfz "$TGZ_FILENAME"
|
||||
fi
|
||||
|
||||
|
||||
cd "$DIRNAME"
|
||||
if [ ! -f ".configure.done" ]; then
|
||||
./configure --prefix="$LIBSODIUM_INSTALL_PATH" --disable-shared
|
||||
touch .configure.done
|
||||
fi
|
||||
if [ ! -f ".make.done" ]; then
|
||||
make
|
||||
touch .make.done
|
||||
fi
|
||||
if [ ! -f ".make.install.done" ]; then
|
||||
make install
|
||||
touch .make.install.done
|
||||
fi
|
||||
|
||||
[ ! -z "$COX_BUILD_VERBOSE" ] && echo "Finished building libsodium."
|
||||
else
|
||||
# find "$LIBSODIUM_INSTALL_PATH"
|
||||
|
||||
[ ! -z "$COX_BUILD_VERBOSE" ] && echo "Using already built libsodium."
|
||||
fi
|
||||
|
||||
exit 0
|
12
build/pkg-libs.sh
Executable file
12
build/pkg-libs.sh
Executable file
@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Shard directory passed as first argument when called from lib_sodium.cr
|
||||
[ ! -z "$1" ] && cd "$1"
|
||||
|
||||
./build/libsodium_install.sh > libsodium_install.out 2>&1
|
||||
|
||||
. ./build/env.sh
|
||||
|
||||
pkg-config libsodium --libs
|
@ -4,6 +4,10 @@ version: 0.1.0
|
||||
authors:
|
||||
- Andrew Hamon <andrew@hamon.cc>
|
||||
|
||||
development_dependencies:
|
||||
ghshard:
|
||||
github: bcardiff/ghshard
|
||||
|
||||
crystal: 0.24.1
|
||||
|
||||
license: MIT
|
||||
|
@ -1,5 +1,5 @@
|
||||
module Cox
|
||||
@[Link("sodium")]
|
||||
@[Link(ldflags: "`#{__DIR__}/../../build/pkg-libs.sh #{__DIR__}/../..`")]
|
||||
lib LibSodium
|
||||
fun sodium_init() : LibC::Int
|
||||
|
||||
|
@ -1,25 +0,0 @@
|
||||
#!/bin/sh
|
||||
# The purpose of this file is to install libsodium in
|
||||
# the Travis CI environment. We recommend using a
|
||||
# package manager.
|
||||
|
||||
set -e
|
||||
|
||||
LIBSODIUM_INSTALL_PATH=`pwd`/sodium
|
||||
|
||||
if [ ! -f "sodium/include/sodium.h" ]; then
|
||||
set -x
|
||||
|
||||
mkdir -p "$LIBSODIUM_INSTALL_PATH"
|
||||
find "$LIBSODIUM_INSTALL_PATH"
|
||||
|
||||
wget https://download.libsodium.org/libsodium/releases/LATEST.tar.gz
|
||||
tar xfz LATEST.tar.gz
|
||||
cd libsodium-stable
|
||||
./configure --prefix="$LIBSODIUM_INSTALL_PATH"
|
||||
make
|
||||
make install
|
||||
else
|
||||
echo "using cached libsodium build"
|
||||
find "$LIBSODIUM_INSTALL_PATH"
|
||||
fi
|
Loading…
Reference in New Issue
Block a user