@@ -90,32 +90,40 @@ else ()
9090 "acquire_url_utils.h"
9191 )
9292
93- if (LIBACQUIRE_USE_LIBCURL)
94- set (NETWORK_LIB "acquire_libcurl.h" )
95- elseif (LIBACQUIRE_USE_LIBFETCH)
96- set (NETWORK_LIB "acquire_libfetch.h" )
97- elseif (LIBACQUIRE_USE_WININET)
98- set (NETWORK_LIB "acquire_wininet.h" )
99- elseif (LIBACQUIRE_USE_OPENBSD_FTP)
100- set (NETWORK_LIB "acquire_openbsd_ftp.h" )
101- endif ()
102- list (APPEND header_impls "${NETWORK_LIB} " )
103-
10493 message (STATUS "CRYPTO_LIB was ${CRYPTO_LIB} " )
94+
95+ if (BSD)
96+ set (HAS_LIBBSD 1)
97+ else ()
98+ find_package (LibBSD)
99+ if (LibBSD_FOUND)
100+ set (HAS_LIBBSD 1)
101+ endif (LibBSD_FOUND)
102+ endif (BSD)
103+
105104 set (CHECKSUM_SRC_CRC32c "" )
106105 # TODO: Decide more granularly which implementation to take for SHA256, &etc.
107106 # E.g., on Windows you might want librhash if `LIBACQUIRE_USE_LIBRHASH` but on non-Windows OpenSSL.
107+
108+
109+
110+ ################
111+ # Cryptography #
112+ ################
108113 if (CRYPTO_LIB STREQUAL "CommonCrypto" OR
109114 CRYPTO_LIB STREQUAL "OpenSSL" OR
110- CRYPTO_LIB STREQUAL "LibreSSL"
111- )
115+ CRYPTO_LIB STREQUAL "LibreSSL" )
112116 set (CHECKSUM_SRC "acquire_openssl.h" )
113117 set (CHECKSUM_SRC_CRC32c "acquire_crc32c.h" )
114118 list (APPEND header_impls "${CHECKSUM_SRC_CRC32c} " )
115119 elseif (LIBACQUIRE_USE_LIBRHASH)
116120 set (CHECKSUM_SRC "acquire_librhash.h" )
117121 elseif (CRYPTO_LIB STREQUAL "WinCrypt" )
122+ set (LIBACQUIRE_USE_WINCRYPT 1)
118123 set (CHECKSUM_SRC "acquire_wincrypt.h" )
124+ set (LIBACQUIRE_USE_CRC32C 1)
125+ set (CHECKSUM_SRC_EXTRA "acquire_crc32c.h" )
126+ list (APPEND header_impls "${CHECKSUM_SRC_EXTRA} " )
119127 elseif (LIBACQUIRE_USE_CRC32C)
120128 set (CHECKSUM_SRC "acquire_crc32c.h" )
121129 else ()
@@ -124,17 +132,44 @@ else ()
124132 endif ()
125133 list (APPEND header_impls "${CHECKSUM_SRC} " )
126134
135+ ##############
136+ # Extraction #
137+ ##############
127138 if (LIBACQUIRE_USE_LIBARCHIVE)
128139 set (ARCHIVE_LIB "acquire_libarchive.h" )
129140 set (ARCHIVE_LIB_LINK "${LibArchive_LIBRARIES} " )
130141 elseif (LIBACQUIRE_USE_MINIZ)
131142 set (ARCHIVE_LIB "acquire_miniz.h" )
132143 set (ARCHIVE_LIB_LINK kubazip::kubazip)
133- elseif (NOT DEFINED ARCHIVE_LIB)
144+ elseif (LIBACQUIRE_USE_WINCOMPRESSAPI)
145+ set (ARCHIVE_LIB "acquire_wincompressapi.h" )
146+ # https://learn.microsoft.com/en-us/windows/win32/api/compressapi/nf-compressapi-createcompressor
147+ set (ARCHIVE_LIB_LINK Cabinet)
148+ elseif (NOT DEFINED ARCHIVE_LIB OR ARCHIVE_LIB STREQUAL "" )
134149 message (FATAL_ERROR "ARCHIVE_LIB must be set" )
135150 endif ()
136151 list (APPEND header_impls "${ARCHIVE_LIB} " )
137152
153+ ##############
154+ # Networking #
155+ ##############
156+ if (LIBACQUIRE_USE_LIBFETCH)
157+ set (NETWORK_LIB "acquire_libfetch.h" )
158+ set (NETWORK_LIB_LINK "freebsd_libfetch" )
159+ elseif (LIBACQUIRE_USE_WININET)
160+ set (NETWORK_LIB "acquire_wininet.h" )
161+ set (NETWORK_LIB_LINK "wininet" )
162+ elseif (LIBACQUIRE_USE_LIBCURL)
163+ set (ARCHIVE_LIB "acquire_libcurl.h" )
164+ set (NETWORK_LIB_LINK CURL::libcurl)
165+ elseif (LIBACQUIRE_USE_OPENBSD_FTP)
166+ set (NETWORK_LIB "acquire_openbsd_ftp.h" )
167+ set (NETWORK_LIB_LINK "openbsd_ftp" )
168+ elseif (NOT DEFINED NETWORK_LIB OR NETWORK_LIB STREQUAL "" )
169+ message (FATAL_ERROR "NETWORK_LIB must be set" )
170+ endif ()
171+ list (APPEND header_impls "${NETWORK_LIB} " )
172+
138173 message (STATUS "header_impls = ${header_impls} " )
139174
140175 foreach (header_file IN LISTS header_impls)
@@ -224,10 +259,17 @@ else ()
224259 # String extras #
225260 #################
226261 elseif (src MATCHES "/gen_acquire_string_extras.c$" )
227- set_source_files_properties (
228- ${src} PROPERTIES
229- COMPILE_DEFINITIONS "LIBACQUIRE_IMPLEMENTATION=1;LIBACQUIRE_STRCASESTR_IMPL=1;LIBACQUIRE_STRERRORLEN_IMPL=1"
230- )
262+ if (HAS_LIBBSD)
263+ set_source_files_properties (
264+ ${src} PROPERTIES
265+ COMPILE_DEFINITIONS "LIBACQUIRE_IMPLEMENTATION=1;LIBACQUIRE_STRCASESTR_IMPL=1;LIBACQUIRE_STRERRORLEN_IMPL=1"
266+ )
267+ else ()
268+ set_source_files_properties (
269+ ${src} PROPERTIES
270+ COMPILE_DEFINITIONS "LIBACQUIRE_IMPLEMENTATION=1;LIBACQUIRE_STRCASESTR_IMPL=1;LIBACQUIRE_STRERRORLEN_IMPL=1;STRNSTR_IMPL=1"
271+ )
272+ endif ()
231273 elseif (src MATCHES "/gen_acquire_url_utils.c$" )
232274 set_source_files_properties (
233275 ${src} PROPERTIES
@@ -260,7 +302,7 @@ else ()
260302 )
261303 list (APPEND impls "LIBACQUIRE_DOWNLOAD_DIR_IMPL" "LIBACQUIRE_DOWNLOAD_IMPL" "LIBACQUIRE_USE_LIBFETCH" )
262304 endif (NOT ("LIBACQUIRE_DOWNLOAD_DIR_IMPL" IN_LIST impls))
263- elseif (src MATCHES "/gen_acquire_libwininet .c$" )
305+ elseif (src MATCHES "/gen_acquire_wininet .c$" )
264306 if (NOT ("LIBACQUIRE_DOWNLOAD_DIR_IMPL" IN_LIST impls))
265307 set_source_files_properties (
266308 ${src} PROPERTIES
@@ -288,10 +330,19 @@ else ()
288330 elseif (LIBACQUIRE_USE_LIBARCHIVE)
289331 set_source_files_properties (${src} PROPERTIES
290332 COMPILE_DEFINITIONS "LIBACQUIRE_IMPLEMENTATION=1;LIBACQUIRE_EXTRACT_IMPL=1;LIBACQUIRE_USE_LIBARCHIVE=1" )
333+ elseif (LIBACQUIRE_USE_WINCOMPRESSAPI)
334+ set_source_files_properties (${src} PROPERTIES
335+ COMPILE_DEFINITIONS "LIBACQUIRE_IMPLEMENTATION=1;LIBACQUIRE_EXTRACT_IMPL=1;LIBACQUIRE_USE_WINCOMPRESSAPI=1" )
291336 else ()
292337 set_source_files_properties (${src} PROPERTIES
293338 COMPILE_DEFINITIONS "LIBACQUIRE_IMPLEMENTATION=1;LIBACQUIRE_EXTRACT_IMPL=1" )
294339 endif ()
340+ elseif (src MATCHES "/gen_acquire_crc32c.c$" )
341+ if (LIBACQUIRE_USE_WINCOMPRESSAPI)
342+ set_source_files_properties (${src} PROPERTIES
343+ COMPILE_DEFINITIONS "LIBACQUIRE_IMPLEMENTATION=1;LIBACQUIRE_EXTRACT_IMPL=1;LIBACQUIRE_USE_CRC32C=1;LIBACQUIRE_ACQUIRE_CRC32C_IMPL=1" )
344+ endif (LIBACQUIRE_USE_WINCOMPRESSAPI)
345+
295346 ############
296347 # Fallback #
297348 ############
@@ -346,6 +397,9 @@ else ()
346397 #)
347398 endif (WIN32 )
348399
400+ ######################
401+ # Checksum libraries #
402+ ######################
349403 if (DEFINED CHECKSUM_LIBRARIES)
350404 message (STATUS "[libacquire] Using var ${CHECKSUM_LIBRARIES} for checksums" )
351405 target_link_libraries ("${LIBRARY_NAME} " PUBLIC "${CHECKSUM_LIBRARIES} " )
@@ -372,19 +426,31 @@ else ()
372426 message (FATAL_ERROR "No checksum implementation selected: define `LIBACQUIRE_USE_LIBRHASH` or `LIBACQUIRE_USE_CRC32C`" )
373427 endif ()
374428
429+ ##############
430+ # Extraction #
431+ ##############
375432 if (LIBACQUIRE_USE_MINIZ)
376433 find_package (kubazip CONFIG REQUIRED)
377434 target_compile_definitions ("${LIBRARY_NAME} " PRIVATE LIBACQUIRE_USE_MINIZ=1)
378435 target_link_libraries ("${LIBRARY_NAME} " PRIVATE kubazip::kubazip)
379436 elseif (LIBACQUIRE_USE_LIBARCHIVE)
380437 target_compile_definitions ("${LIBRARY_NAME} " PRIVATE LIBACQUIRE_USE_LIBARCHIVE=1)
381438 target_link_libraries ("${LIBRARY_NAME} " PRIVATE "${LibArchive_LIBRARIES} " )
439+ elseif (LIBACQUIRE_USE_WINCOMPRESSAPI)
440+ target_compile_definitions ("${LIBRARY_NAME} " PRIVATE LIBACQUIRE_USE_WINCOMPRESSAPI=1)
441+ # "Compress.lib"
442+ target_link_libraries ("${LIBRARY_NAME} " PRIVATE "Kernel32.lib" "Cabinet" )
382443 else ()
383444 message (FATAL_ERROR "No unarchive implementation selected: define `LIBACQUIRE_USE_LIBARCHIVE` or `LIBACQUIRE_USE_MINIZ`" )
384445 endif ()
385446
447+ ##############
448+ # Networking #
449+ ##############
450+ target_link_libraries ("${LIBRARY_NAME} " PRIVATE "${NETWORK_LIB_LINK} " )
451+ # NETWORK_LIB "acquire_libfetch.h"
452+
386453 if (NOT BSD)
387- find_package (LibBSD)
388454 if (LibBSD_FOUND)
389455 target_link_libraries ("${LIBRARY_NAME} " PUBLIC LibBSD::LibBSD)
390456 target_compile_definitions (
0 commit comments