From e668c9b52896e1cf92c99da3b01e3bdbbae77100 Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Tue, 18 Feb 2020 10:50:38 -0500 Subject: [PATCH] Fix pkg-config File Generation Again Revises #1851. Fixes #1900. Replaces #1930. Thanks to @orbea, @neheb, @Polynomial-C, and particularly @eli-schwartz for pointing out the problem and suggesting solutions. Tested with ``` make -C lib clean libzstd.pc cat lib/libzstd.pc # 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 # 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 # 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 | 14 ++++++++++++-- lib/libzstd.pc.in | 4 ++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/build/cmake/lib/CMakeLists.txt b/build/cmake/lib/CMakeLists.txt index e92647bf..29ff57aa 100644 --- a/build/cmake/lib/CMakeLists.txt +++ b/build/cmake/lib/CMakeLists.txt @@ -134,11 +134,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_MAJOR}.${zstd_VERSION_MINOR}.${zstd_VERSION_PATCH}") 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 fd1710cf..dbd64994 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -224,6 +224,16 @@ LIBDIR ?= $(libdir) includedir ?= $(PREFIX)/include INCLUDEDIR ?= $(includedir) +PCLIBDIR ?= $(shell echo "$(LIBDIR)" | sed -n -e "s@^$(exec_prefix)\\(/\\|$$\\)@@p") +PCINCDIR ?= $(shell echo "$(INCLUDEDIR)" | sed -n -e "s@^$(prefix)\\(/\\|$$\\)@@p") + +ifeq (,$(shell echo "$(LIBDIR)" | sed -n -e "\\@^$(exec_prefix)\\(/\\|$$\\)@ p")) +$(error configured libdir ($(LIBDIR)) is outside of prefix ($(prefix)), can't generate pkg-config file) +endif +ifeq (,$(shell echo "$(INCLUDEDIR)" | sed -n -e "\\@^$(prefix)\\(/\\|$$\\)@ p")) +$(error configured includedir ($(INCLUDEDIR)) is outside of exec_prefix ($(exec_prefix)), can't generate pkg-config file) +endif + ifneq (,$(filter $(shell uname),FreeBSD NetBSD DragonFly)) PKGCONFIGDIR ?= $(PREFIX)/libdata/pkgconfig else @@ -239,11 +249,11 @@ endif INSTALL_PROGRAM ?= $(INSTALL) INSTALL_DATA ?= $(INSTALL) -m 644 - -libzstd.pc: libzstd.pc: libzstd.pc.in @echo creating pkgconfig @sed -e 's|@PREFIX@|$(PREFIX)|' \ + -e 's|@LIBDIR@|$(PCLIBDIR)|' \ + -e 's|@INCLUDEDIR@|$(PCINCDIR)|' \ -e 's|@VERSION@|$(VERSION)|' \ $< >$@ 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