cmake: more best practice changes
Use target_link_libraries directly instead of via variables
Use target_include_directories instead of include_directories.
Use add_compile_definitions instead of add_definitions.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index eda98e7..2747ae6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -47,7 +47,7 @@
set(MBEDTLS_LIBRARIES FALSE)
endif()
if(ENABLE_OPENSSL)
- include(FindOpenSSL)
+ find_package(OpenSSL)
else()
set(OPENSSL_FOUND FALSE)
endif()
@@ -210,15 +210,11 @@
test_big_endian(WORDS_BIGENDIAN)
find_package(ZLIB 1.1.2 REQUIRED)
-include_directories(${ZLIB_INCLUDE_DIR})
if(ENABLE_BZIP2)
find_package(BZip2)
if(BZIP2_FOUND)
set(HAVE_LIBBZ2 1)
-
- include_directories(${BZIP2_INCLUDE_DIR})
- set(OPTIONAL_LIBRARY ${OPTIONAL_LIBRARY} ${BZIP2_LIBRARIES})
else()
message(WARNING "-- bzip2 library not found; bzip2 support disabled")
endif(BZIP2_FOUND)
@@ -228,9 +224,6 @@
find_package(LibLZMA)
if(LIBLZMA_FOUND)
set(HAVE_LIBLZMA 1)
-
- include_directories(${LIBLZMA_INCLUDE_DIR})
- set(OPTIONAL_LIBRARY ${OPTIONAL_LIBRARY} ${LIBLZMA_LIBRARY})
else()
message(WARNING "-- lzma library not found; lzma support disabled")
endif(LIBLZMA_FOUND)
@@ -246,18 +239,12 @@
elseif (GNUTLS_FOUND AND NETTLE_FOUND)
set(HAVE_CRYPTO 1)
set(HAVE_GNUTLS 1)
- include_directories(${GNUTLS_INCLUDE_DIR} ${NETTLE_INCLUDE_DIR})
- set(OPTIONAL_LIBRARY ${OPTIONAL_LIBRARY} ${GNUTLS_LIBRARY} ${NETTLE_LIBRARY})
elseif (OPENSSL_FOUND)
set(HAVE_CRYPTO 1)
set(HAVE_OPENSSL 1)
- include_directories(${OPENSSL_INCLUDE_DIR})
- set(OPTIONAL_LIBRARY ${OPTIONAL_LIBRARY} ${OPENSSL_LIBRARIES})
elseif (MBEDTLS_LIBRARIES)
set(HAVE_CRYPTO 1)
set(HAVE_MBEDTLS 1)
- include_directories(${MBEDTLS_INCLUDE_DIR})
- set(OPTIONAL_LIBRARY ${OPTIONAL_LIBRARY} ${MBEDTLS_LIBRARIES})
endif()
if (NOT HAVE_CRYPTO)
@@ -265,18 +252,13 @@
endif()
if(MSVC)
- ADD_DEFINITIONS("-D_CRT_SECURE_NO_WARNINGS")
- ADD_DEFINITIONS("-D_CRT_NONSTDC_NO_DEPRECATE")
+ add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
+ add_compile_definitions(_CRT_NONSTDC_NO_DEPRECATE)
endif(MSVC)
if(WIN32)
- if(HAVE_WINDOWS_CRYPTO)
- set(OPTIONAL_LIBRARY ${OPTIONAL_LIBRARY} bcrypt)
- endif()
if(CMAKE_SYSTEM_NAME MATCHES WindowsPhone OR CMAKE_SYSTEM_NAME MATCHES WindowsStore)
- ADD_DEFINITIONS(-DMS_UWP)
- else(CMAKE_SYSTEM_NAME MATCHES WindowsPhone OR CMAKE_SYSTEM_NAME MATCHES WindowsStore)
- set(OPTIONAL_LIBRARY ${OPTIONAL_LIBRARY} advapi32)
+ add_compile_definitions(MS_UWP)
endif(CMAKE_SYSTEM_NAME MATCHES WindowsPhone OR CMAKE_SYSTEM_NAME MATCHES WindowsStore)
endif(WIN32)
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 7a65869..559b869 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -1,9 +1,5 @@
include(CheckFunctionExists)
-if(LIBZIP_DO_INSTALL)
- install(FILES zip.h DESTINATION include)
-endif()
-
set(CMAKE_C_VISIBILITY_PRESET hidden)
add_library(zip
@@ -131,6 +127,7 @@
target_sources(zip PRIVATE zip_random_uwp.c)
else()
target_sources(zip PRIVATE zip_source_file_win32_ansi.c zip_random_win32.c)
+ target_link_libraries(zip PRIVATE advapi32)
endif()
else(WIN32)
target_sources(zip PRIVATE
@@ -140,6 +137,61 @@
)
endif(WIN32)
+if(HAVE_LIBBZ2)
+ target_sources(zip PRIVATE zip_algorithm_bzip2.c)
+ target_link_libraries(zip PRIVATE BZip2::BZip2)
+endif()
+
+if(HAVE_LIBLZMA)
+ target_sources(zip PRIVATE zip_algorithm_xz.c)
+ target_link_libraries(zip PRIVATE LibLZMA::LibLZMA)
+endif()
+
+if(HAVE_COMMONCRYPTO)
+ target_sources(zip PRIVATE zip_crypto_commoncrypto.c)
+elseif(HAVE_WINDOWS_CRYPTO)
+ target_sources(zip PRIVATE zip_crypto_win.c)
+ target_link_libraries(zip PRIVATE bcrypt)
+elseif(HAVE_GNUTLS)
+ target_sources(zip PRIVATE zip_crypto_gnutls.c)
+ target_include_directories(zip PRIVATE ${NETTLE_INCLUDE_DIR})
+ target_link_libraries(zip PRIVATE GnuTLS::GnuTLS ${NETTLE_LIBRARY})
+elseif(HAVE_OPENSSL)
+ target_sources(zip PRIVATE zip_crypto_openssl.c)
+ target_link_libraries(zip PRIVATE OpenSSL::Crypto)
+elseif(HAVE_MBEDTLS)
+ target_sources(zip PRIVATE zip_crypto_mbedtls.c)
+ target_include_directories(zip PRIVATE ${MBEDTLS_INCLUDE_DIR})
+ target_link_libraries(zip PRIVATE ${MBEDTLS_LIBRARIES})
+endif()
+
+if(HAVE_CRYPTO)
+ target_sources(zip PRIVATE zip_winzip_aes.c zip_source_winzip_aes_decode.c zip_source_winzip_aes_encode.c)
+endif()
+
+if(SHARED_LIB_VERSIONNING)
+ set_target_properties(zip PROPERTIES VERSION 5.3 SOVERSION 5)
+endif()
+
+target_link_libraries(zip PRIVATE ${ZLIB_LIBRARIES} ${OPTIONAL_LIBRARY})
+target_include_directories(zip
+ PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lib>
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
+ $<INSTALL_INTERFACE:include>
+ )
+
+if(LIBZIP_DO_INSTALL)
+ install(TARGETS zip
+ EXPORT ${PROJECT_NAME}-targets
+ RUNTIME DESTINATION bin
+ ARCHIVE DESTINATION lib
+ INCLUDES DESTINATION include
+ LIBRARY DESTINATION lib)
+ install(FILES zip.h DESTINATION include)
+endif()
+
+# create zip_err_str.h from zip.h
file(READ ${PROJECT_SOURCE_DIR}/lib/zip.h zip_h)
string(REGEX MATCHALL "#define ZIP_ER_([A-Z_]+) ([0-9]+)[ \t]+/([-*0-9a-zA-Z ']*)/" zip_h_err ${zip_h})
set(zip_err_str [=[
@@ -172,48 +224,3 @@
]=])
string(APPEND zip_err_str "${zip_err_type}}\;\n")
file(WRITE ${CMAKE_BINARY_DIR}/zip_err_str.c ${zip_err_str})
-
-if(HAVE_LIBBZ2)
- target_sources(zip PRIVATE zip_algorithm_bzip2.c)
-endif()
-
-if(HAVE_LIBLZMA)
- target_sources(zip PRIVATE zip_algorithm_xz.c)
-endif()
-
-if(HAVE_COMMONCRYPTO)
- target_sources(zip PRIVATE zip_crypto_commoncrypto.c)
-elseif(HAVE_WINDOWS_CRYPTO)
- target_sources(zip PRIVATE zip_crypto_win.c)
-elseif(HAVE_GNUTLS)
- target_sources(zip PRIVATE zip_crypto_gnutls.c)
-elseif(HAVE_OPENSSL)
- target_sources(zip PRIVATE zip_crypto_openssl.c)
-elseif(HAVE_MBEDTLS)
- target_sources(zip PRIVATE zip_crypto_mbedtls.c)
-endif()
-
-if(HAVE_CRYPTO)
- target_sources(zip PRIVATE zip_winzip_aes.c zip_source_winzip_aes_decode.c zip_source_winzip_aes_encode.c)
-endif()
-
-if(SHARED_LIB_VERSIONNING)
- set_target_properties(zip PROPERTIES VERSION 5.3 SOVERSION 5)
-endif()
-
-target_link_libraries(zip PRIVATE ${ZLIB_LIBRARIES} ${OPTIONAL_LIBRARY})
-target_include_directories(zip
- PUBLIC
- $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lib>
- $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
- $<INSTALL_INTERFACE:include>
- )
-
-if(LIBZIP_DO_INSTALL)
- install(TARGETS zip
- EXPORT ${PROJECT_NAME}-targets
- RUNTIME DESTINATION bin
- ARCHIVE DESTINATION lib
- INCLUDES DESTINATION include
- LIBRARY DESTINATION lib)
-endif()