Provide shared library, expose soname, use GNUInstallDirs
mochaaP opened this issue · comments
Zephyr Lykos commented
Signed-off-by: Zephyr Lykos <self@mochaa.ws>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d53771b..d9d3376 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,14 +1,15 @@
include(CMakeParseArguments)
-cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
-cmake_policy(SET CMP0054 OLD)
-cmake_policy(SET CMP0045 OLD)
+cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
+project(sv C)
if (NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/cmake/properties.cmake)
message(FATAL_ERROR "cmake/properties.cmake file should exists.")
endif ()
include(${CMAKE_CURRENT_LIST_DIR}/cmake/properties.cmake)
+include(GNUInstallDirs) # include this *AFTER* PROJECT(), otherwise paths are wrong.
+
get_directory_property(${PROJECT_NAME}_PARENT PARENT_DIRECTORY)
if (NOT ${PROJECT_NAME}_PARENT)
set(${PROJECT_NAME}_DEVEL TRUE)
@@ -65,13 +66,7 @@ elseif (NOT MSVC)
message(FATAL_ERROR "Unknown compiler")
endif ()
-if (CMAKE_VERSION VERSION_LESS "3.1")
- if (GCC)
- set(CMAKE_C_FLAGS "-std=c99 ${CMAKE_C_FLAGS}")
- endif ()
-else ()
- set(CMAKE_C_STANDARD 99)
-endif ()
+set(CMAKE_C_STANDARD 99)
option(COVERAGE "Turn on COVERAGE support" OFF)
if (COVERAGE AND NOT MSVC)
@@ -92,8 +87,10 @@ if (EXISTS ${${PROJECT_NAME}_SOURCE_DIR})
file(GLOB_RECURSE ${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_SOURCE_DIR}/*.c)
endif ()
-add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS})
+add_library(${PROJECT_NAME} ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS})
set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${${PROJECT_NAME}_HEADERS}")
+set_target_properties(${PROJECT_NAME} PROPERTIES VERSION "${${PROJECT_NAME}_MAJOR}.${${PROJECT_NAME}_MINOR}.${${PROJECT_NAME}_PATCH}")
+set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${${PROJECT_NAME}_MAJOR})
if (${PROJECT_NAME}_DEPS)
foreach (DEP ${${PROJECT_NAME}_DEPS})
@@ -175,13 +172,33 @@ else ()
set(${PROJECT_NAME}_TEST_DIR ${PROJECT_NAME}_TEST_DIR PARENT_SCOPE)
endif ()
+block()
+ set(prefix ${CMAKE_INSTALL_PREFIX})
+ set(exec_prefix ${CMAKE_INSTALL_PREFIX})
+ set(bindir ${CMAKE_INSTALL_BINDIR})
+ set(datarootdir ${CMAKE_INSTALL_DATAROOTDIR})
+ set(includedir ${CMAKE_INSTALL_INCLUDEDIR})
+ set(infodir ${CMAKE_INSTALL_INFODIR})
+ set(libdir ${CMAKE_INSTALL_LIBDIR})
+ set(libexecdir ${CMAKE_INSTALL_LIBEXECDIR})
+ set(localstatedir ${CMAKE_INSTALL_LOCALSTATEDIR})
+ set(mandir ${CMAKE_INSTALL_MANDIR})
+ set(sbindir ${CMAKE_INSTALL_SBINDIR})
+ set(sharedstatedir ${CMAKE_INSTALL_SHAREDSTATEDIR})
+ set(sysconfdir ${CMAKE_INSTALL_SYSCONFDIR})
+ set(PACKAGE_NAME ${PROJECT_NAME})
+ set(LIBSV_PKG_CONFIG_VERSION ${${PROJECT_NAME}_MAJOR}.${${PROJECT_NAME}_MINOR}.${${PROJECT_NAME}_PATCH})
+ configure_file("scripts/libsv.pc.in" "scripts/libsv.pc" @ONLY)
+ INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR}/scripts/libsv.pc" COMPONENT Devel DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+endblock()
+
install(TARGETS ${PROJECT_NAME}
- RUNTIME DESTINATION bin
- ARCHIVE DESTINATION lib
- PUBLIC_HEADER DESTINATION include/${PROJECT_NAME})
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
if (EXISTS ${${PROJECT_NAME}_INCLUDE_DIR}/${PROJECT_NAME}.h)
install(FILES ${${PROJECT_NAME}_INCLUDE_DIR}/${PROJECT_NAME}.h
- DESTINATION include)
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif ()
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_NAME}_SUMMARY")
Zephyr Lykos commented
superseded by #57