| @@ -4,39 +4,34 @@ on: [push, pull_request] | |||
| env: | |||
| DEBIAN_FRONTEND: noninteractive | |||
| EMSCRIPTEN_VERSION: 3.1.27 | |||
| HOMEBREW_NO_AUTO_UPDATE: 1 | |||
| WITH_LTO: false | |||
| HOMEBREW_NO_INSTALL_CLEANUP: 1 | |||
| jobs: | |||
| macos-11: | |||
| runs-on: macos-11 | |||
| linux: | |||
| strategy: | |||
| matrix: | |||
| include: | |||
| - target: debian:11 | |||
| - target: debian:12 | |||
| - target: ubuntu:18.04 | |||
| - target: ubuntu:20.04 | |||
| - target: ubuntu:22.04 | |||
| runs-on: ubuntu-latest | |||
| container: | |||
| image: ${{ matrix.target }} | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| - name: Set up dependencies | |||
| run: | | |||
| brew install fluid-synth liblo libmagic libsndfile pkg-config pyqt@5 qt@5 sdl2 | |||
| - name: make features | |||
| run: make features | |||
| - name: make | |||
| run: make -j $(sysctl -n hw.logicalcpu) | |||
| ubuntu-20_04: | |||
| runs-on: ubuntu-20.04 | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| - name: Fix GitHub's mess | |||
| run: | | |||
| sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list | |||
| sudo dpkg --add-architecture i386 | |||
| sudo apt-get update -qq | |||
| sudo apt-get install -yqq --allow-downgrades libpcre2-8-0/focal libpcre2-16-0/focal libpcre2-32-0/focal libpcre2-posix2/focal | |||
| - name: Set up dependencies | |||
| run: | | |||
| sudo apt-get install -yqq libasound2-dev libfluidsynth-dev libgl1-mesa-dev liblo-dev libmagic-dev libpulse-dev libsdl2-dev libsndfile1-dev libx11-dev libxcursor-dev libxext-dev libxrandr-dev pkg-config pyqt5-dev-tools qtbase5-dev | |||
| sudo apt-get install -yqq g++-multilib libx11-6:i386 libxext6:i386 | |||
| dpkg --add-architecture i386 | |||
| apt-get update -qq | |||
| apt-get install -yqq g++-multilib libasound2-dev libfluidsynth-dev libgl1-mesa-dev liblo-dev libmagic-dev libpulse-dev libsdl2-dev libsndfile1-dev libx11-dev libxcursor-dev libxext-dev libxrandr-dev make pkg-config pyqt5-dev-tools qtbase5-dev | |||
| apt-get install -yqq libx11-6:i386 libxext6:i386 | |||
| # Fix 32bit bridge build | |||
| sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so | |||
| sudo ln -s /usr/lib/i386-linux-gnu/libXext.so.6 /usr/lib/i386-linux-gnu/libXext.so | |||
| ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so | |||
| ln -s /usr/lib/i386-linux-gnu/libXext.so.6 /usr/lib/i386-linux-gnu/libXext.so | |||
| - name: make features | |||
| run: make features | |||
| - name: make | |||
| @@ -44,34 +39,27 @@ jobs: | |||
| - name: make posix32 | |||
| run: make posix32 -j $(nproc) | |||
| ubuntu-22_04: | |||
| runs-on: ubuntu-22.04 | |||
| macos: | |||
| strategy: | |||
| matrix: | |||
| include: | |||
| #- target: macos-11 | |||
| - target: macos-12 | |||
| runs-on: ${{ matrix.target }} | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| - name: Fix GitHub's mess | |||
| run: | | |||
| sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list | |||
| sudo dpkg --add-architecture i386 | |||
| sudo apt-get update -qq | |||
| sudo apt-get install -yqq --allow-downgrades libc6:i386 libgcc-s1:i386 libstdc++6:i386 | |||
| with: | |||
| submodules: recursive | |||
| - name: Set up dependencies | |||
| run: | | |||
| sudo apt-get install -yqq libasound2-dev libfluidsynth-dev libgl1-mesa-dev liblo-dev libmagic-dev libpulse-dev libsdl2-dev libsndfile1-dev libx11-dev libxcursor-dev libxext-dev libxrandr-dev pkg-config pyqt5-dev-tools qtbase5-dev | |||
| sudo apt-get install -yqq g++-multilib libx11-6:i386 libxext6:i386 | |||
| # Fix 32bit bridge build | |||
| sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so | |||
| sudo ln -s /usr/lib/i386-linux-gnu/libXext.so.6 /usr/lib/i386-linux-gnu/libXext.so | |||
| brew install fluid-synth liblo libmagic libsndfile pkg-config pyqt@5 qt@5 sdl2 | |||
| - name: make features | |||
| run: make features | |||
| - name: make | |||
| run: make -j $(nproc) | |||
| - name: make posix32 | |||
| run: make posix32 -j $(nproc) | |||
| run: make -j $(sysctl -n hw.logicalcpu) | |||
| wasm: | |||
| runs-on: ubuntu-22.04 | |||
| env: | |||
| EMSCRIPTEN_VERSION: 3.1.27 | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| with: | |||
| @@ -6,140 +6,138 @@ env: | |||
| DESTDIR: ${{ github.workspace }}/build/tmp | |||
| jobs: | |||
| macos-libs: | |||
| runs-on: macos-latest | |||
| linux: | |||
| strategy: | |||
| matrix: | |||
| include: | |||
| - container: debian:11 | |||
| - container: debian:12 | |||
| #- container: ubuntu:20.04 | |||
| - container: ubuntu:22.04 | |||
| - container: ubuntu:23.10 | |||
| runs-on: ubuntu-latest | |||
| container: | |||
| image: ${{ matrix.container }} | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| - name: Set up dependencies | |||
| run: | | |||
| brew install cmake fluid-synth liblo libmagic libsndfile pkg-config | |||
| apt-get update -qq | |||
| apt-get install -yqq cmake g++ libfluidsynth-dev liblo-dev libmagic-dev libsndfile1-dev libx11-dev lsb-release pkg-config | |||
| echo "PACK_NAME=$(lsb_release -cs 2>/dev/null)" >> "${GITHUB_ENV}" | |||
| - name: configure | |||
| run: cmake -S cmake -B build -DCARLA_BUILD_FRAMEWORKS=OFF | |||
| run: cmake -S cmake -B build | |||
| - name: build | |||
| run: cmake --build build -j $(sysctl -n hw.logicalcpu) | |||
| run: cmake --build build -j $(nproc) | |||
| - name: install | |||
| run: cmake --install build --verbose | |||
| - uses: actions/upload-artifact@v3 | |||
| with: | |||
| name: macos-libs | |||
| name: linux-${{ env.PACK_NAME }} | |||
| path: ${{ env.DESTDIR }} | |||
| macos-frameworks: | |||
| macos: | |||
| strategy: | |||
| matrix: | |||
| include: | |||
| - frameworks: ON | |||
| - frameworks: OFF | |||
| runs-on: macos-latest | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| - name: Set up dependencies | |||
| run: | | |||
| brew install cmake fluid-synth liblo libmagic libsndfile pkg-config | |||
| if [ "${{ matrix.frameworks }}" = "" ]; then | |||
| echo "PACK_NAME=frameworks" >> "${GITHUB_ENV}" | |||
| else | |||
| echo "PACK_NAME=libs" >> "${GITHUB_ENV}" | |||
| fi | |||
| - name: configure | |||
| run: cmake -S cmake -B build -DCARLA_BUILD_FRAMEWORKS=ON | |||
| run: cmake -S cmake -B build -DCARLA_BUILD_FRAMEWORKS=${{ matrix.frameworks }} | |||
| - name: build | |||
| run: cmake --build build -j $(sysctl -n hw.logicalcpu) | |||
| - name: install | |||
| run: cmake --install build --verbose | |||
| - uses: actions/upload-artifact@v3 | |||
| with: | |||
| name: macos-frameworks | |||
| name: macos-${{ env.PACK_NAME }} | |||
| path: ${{ env.DESTDIR }} | |||
| mingw32-cross: | |||
| runs-on: ubuntu-22.04 | |||
| strategy: | |||
| matrix: | |||
| include: | |||
| - container: debian:11 | |||
| - container: debian:12 | |||
| #- container: ubuntu:20.04 | |||
| - container: ubuntu:22.04 | |||
| - container: ubuntu:23.10 | |||
| runs-on: ubuntu-latest | |||
| container: | |||
| image: ${{ matrix.container }} | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| - name: Set up dependencies | |||
| run: | | |||
| sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list | |||
| sudo dpkg --add-architecture i386 | |||
| sudo apt-get update -qq | |||
| sudo apt-get install -yqq --allow-downgrades cmake libc6:i386 libgcc-s1:i386 libstdc++6:i386 binutils-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64 wine-stable:i386 | |||
| dpkg --add-architecture i386 | |||
| apt-get update -qq | |||
| apt-get install -yqq cmake binutils-mingw-w64-i686 gcc g++-mingw-w64 lsb-release mingw-w64 pkg-config | |||
| if [ "$(lsb_release -si 2>/dev/null)" = "Debian" ]; then | |||
| apt-get install -yqq wine wine32 wine64 | |||
| else | |||
| apt-get install -yqq wine-stable | |||
| fi | |||
| echo "PACK_NAME=$(lsb_release -cs 2>/dev/null)" >> "${GITHUB_ENV}" | |||
| - name: configure | |||
| env: | |||
| PKG_CONFIG: false | |||
| run: cmake -S cmake -B build \ | |||
| -DCMAKE_CROSSCOMPILING=ON \ | |||
| -DCMAKE_CROSSCOMPILING_EMULATOR=wine \ | |||
| -DCMAKE_SYSTEM_NAME=Windows \ | |||
| -DCMAKE_SYSTEM_PROCESSOR=i686 \ | |||
| -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc \ | |||
| -DCMAKE_CXX_COMPILER=i686-w64-mingw32-g++ \ | |||
| -DCMAKE_RANLIB=i686-w64-mingw32-ranlib \ | |||
| -DCMAKE_AR=$(which i686-w64-mingw32-ar) | |||
| run: cmake -S cmake -B build -DCMAKE_CROSSCOMPILING=ON -DCMAKE_CROSSCOMPILING_EMULATOR=wine -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_PROCESSOR=i686 -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=i686-w64-mingw32-g++ -DCMAKE_AR=/usr/bin/i686-w64-mingw32-ar -DCMAKE_C_COMPILER_AR=/usr/bin/i686-w64-mingw32-ar -DCMAKE_CXX_COMPILER_AR=/usr/bin/i686-w64-mingw32-ar -DCMAKE_RANLIB=/usr/bin/i686-w64-mingw32-ranlib -DCMAKE_C_COMPILER_RANLIB=/usr/bin/i686-w64-mingw32-ranlib -DCMAKE_CXX_COMPILER_RANLIB=/usr/bin/i686-w64-mingw32-ranlib -DCMAKE_RC_COMPILER=/usr/bin/i686-w64-mingw32-windres | |||
| - name: build | |||
| run: cmake --build build -j $(nproc) | |||
| - name: install | |||
| run: cmake --install build --verbose | |||
| - uses: actions/upload-artifact@v3 | |||
| with: | |||
| name: mingw32 | |||
| name: mingw32-${{ env.PACK_NAME }} | |||
| path: ${{ env.DESTDIR }} | |||
| mingw64-cross: | |||
| runs-on: ubuntu-22.04 | |||
| strategy: | |||
| matrix: | |||
| include: | |||
| - container: debian:11 | |||
| - container: debian:12 | |||
| #- container: ubuntu:20.04 | |||
| - container: ubuntu:22.04 | |||
| - container: ubuntu:23.10 | |||
| runs-on: ubuntu-latest | |||
| container: | |||
| image: ${{ matrix.container }} | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| - name: Set up dependencies | |||
| run: | | |||
| sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list | |||
| sudo dpkg --add-architecture i386 | |||
| sudo apt-get update -qq | |||
| sudo apt-get install -yqq --allow-downgrades cmake libc6:i386 libgcc-s1:i386 libstdc++6:i386 binutils-mingw-w64-x86-64 g++-mingw-w64-x86-64 mingw-w64 wine-stable | |||
| dpkg --add-architecture i386 | |||
| apt-get update -qq | |||
| apt-get install -yqq cmake binutils-mingw-w64-x86-64 gcc g++-mingw-w64 lsb-release mingw-w64 pkg-config | |||
| if [ "$(lsb_release -si 2>/dev/null)" = "Debian" ]; then | |||
| apt-get install -yqq wine wine32 wine64 | |||
| else | |||
| apt-get install -yqq wine-stable | |||
| fi | |||
| echo "PACK_NAME=$(lsb_release -cs 2>/dev/null)" >> "${GITHUB_ENV}" | |||
| - name: configure | |||
| env: | |||
| PKG_CONFIG: false | |||
| run: cmake -S cmake -B build \ | |||
| -DCMAKE_CROSSCOMPILING=ON \ | |||
| -DCMAKE_CROSSCOMPILING_EMULATOR=wine \ | |||
| -DCMAKE_SYSTEM_NAME=Windows \ | |||
| -DCMAKE_SYSTEM_PROCESSOR=x86_64 \ | |||
| -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \ | |||
| -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ \ | |||
| -DCMAKE_RANLIB=x86_64-w64-mingw32-ranlib \ | |||
| -DCMAKE_AR=$(which x86_64-w64-mingw32-ar) | |||
| - name: build | |||
| run: cmake --build build -j $(nproc) | |||
| - name: install | |||
| run: cmake --install build --verbose | |||
| - uses: actions/upload-artifact@v3 | |||
| with: | |||
| name: mingw64 | |||
| path: ${{ env.DESTDIR }} | |||
| ubuntu-20_04: | |||
| runs-on: ubuntu-20.04 | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| - name: Set up dependencies | |||
| run: | | |||
| sudo apt-get update -qq | |||
| sudo apt-get install -yqq cmake libfluidsynth-dev liblo-dev libmagic-dev libsndfile1-dev libx11-dev pkg-config | |||
| - name: configure | |||
| run: cmake -S cmake -B build | |||
| - name: build | |||
| run: cmake --build build -j $(nproc) | |||
| - name: install | |||
| run: cmake --install build --verbose | |||
| - uses: actions/upload-artifact@v3 | |||
| with: | |||
| name: ubuntu-20.04 | |||
| path: ${{ env.DESTDIR }} | |||
| ubuntu-22_04: | |||
| runs-on: ubuntu-22.04 | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| - name: Set up dependencies | |||
| run: | | |||
| sudo apt-get update -qq | |||
| sudo apt-get install -yqq cmake libfluidsynth-dev liblo-dev libmagic-dev libsndfile1-dev libx11-dev pkg-config | |||
| - name: configure | |||
| run: cmake -S cmake -B build | |||
| run: cmake -S cmake -B build -DCMAKE_CROSSCOMPILING=ON -DCMAKE_CROSSCOMPILING_EMULATOR=wine -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ -DCMAKE_AR=/usr/bin/x86_64-w64-mingw32-ar -DCMAKE_C_COMPILER_AR=/usr/bin/x86_64-w64-mingw32-ar -DCMAKE_CXX_COMPILER_AR=/usr/bin/x86_64-w64-mingw32-ar -DCMAKE_RANLIB=/usr/bin/x86_64-w64-mingw32-ranlib -DCMAKE_C_COMPILER_RANLIB=/usr/bin/x86_64-w64-mingw32-ranlib -DCMAKE_CXX_COMPILER_RANLIB=/usr/bin/x86_64-w64-mingw32-ranlib -DCMAKE_RC_COMPILER=/usr/bin/x86_64-w64-mingw32-windres | |||
| - name: build | |||
| run: cmake --build build -j $(nproc) | |||
| - name: install | |||
| run: cmake --install build --verbose | |||
| - uses: actions/upload-artifact@v3 | |||
| with: | |||
| name: ubuntu-22.04 | |||
| name: mingw64-${{ env.PACK_NAME }} | |||
| path: ${{ env.DESTDIR }} | |||
| windows: | |||
| @@ -2,12 +2,17 @@ name: dpf | |||
| on: [push, pull_request] | |||
| env: | |||
| PAWPAW_SKIP_LTO: 1 | |||
| PAWPAW_SKIP_TESTS: 1 | |||
| jobs: | |||
| linux: | |||
| strategy: | |||
| matrix: | |||
| target: [linux-x86_64] | |||
| # linux-arm64, linux-armhf, linux-i686, linux-riscv64 | |||
| # TODO: add PawPaw bootstrap type | |||
| # linux-arm64, linux-armhf, linux-i686, linux-riscv64, | |||
| runs-on: ubuntu-20.04 | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| @@ -22,7 +27,7 @@ jobs: | |||
| macos: | |||
| strategy: | |||
| matrix: | |||
| target: [macos-intel, macos-universal] | |||
| target: [macos-intel, macos-universal, macos-universal-10.15] | |||
| runs-on: macos-11 | |||
| steps: | |||
| - uses: actions/checkout@v3 | |||
| @@ -54,15 +59,20 @@ jobs: | |||
| pawpaw: true | |||
| release: false | |||
| # pluginval: | |||
| # runs-on: ubuntu-20.04 | |||
| # steps: | |||
| # - uses: actions/checkout@v3 | |||
| # with: | |||
| # submodules: recursive | |||
| # - uses: distrho/dpf-makefile-action@v1 | |||
| # with: | |||
| # target: pluginval | |||
| # NOTE disabled for now | |||
| # lv2lint does not allow to differentiate exposed features for multiple plugins in a single binary | |||
| # (e.g. plugin A uses worker while plugin B does not, but they come from the same binary) | |||
| # see https://github.com/falkTX/Carla/actions/runs/7389992205/job/20103997236 | |||
| #pluginval: | |||
| #runs-on: ubuntu-20.04 | |||
| #steps: | |||
| #- uses: actions/checkout@v3 | |||
| #with: | |||
| #submodules: recursive | |||
| #- uses: distrho/dpf-makefile-action@v1 | |||
| #with: | |||
| #target: pluginval | |||
| #pawpaw: true | |||
| source: | |||
| runs-on: ubuntu-20.04 | |||
| @@ -4,8 +4,12 @@ on: [push, pull_request] | |||
| env: | |||
| CACHE_VERSION: 1 | |||
| DEBIAN_FRONTEND: noninteractive | |||
| HOMEBREW_NO_AUTO_UPDATE: 1 | |||
| HOMEBREW_NO_INSTALL_CLEANUP: 1 | |||
| PAWPAW_SKIP_LTO: 1 | |||
| PAWPAW_VERSION: cd7b760d6a32ecad263b112c12be8a306ed1e89c | |||
| PAWPAW_SKIP_TESTS: 1 | |||
| PAWPAW_VERSION: 9534e2b4f9bafc993e05fada89b824f3a2176708 | |||
| jobs: | |||
| # macOS native universal build | |||
| @@ -29,6 +33,7 @@ jobs: | |||
| run: | | |||
| git clone https://github.com/DISTRHO/PawPaw.git | |||
| git -C PawPaw checkout ${{ env.PAWPAW_VERSION }} | |||
| ./PawPaw/.github/workflows/bootstrap-deps.sh macos-universal | |||
| ./PawPaw/bootstrap-carla.sh macos-universal && ./PawPaw/.cleanup.sh macos-universal | |||
| - name: Build macOS universal | |||
| shell: bash | |||
| @@ -92,6 +97,7 @@ jobs: | |||
| run: | | |||
| git clone https://github.com/DISTRHO/PawPaw.git | |||
| git -C PawPaw checkout ${{ env.PAWPAW_VERSION }} | |||
| ./PawPaw/.github/workflows/bootstrap-deps.sh win32 | |||
| ./PawPaw/bootstrap-carla.sh win32 && ./PawPaw/.cleanup.sh win32 | |||
| - name: Build win32 cross-compiled | |||
| shell: bash | |||
| @@ -155,6 +161,7 @@ jobs: | |||
| run: | | |||
| git clone https://github.com/DISTRHO/PawPaw.git | |||
| git -C PawPaw checkout ${{ env.PAWPAW_VERSION }} | |||
| ./PawPaw/.github/workflows/bootstrap-deps.sh win64 | |||
| ./PawPaw/bootstrap-carla.sh win64 && ./PawPaw/.cleanup.sh win64 | |||
| - name: Build win64 cross-compiled | |||
| shell: bash | |||
| @@ -16,6 +16,7 @@ set(PROJECT_SHORT_VERSION 2.5.91) | |||
| set(CMAKE_POLICY_DEFAULT_CMP0025 NEW) | |||
| set(CMAKE_POLICY_DEFAULT_CMP0063 NEW) | |||
| set(CMAKE_POLICY_DEFAULT_CMP0069 NEW) | |||
| set(CMAKE_POLICY_DEFAULT_CMP0126 NEW) | |||
| set(CMAKE_C_STANDARD 11) | |||
| set(CMAKE_CXX_STANDARD 11) | |||
| @@ -49,8 +50,8 @@ else() | |||
| set(CARLA_USE_OSC_DEFAULT TRUE) | |||
| endif() | |||
| set(CARLA_BUILD_FRAMEWORKS FALSE CACHE BOOL "Build libraries as macOS frameworks") | |||
| set(CARLA_BUILD_STATIC FALSE CACHE BOOL "Build static libraries") | |||
| set(CARLA_ENABLE_JSFX TRUE CACHE BOOL "Enable JSFX") | |||
| set(CARLA_USE_JACK ${CARLA_USE_JACK_DEFAULT} CACHE BOOL "Enable JACK") | |||
| set(CARLA_USE_OSC ${CARLA_USE_OSC_DEFAULT} CACHE BOOL "Enable OSC") | |||
| @@ -60,6 +61,12 @@ if(${CARLA_BUILD_FRAMEWORKS} AND NOT APPLE) | |||
| mark_as_advanced(CARLA_BUILD_FRAMEWORKS) | |||
| endif() | |||
| if(${CARLA_BUILD_STATIC}) | |||
| set(CARLA_LIB_TYPE STATIC) | |||
| else() | |||
| set(CARLA_LIB_TYPE SHARED) | |||
| endif() | |||
| if(${CARLA_BUILD_FRAMEWORKS}) | |||
| execute_process(COMMAND date -u +%y%m%d%H%M%S OUTPUT_VARIABLE CARLA_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) | |||
| endif() | |||
| @@ -158,6 +165,8 @@ function(set_common_target_properties TARGET) | |||
| target_compile_definitions(${TARGET} | |||
| PRIVATE | |||
| BUILDING_CARLA | |||
| $<$<BOOL:${MSVC}>:_USE_MATH_DEFINES> | |||
| PUBLIC | |||
| $<$<BOOL:${CARLA_ENABLE_JSFX}>:HAVE_YSFX> | |||
| $<$<BOOL:${CARLA_USE_JACK}>:HAVE_JACK> | |||
| $<$<BOOL:${FLUIDSYNTH_FOUND}>:HAVE_FLUIDSYNTH> | |||
| @@ -166,7 +175,6 @@ function(set_common_target_properties TARGET) | |||
| $<$<BOOL:${PYQT_FOUND}>:HAVE_PYQT> | |||
| $<$<BOOL:${SNDFILE_FOUND}>:HAVE_SNDFILE> | |||
| $<$<BOOL:${X11_FOUND}>:HAVE_X11> | |||
| $<$<BOOL:${MSVC}>:_USE_MATH_DEFINES> | |||
| ) | |||
| target_compile_options(${TARGET} | |||
| @@ -240,7 +248,7 @@ target_include_directories(carla-audio-decoder | |||
| ) | |||
| target_link_libraries(carla-audio-decoder | |||
| PRIVATE | |||
| PUBLIC | |||
| PkgConfig::SNDFILE | |||
| ) | |||
| @@ -268,7 +276,7 @@ target_include_directories(carla-jackbridge | |||
| ) | |||
| target_link_libraries(carla-jackbridge | |||
| PRIVATE | |||
| PUBLIC | |||
| ${CARLA_LIBDL} | |||
| ${CARLA_LIBRT} | |||
| ) | |||
| @@ -439,7 +447,7 @@ target_include_directories(carla-native-plugins | |||
| ) | |||
| target_link_libraries(carla-native-plugins | |||
| PRIVATE | |||
| PUBLIC | |||
| ${CARLA_PTHREADS} | |||
| ) | |||
| @@ -484,7 +492,7 @@ target_include_directories(carla-rtmempool | |||
| ) | |||
| target_link_libraries(carla-rtmempool | |||
| PRIVATE | |||
| PUBLIC | |||
| ${CARLA_LIBDL} | |||
| ${CARLA_LIBRT} | |||
| ${CARLA_PTHREADS} | |||
| @@ -513,6 +521,7 @@ target_include_directories(carla-sfzero | |||
| target_link_libraries(carla-sfzero | |||
| PRIVATE | |||
| carla-audio-decoder | |||
| PUBLIC | |||
| ${CARLA_PTHREADS} | |||
| ) | |||
| @@ -541,7 +550,7 @@ target_include_directories(carla-water | |||
| ) | |||
| target_link_libraries(carla-water | |||
| PRIVATE | |||
| PUBLIC | |||
| $<$<BOOL:${APPLE}>:$<LINK_LIBRARY:FRAMEWORK,AppKit.framework>> | |||
| $<$<BOOL:${WIN32}>:comdlg32> | |||
| $<$<BOOL:${WIN32}>:ole32> | |||
| @@ -576,7 +585,7 @@ target_include_directories(carla-water-files | |||
| ) | |||
| target_link_libraries(carla-water-files | |||
| PRIVATE | |||
| PUBLIC | |||
| $<$<BOOL:${APPLE}>:$<LINK_LIBRARY:FRAMEWORK,AppKit.framework>> | |||
| $<$<BOOL:${WIN32}>:ole32> | |||
| $<$<BOOL:${WIN32}>:winmm> | |||
| @@ -691,7 +700,7 @@ target_include_directories(carla-zita-resampler | |||
| ) | |||
| target_link_libraries(carla-zita-resampler | |||
| PRIVATE | |||
| PUBLIC | |||
| ${CARLA_PTHREADS} | |||
| ) | |||
| @@ -753,6 +762,7 @@ target_link_libraries(carla-bridge-native | |||
| carla-water | |||
| $<$<BOOL:${CARLA_ENABLE_JSFX}>:carla-ysfx> | |||
| carla-zita-resampler | |||
| PUBLIC | |||
| PkgConfig::FLUIDSYNTH | |||
| PkgConfig::LIBLO | |||
| PkgConfig::LIBMAGIC | |||
| @@ -824,6 +834,7 @@ target_link_libraries(carla-bridge-lv2-gtk2 | |||
| PRIVATE | |||
| carla-lilv | |||
| carla-water-files | |||
| PUBLIC | |||
| PkgConfig::X11 | |||
| ${CARLA_PTHREADS} | |||
| ) | |||
| @@ -867,6 +878,7 @@ target_link_libraries(carla-bridge-lv2-gtk3 | |||
| PRIVATE | |||
| carla-lilv | |||
| carla-water-files | |||
| PUBLIC | |||
| PkgConfig::X11 | |||
| ${CARLA_PTHREADS} | |||
| ) | |||
| @@ -904,6 +916,7 @@ target_link_libraries(carla-discovery-native | |||
| carla-lilv | |||
| carla-water-files | |||
| $<$<BOOL:${CARLA_ENABLE_JSFX}>:carla-ysfx> | |||
| PUBLIC | |||
| PkgConfig::FLUIDSYNTH | |||
| ${CARLA_PTHREADS} | |||
| ) | |||
| @@ -913,11 +926,135 @@ target_sources(carla-discovery-native | |||
| ../source/discovery/carla-discovery.cpp | |||
| ) | |||
| ####################################################################################################################### | |||
| # carla host-plugin | |||
| add_library(carla-host-plugin ${CARLA_LIB_TYPE}) | |||
| add_library(carla::host-plugin ALIAS carla-host-plugin) | |||
| set_common_target_properties(carla-host-plugin) | |||
| if(${CARLA_BUILD_FRAMEWORKS}) | |||
| set(carla-host-plugin-public-headers | |||
| ../source/backend/CarlaBackend.h | |||
| ../source/backend/CarlaHost.h | |||
| ../source/backend/CarlaUtils.h | |||
| ) | |||
| set_target_properties(carla-host-plugin | |||
| PROPERTIES | |||
| FRAMEWORK TRUE | |||
| FRAMEWORK_VERSION A | |||
| OUTPUT_NAME carla-host-plugin | |||
| PUBLIC_HEADER "${carla-host-plugin-public-headers}" | |||
| MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info-framework.plist.in" | |||
| MACOSX_FRAMEWORK_IDENTIFIER "studio.kx.carla.host-plugin" | |||
| MACOSX_FRAMEWORK_BUNDLE_VERSION "${CARLA_DATE}" | |||
| MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${PROJECT_SHORT_VERSION}" | |||
| ) | |||
| else() | |||
| set_target_properties(carla-host-plugin | |||
| PROPERTIES | |||
| OUTPUT_NAME carla_host-plugin | |||
| IMPORT_PREFIX lib | |||
| PREFIX lib | |||
| ) | |||
| endif() | |||
| target_compile_definitions(carla-host-plugin | |||
| PRIVATE | |||
| CARLA_PLUGIN_BUILD | |||
| CARLA_LIB_EXT="${CMAKE_SHARED_LIBRARY_SUFFIX}" | |||
| ) | |||
| # FIXME | |||
| # target_compile_options(carla-host-plugin | |||
| # PRIVATE | |||
| # $<$<STREQUAL:${CMAKE_C_COMPILER_FRONTEND_VARIANT},GNU>:-Wno-unused-parameter> | |||
| # ) | |||
| target_include_directories(carla-host-plugin | |||
| PRIVATE | |||
| ../source | |||
| ../source/modules | |||
| PUBLIC | |||
| ../source/backend | |||
| ../source/includes | |||
| ../source/utils | |||
| ) | |||
| target_link_libraries(carla-host-plugin | |||
| PRIVATE | |||
| carla-jackbridge | |||
| carla-lilv | |||
| carla-native-plugins | |||
| carla-rtmempool | |||
| carla-sfzero | |||
| carla-water | |||
| $<$<BOOL:${CARLA_ENABLE_JSFX}>:carla-ysfx> | |||
| carla-zita-resampler | |||
| PUBLIC | |||
| PkgConfig::FLUIDSYNTH | |||
| PkgConfig::LIBLO | |||
| PkgConfig::LIBMAGIC | |||
| PkgConfig::X11 | |||
| $<$<BOOL:${APPLE}>:$<LINK_LIBRARY:FRAMEWORK,Cocoa.framework>> | |||
| ${CARLA_PTHREADS} | |||
| ) | |||
| target_sources(carla-host-plugin | |||
| PRIVATE | |||
| ../source/backend/engine/CarlaEngine.cpp | |||
| ../source/backend/engine/CarlaEngineClient.cpp | |||
| ../source/backend/engine/CarlaEngineData.cpp | |||
| ../source/backend/engine/CarlaEngineGraph.cpp | |||
| ../source/backend/engine/CarlaEngineInternal.cpp | |||
| ../source/backend/engine/CarlaEngineNative.cpp | |||
| ../source/backend/engine/CarlaEngineOsc.cpp | |||
| ../source/backend/engine/CarlaEngineOscHandlers.cpp | |||
| ../source/backend/engine/CarlaEngineOscSend.cpp | |||
| ../source/backend/engine/CarlaEnginePorts.cpp | |||
| ../source/backend/engine/CarlaEngineRunner.cpp | |||
| ../source/backend/plugin/CarlaPlugin.cpp | |||
| ../source/backend/plugin/CarlaPluginBridge.cpp | |||
| ../source/backend/plugin/CarlaPluginInternal.cpp | |||
| ../source/backend/plugin/CarlaPluginAU.cpp | |||
| ../source/backend/plugin/CarlaPluginCLAP.cpp | |||
| ../source/backend/plugin/CarlaPluginFluidSynth.cpp | |||
| ../source/backend/plugin/CarlaPluginJuce.cpp | |||
| ../source/backend/plugin/CarlaPluginJSFX.cpp | |||
| ../source/backend/plugin/CarlaPluginLADSPADSSI.cpp | |||
| ../source/backend/plugin/CarlaPluginLV2.cpp | |||
| ../source/backend/plugin/CarlaPluginNative.cpp | |||
| ../source/backend/plugin/CarlaPluginSFZero.cpp | |||
| ../source/backend/plugin/CarlaPluginVST2.cpp | |||
| ../source/backend/plugin/CarlaPluginVST3.cpp | |||
| ../source/plugin/carla-host-plugin.cpp | |||
| $<$<BOOL:${CARLA_USE_JACK}>:../source/backend/plugin/CarlaPluginJack.cpp> | |||
| PUBLIC | |||
| ${carla-host-plugin-public-headers} | |||
| ) | |||
| install(TARGETS carla-host-plugin | |||
| ARCHIVE DESTINATION ${CARLA_INSTALL_LIBDIR} | |||
| LIBRARY DESTINATION ${CARLA_INSTALL_LIBDIR} | |||
| FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR} | |||
| RUNTIME DESTINATION ${CARLA_INSTALL_BINDIR} | |||
| ) | |||
| if(${CARLA_BUILD_FRAMEWORKS}) | |||
| install(FILES | |||
| ../source/includes/CarlaDefines.h | |||
| ../source/includes/CarlaNative.h | |||
| ../source/includes/CarlaNativePlugin.h | |||
| DESTINATION ${CMAKE_INSTALL_LIBDIR}/carla-standalone.framework/Versions/A/Headers/includes) | |||
| endif() | |||
| ####################################################################################################################### | |||
| # carla native-plugin | |||
| add_library(carla-native-plugin SHARED) | |||
| add_library(carla::standalone ALIAS carla-native-plugin) | |||
| add_library(carla-native-plugin ${CARLA_LIB_TYPE}) | |||
| add_library(carla::native-plugin ALIAS carla-native-plugin) | |||
| set_common_target_properties(carla-native-plugin) | |||
| @@ -963,9 +1100,10 @@ target_compile_definitions(carla-native-plugin | |||
| target_include_directories(carla-native-plugin | |||
| PRIVATE | |||
| ../source | |||
| ../source/modules | |||
| PUBLIC | |||
| ../source/backend | |||
| ../source/includes | |||
| ../source/modules | |||
| ../source/utils | |||
| ) | |||
| @@ -1023,6 +1161,7 @@ target_link_libraries(carla-native-plugin | |||
| carla-water | |||
| $<$<BOOL:${CARLA_ENABLE_JSFX}>:carla-ysfx> | |||
| carla-zita-resampler | |||
| PUBLIC | |||
| PkgConfig::FLUIDSYNTH | |||
| PkgConfig::LIBLO | |||
| PkgConfig::LIBMAGIC | |||
| @@ -1082,7 +1221,7 @@ endif() | |||
| ####################################################################################################################### | |||
| # carla standalone | |||
| add_library(carla-standalone SHARED) | |||
| add_library(carla-standalone ${CARLA_LIB_TYPE}) | |||
| add_library(carla::standalone ALIAS carla-standalone) | |||
| set_common_target_properties(carla-standalone) | |||
| @@ -1134,9 +1273,10 @@ target_compile_options(carla-standalone | |||
| target_include_directories(carla-standalone | |||
| PRIVATE | |||
| ../source | |||
| ../source/modules | |||
| PUBLIC | |||
| ../source/backend | |||
| ../source/includes | |||
| ../source/modules | |||
| ../source/utils | |||
| ) | |||
| @@ -1150,6 +1290,7 @@ target_link_libraries(carla-standalone | |||
| carla-water | |||
| $<$<BOOL:${CARLA_ENABLE_JSFX}>:carla-ysfx> | |||
| carla-zita-resampler | |||
| PUBLIC | |||
| PkgConfig::FLUIDSYNTH | |||
| PkgConfig::LIBLO | |||
| PkgConfig::LIBMAGIC | |||
| @@ -1238,7 +1379,7 @@ endif() | |||
| ####################################################################################################################### | |||
| # carla utils | |||
| add_library(carla-utils SHARED) | |||
| add_library(carla-utils ${CARLA_LIB_TYPE}) | |||
| add_library(carla::utils ALIAS carla-utils) | |||
| set_common_target_properties(carla-utils) | |||
| @@ -1272,9 +1413,10 @@ endif() | |||
| target_include_directories(carla-utils | |||
| PRIVATE | |||
| ../source | |||
| ../source/modules | |||
| PUBLIC | |||
| ../source/backend | |||
| ../source/includes | |||
| ../source/modules | |||
| ../source/utils | |||
| ) | |||
| @@ -1284,12 +1426,12 @@ target_link_libraries(carla-utils | |||
| carla-lilv | |||
| carla-water-files | |||
| $<$<BOOL:${CARLA_ENABLE_JSFX}>:carla-ysfx> | |||
| PUBLIC | |||
| PkgConfig::FLUIDSYNTH | |||
| PkgConfig::LIBMAGIC | |||
| PkgConfig::X11 | |||
| $<$<BOOL:${APPLE}>:$<LINK_LIBRARY:FRAMEWORK,Cocoa.framework>> | |||
| ${CARLA_PTHREADS} | |||
| PUBLIC | |||
| $<$<BOOL:${APPLE}>:$<LINK_LIBRARY:FRAMEWORK,Cocoa.framework>> | |||
| $<$<BOOL:${WIN32}>:winmm> | |||
| ) | |||
| @@ -1445,9 +1587,15 @@ install(TARGETS carla-headers-utils PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_IN | |||
| if(NOT ${CARLA_BUILD_FRAMEWORKS} AND NOT MSVC) | |||
| configure_file(carla-utils.pc.in carla-utils.pc @ONLY) | |||
| configure_file(carla-standalone.pc.in carla-standalone.pc @ONLY) | |||
| configure_file(carla-native-plugin.pc.in carla-native-plugin.pc @ONLY) | |||
| configure_file(carla-host-plugin.pc.in carla-host-plugin.pc @ONLY) | |||
| install(FILES | |||
| ${CMAKE_CURRENT_BINARY_DIR}/carla-utils.pc | |||
| ${CMAKE_CURRENT_BINARY_DIR}/carla-standalone.pc | |||
| ${CMAKE_CURRENT_BINARY_DIR}/carla-native-plugin.pc | |||
| ${CMAKE_CURRENT_BINARY_DIR}/carla-host-plugin.pc | |||
| DESTINATION | |||
| ${CMAKE_INSTALL_LIBDIR}/pkgconfig | |||
| ) | |||
| @@ -0,0 +1,10 @@ | |||
| prefix=@CMAKE_INSTALL_PREFIX@ | |||
| libdir=@CMAKE_INSTALL_FULL_LIBDIR@ | |||
| includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ | |||
| carla_libdir=${libdir}/carla | |||
| Name: carla-host-plugin | |||
| Version: @PROJECT_VERSION@ | |||
| Description: Carla Host as Native Plugin | |||
| Libs: -Wl,-rpath,${carla_libdir} -L${carla_libdir} -lcarla_host-plugin | |||
| Cflags: -I${includedir}/carla -I${includedir}/carla/includes | |||
| @@ -0,0 +1,9 @@ | |||
| prefix=@CMAKE_INSTALL_PREFIX@ | |||
| libdir=@CMAKE_INSTALL_FULL_LIBDIR@ | |||
| includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ | |||
| Name: carla-native-plugin | |||
| Version: @PROJECT_VERSION@ | |||
| Description: Carla Native Plugin | |||
| Libs: -Wl,-rpath,${libdir}/carla -L${libdir}/carla -lcarla_native-plugin | |||
| Cflags: -I${includedir}/carla -I${includedir}/carla/includes | |||
| @@ -0,0 +1,9 @@ | |||
| prefix=@CMAKE_INSTALL_PREFIX@ | |||
| libdir=@CMAKE_INSTALL_FULL_LIBDIR@ | |||
| includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ | |||
| Name: carla-standalone | |||
| Version: @PROJECT_VERSION@ | |||
| Description: Carla Host Standalone | |||
| Libs: -Wl,-rpath,${libdir}/carla -L${libdir}/carla -lcarla_standalone2 | |||
| Cflags: -I${includedir}/carla -I${includedir}/carla/includes | |||
| @@ -2003,10 +2003,8 @@ public: | |||
| const int32_t numChannels = busInfo.channel_count; | |||
| CARLA_SAFE_ASSERT_BREAK(numChannels >= 0); | |||
| if ((busInfo.flags & V3_DEFAULT_ACTIVE) == 0x0) { | |||
| CARLA_SAFE_ASSERT_BREAK(v3_cpp_obj(fV3.component)->activate_bus(fV3.component, | |||
| V3_AUDIO, V3_INPUT, b, true) == V3_OK); | |||
| } | |||
| CARLA_SAFE_ASSERT_BREAK(v3_cpp_obj(fV3.component)->activate_bus(fV3.component, | |||
| V3_AUDIO, V3_INPUT, b, true) == V3_OK); | |||
| fBuses.inputs[b].num_channels = numChannels; | |||
| fBuses.inputInfo[b].bus_type = busInfo.bus_type; | |||
| @@ -2031,10 +2029,8 @@ public: | |||
| const int32_t numChannels = busInfo.channel_count; | |||
| CARLA_SAFE_ASSERT_BREAK(numChannels >= 0); | |||
| if ((busInfo.flags & V3_DEFAULT_ACTIVE) == 0x0) { | |||
| CARLA_SAFE_ASSERT_BREAK(v3_cpp_obj(fV3.component)->activate_bus(fV3.component, | |||
| V3_AUDIO, V3_OUTPUT, b, true) == V3_OK); | |||
| } | |||
| CARLA_SAFE_ASSERT_BREAK(v3_cpp_obj(fV3.component)->activate_bus(fV3.component, | |||
| V3_AUDIO, V3_OUTPUT, b, true) == V3_OK); | |||
| fBuses.outputs[b].num_channels = numChannels; | |||
| fBuses.outputInfo[b].bus_type = busInfo.bus_type; | |||
| @@ -440,6 +440,31 @@ private: | |||
| default: | |||
| break; | |||
| } | |||
| String winePrefix; | |||
| if (options.wine.autoPrefix && !fBinaries.empty()) | |||
| { | |||
| const File file(fBinaries[fBinaryIndex]); | |||
| const String filename(file.getFullPathName()); | |||
| winePrefix = findWinePrefix(filename); | |||
| } | |||
| if (winePrefix.isEmpty()) | |||
| { | |||
| const char* const envWinePrefix = std::getenv("WINEPREFIX"); | |||
| if (envWinePrefix != nullptr && envWinePrefix[0] != '\0') | |||
| winePrefix = envWinePrefix; | |||
| else if (options.wine.fallbackPrefix != nullptr && options.wine.fallbackPrefix[0] != '\0') | |||
| winePrefix = options.wine.fallbackPrefix.buffer(); | |||
| else | |||
| winePrefix = File::getSpecialLocation(File::userHomeDirectory).getFullPathName() + "/.wine"; | |||
| } | |||
| const CarlaScopedEnvVar sev1("WINEDEBUG", "-all"); | |||
| const CarlaScopedEnvVar sev2("WINEPREFIX", winePrefix.toRawUTF8()); | |||
| #endif | |||
| if (fBinaries.empty()) | |||
| @@ -468,28 +493,6 @@ private: | |||
| } | |||
| } | |||
| #ifndef CARLA_OS_WIN | |||
| String winePrefix; | |||
| if (options.wine.autoPrefix) | |||
| winePrefix = findWinePrefix(filename); | |||
| if (winePrefix.isEmpty()) | |||
| { | |||
| const char* const envWinePrefix = std::getenv("WINEPREFIX"); | |||
| if (envWinePrefix != nullptr && envWinePrefix[0] != '\0') | |||
| winePrefix = envWinePrefix; | |||
| else if (options.wine.fallbackPrefix != nullptr && options.wine.fallbackPrefix[0] != '\0') | |||
| winePrefix = options.wine.fallbackPrefix.buffer(); | |||
| else | |||
| winePrefix = File::getSpecialLocation(File::userHomeDirectory).getFullPathName() + "/.wine"; | |||
| } | |||
| const CarlaScopedEnvVar sev1("WINEDEBUG", "-all"); | |||
| const CarlaScopedEnvVar sev2("WINEPREFIX", winePrefix.toRawUTF8()); | |||
| #endif | |||
| carla_stdout("Scanning \"%s\"...", filename.toRawUTF8()); | |||
| #ifndef CARLA_OS_WIN | |||
| @@ -407,7 +407,7 @@ static QVariant asByteArray(const PluginInfo& info) | |||
| QByteArray qdata; | |||
| // start with the POD data, stored as-is | |||
| qdata.append(static_cast<const char*>(static_cast<const void*>(&info)), sizeof(PluginInfoHeader)); | |||
| qdata.append(reinterpret_cast<const char*>(&info), sizeof(PluginInfoHeader)); | |||
| // then all the strings, with a null terminating byte | |||
| { | |||
| @@ -455,8 +455,8 @@ static PluginInfo asPluginInfo(const QByteArray &qdata) | |||
| CARLA_SAFE_ASSERT_RETURN(static_cast<size_t>(qdata.size()) >= sizeof(PluginInfoHeader) + sizeof(char) * 5, {}); | |||
| // read POD data first | |||
| const PluginInfoHeader* const data | |||
| = static_cast<const PluginInfoHeader*>(static_cast<const void*>(qdata.constData())); | |||
| const PluginInfoHeader* const data = reinterpret_cast<const PluginInfoHeader*>(qdata.constData()); | |||
| PluginInfo info = {}; | |||
| info.build = data->build; | |||
| info.type = data->type; | |||
| @@ -472,7 +472,7 @@ static PluginInfo asPluginInfo(const QByteArray &qdata) | |||
| info.parameterOuts = data->parameterOuts; | |||
| // then all the strings, keeping the same order as in `asVariant` | |||
| const char* sdata = static_cast<const char*>(static_cast<const void*>(data + 1)); | |||
| const char* sdata = reinterpret_cast<const char*>(data + 1); | |||
| info.category = QString::fromUtf8(sdata); | |||
| sdata += info.category.size() + 1; | |||
| @@ -556,7 +556,7 @@ static QByteArray asByteArray(const PluginFavorite& fav) | |||
| QByteArray qdata; | |||
| // start with the POD data, stored as-is | |||
| qdata.append(static_cast<const char*>(static_cast<const void*>(&fav)), sizeof(PluginFavoriteHeader)); | |||
| qdata.append(reinterpret_cast<const char*>(&fav), sizeof(PluginFavoriteHeader)); | |||
| // then all the strings, with a null terminating byte | |||
| { | |||
| @@ -591,12 +591,11 @@ static PluginFavorite asPluginFavorite(const QByteArray& qdata) | |||
| CARLA_SAFE_ASSERT_RETURN(static_cast<size_t>(qdata.size()) >= sizeof(PluginFavoriteHeader) + sizeof(char) * 3, {}); | |||
| // read POD data first | |||
| const PluginFavoriteHeader* const data | |||
| = static_cast<const PluginFavoriteHeader*>(static_cast<const void*>(qdata.constData())); | |||
| const PluginFavoriteHeader* const data = reinterpret_cast<const PluginFavoriteHeader*>(qdata.constData()); | |||
| PluginFavorite fav = { data->type, data->uniqueId, {}, {} }; | |||
| // then all the strings, keeping the same order as in `asVariant` | |||
| const char* sdata = static_cast<const char*>(static_cast<const void*>(data + 1)); | |||
| const char* sdata = reinterpret_cast<const char*>(data + 1); | |||
| fav.filename = QString::fromUtf8(sdata); | |||
| sdata += fav.filename.size() + 1; | |||
| @@ -663,6 +662,8 @@ struct PluginListDialog::PrivateData { | |||
| bool firstInit = true; | |||
| bool ignoreCache = false; | |||
| bool checkInvalid = false; | |||
| bool usePluginBridges = false; | |||
| bool useWineBridges = false; | |||
| CarlaPluginDiscoveryHandle handle = nullptr; | |||
| QCarlaString tool; | |||
| CarlaScopedPointer<PluginRefreshDialog> dialog; | |||
| @@ -686,6 +687,9 @@ struct PluginListDialog::PrivateData { | |||
| handle = nullptr; | |||
| } | |||
| if (!usePluginBridges) | |||
| return false; | |||
| #ifdef CARLA_OS_WIN | |||
| #ifdef CARLA_OS_WIN64 | |||
| // look for win32 plugins on win64 | |||
| @@ -719,6 +723,9 @@ struct PluginListDialog::PrivateData { | |||
| } | |||
| #endif | |||
| if (!useWineBridges) | |||
| return false; | |||
| // try wine bridges | |||
| #ifdef CARLA_OS_64BIT | |||
| if (btype == BINARY_NATIVE || btype == BINARY_POSIX32) | |||
| @@ -822,6 +829,9 @@ PluginListDialog::PluginListDialog(QWidget* const parent, const HostSettings* co | |||
| // ---------------------------------------------------------------------------------------------------------------- | |||
| // Set-up global discovery options | |||
| p->discovery.usePluginBridges = hostSettings->showPluginBridges; | |||
| p->discovery.useWineBridges = hostSettings->showWineBridges; | |||
| #ifndef CARLA_OS_WIN | |||
| carla_plugin_discovery_set_option(ENGINE_OPTION_WINE_AUTO_PREFIX, hostSettings->wineAutoPrefix, nullptr); | |||
| carla_plugin_discovery_set_option(ENGINE_OPTION_WINE_EXECUTABLE, 0, hostSettings->wineExecutable); | |||
| @@ -554,9 +554,19 @@ read_STRING_LITERAL_LONG(SerdReader* reader, SerdNodeFlags* flags, uint8_t q) | |||
| eat_byte_safe(reader, q3); | |||
| return ref; | |||
| } else { | |||
| *flags |= SERD_HAS_QUOTE; | |||
| push_byte(reader, ref, c); | |||
| read_character(reader, ref, flags, q2); | |||
| if (q2 == '\\') { | |||
| push_byte(reader, ref, c); | |||
| if (!read_ECHAR(reader, ref, flags) && | |||
| !read_UCHAR(reader, ref, &code)) { | |||
| r_err(reader, SERD_ERR_BAD_SYNTAX, | |||
| "invalid escape `\\%c'\n", peek_byte(reader)); | |||
| return pop_node(reader, ref); | |||
| } | |||
| } else { | |||
| *flags |= SERD_HAS_QUOTE; | |||
| push_byte(reader, ref, c); | |||
| read_character(reader, ref, flags, q2); | |||
| } | |||
| } | |||
| } else { | |||
| read_character(reader, ref, flags, eat_byte_safe(reader, c)); | |||
| @@ -449,12 +449,21 @@ protected: | |||
| return; | |||
| } | |||
| const bool offline = isOffline(); | |||
| bool needsIdleRequest = false; | |||
| if (fReader.tickFrames(outBuffer, 0, frames, framePos, fLoopMode, isOffline()) && ! fPendingFileRead) | |||
| if (fReader.tickFrames(outBuffer, 0, frames, framePos, fLoopMode, offline) && ! fPendingFileRead) | |||
| { | |||
| fPendingFileRead = true; | |||
| needsIdleRequest = true; | |||
| if (offline) | |||
| { | |||
| fPendingFileRead = false; | |||
| fReader.readPoll(); | |||
| } | |||
| else | |||
| { | |||
| fPendingFileRead = true; | |||
| needsIdleRequest = true; | |||
| } | |||
| } | |||
| fLastPosition = fReader.getLastPlayPosition() * 100.f; | |||
| @@ -118,9 +118,11 @@ static void writeManifestFile(PluginListManager& plm, const uint32_t microVersio | |||
| text += "@prefix atom: <" LV2_ATOM_PREFIX "> .\n"; | |||
| text += "@prefix doap: <http://usefulinc.com/ns/doap#> .\n"; | |||
| text += "@prefix foaf: <http://xmlns.com/foaf/0.1/> .\n"; | |||
| text += "@prefix idpy: <http://harrisonconsoles.com/lv2/inlinedisplay#> .\n"; | |||
| text += "@prefix lv2: <" LV2_CORE_PREFIX "> .\n"; | |||
| text += "@prefix mod: <http://moddevices.com/ns/mod#> .\n"; | |||
| text += "@prefix opts: <" LV2_OPTIONS_PREFIX "> .\n"; | |||
| text += "@prefix owl: <http://www.w3.org/2002/07/owl#> .\n"; | |||
| text += "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n"; | |||
| text += "@prefix ui: <" LV2_UI_PREFIX "> .\n"; | |||
| text += "\n"; | |||
| @@ -129,7 +131,7 @@ static void writeManifestFile(PluginListManager& plm, const uint32_t microVersio | |||
| // Project | |||
| text += "<https://kx.studio/carla>\n"; | |||
| text += " a lv2:Project ;\n"; | |||
| text += " a owl:Ontology, doap:Project ;\n"; | |||
| text += " doap:homepage <https://kx.studio/carla> ;\n"; | |||
| text += " doap:maintainer [\n"; | |||
| text += " foaf:homepage <https://falktx.com/> ;\n"; | |||
| @@ -143,6 +145,17 @@ static void writeManifestFile(PluginListManager& plm, const uint32_t microVersio | |||
| text += " lv2:symbol \"carla\" .\n"; | |||
| text += "\n"; | |||
| // ------------------------------------------------------------------- | |||
| // Extensions | |||
| text += "idpy:interface\n"; | |||
| text += " a lv2:ExtensionData .\n"; | |||
| text += "\n"; | |||
| text += "idpy:queue_draw\n"; | |||
| text += " a lv2:Feature .\n"; | |||
| text += "\n"; | |||
| // ------------------------------------------------------------------- | |||
| // Plugins | |||
| @@ -271,6 +284,7 @@ static void writePluginFile(const NativePluginDescriptor* const pluginDesc, | |||
| text += "@prefix atom: <" LV2_ATOM_PREFIX "> .\n"; | |||
| text += "@prefix doap: <http://usefulinc.com/ns/doap#> .\n"; | |||
| text += "@prefix foaf: <http://xmlns.com/foaf/0.1/> .\n"; | |||
| text += "@prefix idpy: <http://harrisonconsoles.com/lv2/inlinedisplay#> .\n"; | |||
| text += "@prefix lv2: <" LV2_CORE_PREFIX "> .\n"; | |||
| text += "@prefix opts: <" LV2_OPTIONS_PREFIX "> .\n"; | |||
| text += "@prefix patch: <" LV2_PATCH_PREFIX "> .\n"; | |||
| @@ -291,28 +305,31 @@ static void writePluginFile(const NativePluginDescriptor* const pluginDesc, | |||
| switch (pluginDesc->category) | |||
| { | |||
| case NATIVE_PLUGIN_CATEGORY_SYNTH: | |||
| text += " a lv2:InstrumentPlugin, lv2:Plugin ;\n"; | |||
| text += " a lv2:InstrumentPlugin, lv2:Plugin, doap:Project ;\n"; | |||
| break; | |||
| case NATIVE_PLUGIN_CATEGORY_DELAY: | |||
| text += " a lv2:DelayPlugin, lv2:Plugin ;\n"; | |||
| text += " a lv2:DelayPlugin, lv2:Plugin, doap:Project ;\n"; | |||
| break; | |||
| case NATIVE_PLUGIN_CATEGORY_EQ: | |||
| text += " a lv2:EQPlugin, lv2:Plugin ;\n"; | |||
| text += " a lv2:EQPlugin, lv2:Plugin, doap:Project ;\n"; | |||
| break; | |||
| case NATIVE_PLUGIN_CATEGORY_FILTER: | |||
| text += " a lv2:FilterPlugin, lv2:Plugin ;\n"; | |||
| text += " a lv2:FilterPlugin, lv2:Plugin, doap:Project ;\n"; | |||
| break; | |||
| case NATIVE_PLUGIN_CATEGORY_DYNAMICS: | |||
| text += " a lv2:DynamicsPlugin, lv2:Plugin ;\n"; | |||
| text += " a lv2:DynamicsPlugin, lv2:Plugin, doap:Project ;\n"; | |||
| break; | |||
| case NATIVE_PLUGIN_CATEGORY_MODULATOR: | |||
| text += " a lv2:ModulatorPlugin, lv2:Plugin ;\n"; | |||
| text += " a lv2:ModulatorPlugin, lv2:Plugin, doap:Project ;\n"; | |||
| break; | |||
| case NATIVE_PLUGIN_CATEGORY_UTILITY: | |||
| text += " a lv2:UtilityPlugin, lv2:Plugin ;\n"; | |||
| text += " a lv2:UtilityPlugin, lv2:Plugin, doap:Project ;\n"; | |||
| break; | |||
| default: | |||
| text += " a lv2:Plugin ;\n"; | |||
| if (pluginDesc->midiIns >= 1 && pluginDesc->midiOuts >= 1 && pluginDesc->audioIns + pluginDesc->audioOuts == 0) | |||
| text += " a lv2:MIDIPlugin, lv2:Plugin, doap:Project ;\n"; | |||
| else | |||
| text += " a lv2:Plugin, doap:Project ;\n"; | |||
| break; | |||
| } | |||
| @@ -325,7 +342,7 @@ static void writePluginFile(const NativePluginDescriptor* const pluginDesc, | |||
| if (pluginDesc->hints & NATIVE_PLUGIN_IS_RTSAFE) | |||
| text += " lv2:optionalFeature <" LV2_CORE__hardRTCapable "> ;\n"; | |||
| if (pluginDesc->hints & NATIVE_PLUGIN_HAS_INLINE_DISPLAY) | |||
| text += " lv2:optionalFeature <" LV2_INLINEDISPLAY__queue_draw "> ;\n"; | |||
| text += " lv2:optionalFeature idpy:queue_draw ;\n"; | |||
| if ((pluginDesc->hints & NATIVE_PLUGIN_USES_STATE) || (pluginDesc->hints & NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE)) | |||
| text += " lv2:optionalFeature <" LV2_STATE__threadSafeRestore "> ;\n"; | |||
| text += "\n"; | |||
| @@ -358,7 +375,7 @@ static void writePluginFile(const NativePluginDescriptor* const pluginDesc, | |||
| text += " lv2:extensionData <" LV2_WORKER__interface "> ;\n"; | |||
| if (pluginDesc->hints & NATIVE_PLUGIN_HAS_INLINE_DISPLAY) | |||
| text += " lv2:extensionData <" LV2_INLINEDISPLAY__interface "> ;\n"; | |||
| text += " lv2:extensionData idpy:interface ;\n"; | |||
| text += "\n"; | |||
| @@ -43,7 +43,8 @@ static HINSTANCE getCurrentModuleInstanceHandle() noexcept | |||
| CARLA_PLUGIN_EXPORT | |||
| BOOL WINAPI DllMain(HINSTANCE hInst, DWORD, LPVOID) | |||
| { | |||
| currentModuleHandle = hInst; | |||
| if (reason == DLL_PROCESS_ATTACH) | |||
| currentModuleHandle = hInst; | |||
| return 1; | |||
| } | |||
| @@ -179,7 +179,7 @@ void carla_addFloats(float dest[], const float src[], const std::size_t count) n | |||
| if (!std::isfinite(src[i])) | |||
| __builtin_unreachable(); | |||
| #endif | |||
| *dest++ += *src++; | |||
| dest[i] += src[i]; | |||
| } | |||
| } | |||
| @@ -217,7 +217,7 @@ void carla_fillFloatsWithSingleValue(float data[], const float& value, const std | |||
| if (!std::isfinite(data[i])) | |||
| __builtin_unreachable(); | |||
| #endif | |||
| *data++ = value; | |||
| data[i] = value; | |||
| } | |||
| } | |||
| } | |||
| @@ -302,7 +302,7 @@ void carla_multiply(float data[], const float& multiplier, const std::size_t cou | |||
| if (!std::isfinite(data[i])) | |||
| __builtin_unreachable(); | |||
| #endif | |||
| *data++ *= multiplier; | |||
| data[i] *= multiplier; | |||
| } | |||
| } | |||
| } | |||
| @@ -406,7 +406,7 @@ void carla_add(T dest[], const T src[], const std::size_t count) noexcept | |||
| CARLA_SAFE_ASSERT_RETURN(count > 0,); | |||
| for (std::size_t i=0; i<count; ++i) | |||
| *dest++ += *src++; | |||
| dest[i] += src[i]; | |||
| } | |||
| /* | |||
| @@ -422,7 +422,7 @@ void carla_addWithMultiply(T dest[], const T src[], const T& multiplier, const s | |||
| CARLA_SAFE_ASSERT_RETURN(count > 0,); | |||
| for (std::size_t i=0; i<count; ++i) | |||
| *dest++ += *src++ * multiplier; | |||
| dest[i] += src[i] * multiplier; | |||
| } | |||
| /* | |||
| @@ -453,7 +453,7 @@ void carla_copyWithMultiply(T dest[], const T src[], const T& multiplier, const | |||
| CARLA_SAFE_ASSERT_RETURN(count > 0,); | |||
| for (std::size_t i=0; i<count; ++i) | |||
| *dest++ = *src++ * multiplier; | |||
| dest[i] = src[i] * multiplier; | |||
| } | |||
| /* | |||
| @@ -473,7 +473,7 @@ void carla_fill(T data[], const T& value, const std::size_t count) noexcept | |||
| else | |||
| { | |||
| for (std::size_t i=0; i<count; ++i) | |||
| *data++ = value; | |||
| data[i] = value; | |||
| } | |||
| } | |||
| @@ -494,7 +494,7 @@ void carla_multiply(T data[], const T& multiplier, const std::size_t count) noex | |||
| else | |||
| { | |||
| for (std::size_t i=0; i<count; ++i) | |||
| *data++ *= multiplier; | |||
| data[i] *= multiplier; | |||
| } | |||
| } | |||