@@ -173,6 +173,31 @@ ExternalProject_Add(
173
173
)
174
174
set (LIBIDN2_STATIC_LIB ${LIBIDN2_INSTALL_DIR} /lib/libidn2.a )
175
175
176
+ # Install librtmp only if using OpenSSL
177
+ if (TARGET openssl_external )
178
+ set (LIBRTMP_URL git://git.ffmpeg.org/rtmpdump )
179
+ set (LIBRTMP_INSTALL_DIR ${CMAKE_BINARY_DIR} /librtmp-install )
180
+
181
+ ExternalProject_Add (
182
+ librtmp_external
183
+ GIT_REPOSITORY ${LIBRTMP_URL}
184
+ GIT_SHALLOW 1
185
+ PREFIX ${CMAKE_BINARY_DIR} /librtmp
186
+ SOURCE_SUBDIR librtmp
187
+ CONFIGURE_COMMAND ""
188
+ BUILD_COMMAND ${CMAKE_SOURCE_DIR} /scripts/build_rtmp.sh <SOURCE_DIR> ${LIBRTMP_INSTALL_DIR} ${OPENSSL_INSTALL_DIR} ${ZLIB_INSTALL_DIR}
189
+ INSTALL_COMMAND $ (MAKE ) prefix =${LIBRTMP_INSTALL_DIR} SHARED= install
190
+ BUILD_IN_SOURCE 1
191
+ DOWNLOAD_EXTRACT_TIMESTAMP TRUE
192
+ )
193
+ set (LIBRTMP_STATIC_LIB ${LIBRTMP_INSTALL_DIR} /lib/librtmp.a )
194
+ set (LIBRTMP_DEP librtmp_external )
195
+ else ()
196
+ message (STATUS "Not building librtmp as OpenSSL is not enabled" )
197
+ set (LIBRTMP_STATIC_LIB "" )
198
+ set (LIBRTMP_DEP "" )
199
+ endif ()
200
+
176
201
# Install GDB if GDBMODE is set
177
202
set (GDB_VERSION 13.2 )
178
203
set (GDB_URL https://ftp.gnu.org/gnu/gdb/gdb-${GDB_VERSION}.tar.gz )
@@ -203,6 +228,7 @@ add_custom_target(deps
203
228
nghttp2_external
204
229
zstd_external
205
230
libidn2_external
231
+ ${LIBRTMP_DEP}
206
232
${GDB_DEP}
207
233
)
208
234
@@ -236,6 +262,7 @@ set(CURL_CONFIGURE_COMMAND
236
262
--with-nghttp2=${NGHTTP2_INSTALL_DIR}
237
263
--with-zstd=${ZSTD_INSTALL_DIR}
238
264
--with-libidn2=${LIBIDN2_INSTALL_DIR}
265
+ --with-librtmp=${LIBRTMP_INSTALL_DIR}
239
266
)
240
267
241
268
set (CURL_POST_INSTALL_COMMAND
@@ -260,6 +287,8 @@ if (DEFINED ENV{CURL_SOURCE_DIR})
260
287
BUILD_IN_SOURCE 1
261
288
)
262
289
else ()
290
+ # Use the tag from curl-container as it's semver and reasonably up to date.
291
+ # renovate: datasource=github-tags depName=curl/curl-container
263
292
set (CURL_VERSION 8.14.1 )
264
293
message (STATUS "Building curl from downloaded source, version ${CURL_VERSION} " )
265
294
# The URL needs dots replaced with underscores for curl's release naming convention.
@@ -285,6 +314,7 @@ set(CURL_DEPS
285
314
zlib_external
286
315
zstd_external
287
316
libidn2_external
317
+ ${LIBRTMP_DEP}
288
318
)
289
319
290
320
# Add dependencies for curl
@@ -330,6 +360,7 @@ set(COMMON_FLAGS -g -DCURL_DISABLE_DEPRECATION)
330
360
set (COMMON_LINK_LIBS
331
361
${CURL_LIB_DIR} /libcurl.a
332
362
${NGHTTP2_STATIC_LIB}
363
+ ${LIBRTMP_STATIC_LIB}
333
364
${OPENSSL_STATIC_LIB}
334
365
${ZLIB_STATIC_LIB}
335
366
${ZSTD_STATIC_LIB}
@@ -364,35 +395,27 @@ add_curl_fuzzer(curl_fuzzer_https HTTPS)
364
395
add_curl_fuzzer (curl_fuzzer_imap IMAP )
365
396
add_curl_fuzzer (curl_fuzzer_mqtt MQTT )
366
397
add_curl_fuzzer (curl_fuzzer_pop3 POP3 )
398
+ add_curl_fuzzer (curl_fuzzer_rtmp RTMP )
367
399
add_curl_fuzzer (curl_fuzzer_rtsp RTSP )
368
400
add_curl_fuzzer (curl_fuzzer_smb SMB )
369
401
add_curl_fuzzer (curl_fuzzer_smtp SMTP )
370
402
add_curl_fuzzer (curl_fuzzer_tftp TFTP )
371
403
add_curl_fuzzer (curl_fuzzer_ws WS )
372
404
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} )
405
+ # Helper macro to define a fuzzer target with source files
406
+ macro (add_curl_fuzzer_sources name sources )
407
+ add_executable (${name} ${sources} )
408
+ target_compile_options (${name} PRIVATE ${COMMON_FLAGS} )
409
+ target_include_directories (${name} PRIVATE ${CURL_INCLUDE_DIRS} )
410
+ target_link_libraries (${name} PRIVATE ${COMMON_LINK_LIBS} )
411
+ target_link_options (${name} PRIVATE ${COMMON_LINK_OPTIONS} )
412
+ add_dependencies (${name} ${FUZZ_DEPS} )
413
+ endmacro ()
414
+
415
+ # Add single file fuzzers
416
+ add_curl_fuzzer_sources (curl_fuzzer_bufq fuzz_bufq.cc )
417
+ add_curl_fuzzer_sources (fuzz_url fuzz_url.cc )
418
+ add_curl_fuzzer_sources (curl_fuzzer_fnmatch fuzz_fnmatch.cc )
396
419
397
420
# Create a custom target for all fuzzers
398
421
add_custom_target (fuzz
@@ -407,6 +430,7 @@ add_custom_target(fuzz
407
430
curl_fuzzer_imap
408
431
curl_fuzzer_mqtt
409
432
curl_fuzzer_pop3
433
+ curl_fuzzer_rtmp
410
434
curl_fuzzer_rtsp
411
435
curl_fuzzer_smb
412
436
curl_fuzzer_smtp
0 commit comments