Skip to content

Commit a7e8faa

Browse files
committed
[acquire/acquire_wincompressapi.h] New impl of Windows API ; [acquire/acquire_{wincrypt,wininet}.h] Improve Windows API wrappers ; [**CMakeLists.txt] Improve handling of Windows (until build succeeds on Windows with MSVC)
1 parent 88e47b2 commit a7e8faa

12 files changed

+458
-69
lines changed

acquire/CMakeLists.txt

Lines changed: 86 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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(

acquire/acquire_config.h.in

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,21 @@
2222

2323
/* Networking library */
2424

25-
#cmakedefine LIBACQUIRE_USE_WININET 1
26-
2725
#cmakedefine LIBACQUIRE_USE_LIBCURL 1
2826

2927
#cmakedefine LIBACQUIRE_USE_LIBFETCH 1
3028

29+
#cmakedefine LIBACQUIRE_USE_WININET 1
30+
3131
/* Extraction API */
3232

33-
#cmakedefine LIBACQUIRE_USE_WINCOMPRESSAPI 1
33+
#cmakedefine LIBACQUIRE_USE_LIBARCHIVE 1
3434

35-
#cmakedefine USE_LIBEXTRACT 1
35+
#cmakedefine LIBACQUIRE_USE_MINIZ 1
3636

3737
#cmakedefine LIBACQUIRE_USE_ZLIB 1
3838

39-
#cmakedefine LIBACQUIRE_USE_MINIZ 1
39+
#cmakedefine LIBACQUIRE_USE_WINCOMPRESSAPI 1
4040

4141
#define EXTRACT_LIB "@EXTRACT_LIB@"
4242

0 commit comments

Comments
 (0)