cmake best practice cleanup: switch from source list variables to target_sources()
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index eea38b0..7a65869 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -6,7 +6,7 @@
set(CMAKE_C_VISIBILITY_PRESET hidden)
-set(LIBZIP_SOURCES
+add_library(zip
zip_add.c
zip_add_dir.c
zip_add_entry.c
@@ -116,40 +116,37 @@
zip_unchange_archive.c
zip_unchange_data.c
zip_utf-8.c
-)
+ ${CMAKE_BINARY_DIR}/zip_err_str.c
+ )
+add_library(libzip::zip ALIAS zip)
if(WIN32)
- set(LIBZIP_OPSYS_FILES
+ target_sources(zip PRIVATE
zip_source_file_win32.c
zip_source_file_win32_named.c
zip_source_file_win32_utf16.c
zip_source_file_win32_utf8.c
- )
+ )
if(CMAKE_SYSTEM_NAME MATCHES WindowsPhone OR CMAKE_SYSTEM_NAME MATCHES WindowsStore)
- set(LIBZIP_OPSYS_FILES "${LIBZIP_OPSYS_FILES}"
- zip_random_uwp.c
- )
+ target_sources(zip PRIVATE zip_random_uwp.c)
else()
- set(LIBZIP_OPSYS_FILES "${LIBZIP_OPSYS_FILES}"
- zip_source_file_win32_ansi.c
- zip_random_win32.c
- )
+ target_sources(zip PRIVATE zip_source_file_win32_ansi.c zip_random_win32.c)
endif()
else(WIN32)
- set(LIBZIP_OPSYS_FILES
+ target_sources(zip PRIVATE
zip_mkstempm.c
zip_source_file_stdio_named.c
zip_random_unix.c
- )
+ )
endif(WIN32)
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 [=[
/*
- This file was generated automatically by CMake
- from zip.h\; make changes there.
- */
+ This file was generated automatically by CMake
+ from zip.h\; make changes there.
+*/
#include "zipint.h"
@@ -175,52 +172,42 @@
]=])
string(APPEND zip_err_str "${zip_err_type}}\;\n")
file(WRITE ${CMAKE_BINARY_DIR}/zip_err_str.c ${zip_err_str})
-list(APPEND LIBZIP_SOURCES ${CMAKE_BINARY_DIR}/zip_err_str.c)
if(HAVE_LIBBZ2)
- set(LIBZIP_OPTIONAL_FILES zip_algorithm_bzip2.c)
+ target_sources(zip PRIVATE zip_algorithm_bzip2.c)
endif()
if(HAVE_LIBLZMA)
- set(LIBZIP_OPTIONAL_FILES ${LIBZIP_OPTIONAL_FILES} zip_algorithm_xz.c)
+ target_sources(zip PRIVATE zip_algorithm_xz.c)
endif()
if(HAVE_COMMONCRYPTO)
- set(LIBZIP_OPTIONAL_FILES ${LIBZIP_OPTIONAL_FILES} zip_crypto_commoncrypto.c
-)
+ target_sources(zip PRIVATE zip_crypto_commoncrypto.c)
elseif(HAVE_WINDOWS_CRYPTO)
- set(LIBZIP_OPTIONAL_FILES ${LIBZIP_OPTIONAL_FILES} zip_crypto_win.c
-)
+ target_sources(zip PRIVATE zip_crypto_win.c)
elseif(HAVE_GNUTLS)
- set(LIBZIP_OPTIONAL_FILES ${LIBZIP_OPTIONAL_FILES} zip_crypto_gnutls.c
-)
+ target_sources(zip PRIVATE zip_crypto_gnutls.c)
elseif(HAVE_OPENSSL)
- set(LIBZIP_OPTIONAL_FILES ${LIBZIP_OPTIONAL_FILES} zip_crypto_openssl.c
-)
+ target_sources(zip PRIVATE zip_crypto_openssl.c)
elseif(HAVE_MBEDTLS)
- set(LIBZIP_OPTIONAL_FILES ${LIBZIP_OPTIONAL_FILES} zip_crypto_mbedtls.c
-)
+ target_sources(zip PRIVATE zip_crypto_mbedtls.c)
endif()
if(HAVE_CRYPTO)
- set(LIBZIP_OPTIONAL_FILES ${LIBZIP_OPTIONAL_FILES} zip_winzip_aes.c zip_source_winzip_aes_decode.c zip_source_winzip_aes_encode.c
-)
+ target_sources(zip PRIVATE zip_winzip_aes.c zip_source_winzip_aes_decode.c zip_source_winzip_aes_encode.c)
endif()
-add_library(zip ${LIBZIP_SOURCES} ${LIBZIP_EXTRA_FILES} ${LIBZIP_OPTIONAL_FILES} ${LIBZIP_OPSYS_FILES})
-add_library(libzip::zip ALIAS zip)
-
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>
-)
+ PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lib>
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
+ $<INSTALL_INTERFACE:include>
+ )
if(LIBZIP_DO_INSTALL)
install(TARGETS zip
diff --git a/regress/CMakeLists.txt b/regress/CMakeLists.txt
index d5a263c..cdb38c8 100644
--- a/regress/CMakeLists.txt
+++ b/regress/CMakeLists.txt
@@ -1,7 +1,4 @@
check_function_exists(getopt HAVE_GETOPT)
-if(NOT HAVE_GETOPT)
- set(SRC_EXTRA_FILES ../src/getopt.c)
-endif()
set(TEST_PROGRAMS
add_from_filep
@@ -41,14 +38,21 @@
endforeach()
foreach(PROGRAM IN LISTS GETOPT_USERS)
- add_executable(${PROGRAM} ${PROGRAM}.c ${SRC_EXTRA_FILES})
+ add_executable(${PROGRAM} ${PROGRAM}.c)
target_link_libraries(${PROGRAM} zip)
+ if(NOT HAVE_GETOPT)
+ target_sources(${PROGRAM} PRIVATE getopt.c)
+ endif(NOT HAVE_GETOPT)
endforeach()
foreach(PROGRAM IN LISTS HOLE_USERS)
- add_executable(${PROGRAM} ${PROGRAM}.c ${SRC_EXTRA_FILES} source_hole.c)
+ add_executable(${PROGRAM} ${PROGRAM}.c source_hole.c)
target_link_libraries(${PROGRAM} zip)
endforeach()
+# hole needs getopt() too.
+if(NOT HAVE_GETOPT)
+ target_sources(hole PRIVATE getopt.c)
+endif(NOT HAVE_GETOPT)
foreach(PROGRAM IN LISTS ALL_PROGRAMS)
include_directories(${PROGRAM} PRIVATE BEFORE ${PROJECT_SOURCE_DIR}/lib ${PROJECT_SOURCE_DIR}/src ${PROJECT_BINARY_DIR})
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c911110..c8394a4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,14 +1,13 @@
check_function_exists(getopt HAVE_GETOPT)
-if(NOT HAVE_GETOPT)
- set(SRC_EXTRA_FILES getopt.c)
-endif(NOT HAVE_GETOPT)
-
foreach(PROGRAM zipcmp zipmerge ziptool)
- add_executable(${PROGRAM} ${PROGRAM}.c ${SRC_EXTRA_FILES})
+ add_executable(${PROGRAM} ${PROGRAM}.c)
target_link_libraries(${PROGRAM} zip)
target_include_directories(${PROGRAM} BEFORE PRIVATE ${PROJECT_SOURCE_DIR}/lib ${PROJECT_BINARY_DIR})
if(LIBZIP_DO_INSTALL)
install(TARGETS ${PROGRAM} EXPORT ${PROJECT_NAME}-targets RUNTIME DESTINATION bin)
endif()
+ if(NOT HAVE_GETOPT)
+ target_sources(${PROGRAM} PRIVATE getopt.c)
+ endif(NOT HAVE_GETOPT)
endforeach()
target_link_libraries(zipcmp ${FTS_LIB} ${ZLIB_LIBRARIES})