From dfbe000058ead210a06aed3447554301ef247e85 Mon Sep 17 00:00:00 2001 From: Rob Browning Date: Sat, 20 Jun 2020 11:55:53 -0500 Subject: [PATCH] Use pkg-config opportunistically 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 --- Makefile | 29 +++++++++-------- README.md | 2 +- config/config.vars.in | 10 +++++- config/configure | 61 ++++++++++++++++++++++++++---------- dev/prep-for-debianish-build | 2 +- dev/prep-for-macos-build | 2 +- 6 files changed, 73 insertions(+), 33 deletions(-) diff --git a/Makefile b/Makefile index ca22c05..ebdcfae 100644 --- 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 diff --git a/README.md b/README.md index 65c8e89..0ac8e6c 100644 --- 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) diff --git a/config/config.vars.in b/config/config.vars.in index 9dba67e..8f4769c 100644 --- a/config/config.vars.in +++ b/config/config.vars.in @@ -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@ diff --git a/config/configure b/config/configure index fe4d85e..c113089 100755 --- a/config/configure +++ b/config/configure @@ -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 '; 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 diff --git a/dev/prep-for-debianish-build b/dev/prep-for-debianish-build index f441d5b..3141f5b 100755 --- a/dev/prep-for-debianish-build +++ b/dev/prep-for-debianish-build @@ -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}" diff --git a/dev/prep-for-macos-build b/dev/prep-for-macos-build index 090610c..f639309 100755 --- a/dev/prep-for-macos-build +++ b/dev/prep-for-macos-build @@ -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 -- 2.39.2