ref: 4147f3afe8d9a9801d87713a544faa81d526e239
parent: 24d6e752b8c8c82e46231c74b0e4146b3d189216
author: Ralph Giles <giles@thaumas.net>
date: Thu Aug 7 17:18:04 EDT 2025
cmake: Fix disabling http support The cmake build has an option to conditionally disable network support. Similar to `./configure --disable-http` one can say cmake -B _build -D OP_DISABLE_HTTP=YES && cmake --build _build Unfortunately this worked by disabling `libopusurl` completely, which made building the examples fail. The url library can still be used to load local files or `file://` urls even when `http(s)://` support is disabled. Instead, always build the `opusurl` library like the autotools build does, and instead make the `OP_ENABLE_HTTP` pre-processor define and the `openssl` link library conditional on the cmake option.
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -120,72 +120,72 @@
endif()
endif()
cmake_pop_check_state()
+endif()
- add_library(opusurl
- "${CMAKE_CURRENT_SOURCE_DIR}/include/opusfile.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/http.c"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/internal.c"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/internal.h"
+add_library(opusurl
+ "${CMAKE_CURRENT_SOURCE_DIR}/include/opusfile.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/http.c"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/internal.c"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/internal.h"
+)
+add_library(OpusFile::opusurl ALIAS opusurl)
+if(WIN32)
+ target_sources(opusurl PRIVATE
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/wincerts.c"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/winerrno.h"
)
- add_library(OpusFile::opusurl ALIAS opusurl)
- if(WIN32)
- target_sources(opusurl PRIVATE
- "${CMAKE_CURRENT_SOURCE_DIR}/src/wincerts.c"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/winerrno.h"
- )
- endif()
- set_target_properties(opusurl PROPERTIES
- PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/opusfile.h"
- VERSION ${PROJECT_VERSION}
- SOVERSION ${PROJECT_VERSION_MAJOR}
- )
- target_include_directories(opusurl
- PRIVATE
- "${CMAKE_CURRENT_SOURCE_DIR}/include"
- INTERFACE
- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
- $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/opus>
- )
- target_compile_definitions(opusurl
- PRIVATE
- $<$<BOOL:${OP_DISABLE_FLOAT_API}>:OP_DISABLE_FLOAT_API>
- $<$<BOOL:${OP_FIXED_POINT}>:OP_FIXED_POINT>
- $<$<BOOL:${OP_ENABLE_ASSERTIONS}>:OP_ENABLE_ASSERTIONS>
- $<$<BOOL:${OP_HAVE_LRINTF}>:OP_HAVE_LRINTF>
- $<$<BOOL:${OP_HAVE_CLOCK_GETTIME}>:OP_HAVE_CLOCK_GETTIME>
- $<$<BOOL:${OP_HAVE_FTIME}>:OP_HAVE_FTIME>
- OP_ENABLE_HTTP
- )
- target_link_libraries(opusurl
- PRIVATE
- opusfile
- OpenSSL::SSL
- $<$<C_COMPILER_ID:MSVC>:ws2_32>
- $<$<C_COMPILER_ID:MSVC>:crypt32>
- $<$<BOOL:${OP_HAVE_LIBM}>:m>
- )
- target_compile_options(opusurl
- PRIVATE
- $<$<C_COMPILER_ID:MSVC>:/wd4267>
- $<$<C_COMPILER_ID:MSVC>:/wd4244>
- $<$<C_COMPILER_ID:MSVC>:/wd4090>
- $<$<C_COMPILER_ID:Clang,GNU>:-std=c89>
- $<$<C_COMPILER_ID:Clang,GNU>:-pedantic>
- $<$<C_COMPILER_ID:Clang,GNU>:-Wall>
- $<$<C_COMPILER_ID:Clang,GNU>:-Wextra>
- $<$<C_COMPILER_ID:Clang,GNU>:-Wno-parentheses>
- $<$<C_COMPILER_ID:Clang,GNU>:-Wno-long-long>
- $<$<C_COMPILER_ID:Clang,GNU>:-fvisibility=hidden>
- )
- install(TARGETS opusurl
- EXPORT OpusFileTargets
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
- INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/opus"
- PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/opus"
- )
endif()
+set_target_properties(opusurl PROPERTIES
+ PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/opusfile.h"
+ VERSION ${PROJECT_VERSION}
+ SOVERSION ${PROJECT_VERSION_MAJOR}
+)
+target_include_directories(opusurl
+ PRIVATE
+ "${CMAKE_CURRENT_SOURCE_DIR}/include"
+ INTERFACE
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/opus>
+)
+target_compile_definitions(opusurl
+ PRIVATE
+ $<$<BOOL:${OP_DISABLE_FLOAT_API}>:OP_DISABLE_FLOAT_API>
+ $<$<BOOL:${OP_FIXED_POINT}>:OP_FIXED_POINT>
+ $<$<BOOL:${OP_ENABLE_ASSERTIONS}>:OP_ENABLE_ASSERTIONS>
+ $<$<BOOL:${OP_HAVE_LRINTF}>:OP_HAVE_LRINTF>
+ $<$<BOOL:${OP_HAVE_CLOCK_GETTIME}>:OP_HAVE_CLOCK_GETTIME>
+ $<$<BOOL:${OP_HAVE_FTIME}>:OP_HAVE_FTIME>
+ $<$<NOT:$<BOOL:${OP_DISABLE_HTTP}>>:OP_ENABLE_HTTP>
+)
+target_link_libraries(opusurl
+ PRIVATE
+ opusfile
+ $<$<NOT:$<BOOL:${OP_DISABLE_HTTP}>>:OpenSSL::SSL>
+ $<$<C_COMPILER_ID:MSVC>:ws2_32>
+ $<$<C_COMPILER_ID:MSVC>:crypt32>
+ $<$<BOOL:${OP_HAVE_LIBM}>:m>
+)
+target_compile_options(opusurl
+ PRIVATE
+ $<$<C_COMPILER_ID:MSVC>:/wd4267>
+ $<$<C_COMPILER_ID:MSVC>:/wd4244>
+ $<$<C_COMPILER_ID:MSVC>:/wd4090>
+ $<$<C_COMPILER_ID:Clang,GNU>:-std=c89>
+ $<$<C_COMPILER_ID:Clang,GNU>:-pedantic>
+ $<$<C_COMPILER_ID:Clang,GNU>:-Wall>
+ $<$<C_COMPILER_ID:Clang,GNU>:-Wextra>
+ $<$<C_COMPILER_ID:Clang,GNU>:-Wno-parentheses>
+ $<$<C_COMPILER_ID:Clang,GNU>:-Wno-long-long>
+ $<$<C_COMPILER_ID:Clang,GNU>:-fvisibility=hidden>
+)
+install(TARGETS opusurl
+ EXPORT OpusFileTargets
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+ INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/opus"
+ PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/opus"
+)
if(NOT OP_DISABLE_EXAMPLES)
add_executable(opusfile_example
--
⑨