cmake: generate pkg-config and install v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Tue, 18 Dec 2018 21:39:44 +0100
branchv_0
changeset 32 1a31d1fb5000
parent 31 ecae2772c3a7
child 33 392a0c048131
cmake: generate pkg-config and install
CMakeLists.txt
src/CMakeLists.txt
src/pkg-config.cpp.pc.in
--- a/CMakeLists.txt	Sun Dec 09 21:59:40 2018 +0100
+++ b/CMakeLists.txt	Tue Dec 18 21:39:44 2018 +0100
@@ -14,6 +14,21 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 
-project (relpipe-lib-reader.cpp)
-cmake_minimum_required(VERSION 2.8)
+
+set(PROJECT_CODE         "relpipe-lib-reader")
+set(PROJECT_TITLE        "Relational pipes - lib - reader (C++)")
+set(PROJECT_DESCRIPTION  "C++ library for reading data in relpipe format")
+
+
+# The project version should be specified as "cmake -DPROJECT_VERSION=x.y.z" or is derived from current mercurial tag. If current revision has no tag, default version is set:
+if(NOT DEFINED PROJECT_VERSION)
+	execute_process(
+		COMMAND bash -c "hg log -r '.' --template '{latesttag}:{latesttagdistance}:{branch}\\n' | sed -E -e 's/v(.*):0:.*/\\1/g' -e 's/.*:.*:v_(.*)/\\1.9999/g' | grep -E '^[0-9.]+$'"
+		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}        OUTPUT_VARIABLE PROJECT_VERSION        RESULT_VARIABLE VERSION_ERROR_CODE        OUTPUT_STRIP_TRAILING_WHITESPACE
+	)
+endif()
+
+cmake_policy(SET CMP0048 NEW)
+project (${PROJECT_CODE}.cpp VERSION ${PROJECT_VERSION})
+cmake_minimum_required(VERSION 3.10.2)
 add_subdirectory (src)
--- a/src/CMakeLists.txt	Sun Dec 09 21:59:40 2018 +0100
+++ b/src/CMakeLists.txt	Tue Dec 18 21:39:44 2018 +0100
@@ -14,7 +14,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 
-set(LIBRARY_FILE "relpipe-lib-reader.cpp")
+set(LIBRARY_FILE ${PROJECT_CODE}.cpp)
 
 # Relpipe libraries:
 INCLUDE(FindPkgConfig)
@@ -27,9 +27,14 @@
 set(CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
 # From ASan wiki: "To get nicer stack traces in error messages add -fno-omit-frame-pointer."
 
+configure_file("pkg-config.cpp.pc.in" "${PROJECT_CODE}.cpp.pc" @ONLY)
+
 # Library output:
 add_library(
 	${LIBRARY_FILE} SHARED
 	Factory.cpp
 )
 
+install(TARGETS ${LIBRARY_FILE} DESTINATION lib/relpipe) # TODO: add version and symlink
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_CODE}.cpp.pc" DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig/)
+install(DIRECTORY ../include/ DESTINATION include)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pkg-config.cpp.pc.in	Tue Dec 18 21:39:44 2018 +0100
@@ -0,0 +1,10 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+libdir=${prefix}/lib/relpipe/
+includedir=${prefix}/include/
+
+Name: @PROJECT_TITLE@
+Description: @PROJECT_DESCRIPTION@
+Version: @PROJECT_VERSION@
+
+Libs: -L${libdir} -l@LIBRARY_FILE@
+Cflags: -I${includedir}