From 59ebab654e156f69ec9bdba8c1012ca4e645a01a Mon Sep 17 00:00:00 2001 From: John Goerzen Date: Mon, 17 Aug 2020 11:51:35 -0700 Subject: [PATCH] Generate and install a pkg-config file (#7244) Summary: pkg-config files are quite useful for communicating to users of a library how to compile against them. This commit generates and installs a pkg-config file that can be used for both static and dynamic builds against the RocksDB library. This should make life easier for developers of client programs, language bindings, etc. Example usage: ``` g++ `pkg-config --cflags rocksdb` -o simple_example simple_example.cc `pkg-config --libs rocksdb` g++ `pkg-config --cflags --static rocksdb` -static \ -o simple_example simple_example.cc `pkg-config --libs --static rocksdb` ``` The commit also adds the generated file to .gitignore, to the uninstall target, and to clean. No additional dependencies are added to RocksDB itself, and this does not make RocksDB use pkg-config as part of its build process. Resolves https://github.com/facebook/rocksdb/issues/4452 Pull Request resolved: https://github.com/facebook/rocksdb/pull/7244 Reviewed By: siying Differential Revision: D23146153 Pulled By: ajkr fbshipit-source-id: 3045aa650d68bd5ac42d40ed709570e9584ef004 --- .gitignore | 1 + Makefile | 25 +++++++++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 218ac5e8e..f731f4f93 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ make_config.mk +rocksdb.pc *.a *.arc diff --git a/Makefile b/Makefile index ad2a977b2..4250fba08 100644 --- a/Makefile +++ b/Makefile @@ -265,7 +265,7 @@ dummy := $(shell (export ROCKSDB_ROOT="$(CURDIR)"; \ include make_config.mk export JAVAC_ARGS -CLEAN_FILES += make_config.mk +CLEAN_FILES += make_config.mk rocksdb.pc ifeq ($(V), 1) $(info $(shell uname -a)) @@ -725,7 +725,7 @@ endif # PLATFORM_SHARED_EXT .PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \ release tags tags0 valgrind_check whitebox_crash_test format static_lib shared_lib all \ - dbg rocksdbjavastatic rocksdbjava install install-static install-shared uninstall \ + dbg rocksdbjavastatic rocksdbjava gen-pc install install-static install-shared uninstall \ analyze tools tools_lib \ blackbox_crash_test_with_atomic_flush whitebox_crash_test_with_atomic_flush \ blackbox_crash_test_with_txn whitebox_crash_test_with_txn \ @@ -1827,16 +1827,19 @@ uninstall: $(INSTALL_PATH)/lib/$(SHARED4) \ $(INSTALL_PATH)/lib/$(SHARED3) \ $(INSTALL_PATH)/lib/$(SHARED2) \ - $(INSTALL_PATH)/lib/$(SHARED1) + $(INSTALL_PATH)/lib/$(SHARED1) \ + $(INSTALL_PATH)/lib/pkgconfig/rocksdb.pc -install-headers: +install-headers: gen-pc install -d $(INSTALL_PATH)/lib + install -d $(INSTALL_PATH)/lib/pkgconfig for header_dir in `$(FIND) "include/rocksdb" -type d`; do \ install -d $(INSTALL_PATH)/$$header_dir; \ done for header in `$(FIND) "include/rocksdb" -type f -name *.h`; do \ install -C -m 644 $$header $(INSTALL_PATH)/$$header; \ done + install -C -m 644 rocksdb.pc $(INSTALL_PATH)/lib/pkgconfig/rocksdb.pc install-static: install-headers $(LIBRARY) install -C -m 755 $(LIBRARY) $(INSTALL_PATH)/lib @@ -1851,6 +1854,20 @@ install-shared: install-headers $(SHARED4) install: install-static [ -e $(SHARED4) ] && $(MAKE) install-shared || : +# Generate the pkg-config file +gen-pc: + -echo 'prefix=$(INSTALL_PATH)' > rocksdb.pc + -echo 'exec_prefix=$${prefix}' >> rocksdb.pc + -echo 'includedir=$${prefix}/include' >> rocksdb.pc + -echo 'libdir=$${exec_prefix}/lib' >> rocksdb.pc + -echo '' >> rocksdb.pc + -echo 'Name: rocksdb' >> rocksdb.pc + -echo 'Description: An embeddable persistent key-value store for fast storage' >> rocksdb.pc + -echo Version: $(shell ./build_tools/version.sh full) >> rocksdb.pc + -echo 'Libs: -L$${libdir} $(EXEC_LDFLAGS) -lrocksdb' >> rocksdb.pc + -echo 'Libs.private: $(PLATFORM_LDFLAGS)' >> rocksdb.pc + -echo 'Cflags: -I$${includedir} $(PLATFORM_CXXFLAGS)' >> rocksdb.pc + #-------------------------------------------------