From 51151cb06a33f75e648894989d775027349ecda5 Mon Sep 17 00:00:00 2001 From: Marcin Serwin Date: Sat, 24 May 2025 12:07:54 +0200 Subject: [PATCH] cubeb: add pkg-config generation patch Signed-off-by: Marcin Serwin --- ...cmake-add-pkg-config-file-generation.patch | 208 ++++++++++++++++++ pkgs/by-name/cu/cubeb/package.nix | 17 +- pkgs/by-name/si/signal-desktop/ringrtc.nix | 13 +- 3 files changed, 220 insertions(+), 18 deletions(-) create mode 100644 pkgs/by-name/cu/cubeb/0001-cmake-add-pkg-config-file-generation.patch diff --git a/pkgs/by-name/cu/cubeb/0001-cmake-add-pkg-config-file-generation.patch b/pkgs/by-name/cu/cubeb/0001-cmake-add-pkg-config-file-generation.patch new file mode 100644 index 000000000000..018ec29358f4 --- /dev/null +++ b/pkgs/by-name/cu/cubeb/0001-cmake-add-pkg-config-file-generation.patch @@ -0,0 +1,208 @@ +From e0cbc1049b9a3a3322cd48d32af148f87d5007c2 Mon Sep 17 00:00:00 2001 +From: Marcin Serwin +Date: Mon, 19 May 2025 22:36:53 +0200 +Subject: [PATCH] cmake: add pkg-config file generation + +Signed-off-by: Marcin Serwin +--- + CMakeLists.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + libcubeb.pc.in | 12 ++++++++++++ + 2 files changed, 62 insertions(+) + create mode 100644 libcubeb.pc.in + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 07618fa..6470837 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -23,6 +23,17 @@ if(NOT CMAKE_BUILD_TYPE) + "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) + endif() + ++set(private_requires) ++set(private_libs) ++set(private_libs_flags) ++if(UNIX AND NOT APPLE) ++ if(BSD OR ANDROID) ++ list(APPEND private_libs c++) ++ else() ++ list(APPEND private_libs stdc++) ++ endif() ++endif() ++ + set(CMAKE_C_STANDARD 99) + set(CMAKE_CXX_STANDARD 17) + set(CMAKE_CXX_STANDARD_REQUIRED ON) +@@ -141,6 +152,7 @@ if(NOT BUNDLE_SPEEX) + pkg_check_modules(speexdsp IMPORTED_TARGET speexdsp) + if(speexdsp_FOUND) + add_library(speex ALIAS PkgConfig::speexdsp) ++ list(APPEND private_requires speexdsp) + endif() + endif() + endif() +@@ -155,6 +167,7 @@ if(NOT TARGET speex) + EXPORT= + RANDOM_PREFIX=speex + ) ++ list(APPEND private_libs speex) + endif() + + # $ required because of https://gitlab.kitware.com/cmake/cmake/-/issues/15415 +@@ -166,6 +179,7 @@ include(CheckIncludeFiles) + set(THREADS_PREFER_PTHREAD_FLAG ON) + find_package(Threads) + target_link_libraries(cubeb PRIVATE Threads::Threads) ++list(APPEND private_libs ${CMAKE_THREAD_LIBS_INIT}) + + if(LAZY_LOAD_LIBS) + check_include_files(pulse/pulseaudio.h USE_PULSE) +@@ -176,6 +190,7 @@ if(LAZY_LOAD_LIBS) + + if(USE_PULSE OR USE_ALSA OR USE_JACK OR USE_SNDIO OR USE_AAUDIO) + target_link_libraries(cubeb PRIVATE ${CMAKE_DL_LIBS}) ++ list(APPEND private_libs ${CMAKE_DL_LIBS}) + + if(ANDROID) + target_compile_definitions(cubeb PRIVATE __ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__) +@@ -191,6 +206,7 @@ else() + set(USE_PULSE ON) + target_compile_definitions(cubeb PRIVATE DISABLE_LIBPULSE_DLOPEN) + target_link_libraries(cubeb PRIVATE PkgConfig::libpulse) ++ list(APPEND private_requires libpulse) + endif() + + pkg_check_modules(alsa IMPORTED_TARGET alsa) +@@ -198,6 +214,7 @@ else() + set(USE_ALSA ON) + target_compile_definitions(cubeb PRIVATE DISABLE_LIBASOUND_DLOPEN) + target_link_libraries(cubeb PRIVATE PkgConfig::alsa) ++ list(APPEND private_requires alsa) + endif() + + pkg_check_modules(jack IMPORTED_TARGET jack) +@@ -205,18 +222,21 @@ else() + set(USE_JACK ON) + target_compile_definitions(cubeb PRIVATE DISABLE_LIBJACK_DLOPEN) + target_link_libraries(cubeb PRIVATE PkgConfig::jack) ++ list(APPEND private_requires jack) + endif() + + check_include_files(sndio.h USE_SNDIO) + if(USE_SNDIO) + target_compile_definitions(cubeb PRIVATE DISABLE_LIBSNDIO_DLOPEN) + target_link_libraries(cubeb PRIVATE sndio) ++ list(APPEND private_libs sndio) + endif() + + check_include_files(aaudio/AAudio.h USE_AAUDIO) + if(USE_AAUDIO) + target_compile_definitions(cubeb PRIVATE DISABLE_LIBAAUDIO_DLOPEN) + target_link_libraries(cubeb PRIVATE aaudio) ++ list(APPEND private_libs aaudio) + endif() + endif() + +@@ -263,6 +283,7 @@ if(USE_AUDIOUNIT) + src/cubeb_osx_run_loop.cpp) + target_compile_definitions(cubeb PRIVATE USE_AUDIOUNIT) + target_link_libraries(cubeb PRIVATE "-framework AudioUnit" "-framework CoreAudio" "-framework CoreServices") ++ list(APPEND private_libs_flags "-framework AudioUnit" "-framework CoreAudio" "-framework CoreServices") + endif() + + check_include_files(audioclient.h USE_WASAPI) +@@ -271,6 +292,7 @@ if(USE_WASAPI) + src/cubeb_wasapi.cpp) + target_compile_definitions(cubeb PRIVATE USE_WASAPI) + target_link_libraries(cubeb PRIVATE avrt ole32 ksuser) ++ list(APPEND private_libs avrt ole32 ksuser) + endif() + + check_include_files("windows.h;mmsystem.h" USE_WINMM) +@@ -279,6 +301,7 @@ if(USE_WINMM) + src/cubeb_winmm.c) + target_compile_definitions(cubeb PRIVATE USE_WINMM) + target_link_libraries(cubeb PRIVATE winmm) ++ list(APPEND private_libs winmm) + endif() + + check_include_files(SLES/OpenSLES.h USE_OPENSL) +@@ -288,6 +311,7 @@ if(USE_OPENSL) + src/cubeb-jni.cpp) + target_compile_definitions(cubeb PRIVATE USE_OPENSL) + target_link_libraries(cubeb PRIVATE OpenSLES) ++ list(APPEND private_libs OpenSLES) + endif() + + check_include_files(sys/soundcard.h HAVE_SYS_SOUNDCARD_H) +@@ -303,6 +327,7 @@ if(HAVE_SYS_SOUNDCARD_H) + pkg_check_modules(libbsd-overlay IMPORTED_TARGET libbsd-overlay) + if(libbsd-overlay_FOUND) + target_link_libraries(cubeb PRIVATE PkgConfig::libbsd-overlay) ++ list(APPEND private_requires libbsd-overlay) + set(HAVE_STRLCPY true) + endif() + endif() +@@ -320,6 +345,7 @@ if(USE_AUDIOTRACK) + src/cubeb_audiotrack.c) + target_compile_definitions(cubeb PRIVATE USE_AUDIOTRACK) + target_link_libraries(cubeb PRIVATE log) ++ list(APPEND private_libs log) + endif() + + check_include_files(sys/audioio.h USE_SUN) +@@ -335,6 +361,7 @@ if(USE_KAI) + src/cubeb_kai.c) + target_compile_definitions(cubeb PRIVATE USE_KAI) + target_link_libraries(cubeb PRIVATE kai) ++ list(APPEND private_libs kai) + endif() + + if(USE_PULSE AND USE_PULSE_RUST) +@@ -452,3 +479,26 @@ add_custom_target(clang-format-check + | xargs -0 ${CLANG_FORMAT_BINARY} -Werror -n + COMMENT "Check formatting with clang-format" + VERBATIM) ++ ++ ++list(TRANSFORM private_libs PREPEND "-l") ++string(JOIN " " CUBEB_PC_PRIVATE_LIBS ${private_libs} ${private_libs_flags}) ++ ++string(JOIN " " CUBEB_PC_PRIVATE_REQUIRES ${private_requires}) ++ ++if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}") ++ set(CUBEB_PC_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}") ++else() ++ set(CUBEB_PC_INCLUDEDIR "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") ++endif() ++if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}") ++ set(CUBEB_PC_LIBDIR "${CMAKE_INSTALL_LIBDIR}") ++else() ++ set(CUBEB_PC_LIBDIR "\${prefix}/${CMAKE_INSTALL_LIBDIR}") ++endif() ++ ++configure_file(libcubeb.pc.in libcubeb.pc @ONLY) ++install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libcubeb.pc" ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig ++) ++ +diff --git a/libcubeb.pc.in b/libcubeb.pc.in +new file mode 100644 +index 0000000..2310ae6 +--- /dev/null ++++ b/libcubeb.pc.in +@@ -0,0 +1,12 @@ ++prefix=@CMAKE_INSTALL_PREFIX@ ++exec_prefix=${prefix} ++libdir=@CUBEB_PC_LIBDIR@ ++includedir=@CUBEB_PC_INCLUDEDIR@ ++ ++Name: libcubeb ++Description: Cross platform audio library ++Version: @PROJECT_VERSION@ ++Requires.private: @CUBEB_PC_PRIVATE_REQUIRES@ ++Libs: -L${libdir} -lcubeb ++Libs.private: @CUBEB_PC_PRIVATE_LIBS@ ++Cflags: -I${includedir} +-- +2.49.0 + diff --git a/pkgs/by-name/cu/cubeb/package.nix b/pkgs/by-name/cu/cubeb/package.nix index f7fbe0c796f3..d305471b51d4 100644 --- a/pkgs/by-name/cu/cubeb/package.nix +++ b/pkgs/by-name/cu/cubeb/package.nix @@ -48,6 +48,11 @@ stdenv.mkDerivation { buildInputs = [ speexdsp ] ++ lib.optionals (!stdenv.hostPlatform.isDarwin) backendLibs; + patches = [ + # https://github.com/mozilla/cubeb/pull/813 + ./0001-cmake-add-pkg-config-file-generation.patch + ]; + cmakeFlags = [ (lib.cmakeBool "BUILD_SHARED_LIBS" buildSharedLibs) "-DBUILD_TESTS=OFF" # tests require an audio server @@ -64,18 +69,6 @@ stdenv.mkDerivation { updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; }; - postInstall = '' - # TODO: remove after https://github.com/mozilla/cubeb/pull/813 is merged - mkdir -p $out/lib/pkgconfig/ - echo > $out/lib/pkgconfig/libcubeb.pc \ - "Name: libcubeb - Description: Cross platform audio library - Version: 0.0.0 - Requires.private: libpulse - Libs: -L"$out/lib" -lcubeb - Libs.private: -lstdc++" - ''; - meta = with lib; { description = "Cross platform audio library"; mainProgram = "cubeb-test"; diff --git a/pkgs/by-name/si/signal-desktop/ringrtc.nix b/pkgs/by-name/si/signal-desktop/ringrtc.nix index 9c2cb97be71c..598856fd35a2 100644 --- a/pkgs/by-name/si/signal-desktop/ringrtc.nix +++ b/pkgs/by-name/si/signal-desktop/ringrtc.nix @@ -7,7 +7,6 @@ webrtc, pkg-config, cubeb, - libpulseaudio, }: let cubeb' = cubeb.override { @@ -49,11 +48,13 @@ rustPlatform.buildRustPackage (finalAttrs: { cmake pkg-config ]; - buildInputs = [ - webrtc - cubeb' - libpulseaudio - ]; + buildInputs = + [ + webrtc + cubeb' + ] + # Workaround for https://github.com/NixOS/nixpkgs/pull/394607 + ++ cubeb'.buildInputs; meta = { homepage = "https://github.com/signalapp/ringrtc";