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})