From 66bd85143187052b7e59c8dc1f8b037f8c4100b7 Mon Sep 17 00:00:00 2001 From: Norbert Pfeiler Date: Tue, 6 Jun 2017 09:48:44 +0200 Subject: [PATCH 1/5] lower case for CMake change CMake code to contemporary use of lower case and consistency with SnappyConfig.cmake.in --- CMakeLists.txt | 202 ++++++++++++++++++++++++------------------------- 1 file changed, 101 insertions(+), 101 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index de52666..a26c870 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,86 +1,86 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.1) -PROJECT(Snappy VERSION 1.1.6 LANGUAGES C CXX) - -SET(CMAKE_INCLUDE_CURRENT_DIR ON) - -INCLUDE(CheckIncludeFiles) -INCLUDE(CheckLibraryExists) -INCLUDE(CheckCXXSourceCompiles) -INCLUDE(TestBigEndian) -INCLUDE(CMakePackageConfigHelpers) - -TEST_BIG_ENDIAN(WORDS_BIG_ENDIAN) -IF (WORDS_BIG_ENDIAN) - MESSAGE(STATUS "Building on big endian system") - ADD_DEFINITIONS(-DWORDS_BIGENDIAN=1) -ENDIF (WORDS_BIG_ENDIAN) - -CHECK_INCLUDE_FILES("byteswap.h" HAVE_BYTESWAP_H) -CHECK_INCLUDE_FILES("dlfcn.h" HAVE_DLFCN_H) -CHECK_INCLUDE_FILES("inttypes.h" HAVE_INTTYPES_H) -CHECK_INCLUDE_FILES("memory.h" HAVE_MEMORY_H) -CHECK_INCLUDE_FILES("stddef.h" HAVE_STDDEF_H) -CHECK_INCLUDE_FILES("stdint.h" HAVE_STDINT_H) -CHECK_INCLUDE_FILES("stdlib.h" HAVE_STDLIB_H) -CHECK_INCLUDE_FILES("strings.h" HAVE_STRINGS_H) -CHECK_INCLUDE_FILES("string.h" HAVE_STRING_H) -CHECK_INCLUDE_FILES("sys/byteswap.h" HAVE_SYS_BYTESWAP_H) -CHECK_INCLUDE_FILES("sys/endian.h" HAVE_SYS_ENDIAN_H) -CHECK_INCLUDE_FILES("sys/mman.h" HAVE_SYS_MMAN_H) -CHECK_INCLUDE_FILES("sys/resource.h" HAVE_SYS_RESOURCE_H) -CHECK_INCLUDE_FILES("sys/stat.h" HAVE_SYS_STAT_H) -CHECK_INCLUDE_FILES("sys/time.h" HAVE_SYS_TIME_H) -CHECK_INCLUDE_FILES("sys/types.h" HAVE_SYS_TYPES_H) -CHECK_INCLUDE_FILES("sys/uio.h" HAVE_SYS_UIO_H) -CHECK_INCLUDE_FILES("unistd.h" HAVE_UNISTD_H) -CHECK_INCLUDE_FILES("windows.h" HAVE_WINDOWS_H) - -IF (NOT HAVE_SYS_UIO_H) - SET(HAVE_SYS_UIO_H 0) -ENDIF (NOT HAVE_SYS_UIO_H) - -IF (NOT HAVE_STDINT_H) - SET(HAVE_STDINT_H 0) -ENDIF (NOT HAVE_STDINT_H) - -IF (NOT HAVE_STDDEF_H) - SET(HAVE_STDDEF_H 0) -ENDIF (NOT HAVE_STDDEF_H) - -CHECK_LIBRARY_EXISTS(z zlibVersion "" HAVE_LIBZ) -CHECK_LIBRARY_EXISTS(lzo2 lzo1x_1_15_compress "" HAVE_LIBLZO2) - -CHECK_CXX_SOURCE_COMPILES("int main(void) { return __builtin_expect(0, 1); }" +cmake_minimum_required(VERSION 3.1) +project(Snappy VERSION 1.1.6 LANGUAGES C CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +include(CheckIncludeFiles) +include(CheckLibraryExists) +include(CheckCXXSourceCompiles) +include(TestBigEndian) +include(CMakePackageConfigHelpers) + +test_big_endian(WORDS_BIG_ENDIAN) +if (WORDS_BIG_ENDIAN) + message(STATUS "Building on big endian system") + add_definitions(-DWORDS_BIGENDIAN=1) +endif (WORDS_BIG_ENDIAN) + +check_include_files("byteswap.h" HAVE_BYTESWAP_H) +check_include_files("dlfcn.h" HAVE_DLFCN_H) +check_include_files("inttypes.h" HAVE_INTTYPES_H) +check_include_files("memory.h" HAVE_MEMORY_H) +check_include_files("stddef.h" HAVE_STDDEF_H) +check_include_files("stdint.h" HAVE_STDINT_H) +check_include_files("stdlib.h" HAVE_STDLIB_H) +check_include_files("strings.h" HAVE_STRINGS_H) +check_include_files("string.h" HAVE_STRING_H) +check_include_files("sys/byteswap.h" HAVE_SYS_BYTESWAP_H) +check_include_files("sys/endian.h" HAVE_SYS_ENDIAN_H) +check_include_files("sys/mman.h" HAVE_SYS_MMAN_H) +check_include_files("sys/resource.h" HAVE_SYS_RESOURCE_H) +check_include_files("sys/stat.h" HAVE_SYS_STAT_H) +check_include_files("sys/time.h" HAVE_SYS_TIME_H) +check_include_files("sys/types.h" HAVE_SYS_TYPES_H) +check_include_files("sys/uio.h" HAVE_SYS_UIO_H) +check_include_files("unistd.h" HAVE_UNISTD_H) +check_include_files("windows.h" HAVE_WINDOWS_H) + +if (NOT HAVE_SYS_UIO_H) + set(HAVE_SYS_UIO_H 0) +endif (NOT HAVE_SYS_UIO_H) + +if (NOT HAVE_STDINT_H) + set(HAVE_STDINT_H 0) +endif (NOT HAVE_STDINT_H) + +if (NOT HAVE_STDDEF_H) + set(HAVE_STDDEF_H 0) +endif (NOT HAVE_STDDEF_H) + +check_library_exists(z zlibVersion "" HAVE_LIBZ) +check_library_exists(lzo2 lzo1x_1_15_compress "" HAVE_LIBLZO2) + +check_cxx_source_compiles("int main(void) { return __builtin_expect(0, 1); }" HAVE_BUILTIN_EXPECT) -CHECK_CXX_SOURCE_COMPILES("int main(void) { return __builtin_ctzll(0); }" +check_cxx_source_compiles("int main(void) { return __builtin_ctzll(0); }" HAVE_BUILTIN_CTZ) -FIND_PACKAGE(GTest QUIET) -IF(GTEST_FOUND) - SET(HAVE_GTEST 1) -ENDIF() +find_package(GTest QUIET) +if(GTEST_FOUND) + set(HAVE_GTEST 1) +endif() -FIND_PACKAGE(Gflags QUIET) -IF(GFLAGS_FOUND) - SET(HAVE_GFLAGS 1) -ENDIF() +find_package(Gflags QUIET) +if(GFLAGS_FOUND) + set(HAVE_GFLAGS 1) +endif() -CONFIGURE_FILE(${Snappy_SOURCE_DIR}/cmake/config.h.in config.h) +configure_file(${Snappy_SOURCE_DIR}/cmake/config.h.in config.h) # Configure snappy-stubs-public.h.in -SET(ac_cv_have_stdint_h ${HAVE_STDINT_H}) -SET(ac_cv_have_stddef_h ${HAVE_STDDEF_H}) -SET(ac_cv_have_sys_uio_h ${HAVE_SYS_UIO_H}) -CONFIGURE_FILE(${Snappy_SOURCE_DIR}/snappy-stubs-public.h.in +set(ac_cv_have_stdint_h ${HAVE_STDINT_H}) +set(ac_cv_have_stddef_h ${HAVE_STDDEF_H}) +set(ac_cv_have_sys_uio_h ${HAVE_SYS_UIO_H}) +configure_file(${Snappy_SOURCE_DIR}/snappy-stubs-public.h.in snappy-stubs-public.h) -IF (WIN32) - ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) -ENDIF (WIN32) +if (WIN32) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) +endif (WIN32) # Define the main library. -ADD_LIBRARY(snappy SHARED +add_library(snappy SHARED snappy-c.cc snappy-c.h snappy-sinksource.cc @@ -90,67 +90,67 @@ ADD_LIBRARY(snappy SHARED snappy.cc snappy.h) -TARGET_COMPILE_DEFINITIONS(snappy PRIVATE -DHAVE_CONFIG_H) +target_compile_definitions(snappy PRIVATE -DHAVE_CONFIG_H) -SET_TARGET_PROPERTIES(snappy PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) +set_target_properties(snappy PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) -INSTALL(FILES snappy.h +install(FILES snappy.h snappy-c.h snappy-sinksource.h ${Snappy_BINARY_DIR}/snappy-stubs-public.h DESTINATION include) -INSTALL(TARGETS snappy +install(TARGETS snappy EXPORT SnappyTargets RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) -INSTALL(EXPORT SnappyTargets NAMESPACE Snappy:: DESTINATION lib/cmake/Snappy) +install(EXPORT SnappyTargets NAMESPACE Snappy:: DESTINATION lib/cmake/Snappy) -SET_TARGET_PROPERTIES(snappy PROPERTIES VERSION ${PROJECT_VERSION} +set_target_properties(snappy PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) -SET(INCLUDE_INSTALL_DIR include) -SET(LIBRARY_INSTALL_DIR lib) -SET(BINARY_INSTALL_DIR bin) +set(INCLUDE_INSTALL_DIR include) +set(LIBRARY_INSTALL_DIR lib) +set(BINARY_INSTALL_DIR bin) -CONFIGURE_PACKAGE_CONFIG_FILE(cmake/SnappyConfig.cmake.in +configure_package_config_file(cmake/SnappyConfig.cmake.in ${Snappy_BINARY_DIR}/SnappyConfig.cmake INSTALL_DESTINATION lib/Snappy/cmake PATH_VARS INCLUDE_INSTALL_DIR LIBRARY_INSTALL_DIR BINARY_INSTALL_DIR ) -WRITE_BASIC_PACKAGE_VERSION_FILE(${Snappy_BINARY_DIR}/SnappyConfigVersion.cmake +write_basic_package_version_file(${Snappy_BINARY_DIR}/SnappyConfigVersion.cmake COMPATIBILITY SameMajorVersion) -INSTALL(FILES ${Snappy_BINARY_DIR}/SnappyConfig.cmake +install(FILES ${Snappy_BINARY_DIR}/SnappyConfig.cmake ${Snappy_BINARY_DIR}/SnappyConfigVersion.cmake DESTINATION lib/cmake) -ENABLE_TESTING() +enable_testing() -IF (HAVE_LIBZ) - LIST(APPEND COMPRESSION_LIBS z) -ENDIF (HAVE_LIBZ) +if (HAVE_LIBZ) + list(APPEND COMPRESSION_LIBS z) +endif (HAVE_LIBZ) -IF (HAVE_LIBLZO2) - LIST(APPEND COMPRESSION_LIBS lzo2) -ENDIF (HAVE_LIBLZO2) +if (HAVE_LIBLZO2) + list(APPEND COMPRESSION_LIBS lzo2) +endif (HAVE_LIBLZO2) -IF (HAVE_LIBLZF) - LIST(APPEND COMPRESSION_LIBS lzf) -ENDIF (HAVE_LIBLZF) +if (HAVE_LIBLZF) + list(APPEND COMPRESSION_LIBS lzf) +endif (HAVE_LIBLZF) -IF (HAVE_LIBQUICKLZ) - LIST(APPEND COMPRESSION_LIBS quicklz) -ENDIF (HAVE_LIBQUICKLZ) +if (HAVE_LIBQUICKLZ) + list(APPEND COMPRESSION_LIBS quicklz) +endif (HAVE_LIBQUICKLZ) -ADD_EXECUTABLE(snappy-unittest snappy_unittest.cc snappy-test.cc) -TARGET_COMPILE_DEFINITIONS(snappy-unittest PRIVATE -DHAVE_CONFIG_H) -TARGET_LINK_LIBRARIES(snappy-unittest snappy ${COMPRESSION_LIBS} +add_executable(snappy-unittest snappy_unittest.cc snappy-test.cc) +target_compile_definitions(snappy-unittest PRIVATE -DHAVE_CONFIG_H) +target_link_libraries(snappy-unittest snappy ${COMPRESSION_LIBS} ${GFLAGS_LIBRARIES}) -TARGET_INCLUDE_DIRECTORIES(snappy-unittest BEFORE PRIVATE ${Snappy_SOURCE_DIR} +target_include_directories(snappy-unittest BEFORE PRIVATE ${Snappy_SOURCE_DIR} ${GTEST_INCLUDE_DIRS} ${GFLAGS_INCLUDE_DIRS}) -ADD_TEST(NAME snappy-unittest +add_test(NAME snappy-unittest WORKING_DIRECTORY ${Snappy_SOURCE_DIR} COMMAND ${Snappy_BINARY_DIR}/snappy-unittest) From e23726b936392685df5de6791dc6af317e5551f1 Mon Sep 17 00:00:00 2001 From: Norbert Pfeiler Date: Tue, 6 Jun 2017 08:59:22 +0200 Subject: [PATCH 2/5] install CMake config and targets to the same directory also provide the same INSTALL_DESTINATION to configure_package_config_file --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a26c870..10d6381 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -116,7 +116,7 @@ set(BINARY_INSTALL_DIR bin) configure_package_config_file(cmake/SnappyConfig.cmake.in ${Snappy_BINARY_DIR}/SnappyConfig.cmake - INSTALL_DESTINATION lib/Snappy/cmake + INSTALL_DESTINATION lib/cmake/Snappy PATH_VARS INCLUDE_INSTALL_DIR LIBRARY_INSTALL_DIR BINARY_INSTALL_DIR ) @@ -124,7 +124,7 @@ write_basic_package_version_file(${Snappy_BINARY_DIR}/SnappyConfigVersion.cmake COMPATIBILITY SameMajorVersion) install(FILES ${Snappy_BINARY_DIR}/SnappyConfig.cmake ${Snappy_BINARY_DIR}/SnappyConfigVersion.cmake - DESTINATION lib/cmake) + DESTINATION lib/cmake/Snappy) enable_testing() From 3778323b89fef1eef93cdb7825d598eec3857e44 Mon Sep 17 00:00:00 2001 From: Norbert Pfeiler Date: Tue, 6 Jun 2017 09:39:51 +0200 Subject: [PATCH 3/5] =?UTF-8?q?Change=20the=20target=E2=80=99s=20name=20to?= =?UTF-8?q?=20upper=20case,?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit but explicitly specify the output name to be lower case. --- CMakeLists.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 10d6381..c0e0316 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,7 +80,7 @@ if (WIN32) endif (WIN32) # Define the main library. -add_library(snappy SHARED +add_library(Snappy SHARED snappy-c.cc snappy-c.h snappy-sinksource.cc @@ -90,9 +90,9 @@ add_library(snappy SHARED snappy.cc snappy.h) -target_compile_definitions(snappy PRIVATE -DHAVE_CONFIG_H) +target_compile_definitions(Snappy PRIVATE -DHAVE_CONFIG_H) -set_target_properties(snappy PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) +set_target_properties(Snappy PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON OUTPUT_NAME snappy) install(FILES snappy.h snappy-c.h @@ -100,14 +100,14 @@ install(FILES snappy.h ${Snappy_BINARY_DIR}/snappy-stubs-public.h DESTINATION include) -install(TARGETS snappy +install(TARGETS Snappy EXPORT SnappyTargets RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) install(EXPORT SnappyTargets NAMESPACE Snappy:: DESTINATION lib/cmake/Snappy) -set_target_properties(snappy PROPERTIES VERSION ${PROJECT_VERSION} +set_target_properties(Snappy PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) set(INCLUDE_INSTALL_DIR include) @@ -146,7 +146,7 @@ endif (HAVE_LIBQUICKLZ) add_executable(snappy-unittest snappy_unittest.cc snappy-test.cc) target_compile_definitions(snappy-unittest PRIVATE -DHAVE_CONFIG_H) -target_link_libraries(snappy-unittest snappy ${COMPRESSION_LIBS} +target_link_libraries(snappy-unittest Snappy ${COMPRESSION_LIBS} ${GFLAGS_LIBRARIES}) target_include_directories(snappy-unittest BEFORE PRIVATE ${Snappy_SOURCE_DIR} ${GTEST_INCLUDE_DIRS} ${GFLAGS_INCLUDE_DIRS}) From 26adadf5301f0f8bb2a60fc48798a11895dd8a5a Mon Sep 17 00:00:00 2001 From: Norbert Pfeiler Date: Tue, 6 Jun 2017 10:01:46 +0200 Subject: [PATCH 4/5] export targets for use in other projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit the exported targets were already generated but unused CMake exported targets exist for a very long time now and essentially replace a large amount of manual variables (include dir, library dir …) the version also wasn’t set, because corresponding variables got lost between PRs and c8131680d018bad83a0b0b2e2f6e49a37593c550 a downstream project only needs to use the following – if the install prefix of snappy is in its search path – to add include directories and link the library find_package(Snappy) target_link_libraries(DownstreamTarget PUBLIC Snappy::Snappy) # yes, this also adds includes --- CMakeLists.txt | 8 ++------ cmake/SnappyConfig.cmake.in | 10 +--------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c0e0316..917203a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,6 +94,7 @@ target_compile_definitions(Snappy PRIVATE -DHAVE_CONFIG_H) set_target_properties(Snappy PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON OUTPUT_NAME snappy) +target_include_directories(Snappy INTERFACE $) install(FILES snappy.h snappy-c.h snappy-sinksource.h @@ -114,12 +115,7 @@ set(INCLUDE_INSTALL_DIR include) set(LIBRARY_INSTALL_DIR lib) set(BINARY_INSTALL_DIR bin) -configure_package_config_file(cmake/SnappyConfig.cmake.in - ${Snappy_BINARY_DIR}/SnappyConfig.cmake - INSTALL_DESTINATION lib/cmake/Snappy - PATH_VARS INCLUDE_INSTALL_DIR LIBRARY_INSTALL_DIR BINARY_INSTALL_DIR - ) - +configure_file(cmake/SnappyConfig.cmake.in ${Snappy_BINARY_DIR}/SnappyConfig.cmake @ONLY) write_basic_package_version_file(${Snappy_BINARY_DIR}/SnappyConfigVersion.cmake COMPATIBILITY SameMajorVersion) install(FILES ${Snappy_BINARY_DIR}/SnappyConfig.cmake diff --git a/cmake/SnappyConfig.cmake.in b/cmake/SnappyConfig.cmake.in index 5e604fe..e63eb14 100644 --- a/cmake/SnappyConfig.cmake.in +++ b/cmake/SnappyConfig.cmake.in @@ -1,9 +1 @@ -set(SNAPPY_VERSION @SNAPPY_MAJOR@.@SNAPPY_MINOR@.@SNAPPY_PATCHLEVEL@) - -@PACKAGE_INIT@ - -set_and_check(SNAPPY_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") -set_and_check(SNAPPY_LIBRARY_DIR "@PACKAGE_LIBRARY_INSTALL_DIR@") -set_and_check(SNAPPY_BINARY_DIR "@PACKAGE_BINARY_INSTALL_DIR@") - -check_required_components(SNAPPY) \ No newline at end of file +include("${CMAKE_CURRENT_LIST_DIR}/SnappyTargets.cmake") From ad817785de16d59c6bc6a0a3ca379ca145453d2c Mon Sep 17 00:00:00 2001 From: Norbert Pfeiler Date: Thu, 23 Mar 2017 15:11:52 +0100 Subject: [PATCH 5/5] add ability to build static and shared flavors and install them on top of each other set BUILD_SHARED_LIBS=FALSE to build the static version shared is the default (as is BUILD_SHARED_LIBS=TRUE) --- CMakeLists.txt | 13 ++++++++++--- cmake/SnappyConfig.cmake.in | 6 +++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 917203a..9d16804 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,8 @@ project(Snappy VERSION 1.1.6 LANGUAGES C CXX) set(CMAKE_INCLUDE_CURRENT_DIR ON) +option(BUILD_SHARED_LIBS "Enable to build the shared version of the library or disable to build the static version" ON) + include(CheckIncludeFiles) include(CheckLibraryExists) include(CheckCXXSourceCompiles) @@ -80,7 +82,7 @@ if (WIN32) endif (WIN32) # Define the main library. -add_library(Snappy SHARED +add_library(Snappy snappy-c.cc snappy-c.h snappy-sinksource.cc @@ -101,12 +103,17 @@ install(FILES snappy.h ${Snappy_BINARY_DIR}/snappy-stubs-public.h DESTINATION include) +if (BUILD_SHARED_LIBS) + set(ExportSet SnappySharedTargets) +else() + set(ExportSet SnappyStaticTargets) +endif() install(TARGETS Snappy - EXPORT SnappyTargets + EXPORT ${ExportSet} RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) -install(EXPORT SnappyTargets NAMESPACE Snappy:: DESTINATION lib/cmake/Snappy) +install(EXPORT ${ExportSet} NAMESPACE Snappy:: DESTINATION lib/cmake/Snappy) set_target_properties(Snappy PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) diff --git a/cmake/SnappyConfig.cmake.in b/cmake/SnappyConfig.cmake.in index e63eb14..65985a6 100644 --- a/cmake/SnappyConfig.cmake.in +++ b/cmake/SnappyConfig.cmake.in @@ -1 +1,5 @@ -include("${CMAKE_CURRENT_LIST_DIR}/SnappyTargets.cmake") +if ((NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS) AND EXISTS "${CMAKE_CURRENT_LIST_DIR}/SnappySharedTargets.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/SnappySharedTargets.cmake") +else() + include("${CMAKE_CURRENT_LIST_DIR}/SnappyStaticTargets.cmake") +endif()