]> arthur.barton.de Git - bup.git/commitdiff
Use pkg-config opportunistically
authorRob Browning <rlb@defaultvalue.org>
Sat, 20 Jun 2020 16:55:53 +0000 (11:55 -0500)
committerRob Browning <rlb@defaultvalue.org>
Sun, 5 Jul 2020 16:16:23 +0000 (11:16 -0500)
Use pkg-config's --cflags and --libs when they're available for
libreadline or libacl, but don't require pkg-config.  When it's not
found, just check for the libraries with a test compile.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Makefile
README.md
config/config.vars.in
config/configure
dev/prep-for-debianish-build
dev/prep-for-macos-build

index ca22c0557e0b080a82d11da80790e69338d927e5..ebdcfaec41156f2d33c98b7e27a38f82e90280c2 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,6 @@
 
+MAKEFLAGS += --warn-undefined-variables
+
 SHELL := bash
 .DEFAULT_GOAL := all
 
@@ -51,20 +53,21 @@ config/config.vars: \
 # On some platforms, Python.h and readline.h fight over the
 # _XOPEN_SOURCE version, i.e. -Werror crashes on a mismatch, so for
 # now, we're just going to let Python's version win.
-readline_cflags += $(shell pkg-config readline --cflags)
-readline_xopen := $(filter -D_XOPEN_SOURCE=%,$(readline_cflags))
-readline_xopen := $(subst -D_XOPEN_SOURCE=,,$(readline_xopen))
-ifneq ($(readline_xopen),600)
-  $(error "Unexpected pkg-config readline _XOPEN_SOURCE --cflags $(readline_cflags)")
+
+ifneq ($(strip $(bup_readline_cflags)),)
+  readline_cflags += $(bup_readline_cflags)
+  readline_xopen := $(filter -D_XOPEN_SOURCE=%,$(readline_cflags))
+  readline_xopen := $(subst -D_XOPEN_SOURCE=,,$(readline_xopen))
+  readline_cflags := $(filter-out -D_XOPEN_SOURCE=%,$(readline_cflags))
+  readline_cflags += $(addprefix -DBUP_RL_EXPECTED_XOPEN_SOURCE=,$(readline_xopen))
+  CFLAGS += $(readline_cflags)
 endif
-readline_cflags := $(filter-out -D_XOPEN_SOURCE=%,$(readline_cflags))
-readline_cflags += $(addprefix -DBUP_RL_EXPECTED_XOPEN_SOURCE=,$(readline_xopen))
-
-CFLAGS += $(readline_cflags)
-LDFLAGS += $(shell pkg-config readline --libs)
-ifeq ($(BUP_HAVE_LIBACL),yes)
-  CFLAGS += $(shell pkg-config libacl --cflags)
-  LDFLAGS += $(shell pkg-config libacl --libs)
+
+LDFLAGS += $(bup_readline_ldflags)
+
+ifeq ($(bup_have_libacl),1)
+  CFLAGS += $(bup_libacl_cflags)
+  LDFLAGS += $(bup_libacl_ldflags)
 endif
 
 config/bin/python: config/config.vars
