@@ -77,6 +77,8 @@ if(NOT (DEFINED ENV{SANITIZER} AND "$ENV{SANITIZER}" STREQUAL "memory"))
77
77
-DPEDANTIC
78
78
-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
79
79
no -shared
80
+ no -docs
81
+ no -tests
80
82
${OPENSSL_ASM_FLAG}
81
83
enable-tls1_3
82
84
enable-rc5
@@ -173,6 +175,33 @@ ExternalProject_Add(
173
175
)
174
176
set (LIBIDN2_STATIC_LIB ${LIBIDN2_INSTALL_DIR} /lib/libidn2.a )
175
177
178
+ # Install librtmp only if using OpenSSL
179
+ if (TARGET openssl_external )
180
+ set (LIBRTMP_URL git://git.ffmpeg.org/rtmpdump )
181
+ set (LIBRTMP_INSTALL_DIR ${CMAKE_BINARY_DIR} /librtmp-install )
182
+
183
+ ExternalProject_Add (
184
+ librtmp_external
185
+ GIT_REPOSITORY ${LIBRTMP_URL}
186
+ GIT_SHALLOW 1
187
+ PREFIX ${CMAKE_BINARY_DIR} /librtmp
188
+ SOURCE_SUBDIR librtmp
189
+ CONFIGURE_COMMAND ""
190
+ BUILD_COMMAND ${CMAKE_SOURCE_DIR} /scripts/build_rtmp.sh <SOURCE_DIR> ${LIBRTMP_INSTALL_DIR} ${OPENSSL_INSTALL_DIR} ${ZLIB_INSTALL_DIR}
191
+ INSTALL_COMMAND $ (MAKE ) prefix =${LIBRTMP_INSTALL_DIR} SHARED= install
192
+ BUILD_IN_SOURCE 1
193
+ DOWNLOAD_EXTRACT_TIMESTAMP TRUE
194
+ )
195
+ set (LIBRTMP_STATIC_LIB ${LIBRTMP_INSTALL_DIR} /lib/librtmp.a )
196
+ set (LIBRTMP_DEP librtmp_external )
197
+ set (CURL_LIBRTMP_OPTION --with-librtmp=${LIBRTMP_INSTALL_DIR} )
198
+ else ()
199
+ message (STATUS "Not building librtmp as OpenSSL is not enabled" )
200
+ set (LIBRTMP_STATIC_LIB "" )
201
+ set (LIBRTMP_DEP "" )
202
+ set (CURL_LIBRTMP_OPTION --without-librtmp )
203
+ endif ()
204
+
176
205
# Install GDB if GDBMODE is set
177
206
set (GDB_VERSION 13.2 )
178
207
set (GDB_URL https://ftp.gnu.org/gnu/gdb/gdb-${GDB_VERSION}.tar.gz )
@@ -203,6 +232,7 @@ add_custom_target(deps
203
232
nghttp2_external
204
233
zstd_external
205
234
libidn2_external
235
+ ${LIBRTMP_DEP}
206
236
${GDB_DEP}
207
237
)
208
238
@@ -236,6 +266,7 @@ set(CURL_CONFIGURE_COMMAND
236
266
--with-nghttp2=${NGHTTP2_INSTALL_DIR}
237
267
--with-zstd=${ZSTD_INSTALL_DIR}
238
268
--with-libidn2=${LIBIDN2_INSTALL_DIR}
269
+ ${CURL_LIBRTMP_OPTION}
239
270
)
240
271
241
272
set (CURL_POST_INSTALL_COMMAND
@@ -260,6 +291,8 @@ if (DEFINED ENV{CURL_SOURCE_DIR})
260
291
BUILD_IN_SOURCE 1
261
292
)
262
293
else ()
294
+ # Use the tag from curl-container as it's semver and reasonably up to date.
295
+ # renovate: datasource=github-tags depName=curl/curl-container
263
296
set (CURL_VERSION 8.14.1 )
264
297
message (STATUS "Building curl from downloaded source, version ${CURL_VERSION} " )
265
298
# The URL needs dots replaced with underscores for curl's release naming convention.
@@ -285,6 +318,7 @@ set(CURL_DEPS
285
318
zlib_external
286
319
zstd_external
287
320
libidn2_external
321
+ ${LIBRTMP_DEP}
288
322
)
289
323
290
324
# Add dependencies for curl
@@ -330,6 +364,7 @@ set(COMMON_FLAGS -g -DCURL_DISABLE_DEPRECATION)
330
364
set (COMMON_LINK_LIBS
331
365
${CURL_LIB_DIR} /libcurl.a
332
366
${NGHTTP2_STATIC_LIB}
367
+ ${LIBRTMP_STATIC_LIB}
333
368
${OPENSSL_STATIC_LIB}
334
369
${ZLIB_STATIC_LIB}
335
370
${ZSTD_STATIC_LIB}
@@ -364,35 +399,27 @@ add_curl_fuzzer(curl_fuzzer_https HTTPS)
364
399
add_curl_fuzzer (curl_fuzzer_imap IMAP )
365
400
add_curl_fuzzer (curl_fuzzer_mqtt MQTT )
366
401
add_curl_fuzzer (curl_fuzzer_pop3 POP3 )
402
+ add_curl_fuzzer (curl_fuzzer_rtmp RTMP )
367
403
add_curl_fuzzer (curl_fuzzer_rtsp RTSP )
368
404
add_curl_fuzzer (curl_fuzzer_smb SMB )
369
405
add_curl_fuzzer (curl_fuzzer_smtp SMTP )
370
406
add_curl_fuzzer (curl_fuzzer_tftp TFTP )
371
407
add_curl_fuzzer (curl_fuzzer_ws WS )
372
408
373
- # BUFQ fuzzer
374
- add_executable (curl_fuzzer_bufq fuzz_bufq.cc )
375
- target_compile_options (curl_fuzzer_bufq PRIVATE ${COMMON_FLAGS} )
376
- target_include_directories (curl_fuzzer_bufq PRIVATE ${CURL_INCLUDE_DIRS} )
377
- target_link_libraries (curl_fuzzer_bufq PRIVATE ${COMMON_LINK_LIBS} )
378
- target_link_options (curl_fuzzer_bufq PRIVATE ${COMMON_LINK_OPTIONS} )
379
- add_dependencies (curl_fuzzer_bufq ${FUZZ_DEPS} )
380
-
381
- # URL fuzzer
382
- add_executable (fuzz_url fuzz_url.cc )
383
- target_compile_options (fuzz_url PRIVATE ${COMMON_FLAGS} )
384
- target_include_directories (fuzz_url PRIVATE ${CURL_INCLUDE_DIRS} )
385
- target_link_libraries (fuzz_url PRIVATE ${COMMON_LINK_LIBS} )
386
- target_link_options (fuzz_url PRIVATE ${COMMON_LINK_OPTIONS} )
387
- add_dependencies (fuzz_url ${FUZZ_DEPS} )
388
-
389
- # Unit test fuzzer
390
- add_executable (curl_fuzzer_fnmatch fuzz_fnmatch.cc )
391
- target_compile_options (curl_fuzzer_fnmatch PRIVATE ${COMMON_FLAGS} )
392
- target_include_directories (curl_fuzzer_fnmatch PRIVATE ${CURL_INCLUDE_DIRS} )
393
- target_link_libraries (curl_fuzzer_fnmatch PRIVATE ${COMMON_LINK_LIBS} )
394
- target_link_options (curl_fuzzer_fnmatch PRIVATE ${COMMON_LINK_OPTIONS} )
395
- add_dependencies (curl_fuzzer_fnmatch ${FUZZ_DEPS} )
409
+ # Helper macro to define a fuzzer target with source files
410
+ macro (add_curl_fuzzer_sources name sources )
411
+ add_executable (${name} ${sources} )
412
+ target_compile_options (${name} PRIVATE ${COMMON_FLAGS} )
413
+ target_include_directories (${name} PRIVATE ${CURL_INCLUDE_DIRS} )
414
+ target_link_libraries (${name} PRIVATE ${COMMON_LINK_LIBS} )
415
+ target_link_options (${name} PRIVATE ${COMMON_LINK_OPTIONS} )
416
+ add_dependencies (${name} ${FUZZ_DEPS} )
417
+ endmacro ()
418
+
419
+ # Add single file fuzzers
420
+ add_curl_fuzzer_sources (curl_fuzzer_bufq fuzz_bufq.cc )
421
+ add_curl_fuzzer_sources (fuzz_url fuzz_url.cc )
422
+ add_curl_fuzzer_sources (curl_fuzzer_fnmatch fuzz_fnmatch.cc )
396
423
397
424
# Create a custom target for all fuzzers
398
425
add_custom_target (fuzz
@@ -407,6 +434,7 @@ add_custom_target(fuzz
407
434
curl_fuzzer_imap
408
435
curl_fuzzer_mqtt
409
436
curl_fuzzer_pop3
437
+ curl_fuzzer_rtmp
410
438
curl_fuzzer_rtsp
411
439
curl_fuzzer_smb
412
440
curl_fuzzer_smtp
0 commit comments