From 55b148a0f78c1abef57c21b2a84d97cad32b2290 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Tue, 21 Jan 2020 21:30:21 +0100 Subject: [PATCH] Use system provided libsignal-protocol-c by default You can still compile in tree by using --with-libsignal-in-tree flag --- .travis.yml | 2 +- cmake/FindSignalProtocol.cmake | 5 +- configure | 75 ++++++++++++++------------ plugins/signal-protocol/CMakeLists.txt | 9 ++-- 4 files changed, 51 insertions(+), 40 deletions(-) diff --git a/.travis.yml b/.travis.yml index 99d4c982..d107994a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ env: before_install: - export USE_CCACHE=1 - sudo apt-get update - - sudo apt-get install -y cmake valac libgee-0.8-dev libsqlite3-dev libgtk-3-dev libnotify-dev libgpgme-dev libsoup2.4-dev libgcrypt20-dev libqrencode-dev + - sudo apt-get install -y cmake valac libgee-0.8-dev libsqlite3-dev libgtk-3-dev libnotify-dev libgpgme-dev libsoup2.4-dev libgcrypt20-dev libqrencode-dev libsignal-protocol-c-dev install: - ./configure --with-tests $CONFIGURE_FLAGS - make diff --git a/cmake/FindSignalProtocol.cmake b/cmake/FindSignalProtocol.cmake index 75583e6a..e700cc51 100644 --- a/cmake/FindSignalProtocol.cmake +++ b/cmake/FindSignalProtocol.cmake @@ -1,10 +1,11 @@ include(PkgConfigWithFallback) find_pkg_config_with_fallback(SignalProtocol - PKG_CONFIG_NAME signal-protocol-c + PKG_CONFIG_NAME libsignal-protocol-c LIB_NAMES signal-protocol-c INCLUDE_NAMES signal/signal_protocol.h ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(SignalProtocol - REQUIRED_VARS SignalProtocol_LIBRARY) \ No newline at end of file + REQUIRED_VARS SignalProtocol_LIBRARY + VERSION_VAR SignalProtocol_VERSION) diff --git a/configure b/configure index 061a5c7d..8d274e10 100755 --- a/configure +++ b/configure @@ -1,7 +1,7 @@ #!/bin/sh OPTS=`getopt -o "h" --long \ -help,fetch-only,no-debug,disable-fast-vapi,with-tests,release,\ +help,fetch-only,no-debug,disable-fast-vapi,with-tests,release,with-libsignal-in-tree,\ enable-plugin:,disable-plugin:,\ prefix:,program-prefix:,exec-prefix:,lib-suffix:,\ bindir:,libdir:,includedir:,datadir:,\ @@ -17,6 +17,7 @@ eval set -- "$OPTS" PREFIX=${PREFIX:-/usr/local} ENABLED_PLUGINS= DISABLED_PLUGINS= +BUILD_LIBSIGNAL_IN_TREE= BUILD_TESTS= BUILD_TYPE=Debug DISABLE_FAST_VAPI= @@ -52,9 +53,11 @@ Configuration: clean builds, but faster when doing incremental builds (during development). --fetch-only Only fetch the files required to run ./configure - without network access later and exit + without network access later and exit. --no-debug Build without debug symbols --release Configure to build an optimized release version + --with-libsignal-in-tree Build libsignal-protocol-c in tree and link it + statically. --with-tests Also build tests. Plugin configuration: @@ -110,6 +113,7 @@ while true; do --valac ) VALA_EXECUTABLE="$2"; shift; shift ;; --valac-flags ) VALAC_FLAGS="$2"; shift; shift ;; --lib-suffix ) LIB_SUFFIX="$2"; shift; shift ;; + --with-libsignal-in-tree ) BUILD_LIBSIGNAL_IN_TREE=yes; shift ;; --disable-fast-vapi ) DISABLE_FAST_VAPI=yes; shift ;; --no-debug ) NO_DEBUG=yes; shift ;; --fetch-only ) FETCH_ONLY=yes; shift ;; @@ -141,44 +145,46 @@ while true; do esac done -if [ -d ".git" ]; then - git submodule update --init 2>/dev/null -else - tmp=0 - for i in $(cat .gitmodules | grep -n submodule | awk -F ':' '{print $1}') $(wc -l .gitmodules | awk '{print $1}'); do - if ! [ $tmp -eq 0 ]; then - name=$(cat .gitmodules | head -n $tmp | tail -n 1 | awk -F '"' '{print $2}') - def=$(cat .gitmodules | head -n $i | tail -n $(expr "$i" - "$tmp") | awk -F ' ' '{print $1 $2 $3}') - path=$(echo "$def" | grep '^path=' | awk -F '=' '{print $2}') - url=$(echo "$def" | grep '^url=' | awk -F '=' '{print $2}') - branch=$(echo "$def" | grep '^branch=' | awk -F '=' '{print $2}') +if [ "$BUILD_LIBSIGNAL_IN_TREE" = "yes" ] || [ "$FETCH_ONLY" = "yes" ]; then + if [ -d ".git" ]; then + git submodule update --init 2>/dev/null + else + tmp=0 + for i in $(cat .gitmodules | grep -n submodule | awk -F ':' '{print $1}') $(wc -l .gitmodules | awk '{print $1}'); do + if ! [ $tmp -eq 0 ]; then + name=$(cat .gitmodules | head -n $tmp | tail -n 1 | awk -F '"' '{print $2}') + def=$(cat .gitmodules | head -n $i | tail -n $(expr "$i" - "$tmp") | awk -F ' ' '{print $1 $2 $3}') + path=$(echo "$def" | grep '^path=' | awk -F '=' '{print $2}') + url=$(echo "$def" | grep '^url=' | awk -F '=' '{print $2}') + branch=$(echo "$def" | grep '^branch=' | awk -F '=' '{print $2}') - if ! ls "$path"/* >/dev/null 2>/dev/null; then - git=$(which git) - if ! [ $? -eq 0 ] || ! [ -x $git ]; then - echo "Failed retrieving missing files" - exit 5 - fi - res=$(git clone "$url" "$path" 2>&1) - if ! [ $? -eq 0 ] || ! [ -d $path ]; then - echo "Failed retrieving missing files: $res" - exit 5 - fi - if [ -n "$branch" ]; then - olddir="$(pwd)" - cd "$path" - res=$(git checkout "$branch" 2>&1) - if ! [ $? -eq 0 ]; then + if ! ls "$path"/* >/dev/null 2>/dev/null; then + git=$(which git) + if ! [ $? -eq 0 ] || ! [ -x $git ]; then + echo "Failed retrieving missing files" + exit 5 + fi + res=$(git clone "$url" "$path" 2>&1) + if ! [ $? -eq 0 ] || ! [ -d $path ]; then echo "Failed retrieving missing files: $res" exit 5 fi - cd "$olddir" + if [ -n "$branch" ]; then + olddir="$(pwd)" + cd "$path" + res=$(git checkout "$branch" 2>&1) + if ! [ $? -eq 0 ]; then + echo "Failed retrieving missing files: $res" + exit 5 + fi + cd "$olddir" + fi + echo "Submodule path '$path': checked out '$branch' (via git clone)" fi - echo "Submodule path '$path': checked out '$branch' (via git clone)" fi - fi - tmp=$i - done + tmp=$i + done + fi fi if [ "$FETCH_ONLY" = "yes" ]; then exit 0; fi @@ -256,6 +262,7 @@ cmake -G "$cmake_type" \ -DENABLED_PLUGINS="$ENABLED_PLUGINS" \ -DDISABLED_PLUGINS="$DISABLED_PLUGINS" \ -DBUILD_TESTS="$BUILD_TESTS" \ + -DBUILD_LIBSIGNAL_IN_TREE="$BUILD_LIBSIGNAL_IN_TREE" \ -DVALA_EXECUTABLE="$VALAC" \ -DCMAKE_VALA_FLAGS="$VALACFLAGS" \ -DDISABLE_FAST_VAPI="$DISABLE_FAST_VAPI" \ diff --git a/plugins/signal-protocol/CMakeLists.txt b/plugins/signal-protocol/CMakeLists.txt index 4c619c86..0ae84111 100644 --- a/plugins/signal-protocol/CMakeLists.txt +++ b/plugins/signal-protocol/CMakeLists.txt @@ -28,8 +28,11 @@ GENERATE_HEADER set(C_HEADERS_SRC "") set(C_HEADERS_TARGET "") -if((SHARED_SIGNAL_PROTOCOL) OR ($ENV{SHARED_SIGNAL_PROTOCOL})) - find_package(SignalProtocol REQUIRED) +if(NOT BUILD_LIBSIGNAL_IN_TREE) + # libsignal-protocol-c has a history of breaking compatibility on the patch level + # we'll have to check compatibility for every new release + # distro maintainers may update this dependency after compatibility tests + find_package(SignalProtocol 2.3.2 EXACT REQUIRED) else() add_subdirectory(libsignal-protocol-c EXCLUDE_FROM_ALL) set_property(TARGET curve25519 PROPERTY POSITION_INDEPENDENT_CODE ON) @@ -129,4 +132,4 @@ if(BUILD_TESTS) add_executable(signal-protocol-vala-test ${SIGNAL_TEST_VALA_C}) add_dependencies(signal-protocol-vala-test signal-protocol-vala) target_link_libraries(signal-protocol-vala-test signal-protocol-vala ${SIGNAL_PROTOCOL_PACKAGES}) -endif(BUILD_TESTS) \ No newline at end of file +endif(BUILD_TESTS)