index 65c8e89bed1fd30dc1a8e4ac98482595ce184d2d..0ac8e6cdf58c64ef146585d5e203a2a71fbc2968 100644 (file)
--- a/README.md
+++ b/README.md
@@ -149,7 +149,7 @@ From source
     ```sh
     apt-get install python2.7-dev python-fuse
     apt-get install python-pyxattr
-    apt-get install linux-libc-dev libacl1-dev
+    apt-get install pkg-config linux-libc-dev libacl1-dev
     apt-get install acl attr
     apt-get install libreadline-dev # optional (bup ftp)
     apt-get install python-tornado # optional (bup web)
index 9dba67eba2b482c93a9a355a9fcbd9ae54409a62..8f4769cc2f6030c61e99169362e8251fc6b789cf 100644 (file)
@@ -1,6 +1,14 @@
-BUP_HAVE_LIBACL=@BUP_HAVE_LIBACL@
 CONFIGURE_FILES=@CONFIGURE_FILES@
 GENERATED_FILES=@GENERATED_FILES@
+
 bup_make=@bup_make@
 bup_python=@bup_python@
 bup_python_majver=@bup_python_majver@
+
+bup_have_libacl=@bup_have_libacl@
+bup_libacl_cflags=@bup_libacl_cflags@
+bup_libacl_ldflags=@bup_libacl_ldflags@
+
+bup_have_readline=@bup_have_readline@
+bup_readline_cflags=@bup_readline_cflags@
+bup_readline_ldflags=@bup_readline_ldflags@
index fe4d85e1eedda0b32871da5ba316e21a8572f031..c113089386cb88ef9063fc16b28a03adcdc10e2d 100755 (executable)
@@ -168,11 +168,26 @@ fi
 
 TLOGN "checking for readline"
 if pkg-config readline; then
+    bup_readline_cflags="$(pkg-config readline --cflags)" || exit $?
+    bup_readline_ldflags="$(pkg-config readline --libs)" || exit $?
+    bup_have_readline=1
+    AC_DEFINE BUP_HAVE_READLINE 1
+    TLOG ' (yes, pkg-config)'
+elif bup_try_c_code '#include <readline/readline.h>'; then
+    bup_readline_cflags=''
+    bup_readline_ldflags=-lreadline
+    bup_have_readline=1
     AC_DEFINE BUP_HAVE_READLINE 1
     TLOG ' (yes)'
 else
+    bup_readline_cflags=''
+    bup_readline_ldflags=''
+    bup_have_readline=''
     TLOG ' (no)'
 fi
+AC_SUB bup_readline_cflags "$bup_readline_cflags"
+AC_SUB bup_readline_ldflags "$bup_readline_ldflags"
+AC_SUB bup_have_readline "$bup_have_readline"
 
 AC_CHECK_FIELD stat st_atim sys/types.h sys/stat.h unistd.h
 AC_CHECK_FIELD stat st_mtim sys/types.h sys/stat.h unistd.h
@@ -185,28 +200,42 @@ AC_CHECK_FIELD stat st_ctimensec sys/types.h sys/stat.h unistd.h
 AC_CHECK_FIELD tm tm_gmtoff time.h
 
 
+orig_ac_cc="$AC_CC"
+orig_libs="$LIBS"
 TLOGN "checking for libacl"
 if pkg-config libacl; then
-    AC_DEFINE BUP_HAVE_READLINE 1
+    bup_libacl_cflags="$(pkg-config libacl --cflags)"
+    bup_libacl_ldflags="$(pkg-config libacl --libs)"
+    TLOG ' (yes, pkg-config)'
+else
+    bup_libacl_cflags=
+    bup_libacl_ldflags='-lacl'
+    TLOG ' (yes)'
+fi
+AC_CC="$AC_CC${bup_libacl_cflags:+ $bup_libacl_cflags}"
+LIBS="$bup_libacl_ldflags"
+AC_CHECK_HEADERS sys/acl.h
+AC_CHECK_HEADERS acl/libacl.h
+AC_CHECK_FUNCS acl_get_file
+AC_CHECK_FUNCS acl_from_text
+AC_CHECK_FUNCS acl_set_file
+# Note: These are linux specific, but we need them (for now?)
+AC_CHECK_FUNCS acl_extended_file
+AC_CHECK_FUNCS acl_to_any_text
+TLOGN "checking for complete acl support"
+if test "$ac_defined_HAVE_ACL_EXTENDED_FILE"; then
+    bup_have_libacl=1
+    AC_SUB bup_libacl_cflags "$bup_libacl_cflags"
+    AC_SUB bup_libacl_ldflags "$bup_libacl_ldflags"
     TLOG ' (yes)'
-    LIBS=-lacl
-    AC_CHECK_HEADERS sys/acl.h
-    AC_CHECK_HEADERS acl/libacl.h
-    AC_CHECK_FUNCS acl_get_file
-    AC_CHECK_FUNCS acl_from_text
-    AC_CHECK_FUNCS acl_set_file
-    # Note: These are linux specific, but we need them (for now?)
-    AC_CHECK_FUNCS acl_extended_file
-    AC_CHECK_FUNCS acl_to_any_text
-    LIBS=
-    if test "$ac_defined_HAVE_ACL_EXTENDED_FILE"; then
-        AC_SUB BUP_HAVE_LIBACL yes
-    else
-        AC_SUB BUP_HAVE_LIBACL no
-    fi
 else
+    bup_have_libacl=
+    AC_SUB bup_have_libacl ''
     TLOG ' (no)'
 fi
+AC_SUB bup_have_libacl "$bup_have_libacl"
+AC_CC="$orig_ac_cc"
+LIBS="$orig_libs"
 
 
 AC_OUTPUT config.vars
index f441d5b6e23c6deeb166c7a2c0cc154890e18120..3141f5b1911bcc13383fa45cb6af505593b8b58c 100755 (executable)
@@ -12,7 +12,7 @@ apt-get update
 
 common_debs='gcc make linux-libc-dev git rsync eatmydata acl attr par2'
 common_debs="$common_debs duplicity rdiff-backup rsnapshot dosfstools kmod"
-common_debs="$common_debs libreadline-dev libacl1-dev"
+common_debs="$common_debs pkg-config libreadline-dev libacl1-dev"
 
 pyver="${1:-python2}"
 xattr="${2:-pyxattr}"
index 090610c2884caf04e159d6ce045d35a9f2cf85bc..f63930968369def4cef2a8dfba9250ad387ecc39 100755 (executable)
@@ -5,4 +5,4 @@ set -ex
 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
 
 brew update
-brew install par2 readline rsync
+brew install par2 readline rsync pkg-config