You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
216 lines
8.1 KiB
216 lines
8.1 KiB
From e668c9b52896e1cf92c99da3b01e3bdbbae77100 Mon Sep 17 00:00:00 2001
|
|
From: "W. Felix Handte" <w@felixhandte.com>
|
|
Date: Tue, 18 Feb 2020 10:50:38 -0500
|
|
Subject: [PATCH 1/3] 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 e92647bf1..29ff57aa0 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 fd1710cf1..dbd64994c 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 e7880be47..8ec0235ad 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 73737231b95976f24b7b9bff96240976b11dcce0 Mon Sep 17 00:00:00 2001
|
|
From: "W. Felix Handte" <w@felixhandte.com>
|
|
Date: Tue, 18 Feb 2020 13:17:17 -0500
|
|
Subject: [PATCH 2/3] Allow Manual Overriding of pkg-config Lib and Include
|
|
Dirs
|
|
|
|
When the `PCLIBDIR` or `PCINCDIR` is non-empty (either because we succeeded
|
|
in removing the prefix, or because it was manually set), we don't need to
|
|
perform the check. This lets us trust users who go to the trouble of setting
|
|
a manual override, rather than still blindly failing the make.
|
|
|
|
They'll still be prefixed with `${prefix}/` / `${exec_prefix}/` in the
|
|
pkg-config file though.
|
|
---
|
|
lib/Makefile | 9 +++++++++
|
|
1 file changed, 9 insertions(+)
|
|
|
|
diff --git a/lib/Makefile b/lib/Makefile
|
|
index dbd64994c..b067c11a2 100644
|
|
--- a/lib/Makefile
|
|
+++ b/lib/Makefile
|
|
@@ -227,12 +227,21 @@ INCLUDEDIR ?= $(includedir)
|
|
PCLIBDIR ?= $(shell echo "$(LIBDIR)" | sed -n -e "s@^$(exec_prefix)\\(/\\|$$\\)@@p")
|
|
PCINCDIR ?= $(shell echo "$(INCLUDEDIR)" | sed -n -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 "\\@^$(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 "\\@^$(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
|
|
|
|
From e5ef935cf6160768e20cd73db3d9450aa8b7f8cf Mon Sep 17 00:00:00 2001
|
|
From: "W. Felix Handte" <w@felixhandte.com>
|
|
Date: Tue, 18 Feb 2020 13:40:58 -0500
|
|
Subject: [PATCH 3/3] Fix Variable Capitalization
|
|
|
|
---
|
|
lib/Makefile | 15 ++++++++-------
|
|
1 file changed, 8 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/lib/Makefile b/lib/Makefile
|
|
index b067c11a2..db35207bb 100644
|
|
--- a/lib/Makefile
|
|
+++ b/lib/Makefile
|
|
@@ -219,27 +219,28 @@ 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 "s@^$(exec_prefix)\\(/\\|$$\\)@@p")
|
|
-PCINCDIR ?= $(shell echo "$(INCLUDEDIR)" | sed -n -e "s@^$(prefix)\\(/\\|$$\\)@@p")
|
|
+PCLIBDIR ?= $(shell echo "$(LIBDIR)" | sed -n -e "s@^$(EXEC_PREFIX)\\(/\\|$$\\)@@p")
|
|
+PCINCDIR ?= $(shell echo "$(INCLUDEDIR)" | sed -n -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 "\\@^$(exec_prefix)\\(/\\|$$\\)@ p"))
|
|
-$(error configured libdir ($(LIBDIR)) is outside of prefix ($(prefix)), can't generate pkg-config file)
|
|
+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
|
|
endif
|
|
|
|
ifeq (,$(PCINCDIR))
|
|
# Additional prefix check is required, since the empty string is technically a
|
|
# valid PCINCDIR
|
|
-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)
|
|
+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
|
|
endif
|
|
|