@@ -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; | |||
} | |||
} | |||