From 15561bcf74ce18087aaa5e24620cdc23057840e3 Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Thu, 7 May 2020 13:12:59 -0400 Subject: [PATCH 1/4] Fix pkg-config File Generation Again Again Resubmission of #2001. This switches the `sed` invocations to use `-E`, extended regex syntax, which is better standardized across platforms. I guess. Same test plan: ``` make -C lib clean libzstd.pc cat lib/libzstd.pc echo # should fail make -C lib clean libzstd.pc LIBDIR=/foo make -C lib clean libzstd.pc INCLUDEDIR=/foo make -C lib clean libzstd.pc LIBDIR=/usr/localfoo make -C lib clean libzstd.pc INCLUDEDIR=/usr/localfoo make -C lib clean libzstd.pc LIBDIR=/usr/local/lib prefix=/foo make -C lib clean libzstd.pc INCLUDEDIR=/usr/local/include prefix=/foo echo # should succeed make -C lib clean libzstd.pc LIBDIR=/usr/local/foo make -C lib clean libzstd.pc INCLUDEDIR=/usr/local/foo make -C lib clean libzstd.pc LIBDIR=/usr/local/ make -C lib clean libzstd.pc INCLUDEDIR=/usr/local/ make -C lib clean libzstd.pc LIBDIR=/usr/local make -C lib clean libzstd.pc INCLUDEDIR=/usr/local make -C lib clean libzstd.pc LIBDIR=/tmp/foo prefix=/tmp make -C lib clean libzstd.pc INCLUDEDIR=/tmp/foo prefix=/tmp make -C lib clean libzstd.pc LIBDIR=/tmp/foo prefix=/tmp/foo make -C lib clean libzstd.pc INCLUDEDIR=/tmp/foo prefix=/tmp/foo echo # should also succeed make -C lib clean libzstd.pc prefix=/foo LIBDIR=/foo/bar INCLUDEDIR=/foo/ cat lib/libzstd.pc mkdir out cd out cmake ../build/cmake make cat lib/libzstd.pc ``` --- build/cmake/lib/CMakeLists.txt | 5 +++-- lib/Makefile | 30 ++++++++++++++++++++++++++---- lib/libzstd.pc.in | 4 ++-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/build/cmake/lib/CMakeLists.txt b/build/cmake/lib/CMakeLists.txt index 9e758dac..666da60c 100644 --- a/build/cmake/lib/CMakeLists.txt +++ b/build/cmake/lib/CMakeLists.txt @@ -137,11 +137,12 @@ endif () if (UNIX) # pkg-config set(PREFIX "${CMAKE_INSTALL_PREFIX}") - set(LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}") + set(LIBDIR "${CMAKE_INSTALL_LIBDIR}") + set(INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}") set(VERSION "${zstd_VERSION}") add_custom_target(libzstd.pc ALL ${CMAKE_COMMAND} -DIN="${LIBRARY_DIR}/libzstd.pc.in" -DOUT="libzstd.pc" - -DPREFIX="${PREFIX}" -DVERSION="${VERSION}" + -DPREFIX="${PREFIX}" -DLIBDIR="${LIBDIR}" -DINCLUDEDIR="${INCLUDEDIR}" -DVERSION="${VERSION}" -P "${CMAKE_CURRENT_SOURCE_DIR}/pkgconfig.cmake" COMMENT "Creating pkg-config file") diff --git a/lib/Makefile b/lib/Makefile index e1c9e6c0..02e2f01a 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -257,11 +257,31 @@ DESTDIR ?= prefix ?= /usr/local PREFIX ?= $(prefix) exec_prefix ?= $(PREFIX) -libdir ?= $(exec_prefix)/lib +EXEC_PREFIX ?= $(exec_prefix) +libdir ?= $(EXEC_PREFIX)/lib LIBDIR ?= $(libdir) includedir ?= $(PREFIX)/include INCLUDEDIR ?= $(includedir) +PCLIBDIR ?= $(shell echo "$(LIBDIR)" | sed -n -E -e "s@^$(EXEC_PREFIX)(/|$$)@@p") +PCINCDIR ?= $(shell echo "$(INCLUDEDIR)" | sed -n -E -e "s@^$(PREFIX)(/|$$)@@p") + +ifeq (,$(PCLIBDIR)) +# Additional prefix check is required, since the empty string is technically a +# valid PCLIBDIR +ifeq (,$(shell echo "$(LIBDIR)" | sed -n -E -e "\\@^$(EXEC_PREFIX)(/|$$)@ p")) +$(error configured libdir ($(LIBDIR)) is outside of prefix ($(PREFIX)), can't generate pkg-config file) +endif +endif + +ifeq (,$(PCINCDIR)) +# Additional prefix check is required, since the empty string is technically a +# valid PCINCDIR +ifeq (,$(shell echo "$(INCLUDEDIR)" | sed -n -E -e "\\@^$(PREFIX)(/|$$)@ p")) +$(error configured includedir ($(INCLUDEDIR)) is outside of exec_prefix ($(EXEC_PREFIX)), can't generate pkg-config file) +endif +endif + ifneq (,$(filter $(shell uname),FreeBSD NetBSD DragonFly)) PKGCONFIGDIR ?= $(PREFIX)/libdata/pkgconfig else @@ -281,9 +301,11 @@ INSTALL_DATA ?= $(INSTALL) -m 644 libzstd.pc: libzstd.pc: libzstd.pc.in @echo creating pkgconfig - $(Q)sed -e 's|@PREFIX@|$(PREFIX)|' \ - -e 's|@VERSION@|$(VERSION)|' \ - $< >$@ + $(Q)@sed -E -e 's|@PREFIX@|$(PREFIX)|' \ + -e 's|@LIBDIR@|$(PCLIBDIR)|' \ + -e 's|@INCLUDEDIR@|$(PCINCDIR)|' \ + -e 's|@VERSION@|$(VERSION)|' \ + $< >$@ install: install-pc install-static install-shared install-includes @echo zstd static and shared library installed diff --git a/lib/libzstd.pc.in b/lib/libzstd.pc.in index e7880be4..8ec0235a 100644 --- a/lib/libzstd.pc.in +++ b/lib/libzstd.pc.in @@ -4,8 +4,8 @@ prefix=@PREFIX@ exec_prefix=${prefix} -includedir=${prefix}/include -libdir=${exec_prefix}/lib +includedir=${prefix}/@INCLUDEDIR@ +libdir=${exec_prefix}/@LIBDIR@ Name: zstd Description: fast lossless compression algorithm library From 78aa9373cb41d080f8b466dd293b9b1e4fd7a683 Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Fri, 8 May 2020 13:06:31 -0400 Subject: [PATCH 2/4] Add libzstd.pc Build to More Aggregate Targets in Makefiles --- Makefile | 4 ++-- lib/Makefile | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 14419fea..2c1d3460 100644 --- a/Makefile +++ b/Makefile @@ -45,7 +45,7 @@ allmost: allzstd zlibwrapper # skip zwrapper, can't build that on alternate architectures without the proper zlib installed .PHONY: allzstd -allzstd: lib +allzstd: lib-all $(MAKE) -C $(PRGDIR) all $(MAKE) -C $(TESTDIR) all @@ -55,7 +55,7 @@ all32: $(MAKE) -C $(TESTDIR) all32 .PHONY: lib lib-release libzstd.a -lib lib-release : +lib lib-release lib-all : @$(MAKE) -C $(ZSTDDIR) $@ .PHONY: zstd zstd-release diff --git a/lib/Makefile b/lib/Makefile index 02e2f01a..0a01ffc6 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -180,11 +180,14 @@ else endif -.PHONY: default all clean install uninstall +.PHONY: default lib-all all clean install uninstall default: lib-release -all: lib +# alias +lib-all: all + +all: lib libzstd.pc libzstd.a: ARFLAGS = rcs libzstd.a: $(ZSTD_OBJ) From 85801b99d751df6bf94882aee24119fb649fdacd Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Fri, 8 May 2020 13:10:20 -0400 Subject: [PATCH 3/4] Test libzstd.pc Build on Travis OS X --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index eae5bb63..01baee39 100644 --- a/.travis.yml +++ b/.travis.yml @@ -184,6 +184,7 @@ matrix: os: osx script: - make test + - make -C lib all - name: zbuff test if: branch = master From 87c541c5f969b6f62159318ffd20fac5eae154f8 Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Fri, 8 May 2020 16:01:26 -0400 Subject: [PATCH 4/4] Only Trigger libzstd.pc Build on Unix-Like Platforms We don't even define the rule on unsupported platforms. --- lib/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/Makefile b/lib/Makefile index 0a01ffc6..7c6dff02 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -187,7 +187,7 @@ default: lib-release # alias lib-all: all -all: lib libzstd.pc +all: lib libzstd.a: ARFLAGS = rcs libzstd.a: $(ZSTD_OBJ) @@ -253,6 +253,8 @@ clean: #----------------------------------------------------------------------------- ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS Haiku)) +all: libzstd.pc + DESTDIR ?= # directory variables : GNU conventions prefer lowercase # see https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html