shithub: opusfile

Download patch

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
--