@@ -31,7 +31,7 @@ function(_juce_add_pips) | |||||
CONFIGURE_DEPENDS LIST_DIRECTORIES false | CONFIGURE_DEPENDS LIST_DIRECTORIES false | ||||
"${CMAKE_CURRENT_SOURCE_DIR}/*.h") | "${CMAKE_CURRENT_SOURCE_DIR}/*.h") | ||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux") | |||||
if((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_SYSTEM_NAME MATCHES ".*BSD")) | |||||
list(REMOVE_ITEM headers | list(REMOVE_ITEM headers | ||||
"${CMAKE_CURRENT_SOURCE_DIR}/CameraDemo.h" | "${CMAKE_CURRENT_SOURCE_DIR}/CameraDemo.h" | ||||
"${CMAKE_CURRENT_SOURCE_DIR}/PushNotificationsDemo.h" | "${CMAKE_CURRENT_SOURCE_DIR}/PushNotificationsDemo.h" | ||||
@@ -55,7 +55,6 @@ target_compile_definitions(DemoRunner PRIVATE | |||||
PIP_JUCE_EXAMPLES_DIRECTORY_STRING="${JUCE_SOURCE_DIR}/examples" | PIP_JUCE_EXAMPLES_DIRECTORY_STRING="${JUCE_SOURCE_DIR}/examples" | ||||
JUCE_ALLOW_STATIC_NULL_VARIABLES=0 | JUCE_ALLOW_STATIC_NULL_VARIABLES=0 | ||||
JUCE_DEMO_RUNNER=1 | JUCE_DEMO_RUNNER=1 | ||||
JUCE_JACK=1 | |||||
JUCE_STRICT_REFCOUNTEDPOINTER=1 | JUCE_STRICT_REFCOUNTEDPOINTER=1 | ||||
JUCE_UNIT_TESTS=1 | JUCE_UNIT_TESTS=1 | ||||
JUCE_USE_CAMERA=1 | JUCE_USE_CAMERA=1 | ||||
@@ -59,7 +59,7 @@ | |||||
#include "../../../DSP/WaveShaperTanhDemo.h" | #include "../../../DSP/WaveShaperTanhDemo.h" | ||||
#include "../../../Utilities/Box2DDemo.h" | #include "../../../Utilities/Box2DDemo.h" | ||||
#if JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX | |||||
#if JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD | |||||
#include "../../../Utilities/ChildProcessDemo.h" | #include "../../../Utilities/ChildProcessDemo.h" | ||||
#endif | #endif | ||||
#include "../../../Utilities/CryptographyDemo.h" | #include "../../../Utilities/CryptographyDemo.h" | ||||
@@ -104,7 +104,7 @@ void registerDemos_One() noexcept | |||||
REGISTER_DEMO (WaveShaperTanhDemo, DSP, false) | REGISTER_DEMO (WaveShaperTanhDemo, DSP, false) | ||||
REGISTER_DEMO (Box2DDemo, Utilities, false) | REGISTER_DEMO (Box2DDemo, Utilities, false) | ||||
#if JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX | |||||
#if JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD | |||||
REGISTER_DEMO (ChildProcessDemo, Utilities, false) | REGISTER_DEMO (ChildProcessDemo, Utilities, false) | ||||
#endif | #endif | ||||
REGISTER_DEMO (CryptographyDemo, Utilities, false) | REGISTER_DEMO (CryptographyDemo, Utilities, false) | ||||
@@ -33,7 +33,7 @@ | |||||
#include "../../../GUI/AnimationAppDemo.h" | #include "../../../GUI/AnimationAppDemo.h" | ||||
#include "../../../GUI/AnimationDemo.h" | #include "../../../GUI/AnimationDemo.h" | ||||
#include "../../../GUI/BouncingBallWavetableDemo.h" | #include "../../../GUI/BouncingBallWavetableDemo.h" | ||||
#if JUCE_USE_CAMERA && ! JUCE_LINUX | |||||
#if JUCE_USE_CAMERA && ! (JUCE_LINUX || JUCE_BSD) | |||||
#include "../../../GUI/CameraDemo.h" | #include "../../../GUI/CameraDemo.h" | ||||
#endif | #endif | ||||
#if ! JUCE_ANDROID | #if ! JUCE_ANDROID | ||||
@@ -58,7 +58,7 @@ | |||||
#include "../../../GUI/OpenGLDemo2D.h" | #include "../../../GUI/OpenGLDemo2D.h" | ||||
#endif | #endif | ||||
#include "../../../GUI/PropertiesDemo.h" | #include "../../../GUI/PropertiesDemo.h" | ||||
#if ! JUCE_LINUX | |||||
#if ! (JUCE_LINUX || JUCE_BSD) | |||||
#include "../../../GUI/VideoDemo.h" | #include "../../../GUI/VideoDemo.h" | ||||
#endif | #endif | ||||
#include "../../../GUI/WebBrowserDemo.h" | #include "../../../GUI/WebBrowserDemo.h" | ||||
@@ -70,7 +70,7 @@ void registerDemos_Two() noexcept | |||||
REGISTER_DEMO (AnimationAppDemo, GUI, false) | REGISTER_DEMO (AnimationAppDemo, GUI, false) | ||||
REGISTER_DEMO (AnimationDemo, GUI, false) | REGISTER_DEMO (AnimationDemo, GUI, false) | ||||
REGISTER_DEMO (BouncingBallWavetableDemo, GUI, false) | REGISTER_DEMO (BouncingBallWavetableDemo, GUI, false) | ||||
#if JUCE_USE_CAMERA && ! JUCE_LINUX | |||||
#if JUCE_USE_CAMERA && ! (JUCE_LINUX || JUCE_BSD) | |||||
REGISTER_DEMO (CameraDemo, GUI, true) | REGISTER_DEMO (CameraDemo, GUI, true) | ||||
#endif | #endif | ||||
#if ! JUCE_ANDROID | #if ! JUCE_ANDROID | ||||
@@ -95,7 +95,7 @@ void registerDemos_Two() noexcept | |||||
REGISTER_DEMO (OpenGLDemo, GUI, true) | REGISTER_DEMO (OpenGLDemo, GUI, true) | ||||
#endif | #endif | ||||
REGISTER_DEMO (PropertiesDemo, GUI, false) | REGISTER_DEMO (PropertiesDemo, GUI, false) | ||||
#if ! JUCE_LINUX | |||||
#if ! (JUCE_LINUX || JUCE_BSD) | |||||
REGISTER_DEMO (VideoDemo, GUI, true) | REGISTER_DEMO (VideoDemo, GUI, true) | ||||
#endif | #endif | ||||
REGISTER_DEMO (WebBrowserDemo, GUI, true) | REGISTER_DEMO (WebBrowserDemo, GUI, true) | ||||
@@ -29,7 +29,7 @@ | |||||
#include "UI/MainComponent.h" | #include "UI/MainComponent.h" | ||||
//============================================================================== | //============================================================================== | ||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_MAC | |||||
#if JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD | |||||
// Just add a simple icon to the Window system tray area or Mac menu bar.. | // Just add a simple icon to the Window system tray area or Mac menu bar.. | ||||
struct DemoTaskbarComponent : public SystemTrayIconComponent, | struct DemoTaskbarComponent : public SystemTrayIconComponent, | ||||
private Timer | private Timer | ||||
@@ -96,7 +96,7 @@ public: | |||||
{ | { | ||||
registerAllDemos(); | registerAllDemos(); | ||||
#if JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX | |||||
#if JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD | |||||
// (This function call is for one of the demos, which involves launching a child process) | // (This function call is for one of the demos, which involves launching a child process) | ||||
if (invokeChildProcessDemo (commandLine)) | if (invokeChildProcessDemo (commandLine)) | ||||
return; | return; | ||||
@@ -144,7 +144,7 @@ private: | |||||
setContentOwned (new MainComponent(), false); | setContentOwned (new MainComponent(), false); | ||||
setVisible (true); | setVisible (true); | ||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_MAC | |||||
#if JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD | |||||
taskbarIcon.reset (new DemoTaskbarComponent()); | taskbarIcon.reset (new DemoTaskbarComponent()); | ||||
#endif | #endif | ||||
} | } | ||||
@@ -702,6 +702,6 @@ private: | |||||
updatePositionSliderAndLabel(); | updatePositionSliderAndLabel(); | ||||
} | } | ||||
}; | }; | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
#error "This demo is not supported on Linux!" | #error "This demo is not supported on Linux!" | ||||
#endif | #endif |
@@ -25,7 +25,7 @@ function(_juce_create_atomic_target target_name) | |||||
add_library("${target_name}" INTERFACE) | add_library("${target_name}" INTERFACE) | ||||
add_library("juce::${target_name}" ALIAS "${target_name}") | add_library("juce::${target_name}" ALIAS "${target_name}") | ||||
if(NOT (CMAKE_SYSTEM_NAME STREQUAL "Linux")) | |||||
if(NOT ((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_SYSTEM_NAME MATCHES ".*BSD"))) | |||||
return() | return() | ||||
endif() | endif() | ||||
@@ -137,7 +137,7 @@ function(_juce_find_linux_target_architecture result) | |||||
set("${result}" "${match_result}" PARENT_SCOPE) | set("${result}" "${match_result}" PARENT_SCOPE) | ||||
endfunction() | endfunction() | ||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux") | |||||
if((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_SYSTEM_NAME MATCHES ".*BSD")) | |||||
_juce_create_pkgconfig_target(JUCE_CURL_LINUX_DEPS libcurl) | _juce_create_pkgconfig_target(JUCE_CURL_LINUX_DEPS libcurl) | ||||
_juce_create_pkgconfig_target(JUCE_BROWSER_LINUX_DEPS webkit2gtk-4.0 gtk+-x11-3.0) | _juce_create_pkgconfig_target(JUCE_BROWSER_LINUX_DEPS webkit2gtk-4.0 gtk+-x11-3.0) | ||||
@@ -177,7 +177,7 @@ function(_juce_set_default_properties) | |||||
set_property(GLOBAL PROPERTY JUCE_VST3_COPY_DIR "${prefix}/VST3") | set_property(GLOBAL PROPERTY JUCE_VST3_COPY_DIR "${prefix}/VST3") | ||||
set_property(GLOBAL PROPERTY JUCE_AAX_COPY_DIR "${prefix}/Avid/Audio/Plug-Ins") | set_property(GLOBAL PROPERTY JUCE_AAX_COPY_DIR "${prefix}/Avid/Audio/Plug-Ins") | ||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") | |||||
elseif((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_SYSTEM_NAME MATCHES ".*BSD")) | |||||
set_property(GLOBAL PROPERTY JUCE_VST_COPY_DIR "$ENV{HOME}/.vst") | set_property(GLOBAL PROPERTY JUCE_VST_COPY_DIR "$ENV{HOME}/.vst") | ||||
set_property(GLOBAL PROPERTY JUCE_VST3_COPY_DIR "$ENV{HOME}/.vst3") | set_property(GLOBAL PROPERTY JUCE_VST3_COPY_DIR "$ENV{HOME}/.vst3") | ||||
endif() | endif() | ||||
@@ -553,7 +553,9 @@ function(juce_add_module module_path) | |||||
target_link_libraries(juce_core INTERFACE juce::juce_atomic_wrapper) | target_link_libraries(juce_core INTERFACE juce::juce_atomic_wrapper) | ||||
if(CMAKE_SYSTEM_NAME STREQUAL "Android") | |||||
if(CMAKE_SYSTEM_NAME MATCHES ".*BSD") | |||||
target_link_libraries(juce_core INTERFACE execinfo) | |||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") | |||||
target_sources(juce_core INTERFACE "${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c") | target_sources(juce_core INTERFACE "${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c") | ||||
target_include_directories(juce_core INTERFACE "${ANDROID_NDK}/sources/android/cpufeatures") | target_include_directories(juce_core INTERFACE "${ANDROID_NDK}/sources/android/cpufeatures") | ||||
target_link_libraries(juce_core INTERFACE android log) | target_link_libraries(juce_core INTERFACE android log) | ||||
@@ -575,7 +577,7 @@ function(juce_add_module module_path) | |||||
target_compile_definitions(${module_name} INTERFACE JUCE_MODULE_AVAILABLE_${module_name}=1) | target_compile_definitions(${module_name} INTERFACE JUCE_MODULE_AVAILABLE_${module_name}=1) | ||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux") | |||||
if((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_SYSTEM_NAME MATCHES ".*BSD")) | |||||
target_compile_definitions(${module_name} INTERFACE LINUX=1) | target_compile_definitions(${module_name} INTERFACE LINUX=1) | ||||
endif() | endif() | ||||
@@ -613,7 +615,7 @@ function(juce_add_module module_path) | |||||
endforeach() | endforeach() | ||||
_juce_link_libs_from_metadata("${module_name}" "${metadata_dict}" iOSLibs) | _juce_link_libs_from_metadata("${module_name}" "${metadata_dict}" iOSLibs) | ||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") | |||||
elseif((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_SYSTEM_NAME MATCHES ".*BSD")) | |||||
_juce_get_metadata("${metadata_dict}" linuxPackages module_linuxpackages) | _juce_get_metadata("${metadata_dict}" linuxPackages module_linuxpackages) | ||||
if(module_linuxpackages) | if(module_linuxpackages) | ||||
@@ -681,7 +683,7 @@ endfunction() | |||||
# know they need it. Otherwise, we won't link anything. | # know they need it. Otherwise, we won't link anything. | ||||
# See the NEEDS_CURL, NEEDS_WEB_BROWSER, and NEEDS_STORE_KIT options in the CMake/readme.md. | # See the NEEDS_CURL, NEEDS_WEB_BROWSER, and NEEDS_STORE_KIT options in the CMake/readme.md. | ||||
function(_juce_link_optional_libraries target) | function(_juce_link_optional_libraries target) | ||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux") | |||||
if((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_SYSTEM_NAME MATCHES ".*BSD")) | |||||
get_target_property(needs_curl ${target} JUCE_NEEDS_CURL) | get_target_property(needs_curl ${target} JUCE_NEEDS_CURL) | ||||
if(needs_curl) | if(needs_curl) | ||||
@@ -1346,7 +1348,7 @@ function(_juce_set_plugin_target_properties shared_code_target kind) | |||||
set(output_path "${products_folder}/${product_name}.vst3") | set(output_path "${products_folder}/${product_name}.vst3") | ||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux") | |||||
if((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_SYSTEM_NAME MATCHES ".*BSD")) | |||||
set_target_properties(${target_name} PROPERTIES | set_target_properties(${target_name} PROPERTIES | ||||
SUFFIX .so | SUFFIX .so | ||||
LIBRARY_OUTPUT_DIRECTORY "${output_path}/Contents/${JUCE_LINUX_TARGET_ARCHITECTURE}-linux") | LIBRARY_OUTPUT_DIRECTORY "${output_path}/Contents/${JUCE_LINUX_TARGET_ARCHITECTURE}-linux") | ||||
@@ -1479,7 +1481,7 @@ function(_juce_link_plugin_wrapper shared_code_target kind) | |||||
add_library(${target_name} MODULE) | add_library(${target_name} MODULE) | ||||
endif() | endif() | ||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux") | |||||
if((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_SYSTEM_NAME MATCHES ".*BSD")) | |||||
target_link_libraries(${target_name} PRIVATE "-Wl,--no-undefined") | target_link_libraries(${target_name} PRIVATE "-Wl,--no-undefined") | ||||
endif() | endif() | ||||
@@ -141,6 +141,8 @@ private: | |||||
return "Windows"; | return "Windows"; | ||||
#elif JUCE_LINUX | #elif JUCE_LINUX | ||||
return "Linux"; | return "Linux"; | ||||
#elif JUCE_BSD | |||||
return "BSD"; | |||||
#endif | #endif | ||||
} | } | ||||
@@ -111,7 +111,7 @@ bool ProjucerApplication::initialiseLogger (const char* filePrefix) | |||||
{ | { | ||||
if (logger == nullptr) | if (logger == nullptr) | ||||
{ | { | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
String folder = "~/.config/Projucer/Logs"; | String folder = "~/.config/Projucer/Logs"; | ||||
#else | #else | ||||
String folder = "com.juce.projucer"; | String folder = "com.juce.projucer"; | ||||
@@ -717,7 +717,7 @@ static String getPlatformSpecificFileExtension() | |||||
return ".app"; | return ".app"; | ||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
return ".exe"; | return ".exe"; | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
return {}; | return {}; | ||||
#else | #else | ||||
jassertfalse; | jassertfalse; | ||||
@@ -738,7 +738,7 @@ static File getPlatformSpecificProjectFolder() | |||||
return buildsFolder.getChildFile ("MacOSX"); | return buildsFolder.getChildFile ("MacOSX"); | ||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
return buildsFolder.getChildFile ("VisualStudio2017"); | return buildsFolder.getChildFile ("VisualStudio2017"); | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
return buildsFolder.getChildFile ("LinuxMakefile"); | return buildsFolder.getChildFile ("LinuxMakefile"); | ||||
#else | #else | ||||
jassertfalse; | jassertfalse; | ||||
@@ -775,8 +775,8 @@ static File tryToFindDemoRunnerExecutableInBuilds() | |||||
if (demoRunnerExecutable.existsAsFile()) | if (demoRunnerExecutable.existsAsFile()) | ||||
return demoRunnerExecutable; | return demoRunnerExecutable; | ||||
#elif JUCE_LINUX | |||||
projectFolder = projectFolder.getChildFile ("LinuxMakefile").getChildFile ("build"); | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
projectFolder = projectFolder.getChildFile ("build"); | |||||
auto demoRunnerExecutable = projectFolder.getChildFile ("DemoRunner"); | auto demoRunnerExecutable = projectFolder.getChildFile ("DemoRunner"); | ||||
if (demoRunnerExecutable.existsAsFile()) | if (demoRunnerExecutable.existsAsFile()) | ||||
@@ -854,7 +854,7 @@ File ProjucerApplication::tryToFindDemoRunnerProject() | |||||
auto demoRunnerProjectFile = projectFolder.getChildFile ("DemoRunner.xcodeproj"); | auto demoRunnerProjectFile = projectFolder.getChildFile ("DemoRunner.xcodeproj"); | ||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
auto demoRunnerProjectFile = projectFolder.getChildFile ("DemoRunner.sln"); | auto demoRunnerProjectFile = projectFolder.getChildFile ("DemoRunner.sln"); | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
auto demoRunnerProjectFile = projectFolder.getChildFile ("Makefile"); | auto demoRunnerProjectFile = projectFolder.getChildFile ("Makefile"); | ||||
#endif | #endif | ||||
@@ -883,33 +883,33 @@ void ProjucerApplication::launchDemoRunner() | |||||
{ | { | ||||
auto& lf = Desktop::getInstance().getDefaultLookAndFeel(); | auto& lf = Desktop::getInstance().getDefaultLookAndFeel(); | ||||
#if JUCE_LINUX || JUCE_BSD | |||||
demoRunnerAlert.reset (lf.createAlertWindow ("Open Project", | demoRunnerAlert.reset (lf.createAlertWindow ("Open Project", | ||||
"Couldn't find a compiled version of the Demo Runner." | "Couldn't find a compiled version of the Demo Runner." | ||||
#if JUCE_LINUX | |||||
" Do you want to build it now?", "Build project", "Cancel", | |||||
#else | |||||
" Do you want to open the project?", "Open project", "Cancel", | |||||
#endif | |||||
{}, | |||||
AlertWindow::QuestionIcon, 2, | |||||
" Please compile the Demo Runner project in the JUCE examples directory.", | |||||
"OK", {}, {}, | |||||
AlertWindow::WarningIcon, 1, | |||||
mainWindowList.getFrontmostWindow (false))); | mainWindowList.getFrontmostWindow (false))); | ||||
demoRunnerAlert->enterModalState (true, ModalCallbackFunction::create ([this] (int) | |||||
{ | |||||
demoRunnerAlert.reset (nullptr); | |||||
}), false); | |||||
#else | |||||
demoRunnerAlert.reset (lf.createAlertWindow ("Open Project", | |||||
"Couldn't find a compiled version of the Demo Runner." | |||||
" Do you want to open the project?", | |||||
"Open project", "Cancel", {}, | |||||
AlertWindow::QuestionIcon, 2, | |||||
mainWindowList.getFrontmostWindow (false))); | |||||
demoRunnerAlert->enterModalState (true, ModalCallbackFunction::create ([this, demoRunnerFile] (int retVal) | demoRunnerAlert->enterModalState (true, ModalCallbackFunction::create ([this, demoRunnerFile] (int retVal) | ||||
{ | { | ||||
demoRunnerAlert.reset (nullptr); | demoRunnerAlert.reset (nullptr); | ||||
if (retVal == 1) | if (retVal == 1) | ||||
{ | |||||
#if JUCE_LINUX | |||||
String command ("make -C " + demoRunnerFile.getParentDirectory().getFullPathName() + " CONFIG=Release -j3"); | |||||
if (! makeProcess.start (command)) | |||||
AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, "Error", "Error building Demo Runner."); | |||||
#else | |||||
demoRunnerFile.startAsProcess(); | demoRunnerFile.startAsProcess(); | ||||
#endif | |||||
} | |||||
}), false); | }), false); | ||||
#endif | |||||
} | } | ||||
} | } | ||||
@@ -998,18 +998,8 @@ void ProjucerApplication::getCommandInfo (CommandID commandID, ApplicationComman | |||||
break; | break; | ||||
case CommandIDs::launchDemoRunner: | case CommandIDs::launchDemoRunner: | ||||
#if JUCE_LINUX | |||||
if (makeProcess.isRunning()) | |||||
{ | |||||
result.setInfo ("Building Demo Runner...", "The Demo Runner project is currently building", CommandCategories::general, 0); | |||||
result.setActive (false); | |||||
} | |||||
else | |||||
#endif | |||||
{ | |||||
result.setInfo ("Launch Demo Runner", "Launches the JUCE demo runner application, or the project if it can't be found", CommandCategories::general, 0); | |||||
result.setActive (tryToFindDemoRunnerExecutable() != File() || tryToFindDemoRunnerProject() != File()); | |||||
} | |||||
result.setInfo ("Launch Demo Runner", "Launches the JUCE demo runner application, or the project if it can't be found", CommandCategories::general, 0); | |||||
result.setActive (tryToFindDemoRunnerExecutable() != File() || tryToFindDemoRunnerProject() != File()); | |||||
break; | break; | ||||
case CommandIDs::open: | case CommandIDs::open: | ||||
@@ -1426,7 +1416,7 @@ PropertiesFile::Options ProjucerApplication::getPropertyFileOptionsFor (const St | |||||
options.applicationName = filename; | options.applicationName = filename; | ||||
options.filenameSuffix = "settings"; | options.filenameSuffix = "settings"; | ||||
options.osxLibrarySubFolder = "Application Support"; | options.osxLibrarySubFolder = "Application Support"; | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
options.folderName = "~/.config/Projucer"; | options.folderName = "~/.config/Projucer"; | ||||
#else | #else | ||||
options.folderName = "Projucer"; | options.folderName = "Projucer"; | ||||
@@ -220,9 +220,6 @@ private: | |||||
std::unique_ptr<AlertWindow> demoRunnerAlert; | std::unique_ptr<AlertWindow> demoRunnerAlert; | ||||
bool hasScannedForDemoRunnerExecutable = false, hasScannedForDemoRunnerProject = false; | bool hasScannedForDemoRunnerExecutable = false, hasScannedForDemoRunnerProject = false; | ||||
File lastJUCEPath, lastDemoRunnerExectuableFile, lastDemoRunnerProjectFile; | File lastJUCEPath, lastDemoRunnerExectuableFile, lastDemoRunnerProjectFile; | ||||
#if JUCE_LINUX | |||||
ChildProcess makeProcess; | |||||
#endif | |||||
int selectedColourSchemeIndex = 0, selectedEditorColourSchemeIndex = 0; | int selectedColourSchemeIndex = 0, selectedEditorColourSchemeIndex = 0; | ||||
@@ -82,6 +82,8 @@ void LatestVersionCheckerAndUpdater::run() | |||||
return "windows"; | return "windows"; | ||||
#elif JUCE_LINUX | #elif JUCE_LINUX | ||||
return "linux"; | return "linux"; | ||||
#elif JUCE_BSD | |||||
return "bsd"; | |||||
#else | #else | ||||
jassertfalse; | jassertfalse; | ||||
return "Unknown"; | return "Unknown"; | ||||
@@ -444,7 +446,7 @@ private: | |||||
if (threadShouldExit()) | if (threadShouldExit()) | ||||
return Result::fail ("Cancelled"); | return Result::fail ("Cancelled"); | ||||
#if JUCE_LINUX || JUCE_MAC | |||||
#if JUCE_LINUX || JUCE_BSD || JUCE_MAC | |||||
r = setFilePermissions (unzipTarget.folder, zip); | r = setFilePermissions (unzipTarget.folder, zip); | ||||
if (r.failed()) | if (r.failed()) | ||||
@@ -502,10 +504,10 @@ private: | |||||
static void restartProcess (const File& targetFolder) | static void restartProcess (const File& targetFolder) | ||||
{ | { | ||||
#if JUCE_MAC || JUCE_LINUX | |||||
#if JUCE_MAC || JUCE_LINUX || JUCE_BSD | |||||
#if JUCE_MAC | #if JUCE_MAC | ||||
auto newProcess = targetFolder.getChildFile ("Projucer.app").getChildFile ("Contents").getChildFile ("MacOS").getChildFile ("Projucer"); | auto newProcess = targetFolder.getChildFile ("Projucer.app").getChildFile ("Contents").getChildFile ("MacOS").getChildFile ("Projucer"); | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
auto newProcess = targetFolder.getChildFile ("Projucer"); | auto newProcess = targetFolder.getChildFile ("Projucer"); | ||||
#endif | #endif | ||||
@@ -48,7 +48,7 @@ struct TargetOS | |||||
return windows; | return windows; | ||||
#elif JUCE_MAC | #elif JUCE_MAC | ||||
return osx; | return osx; | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
return linux; | return linux; | ||||
#else | #else | ||||
return unknown; | return unknown; | ||||
@@ -143,7 +143,7 @@ void LicenseController::logout() | |||||
thread.reset(); | thread.reset(); | ||||
updateState ({}); | updateState ({}); | ||||
#if ! JUCE_LINUX | |||||
#if ! (JUCE_LINUX || JUCE_BSD) | |||||
WebBrowserComponent::clearCookies(); | WebBrowserComponent::clearCookies(); | ||||
#endif | #endif | ||||
@@ -187,7 +187,7 @@ void LicenseController::ensureLicenseWebviewIsOpenWithPage (const String& param) | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
#if ! JUCE_LINUX | |||||
#if ! (JUCE_LINUX || JUCE_BSD) | |||||
WebBrowserComponent::clearCookies(); | WebBrowserComponent::clearCookies(); | ||||
#endif | #endif | ||||
@@ -96,7 +96,7 @@ struct CompileEngineDLL : private DeletedAtShutdown | |||||
{ | { | ||||
#if JUCE_MAC | #if JUCE_MAC | ||||
return "JUCECompileEngine.dylib"; | return "JUCECompileEngine.dylib"; | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
return "JUCECompileEngine.so"; | return "JUCECompileEngine.so"; | ||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
return "JUCECompileEngine.dll"; | return "JUCECompileEngine.dll"; | ||||
@@ -35,7 +35,7 @@ | |||||
#include "jucer_ProjectBuildInfo.h" | #include "jucer_ProjectBuildInfo.h" | ||||
#include "jucer_ClientServerMessages.h" | #include "jucer_ClientServerMessages.h" | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
#include <sys/types.h> | #include <sys/types.h> | ||||
#include <unistd.h> | #include <unistd.h> | ||||
#endif | #endif | ||||
@@ -95,7 +95,7 @@ private: | |||||
return "OSX"; | return "OSX"; | ||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
return "WINDOWS"; | return "WINDOWS"; | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
return "LINUX"; | return "LINUX"; | ||||
#else | #else | ||||
// unknown platform?! | // unknown platform?! | ||||
@@ -1369,9 +1369,9 @@ void ProjectContentComponent::handleMissingSystemHeaders() | |||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
String tabMessage ("Compiler not available due to missing system headers\nPlease install a recent version of Visual Studio and the Windows Desktop SDK"); | String tabMessage ("Compiler not available due to missing system headers\nPlease install a recent version of Visual Studio and the Windows Desktop SDK"); | ||||
String alertWindowMessage ("Missing system headers\nPlease install a recent version of Visual Studio and the Windows Desktop SDK"); | String alertWindowMessage ("Missing system headers\nPlease install a recent version of Visual Studio and the Windows Desktop SDK"); | ||||
#elif JUCE_LINUX | |||||
String tabMessage ("Compiler not available due to missing system headers\nPlease do a sudo apt-get install ..."); | |||||
String alertWindowMessage ("Missing system headers\nPlease do sudo apt-get install ..."); | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
String tabMessage ("Compiler not available due to missing system headers\nPlease insall using your package manager"); | |||||
String alertWindowMessage ("Missing system headers\nPlease insall using your package manager"); | |||||
#endif | #endif | ||||
setBuildEnabled (false, true); | setBuildEnabled (false, true); | ||||
@@ -112,7 +112,7 @@ public: | |||||
static Identifier exporterName (XcodeProjectExporter::getValueTreeTypeNameMac()); | static Identifier exporterName (XcodeProjectExporter::getValueTreeTypeNameMac()); | ||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
static Identifier exporterName (CodeBlocksProjectExporter::getValueTreeTypeNameWindows()); | static Identifier exporterName (CodeBlocksProjectExporter::getValueTreeTypeNameWindows()); | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
static Identifier exporterName (MakefileProjectExporter::getValueTreeTypeName()); | static Identifier exporterName (MakefileProjectExporter::getValueTreeTypeName()); | ||||
#else | #else | ||||
static Identifier exporterName; | static Identifier exporterName; | ||||
@@ -131,7 +131,7 @@ ProjectExporter::ExporterTypeInfo ProjectExporter::getCurrentPlatformExporterTyp | |||||
return ProjectExporter::getTypeInfoForExporter (XcodeProjectExporter::getValueTreeTypeNameMac()); | return ProjectExporter::getTypeInfoForExporter (XcodeProjectExporter::getValueTreeTypeNameMac()); | ||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
return ProjectExporter::getTypeInfoForExporter (MSVCProjectExporterVC2019::getValueTreeTypeName()); | return ProjectExporter::getTypeInfoForExporter (MSVCProjectExporterVC2019::getValueTreeTypeName()); | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
return ProjectExporter::getTypeInfoForExporter (MakefileProjectExporter::getValueTreeTypeName()); | return ProjectExporter::getTypeInfoForExporter (MakefileProjectExporter::getValueTreeTypeName()); | ||||
#else | #else | ||||
#error "unknown platform!" | #error "unknown platform!" | ||||
@@ -119,6 +119,8 @@ public: | |||||
return isWindows() || isAndroid(); | return isWindows() || isAndroid(); | ||||
#elif JUCE_LINUX | #elif JUCE_LINUX | ||||
return isLinux() || isAndroid(); | return isLinux() || isAndroid(); | ||||
#elif JUCE_BSD | |||||
return isLinux(); | |||||
#else | #else | ||||
#error | #error | ||||
#endif | #endif | ||||
@@ -510,7 +510,7 @@ public: | |||||
expect (referenceData.getSample (0, 10) < sv.getTargetValue()); | expect (referenceData.getSample (0, 10) < sv.getTargetValue()); | ||||
expectWithinAbsoluteError (referenceData.getSample (0, 11), | expectWithinAbsoluteError (referenceData.getSample (0, 11), | ||||
sv.getTargetValue(), | sv.getTargetValue(), | ||||
1.0e-7f); | |||||
2.0e-7f); | |||||
auto getUnitData = [] (int numSamplesToGenerate) | auto getUnitData = [] (int numSamplesToGenerate) | ||||
{ | { | ||||
@@ -528,7 +528,7 @@ public: | |||||
for (int i = 0; i < test.getNumSamples(); ++i) | for (int i = 0; i < test.getNumSamples(); ++i) | ||||
expectWithinAbsoluteError (test.getSample (0, i), | expectWithinAbsoluteError (test.getSample (0, i), | ||||
reference.getSample (0, i), | reference.getSample (0, i), | ||||
1.0e-7f); | |||||
2.0e-7f); | |||||
}; | }; | ||||
auto testData = getUnitData (numSamples); | auto testData = getUnitData (numSamples); | ||||
@@ -88,13 +88,13 @@ void AudioIODeviceType::callDeviceChangeListeners() | |||||
AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_ASIO() { return nullptr; } | AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_ASIO() { return nullptr; } | ||||
#endif | #endif | ||||
#if JUCE_LINUX && JUCE_ALSA | |||||
#if (JUCE_LINUX || JUCE_BSD) && JUCE_ALSA | |||||
AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_ALSA() { return createAudioIODeviceType_ALSA_PCMDevices(); } | AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_ALSA() { return createAudioIODeviceType_ALSA_PCMDevices(); } | ||||
#else | #else | ||||
AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_ALSA() { return nullptr; } | AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_ALSA() { return nullptr; } | ||||
#endif | #endif | ||||
#if JUCE_LINUX && JUCE_JACK | |||||
#if (JUCE_LINUX || JUCE_BSD) && JUCE_JACK | |||||
AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_JACK() { return new JackAudioIODeviceType(); } | AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_JACK() { return new JackAudioIODeviceType(); } | ||||
#else | #else | ||||
AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_JACK() { return nullptr; } | AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_JACK() { return nullptr; } | ||||
@@ -162,7 +162,7 @@ namespace ump = universal_midi_packets; | |||||
#endif | #endif | ||||
//============================================================================== | //============================================================================== | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
#if JUCE_ALSA | #if JUCE_ALSA | ||||
/* Got an include error here? If so, you've either not got ALSA installed, or you've | /* Got an include error here? If so, you've either not got ALSA installed, or you've | ||||
not got your paths set up correctly to find its header files. | not got your paths set up correctly to find its header files. | ||||
@@ -189,7 +189,7 @@ namespace ump = universal_midi_packets; | |||||
#include "native/juce_linux_JackAudio.cpp" | #include "native/juce_linux_JackAudio.cpp" | ||||
#endif | #endif | ||||
#if JUCE_BELA | |||||
#if (JUCE_LINUX && JUCE_BELA) | |||||
/* Got an include error here? If so, you've either not got the bela headers | /* Got an include error here? If so, you've either not got the bela headers | ||||
installed, or you've not got your paths set up correctly to find its header | installed, or you've not got your paths set up correctly to find its header | ||||
files. | files. | ||||
@@ -108,7 +108,7 @@ public: | |||||
*/ | */ | ||||
static std::unique_ptr<MidiInput> openDevice (const String& deviceIdentifier, MidiInputCallback* callback); | static std::unique_ptr<MidiInput> openDevice (const String& deviceIdentifier, MidiInputCallback* callback); | ||||
#if JUCE_LINUX || JUCE_MAC || JUCE_IOS || DOXYGEN | |||||
#if JUCE_LINUX || JUCE_BSD || JUCE_MAC || JUCE_IOS || DOXYGEN | |||||
/** This will try to create a new midi input device (only available on Linux, macOS and iOS). | /** This will try to create a new midi input device (only available on Linux, macOS and iOS). | ||||
This will attempt to create a new midi input device with the specified name for other | This will attempt to create a new midi input device with the specified name for other | ||||
@@ -268,7 +268,7 @@ public: | |||||
*/ | */ | ||||
static std::unique_ptr<MidiOutput> openDevice (const String& deviceIdentifier); | static std::unique_ptr<MidiOutput> openDevice (const String& deviceIdentifier); | ||||
#if JUCE_LINUX || JUCE_MAC || JUCE_IOS || DOXYGEN | |||||
#if JUCE_LINUX || JUCE_BSD || JUCE_MAC || JUCE_IOS || DOXYGEN | |||||
/** This will try to create a new midi output device (only available on Linux, macOS and iOS). | /** This will try to create a new midi output device (only available on Linux, macOS and iOS). | ||||
This will attempt to create a new midi output device with the specified name that other | This will attempt to create a new midi output device with the specified name that other | ||||
@@ -58,7 +58,7 @@ public: | |||||
options.applicationName = getApplicationName(); | options.applicationName = getApplicationName(); | ||||
options.filenameSuffix = ".settings"; | options.filenameSuffix = ".settings"; | ||||
options.osxLibrarySubFolder = "Application Support"; | options.osxLibrarySubFolder = "Application Support"; | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
options.folderName = "~/.config"; | options.folderName = "~/.config"; | ||||
#else | #else | ||||
options.folderName = ""; | options.folderName = ""; | ||||
@@ -188,7 +188,7 @@ namespace | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
struct SharedMessageThread : public Thread | struct SharedMessageThread : public Thread | ||||
{ | { | ||||
@@ -364,7 +364,7 @@ public: | |||||
JUCE_AUTORELEASEPOOL | JUCE_AUTORELEASEPOOL | ||||
{ | { | ||||
{ | { | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
MessageManagerLock mmLock; | MessageManagerLock mmLock; | ||||
#endif | #endif | ||||
stopTimer(); | stopTimer(); | ||||
@@ -385,7 +385,7 @@ public: | |||||
if (activePlugins.size() == 0) | if (activePlugins.size() == 0) | ||||
{ | { | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
SharedMessageThread::deleteInstance(); | SharedMessageThread::deleteInstance(); | ||||
#endif | #endif | ||||
shutdownJuce_GUI(); | shutdownJuce_GUI(); | ||||
@@ -1066,11 +1066,11 @@ public: | |||||
{ | { | ||||
setVisible (false); | setVisible (false); | ||||
#if JUCE_WINDOWS || JUCE_LINUX | |||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD | |||||
addToDesktop (0, args.ptr); | addToDesktop (0, args.ptr); | ||||
hostWindow = (HostWindowType) args.ptr; | hostWindow = (HostWindowType) args.ptr; | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
X11Symbols::getInstance()->xReparentWindow (display, | X11Symbols::getInstance()->xReparentWindow (display, | ||||
(Window) getWindowHandle(), | (Window) getWindowHandle(), | ||||
(HostWindowType) hostWindow, | (HostWindowType) hostWindow, | ||||
@@ -1174,7 +1174,7 @@ public: | |||||
{ | { | ||||
const ScopedValueSetter<bool> resizingParentSetter (resizingParent, true); | const ScopedValueSetter<bool> resizingParentSetter (resizingParent, true); | ||||
#if JUCE_LINUX // setSize() on linux causes renoise and energyxt to fail. | |||||
#if JUCE_LINUX || JUCE_BSD // setSize() on linux causes renoise and energyxt to fail. | |||||
auto rect = convertToHostBounds ({ 0, 0, (int16) editorBounds.getHeight(), (int16) editorBounds.getWidth() }); | auto rect = convertToHostBounds ({ 0, 0, (int16) editorBounds.getHeight(), (int16) editorBounds.getWidth() }); | ||||
X11Symbols::getInstance()->xResizeWindow (display, (Window) getWindowHandle(), | X11Symbols::getInstance()->xResizeWindow (display, (Window) getWindowHandle(), | ||||
@@ -1219,7 +1219,7 @@ public: | |||||
#if JUCE_MAC | #if JUCE_MAC | ||||
setNativeHostWindowSizeVST (hostWindow, this, newWidth, newHeight, wrapper.useNSView); | setNativeHostWindowSizeVST (hostWindow, this, newWidth, newHeight, wrapper.useNSView); | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
// (Currently, all linux hosts support sizeWindow, so this should never need to happen) | // (Currently, all linux hosts support sizeWindow, so this should never need to happen) | ||||
setSize (newWidth, newHeight); | setSize (newWidth, newHeight); | ||||
#else | #else | ||||
@@ -1355,7 +1355,7 @@ public: | |||||
float editorScaleFactor = 1.0f; | float editorScaleFactor = 1.0f; | ||||
juce::Rectangle<int> lastBounds; | juce::Rectangle<int> lastBounds; | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
using HostWindowType = ::Window; | using HostWindowType = ::Window; | ||||
::Display* display = XWindowSystem::getInstance()->getDisplay(); | ::Display* display = XWindowSystem::getInstance()->getDisplay(); | ||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
@@ -2142,7 +2142,7 @@ namespace | |||||
{ | { | ||||
if (audioMaster (nullptr, Vst2::audioMasterVersion, 0, 0, nullptr, 0) != 0) | if (audioMaster (nullptr, Vst2::audioMasterVersion, 0, 0, nullptr, 0) != 0) | ||||
{ | { | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
MessageManagerLock mmLock; | MessageManagerLock mmLock; | ||||
#endif | #endif | ||||
@@ -2197,7 +2197,7 @@ namespace | |||||
//============================================================================== | //============================================================================== | ||||
// Linux startup code.. | // Linux startup code.. | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster); | JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster); | ||||
JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster) | JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster) | ||||
@@ -36,7 +36,7 @@ | |||||
#ifdef __INTEL_COMPILER | #ifdef __INTEL_COMPILER | ||||
#pragma warning (disable : 1899) | #pragma warning (disable : 1899) | ||||
#endif | #endif | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
#include <float.h> | #include <float.h> | ||||
#include <sys/time.h> | #include <sys/time.h> | ||||
#include <arpa/inet.h> | #include <arpa/inet.h> | ||||
@@ -42,7 +42,7 @@ namespace juce | |||||
#define JUCE_VST3_CAN_REPLACE_VST2 1 | #define JUCE_VST3_CAN_REPLACE_VST2 1 | ||||
#endif | #endif | ||||
#if JucePlugin_Build_VST3 && JUCE_VST3_CAN_REPLACE_VST2 && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) | |||||
#if JucePlugin_Build_VST3 && JUCE_VST3_CAN_REPLACE_VST2 && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD) | |||||
#define VST3_REPLACEMENT_AVAILABLE 1 | #define VST3_REPLACEMENT_AVAILABLE 1 | ||||
// NB: Nasty old-fashioned code in here because it's copied from the Steinberg example code. | // NB: Nasty old-fashioned code in here because it's copied from the Steinberg example code. | ||||
@@ -38,7 +38,7 @@ void AudioPluginFormatManager::addDefaultFormats() | |||||
{ | { | ||||
ignoreUnused (format); | ignoreUnused (format); | ||||
#if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS) | |||||
#if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD || JUCE_IOS) | |||||
jassert (dynamic_cast<VSTPluginFormat*> (format) == nullptr); | jassert (dynamic_cast<VSTPluginFormat*> (format) == nullptr); | ||||
#endif | #endif | ||||
@@ -50,7 +50,7 @@ void AudioPluginFormatManager::addDefaultFormats() | |||||
jassert (dynamic_cast<AudioUnitPluginFormat*> (format) == nullptr); | jassert (dynamic_cast<AudioUnitPluginFormat*> (format) == nullptr); | ||||
#endif | #endif | ||||
#if JUCE_PLUGINHOST_LADSPA && JUCE_LINUX | |||||
#if JUCE_PLUGINHOST_LADSPA && (JUCE_LINUX || JUCE_BSD) | |||||
jassert (dynamic_cast<LADSPAPluginFormat*> (format) == nullptr); | jassert (dynamic_cast<LADSPAPluginFormat*> (format) == nullptr); | ||||
#endif | #endif | ||||
} | } | ||||
@@ -60,7 +60,7 @@ void AudioPluginFormatManager::addDefaultFormats() | |||||
formats.add (new AudioUnitPluginFormat()); | formats.add (new AudioUnitPluginFormat()); | ||||
#endif | #endif | ||||
#if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS) | |||||
#if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD || JUCE_IOS) | |||||
formats.add (new VSTPluginFormat()); | formats.add (new VSTPluginFormat()); | ||||
#endif | #endif | ||||
@@ -68,7 +68,7 @@ void AudioPluginFormatManager::addDefaultFormats() | |||||
formats.add (new VST3PluginFormat()); | formats.add (new VST3PluginFormat()); | ||||
#endif | #endif | ||||
#if JUCE_PLUGINHOST_LADSPA && JUCE_LINUX | |||||
#if JUCE_PLUGINHOST_LADSPA && (JUCE_LINUX || JUCE_BSD) | |||||
formats.add (new LADSPAPluginFormat()); | formats.add (new LADSPAPluginFormat()); | ||||
#endif | #endif | ||||
} | } | ||||
@@ -23,7 +23,7 @@ | |||||
============================================================================== | ============================================================================== | ||||
*/ | */ | ||||
#if JUCE_PLUGINHOST_LADSPA && JUCE_LINUX | |||||
#if JUCE_PLUGINHOST_LADSPA && (JUCE_LINUX || JUCE_BSD) | |||||
#include <ladspa.h> | #include <ladspa.h> | ||||
@@ -26,7 +26,7 @@ | |||||
namespace juce | namespace juce | ||||
{ | { | ||||
#if (JUCE_PLUGINHOST_LADSPA && JUCE_LINUX) || DOXYGEN | |||||
#if (JUCE_PLUGINHOST_LADSPA && (JUCE_LINUX || JUCE_BSD)) || DOXYGEN | |||||
//============================================================================== | //============================================================================== | ||||
/** | /** | ||||
@@ -173,7 +173,7 @@ namespace | |||||
{ | { | ||||
#if JUCE_WINDOWS | #if JUCE_WINDOWS | ||||
return timeGetTime() * 1000000.0; | return timeGetTime() * 1000000.0; | ||||
#elif JUCE_LINUX || JUCE_IOS || JUCE_ANDROID | |||||
#elif JUCE_LINUX || JUCE_BSD || JUCE_IOS || JUCE_ANDROID | |||||
timeval micro; | timeval micro; | ||||
gettimeofday (µ, nullptr); | gettimeofday (µ, nullptr); | ||||
return (double) micro.tv_usec * 1000.0; | return (double) micro.tv_usec * 1000.0; | ||||
@@ -230,7 +230,7 @@ static pointer_sized_int VSTCALLBACK audioMaster (Vst2::AEffect*, int32, int32, | |||||
#endif | #endif | ||||
//============================================================================== | //============================================================================== | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
namespace | namespace | ||||
{ | { | ||||
@@ -624,7 +624,7 @@ struct ModuleHandle : public ReferenceCountedObject | |||||
{ | { | ||||
getActiveModules().add (this); | getActiveModules().add (this); | ||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS || JUCE_ANDROID | |||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD || JUCE_IOS || JUCE_ANDROID | |||||
fullParentDirectoryPathName = f.getParentDirectory().getFullPathName(); | fullParentDirectoryPathName = f.getParentDirectory().getFullPathName(); | ||||
#elif JUCE_MAC | #elif JUCE_MAC | ||||
FSRef ref; | FSRef ref; | ||||
@@ -644,7 +644,7 @@ struct ModuleHandle : public ReferenceCountedObject | |||||
String fullParentDirectoryPathName; | String fullParentDirectoryPathName; | ||||
#endif | #endif | ||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_ANDROID | |||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD || JUCE_ANDROID | |||||
DynamicLibrary module; | DynamicLibrary module; | ||||
bool open() | bool open() | ||||
@@ -2108,7 +2108,7 @@ private: | |||||
{ | { | ||||
if (auto* ed = getActiveEditor()) | if (auto* ed = getActiveEditor()) | ||||
{ | { | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
const MessageManagerLock mmLock; | const MessageManagerLock mmLock; | ||||
#endif | #endif | ||||
@@ -2742,7 +2742,7 @@ public: | |||||
#endif | #endif | ||||
plugin (plug) | plugin (plug) | ||||
{ | { | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
pluginWindow = None; | pluginWindow = None; | ||||
ignoreUnused (pluginRefusesToResize, alreadyInside); | ignoreUnused (pluginRefusesToResize, alreadyInside); | ||||
#elif JUCE_MAC | #elif JUCE_MAC | ||||
@@ -2827,7 +2827,7 @@ public: | |||||
{ | { | ||||
if (isOpen) | if (isOpen) | ||||
{ | { | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
if (pluginWindow != 0) | if (pluginWindow != 0) | ||||
{ | { | ||||
auto clip = g.getClipBounds(); | auto clip = g.getClipBounds(); | ||||
@@ -2861,7 +2861,7 @@ public: | |||||
ScopedThreadDPIAwarenessSetter threadDpiAwarenessSetter { pluginHWND }; | ScopedThreadDPIAwarenessSetter threadDpiAwarenessSetter { pluginHWND }; | ||||
MoveWindow (pluginHWND, pos.getX(), pos.getY(), pos.getWidth(), pos.getHeight(), TRUE); | MoveWindow (pluginHWND, pos.getX(), pos.getY(), pos.getWidth(), pos.getHeight(), TRUE); | ||||
} | } | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
if (pluginWindow != 0) | if (pluginWindow != 0) | ||||
{ | { | ||||
X11Symbols::getInstance()->xMoveResizeWindow (display, pluginWindow, | X11Symbols::getInstance()->xMoveResizeWindow (display, pluginWindow, | ||||
@@ -2888,7 +2888,7 @@ public: | |||||
if (auto* peer = getTopLevelComponent()->getPeer()) | if (auto* peer = getTopLevelComponent()->getPeer()) | ||||
setScaleFactorAndDispatchMessage (peer->getPlatformScaleFactor()); | setScaleFactorAndDispatchMessage (peer->getPlatformScaleFactor()); | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
SafePointer<VSTPluginWindow> safeThis (this); | SafePointer<VSTPluginWindow> safeThis (this); | ||||
MessageManager::callAsync ([this, safeThis] | MessageManager::callAsync ([this, safeThis] | ||||
@@ -2963,7 +2963,7 @@ public: | |||||
reentrantGuard = false; | reentrantGuard = false; | ||||
} | } | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
if (pluginWindow == 0) | if (pluginWindow == 0) | ||||
{ | { | ||||
updatePluginWindowHandle(); | updatePluginWindowHandle(); | ||||
@@ -2980,7 +2980,7 @@ public: | |||||
{ | { | ||||
ignoreUnused (e); | ignoreUnused (e); | ||||
#if JUCE_WINDOWS || JUCE_LINUX | |||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD | |||||
toFront (true); | toFront (true); | ||||
#endif | #endif | ||||
} | } | ||||
@@ -3138,7 +3138,7 @@ private: | |||||
} | } | ||||
} | } | ||||
} | } | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
updatePluginWindowHandle(); | updatePluginWindowHandle(); | ||||
int w = 250, h = 150; | int w = 250, h = 150; | ||||
@@ -3206,7 +3206,7 @@ private: | |||||
originalWndProc = 0; | originalWndProc = 0; | ||||
pluginHWND = 0; | pluginHWND = 0; | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
pluginWindow = 0; | pluginWindow = 0; | ||||
#endif | #endif | ||||
} | } | ||||
@@ -3287,7 +3287,7 @@ private: | |||||
} | } | ||||
#endif | #endif | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
void updatePluginWindowHandle() | void updatePluginWindowHandle() | ||||
{ | { | ||||
pluginWindow = getChildWindow ((Window) getWindowHandle()); | pluginWindow = getChildWindow ((Window) getWindowHandle()); | ||||
@@ -3402,7 +3402,7 @@ private: | |||||
HWND pluginHWND = {}; | HWND pluginHWND = {}; | ||||
void* originalWndProc = {}; | void* originalWndProc = {}; | ||||
int sizeCheckCount = 0; | int sizeCheckCount = 0; | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
::Display* display = XWindowSystem::getInstance()->getDisplay(); | ::Display* display = XWindowSystem::getInstance()->getDisplay(); | ||||
Window pluginWindow = 0; | Window pluginWindow = 0; | ||||
#endif | #endif | ||||
@@ -3562,7 +3562,7 @@ bool VSTPluginFormat::fileMightContainThisPluginType (const String& fileOrIdenti | |||||
return f.isDirectory() && f.hasFileExtension (".vst"); | return f.isDirectory() && f.hasFileExtension (".vst"); | ||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
return f.existsAsFile() && f.hasFileExtension (".dll"); | return f.existsAsFile() && f.hasFileExtension (".dll"); | ||||
#elif JUCE_LINUX || JUCE_ANDROID | |||||
#elif JUCE_LINUX || JUCE_BSD || JUCE_ANDROID | |||||
return f.existsAsFile() && f.hasFileExtension (".so"); | return f.existsAsFile() && f.hasFileExtension (".so"); | ||||
#endif | #endif | ||||
} | } | ||||
@@ -3616,7 +3616,7 @@ FileSearchPath VSTPluginFormat::getDefaultLocationsToSearch() | |||||
{ | { | ||||
#if JUCE_MAC | #if JUCE_MAC | ||||
return FileSearchPath ("~/Library/Audio/Plug-Ins/VST;/Library/Audio/Plug-Ins/VST"); | return FileSearchPath ("~/Library/Audio/Plug-Ins/VST;/Library/Audio/Plug-Ins/VST"); | ||||
#elif JUCE_LINUX || JUCE_ANDROID | |||||
#elif JUCE_LINUX || JUCE_BSD || JUCE_ANDROID | |||||
return FileSearchPath (SystemStats::getEnvironmentVariable ("VST_PATH", | return FileSearchPath (SystemStats::getEnvironmentVariable ("VST_PATH", | ||||
"/usr/lib/vst;/usr/local/lib/vst;~/.vst") | "/usr/lib/vst;/usr/local/lib/vst;~/.vst") | ||||
.replace (":", ";")); | .replace (":", ";")); | ||||
@@ -48,7 +48,7 @@ | |||||
#endif | #endif | ||||
#endif | #endif | ||||
#if (JUCE_PLUGINHOST_VST || JUCE_PLUGINHOST_VST3) && JUCE_LINUX | |||||
#if (JUCE_PLUGINHOST_VST || JUCE_PLUGINHOST_VST3) && (JUCE_LINUX || JUCE_BSD) | |||||
#include <X11/Xlib.h> | #include <X11/Xlib.h> | ||||
#include <X11/Xutil.h> | #include <X11/Xutil.h> | ||||
#include <sys/utsname.h> | #include <sys/utsname.h> | ||||
@@ -68,7 +68,7 @@ | |||||
namespace juce | namespace juce | ||||
{ | { | ||||
#if JUCE_PLUGINHOST_VST || (JUCE_PLUGINHOST_LADSPA && JUCE_LINUX) | |||||
#if JUCE_PLUGINHOST_VST || (JUCE_PLUGINHOST_LADSPA && JUCE_LINUX || JUCE_BSD) | |||||
static bool arrayContainsPlugin (const OwnedArray<PluginDescription>& list, | static bool arrayContainsPlugin (const OwnedArray<PluginDescription>& list, | ||||
const PluginDescription& desc) | const PluginDescription& desc) | ||||
@@ -290,7 +290,7 @@ PluginHostType::HostType PluginHostType::getHostType() | |||||
if (hostFilename.containsIgnoreCase ("AudioPluginHost")) return JUCEPluginHost; | if (hostFilename.containsIgnoreCase ("AudioPluginHost")) return JUCEPluginHost; | ||||
if (hostFilename.containsIgnoreCase ("Vienna Ensemble Pro")) return ViennaEnsemblePro; | if (hostFilename.containsIgnoreCase ("Vienna Ensemble Pro")) return ViennaEnsemblePro; | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
if (hostFilename.containsIgnoreCase ("Ardour")) return Ardour; | if (hostFilename.containsIgnoreCase ("Ardour")) return Ardour; | ||||
if (hostFilename.startsWithIgnoreCase ("Waveform")) return TracktionWaveform; | if (hostFilename.startsWithIgnoreCase ("Waveform")) return TracktionWaveform; | ||||
if (hostFilename.containsIgnoreCase ("Tracktion")) return TracktionGeneric; | if (hostFilename.containsIgnoreCase ("Tracktion")) return TracktionGeneric; | ||||
@@ -166,7 +166,7 @@ private: | |||||
AudioCDReader (void* handle); | AudioCDReader (void* handle); | ||||
int getIndexAt (int samplePos); | int getIndexAt (int samplePos); | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
AudioCDReader(); | AudioCDReader(); | ||||
#endif | #endif | ||||
@@ -81,7 +81,7 @@ | |||||
#elif JUCE_ANDROID | #elif JUCE_ANDROID | ||||
#include "native/juce_android_BluetoothMidiDevicePairingDialogue.cpp" | #include "native/juce_android_BluetoothMidiDevicePairingDialogue.cpp" | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
#if JUCE_USE_CDREADER | #if JUCE_USE_CDREADER | ||||
#include "native/juce_linux_AudioCDReader.cpp" | #include "native/juce_linux_AudioCDReader.cpp" | ||||
#endif | #endif | ||||
@@ -231,7 +231,7 @@ String File::addTrailingSeparator (const String& path) | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
#define NAMES_ARE_CASE_SENSITIVE 1 | #define NAMES_ARE_CASE_SENSITIVE 1 | ||||
#endif | #endif | ||||
@@ -1061,7 +1061,25 @@ public: | |||||
expect (! home.isOnCDRomDrive()); | expect (! home.isOnCDRomDrive()); | ||||
expect (File::getCurrentWorkingDirectory().exists()); | expect (File::getCurrentWorkingDirectory().exists()); | ||||
expect (home.setAsCurrentWorkingDirectory()); | expect (home.setAsCurrentWorkingDirectory()); | ||||
expect (File::getCurrentWorkingDirectory() == home); | |||||
{ | |||||
auto homeParent = home; | |||||
bool noSymlinks = true; | |||||
while (! homeParent.isRoot()) | |||||
{ | |||||
if (homeParent.isSymbolicLink()) | |||||
{ | |||||
noSymlinks = false; | |||||
break; | |||||
} | |||||
homeParent = homeParent.getParentDirectory(); | |||||
} | |||||
if (noSymlinks) | |||||
expect (File::getCurrentWorkingDirectory() == home); | |||||
} | |||||
{ | { | ||||
Array<File> roots; | Array<File> roots; | ||||
@@ -64,7 +64,7 @@ | |||||
#endif | #endif | ||||
#else | #else | ||||
#if JUCE_LINUX || JUCE_ANDROID | |||||
#if JUCE_LINUX || JUCE_BSD || JUCE_ANDROID | |||||
#include <sys/types.h> | #include <sys/types.h> | ||||
#include <sys/socket.h> | #include <sys/socket.h> | ||||
#include <sys/errno.h> | #include <sys/errno.h> | ||||
@@ -82,7 +82,7 @@ | |||||
#include <sys/stat.h> | #include <sys/stat.h> | ||||
#endif | #endif | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
#include <stdio.h> | #include <stdio.h> | ||||
#include <langinfo.h> | #include <langinfo.h> | ||||
#include <ifaddrs.h> | #include <ifaddrs.h> | ||||
@@ -206,6 +206,7 @@ | |||||
#include "native/juce_mac_Files.mm" | #include "native/juce_mac_Files.mm" | ||||
#include "native/juce_mac_Network.mm" | #include "native/juce_mac_Network.mm" | ||||
#include "native/juce_mac_Strings.mm" | #include "native/juce_mac_Strings.mm" | ||||
#include "native/juce_intel_SharedCode.h" | |||||
#include "native/juce_mac_SystemStats.mm" | #include "native/juce_mac_SystemStats.mm" | ||||
#include "native/juce_mac_Threads.mm" | #include "native/juce_mac_Threads.mm" | ||||
@@ -218,13 +219,16 @@ | |||||
#include "native/juce_win32_Threads.cpp" | #include "native/juce_win32_Threads.cpp" | ||||
//============================================================================== | //============================================================================== | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
#include "native/juce_linux_CommonFile.cpp" | #include "native/juce_linux_CommonFile.cpp" | ||||
#include "native/juce_linux_Files.cpp" | #include "native/juce_linux_Files.cpp" | ||||
#include "native/juce_linux_Network.cpp" | #include "native/juce_linux_Network.cpp" | ||||
#if JUCE_USE_CURL | #if JUCE_USE_CURL | ||||
#include "native/juce_curl_Network.cpp" | #include "native/juce_curl_Network.cpp" | ||||
#endif | #endif | ||||
#if JUCE_BSD | |||||
#include "native/juce_intel_SharedCode.h" | |||||
#endif | |||||
#include "native/juce_linux_SystemStats.cpp" | #include "native/juce_linux_SystemStats.cpp" | ||||
#include "native/juce_linux_Threads.cpp" | #include "native/juce_linux_Threads.cpp" | ||||
@@ -258,7 +258,10 @@ | |||||
#include <errno.h> | #include <errno.h> | ||||
#include <fcntl.h> | #include <fcntl.h> | ||||
#include <fnmatch.h> | #include <fnmatch.h> | ||||
#include <ifaddrs.h> | |||||
#include <langinfo.h> | |||||
#include <net/if.h> | #include <net/if.h> | ||||
#include <net/if_dl.h> | |||||
#include <netdb.h> | #include <netdb.h> | ||||
#include <netinet/in.h> | #include <netinet/in.h> | ||||
#include <pthread.h> | #include <pthread.h> | ||||
@@ -273,8 +276,10 @@ | |||||
#include <sys/ptrace.h> | #include <sys/ptrace.h> | ||||
#include <sys/socket.h> | #include <sys/socket.h> | ||||
#include <sys/stat.h> | #include <sys/stat.h> | ||||
#include <sys/sysctl.h> | |||||
#include <sys/time.h> | #include <sys/time.h> | ||||
#include <sys/types.h> | #include <sys/types.h> | ||||
#include <sys/user.h> | |||||
#include <sys/wait.h> | #include <sys/wait.h> | ||||
#include <utime.h> | #include <utime.h> | ||||
#include <poll.h> | #include <poll.h> | ||||
@@ -0,0 +1,108 @@ | |||||
/* | |||||
============================================================================== | |||||
This file is part of the JUCE library. | |||||
Copyright (c) 2020 - Raw Material Software Limited | |||||
JUCE is an open source library subject to commercial or open-source | |||||
licensing. | |||||
The code included in this file is provided under the terms of the ISC license | |||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission | |||||
To use, copy, modify, and/or distribute this software for any purpose with or | |||||
without fee is hereby granted provided that the above copyright notice and | |||||
this permission notice appear in all copies. | |||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER | |||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE | |||||
DISCLAIMED. | |||||
============================================================================== | |||||
*/ | |||||
namespace juce | |||||
{ | |||||
#if JUCE_INTEL && ! JUCE_NO_INLINE_ASM | |||||
namespace SystemStatsHelpers | |||||
{ | |||||
static void doCPUID (uint32& a, uint32& b, uint32& c, uint32& d, uint32 type) | |||||
{ | |||||
uint32 la = a, lb = b, lc = c, ld = d; | |||||
#if JUCE_32BIT && defined (__pic__) | |||||
asm ("mov %%ebx, %%edi\n" | |||||
"cpuid\n" | |||||
"xchg %%edi, %%ebx\n" | |||||
: "=a" (la), "=D" (lb), "=c" (lc), "=d" (ld) | |||||
: "a" (type), "c" (0)); | |||||
#else | |||||
asm ("cpuid\n" | |||||
: "=a" (la), "=b" (lb), "=c" (lc), "=d" (ld) | |||||
: "a" (type), "c" (0)); | |||||
#endif | |||||
a = la; b = lb; c = lc; d = ld; | |||||
} | |||||
static void getCPUInfo (bool& hasMMX, | |||||
bool& hasSSE, | |||||
bool& hasSSE2, | |||||
bool& has3DNow, | |||||
bool& hasSSE3, | |||||
bool& hasSSSE3, | |||||
bool& hasFMA3, | |||||
bool& hasSSE41, | |||||
bool& hasSSE42, | |||||
bool& hasAVX, | |||||
bool& hasFMA4, | |||||
bool& hasAVX2, | |||||
bool& hasAVX512F, | |||||
bool& hasAVX512DQ, | |||||
bool& hasAVX512IFMA, | |||||
bool& hasAVX512PF, | |||||
bool& hasAVX512ER, | |||||
bool& hasAVX512CD, | |||||
bool& hasAVX512BW, | |||||
bool& hasAVX512VL, | |||||
bool& hasAVX512VBMI, | |||||
bool& hasAVX512VPOPCNTDQ) | |||||
{ | |||||
uint32 a = 0, b = 0, d = 0, c = 0; | |||||
SystemStatsHelpers::doCPUID (a, b, c, d, 1); | |||||
hasMMX = (d & (1u << 23)) != 0; | |||||
hasSSE = (d & (1u << 25)) != 0; | |||||
hasSSE2 = (d & (1u << 26)) != 0; | |||||
has3DNow = (b & (1u << 31)) != 0; | |||||
hasSSE3 = (c & (1u << 0)) != 0; | |||||
hasSSSE3 = (c & (1u << 9)) != 0; | |||||
hasFMA3 = (c & (1u << 12)) != 0; | |||||
hasSSE41 = (c & (1u << 19)) != 0; | |||||
hasSSE42 = (c & (1u << 20)) != 0; | |||||
hasAVX = (c & (1u << 28)) != 0; | |||||
SystemStatsHelpers::doCPUID (a, b, c, d, 0x80000001); | |||||
hasFMA4 = (c & (1u << 16)) != 0; | |||||
SystemStatsHelpers::doCPUID (a, b, c, d, 7); | |||||
hasAVX2 = (b & (1u << 5)) != 0; | |||||
hasAVX512F = (b & (1u << 16)) != 0; | |||||
hasAVX512DQ = (b & (1u << 17)) != 0; | |||||
hasAVX512IFMA = (b & (1u << 21)) != 0; | |||||
hasAVX512PF = (b & (1u << 26)) != 0; | |||||
hasAVX512ER = (b & (1u << 27)) != 0; | |||||
hasAVX512CD = (b & (1u << 28)) != 0; | |||||
hasAVX512BW = (b & (1u << 30)) != 0; | |||||
hasAVX512VL = (b & (1u << 31)) != 0; | |||||
hasAVX512VBMI = (c & (1u << 1)) != 0; | |||||
hasAVX512VPOPCNTDQ = (c & (1u << 14)) != 0; | |||||
} | |||||
} // namespace SystemStatsHelpers | |||||
#endif | |||||
} // namespace juce |
@@ -62,8 +62,9 @@ bool File::isSymbolicLink() const | |||||
String File::getNativeLinkedTarget() const | String File::getNativeLinkedTarget() const | ||||
{ | { | ||||
HeapBlock<char> buffer (8194); | |||||
const int numBytes = (int) readlink (getFullPathName().toRawUTF8(), buffer, 8192); | |||||
constexpr int bufferSize = 8194; | |||||
HeapBlock<char> buffer (bufferSize); | |||||
auto numBytes = (int) readlink (getFullPathName().toRawUTF8(), buffer, bufferSize - 2); | |||||
return String::fromUTF8 (buffer, jmax (0, numBytes)); | return String::fromUTF8 (buffer, jmax (0, numBytes)); | ||||
} | } | ||||
@@ -20,6 +20,10 @@ | |||||
============================================================================== | ============================================================================== | ||||
*/ | */ | ||||
#if JUCE_BSD | |||||
extern char** environ; | |||||
#endif | |||||
namespace juce | namespace juce | ||||
{ | { | ||||
@@ -149,8 +153,12 @@ File File::getSpecialLocation (const SpecialLocationType type) | |||||
case hostApplicationPath: | case hostApplicationPath: | ||||
{ | { | ||||
#if JUCE_BSD | |||||
return juce_getExecutableFile(); | |||||
#else | |||||
const File f ("/proc/self/exe"); | const File f ("/proc/self/exe"); | ||||
return f.isSymbolicLink() ? f.getLinkedTarget() : juce_getExecutableFile(); | return f.isSymbolicLink() ? f.getLinkedTarget() : juce_getExecutableFile(); | ||||
#endif | |||||
} | } | ||||
default: | default: | ||||
@@ -25,6 +25,26 @@ namespace juce | |||||
void MACAddress::findAllAddresses (Array<MACAddress>& result) | void MACAddress::findAllAddresses (Array<MACAddress>& result) | ||||
{ | { | ||||
#if JUCE_BSD | |||||
struct ifaddrs* addrs = nullptr; | |||||
if (getifaddrs (&addrs) != -1) | |||||
{ | |||||
for (auto* i = addrs; i != nullptr; i = i->ifa_next) | |||||
{ | |||||
if (i->ifa_addr->sa_family == AF_LINK) | |||||
{ | |||||
struct sockaddr_dl* sdl = (struct sockaddr_dl*) i->ifa_addr; | |||||
MACAddress ma ((const uint8*) (sdl->sdl_data + sdl->sdl_nlen)); | |||||
if (! ma.isNull()) | |||||
result.addIfNotAlreadyThere (ma); | |||||
} | |||||
} | |||||
freeifaddrs (addrs); | |||||
} | |||||
#else | |||||
auto s = socket (AF_INET, SOCK_DGRAM, 0); | auto s = socket (AF_INET, SOCK_DGRAM, 0); | ||||
if (s != -1) | if (s != -1) | ||||
@@ -53,6 +73,7 @@ void MACAddress::findAllAddresses (Array<MACAddress>& result) | |||||
::close (s); | ::close (s); | ||||
} | } | ||||
#endif | |||||
} | } | ||||
@@ -27,6 +27,22 @@ extern "C" int cobalt_thread_mode(); | |||||
namespace juce | namespace juce | ||||
{ | { | ||||
#if ! JUCE_BSD | |||||
static String getCpuInfo (const char* key) | |||||
{ | |||||
return readPosixConfigFileValue ("/proc/cpuinfo", key); | |||||
} | |||||
static String getLocaleValue (nl_item key) | |||||
{ | |||||
auto oldLocale = ::setlocale (LC_ALL, ""); | |||||
auto result = String::fromUTF8 (nl_langinfo (key)); | |||||
::setlocale (LC_ALL, oldLocale); | |||||
return result; | |||||
} | |||||
#endif | |||||
//============================================================================== | |||||
void Logger::outputDebugString (const String& text) | void Logger::outputDebugString (const String& text) | ||||
{ | { | ||||
std::cerr << text << std::endl; | std::cerr << text << std::endl; | ||||
@@ -54,14 +70,25 @@ bool SystemStats::isOperatingSystem64Bit() | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
static String getCpuInfo (const char* key) | |||||
{ | |||||
return readPosixConfigFileValue ("/proc/cpuinfo", key); | |||||
} | |||||
String SystemStats::getDeviceDescription() | String SystemStats::getDeviceDescription() | ||||
{ | { | ||||
#if JUCE_BSD | |||||
int mib[] = { | |||||
CTL_HW, | |||||
HW_MACHINE | |||||
}; | |||||
size_t machineDescriptionLength = 0; | |||||
auto result = sysctl (mib, numElementsInArray (mib), nullptr, &machineDescriptionLength, nullptr, 0); | |||||
if (result != 0 || machineDescriptionLength == 0) | |||||
return {}; | |||||
MemoryBlock machineDescription { machineDescriptionLength }; | |||||
result = sysctl (mib, numElementsInArray (mib), machineDescription.getData(), &machineDescriptionLength, nullptr, 0); | |||||
return String::fromUTF8 (result == 0 ? (char*) machineDescription.getData() : ""); | |||||
#else | |||||
return getCpuInfo ("Hardware"); | return getCpuInfo ("Hardware"); | ||||
#endif | |||||
} | } | ||||
String SystemStats::getDeviceManufacturer() | String SystemStats::getDeviceManufacturer() | ||||
@@ -71,32 +98,70 @@ String SystemStats::getDeviceManufacturer() | |||||
String SystemStats::getCpuVendor() | String SystemStats::getCpuVendor() | ||||
{ | { | ||||
#if JUCE_BSD | |||||
return {}; | |||||
#else | |||||
auto v = getCpuInfo ("vendor_id"); | auto v = getCpuInfo ("vendor_id"); | ||||
if (v.isEmpty()) | if (v.isEmpty()) | ||||
v = getCpuInfo ("model name"); | v = getCpuInfo ("model name"); | ||||
return v; | return v; | ||||
#endif | |||||
} | } | ||||
String SystemStats::getCpuModel() | String SystemStats::getCpuModel() | ||||
{ | { | ||||
#if JUCE_BSD | |||||
int mib[] = { | |||||
CTL_HW, | |||||
HW_MODEL | |||||
}; | |||||
size_t modelLength = 0; | |||||
auto result = sysctl (mib, numElementsInArray (mib), nullptr, &modelLength, nullptr, 0); | |||||
if (result != 0 || modelLength == 0) | |||||
return {}; | |||||
MemoryBlock model { modelLength }; | |||||
result = sysctl (mib, numElementsInArray (mib), model.getData(), &modelLength, nullptr, 0); | |||||
return String::fromUTF8 (result == 0 ? (char*) model.getData() : ""); | |||||
#else | |||||
return getCpuInfo ("model name"); | return getCpuInfo ("model name"); | ||||
#endif | |||||
} | } | ||||
int SystemStats::getCpuSpeedInMegahertz() | int SystemStats::getCpuSpeedInMegahertz() | ||||
{ | { | ||||
#if JUCE_BSD | |||||
int32 clockRate = 0; | |||||
auto clockRateSize = sizeof (clockRate); | |||||
auto result = sysctlbyname ("hw.clockrate", &clockRate, &clockRateSize, nullptr, 0); | |||||
return result == 0 ? clockRate : 0; | |||||
#else | |||||
return roundToInt (getCpuInfo ("cpu MHz").getFloatValue()); | return roundToInt (getCpuInfo ("cpu MHz").getFloatValue()); | ||||
#endif | |||||
} | } | ||||
int SystemStats::getMemorySizeInMegabytes() | int SystemStats::getMemorySizeInMegabytes() | ||||
{ | { | ||||
#if JUCE_BSD | |||||
int mib[] = { | |||||
CTL_HW, | |||||
HW_PHYSMEM | |||||
}; | |||||
int64 memory = 0; | |||||
auto memorySize = sizeof (memory); | |||||
auto result = sysctl (mib, numElementsInArray (mib), &memory, &memorySize, nullptr, 0); | |||||
return result == 0 ? (int) (memory / 1e6) : 0; | |||||
#else | |||||
struct sysinfo sysi; | struct sysinfo sysi; | ||||
if (sysinfo (&sysi) == 0) | if (sysinfo (&sysi) == 0) | ||||
return (int) (sysi.totalram * sysi.mem_unit / (1024 * 1024)); | return (int) (sysi.totalram * sysi.mem_unit / (1024 * 1024)); | ||||
return 0; | return 0; | ||||
#endif | |||||
} | } | ||||
int SystemStats::getPageSize() | int SystemStats::getPageSize() | ||||
@@ -131,21 +196,79 @@ String SystemStats::getComputerName() | |||||
return {}; | return {}; | ||||
} | } | ||||
static String getLocaleValue (nl_item key) | |||||
String SystemStats::getUserLanguage() | |||||
{ | { | ||||
auto oldLocale = ::setlocale (LC_ALL, ""); | |||||
auto result = String::fromUTF8 (nl_langinfo (key)); | |||||
::setlocale (LC_ALL, oldLocale); | |||||
return result; | |||||
#if JUCE_BSD | |||||
if (auto langEnv = getenv ("LANG")) | |||||
return String::fromUTF8 (langEnv).upToLastOccurrenceOf (".UTF-8", false, true); | |||||
return {}; | |||||
#else | |||||
return getLocaleValue (_NL_IDENTIFICATION_LANGUAGE); | |||||
#endif | |||||
} | } | ||||
String SystemStats::getUserLanguage() { return getLocaleValue (_NL_IDENTIFICATION_LANGUAGE); } | |||||
String SystemStats::getUserRegion() { return getLocaleValue (_NL_IDENTIFICATION_TERRITORY); } | |||||
String SystemStats::getDisplayLanguage() { return getUserLanguage() + "-" + getUserRegion(); } | |||||
String SystemStats::getUserRegion() | |||||
{ | |||||
#if JUCE_BSD | |||||
return {}; | |||||
#else | |||||
return getLocaleValue (_NL_IDENTIFICATION_TERRITORY); | |||||
#endif | |||||
} | |||||
String SystemStats::getDisplayLanguage() | |||||
{ | |||||
auto result = getUserLanguage(); | |||||
auto region = getUserRegion(); | |||||
if (region.isNotEmpty()) | |||||
result << "-" << region; | |||||
return result; | |||||
} | |||||
//============================================================================== | //============================================================================== | ||||
void CPUInformation::initialise() noexcept | void CPUInformation::initialise() noexcept | ||||
{ | { | ||||
#if JUCE_BSD | |||||
#if JUCE_INTEL && ! JUCE_NO_INLINE_ASM | |||||
SystemStatsHelpers::getCPUInfo (hasMMX, | |||||
hasSSE, | |||||
hasSSE2, | |||||
has3DNow, | |||||
hasSSE3, | |||||
hasSSSE3, | |||||
hasFMA3, | |||||
hasSSE41, | |||||
hasSSE42, | |||||
hasAVX, | |||||
hasFMA4, | |||||
hasAVX2, | |||||
hasAVX512F, | |||||
hasAVX512DQ, | |||||
hasAVX512IFMA, | |||||
hasAVX512PF, | |||||
hasAVX512ER, | |||||
hasAVX512CD, | |||||
hasAVX512BW, | |||||
hasAVX512VL, | |||||
hasAVX512VBMI, | |||||
hasAVX512VPOPCNTDQ); | |||||
#endif | |||||
numLogicalCPUs = numPhysicalCPUs = [] | |||||
{ | |||||
int mib[] = { | |||||
CTL_HW, | |||||
HW_NCPU | |||||
}; | |||||
int32 numCPUs = 1; | |||||
auto numCPUsSize = sizeof (numCPUs); | |||||
auto result = sysctl (mib, numElementsInArray (mib), &numCPUs, &numCPUsSize, nullptr, 0); | |||||
return result == 0 ? numCPUs : 1; | |||||
}(); | |||||
#else | |||||
auto flags = getCpuInfo ("flags"); | auto flags = getCpuInfo ("flags"); | ||||
hasMMX = flags.contains ("mmx"); | hasMMX = flags.contains ("mmx"); | ||||
@@ -178,6 +301,7 @@ void CPUInformation::initialise() noexcept | |||||
if (numPhysicalCPUs <= 0) | if (numPhysicalCPUs <= 0) | ||||
numPhysicalCPUs = numLogicalCPUs; | numPhysicalCPUs = numLogicalCPUs; | ||||
#endif | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
@@ -224,7 +348,17 @@ bool Time::setSystemTimeToThisTime() const | |||||
JUCE_API bool JUCE_CALLTYPE juce_isRunningUnderDebugger() noexcept | JUCE_API bool JUCE_CALLTYPE juce_isRunningUnderDebugger() noexcept | ||||
{ | { | ||||
#if JUCE_BSD | #if JUCE_BSD | ||||
return false; | |||||
int mib[] = | |||||
{ | |||||
CTL_KERN, | |||||
KERN_PROC, | |||||
KERN_PROC_PID, | |||||
::getpid() | |||||
}; | |||||
struct kinfo_proc info; | |||||
auto infoSize = sizeof (info); | |||||
auto result = sysctl (mib, numElementsInArray (mib), &info, &infoSize, nullptr, 0); | |||||
return result == 0 ? ((info.ki_flag & P_TRACED) != 0) : false; | |||||
#else | #else | ||||
return readPosixConfigFileValue ("/proc/self/status", "TracerPid").getIntValue() > 0; | return readPosixConfigFileValue ("/proc/self/status", "TracerPid").getIntValue() > 0; | ||||
#endif | #endif | ||||
@@ -43,64 +43,32 @@ void Logger::outputDebugString (const String& text) | |||||
fflush (stderr); | fflush (stderr); | ||||
} | } | ||||
//============================================================================== | |||||
namespace SystemStatsHelpers | |||||
{ | |||||
#if JUCE_INTEL && ! JUCE_NO_INLINE_ASM | |||||
static void doCPUID (uint32& a, uint32& b, uint32& c, uint32& d, uint32 type) | |||||
{ | |||||
uint32 la = a, lb = b, lc = c, ld = d; | |||||
#if JUCE_32BIT && defined (__pic__) | |||||
asm ("mov %%ebx, %%edi\n" | |||||
"cpuid\n" | |||||
"xchg %%edi, %%ebx\n" | |||||
: "=a" (la), "=D" (lb), "=c" (lc), "=d" (ld) | |||||
: "a" (type), "c" (0)); | |||||
#else | |||||
asm ("cpuid\n" | |||||
: "=a" (la), "=b" (lb), "=c" (lc), "=d" (ld) | |||||
: "a" (type), "c" (0)); | |||||
#endif | |||||
a = la; b = lb; c = lc; d = ld; | |||||
} | |||||
#endif | |||||
} | |||||
//============================================================================== | //============================================================================== | ||||
void CPUInformation::initialise() noexcept | void CPUInformation::initialise() noexcept | ||||
{ | { | ||||
#if JUCE_INTEL && ! JUCE_NO_INLINE_ASM | #if JUCE_INTEL && ! JUCE_NO_INLINE_ASM | ||||
uint32 a = 0, b = 0, d = 0, c = 0; | |||||
SystemStatsHelpers::doCPUID (a, b, c, d, 1); | |||||
hasMMX = (d & (1u << 23)) != 0; | |||||
hasSSE = (d & (1u << 25)) != 0; | |||||
hasSSE2 = (d & (1u << 26)) != 0; | |||||
has3DNow = (b & (1u << 31)) != 0; | |||||
hasSSE3 = (c & (1u << 0)) != 0; | |||||
hasSSSE3 = (c & (1u << 9)) != 0; | |||||
hasFMA3 = (c & (1u << 12)) != 0; | |||||
hasSSE41 = (c & (1u << 19)) != 0; | |||||
hasSSE42 = (c & (1u << 20)) != 0; | |||||
hasAVX = (c & (1u << 28)) != 0; | |||||
SystemStatsHelpers::doCPUID (a, b, c, d, 0x80000001); | |||||
hasFMA4 = (c & (1u << 16)) != 0; | |||||
SystemStatsHelpers::doCPUID (a, b, c, d, 7); | |||||
hasAVX2 = (b & (1u << 5)) != 0; | |||||
hasAVX512F = (b & (1u << 16)) != 0; | |||||
hasAVX512DQ = (b & (1u << 17)) != 0; | |||||
hasAVX512IFMA = (b & (1u << 21)) != 0; | |||||
hasAVX512PF = (b & (1u << 26)) != 0; | |||||
hasAVX512ER = (b & (1u << 27)) != 0; | |||||
hasAVX512CD = (b & (1u << 28)) != 0; | |||||
hasAVX512BW = (b & (1u << 30)) != 0; | |||||
hasAVX512VL = (b & (1u << 31)) != 0; | |||||
hasAVX512VBMI = (c & (1u << 1)) != 0; | |||||
hasAVX512VPOPCNTDQ = (c & (1u << 14)) != 0; | |||||
SystemStatsHelpers::getCPUInfo (hasMMX, | |||||
hasSSE, | |||||
hasSSE2, | |||||
has3DNow, | |||||
hasSSE3, | |||||
hasSSSE3, | |||||
hasFMA3, | |||||
hasSSE41, | |||||
hasSSE42, | |||||
hasAVX, | |||||
hasFMA4, | |||||
hasAVX2, | |||||
hasAVX512F, | |||||
hasAVX512DQ, | |||||
hasAVX512IFMA, | |||||
hasAVX512PF, | |||||
hasAVX512ER, | |||||
hasAVX512CD, | |||||
hasAVX512BW, | |||||
hasAVX512VL, | |||||
hasAVX512VBMI, | |||||
hasAVX512VPOPCNTDQ); | |||||
#endif | #endif | ||||
numLogicalCPUs = (int) [[NSProcessInfo processInfo] activeProcessorCount]; | numLogicalCPUs = (int) [[NSProcessInfo processInfo] activeProcessorCount]; | ||||
@@ -59,7 +59,7 @@ void JUCE_CALLTYPE Process::terminate() | |||||
} | } | ||||
#if JUCE_MAC || JUCE_LINUX | |||||
#if JUCE_MAC || JUCE_LINUX || JUCE_BSD | |||||
bool Process::setMaxNumberOfFileHandles (int newMaxNumber) noexcept | bool Process::setMaxNumberOfFileHandles (int newMaxNumber) noexcept | ||||
{ | { | ||||
rlimit lim; | rlimit lim; | ||||
@@ -260,7 +260,7 @@ uint64 File::getFileIdentifier() const | |||||
static bool hasEffectiveRootFilePermissions() | static bool hasEffectiveRootFilePermissions() | ||||
{ | { | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
return geteuid() == 0; | return geteuid() == 0; | ||||
#else | #else | ||||
return false; | return false; | ||||
@@ -940,9 +940,10 @@ void JUCE_CALLTYPE Thread::setCurrentThreadName (const String& name) | |||||
{ | { | ||||
[[NSThread currentThread] setName: juceStringToNS (name)]; | [[NSThread currentThread] setName: juceStringToNS (name)]; | ||||
} | } | ||||
#elif JUCE_LINUX || JUCE_ANDROID | |||||
#if ((JUCE_LINUX && (__GLIBC__ * 1000 + __GLIBC_MINOR__) >= 2012) \ | |||||
|| JUCE_ANDROID && __ANDROID_API__ >= 9) | |||||
#elif JUCE_LINUX || JUCE_BSD || JUCE_ANDROID | |||||
#if (JUCE_BSD \ | |||||
|| (JUCE_LINUX && (__GLIBC__ * 1000 + __GLIBC_MINOR__) >= 2012) \ | |||||
|| (JUCE_ANDROID && __ANDROID_API__ >= 9)) | |||||
pthread_setname_np (pthread_self(), name.toRawUTF8()); | pthread_setname_np (pthread_self(), name.toRawUTF8()); | ||||
#else | #else | ||||
prctl (PR_SET_NAME, name.toRawUTF8(), 0, 0, 0); | prctl (PR_SET_NAME, name.toRawUTF8(), 0, 0, 0); | ||||
@@ -1000,7 +1001,7 @@ void JUCE_CALLTYPE Thread::setCurrentThreadAffinityMask (uint32 affinityMask) | |||||
if ((affinityMask & (uint32) (1 << i)) != 0) | if ((affinityMask & (uint32) (1 << i)) != 0) | ||||
CPU_SET ((size_t) i, &affinity); | CPU_SET ((size_t) i, &affinity); | ||||
#if (! JUCE_ANDROID) && ((! JUCE_LINUX) || ((__GLIBC__ * 1000 + __GLIBC_MINOR__) >= 2004)) | |||||
#if (! JUCE_ANDROID) && ((! (JUCE_LINUX || JUCE_BSD)) || ((__GLIBC__ * 1000 + __GLIBC_MINOR__) >= 2004)) | |||||
pthread_setaffinity_np (pthread_self(), sizeof (cpu_set_t), &affinity); | pthread_setaffinity_np (pthread_self(), sizeof (cpu_set_t), &affinity); | ||||
#elif JUCE_ANDROID | #elif JUCE_ANDROID | ||||
sched_setaffinity (gettid(), sizeof (cpu_set_t), &affinity); | sched_setaffinity (gettid(), sizeof (cpu_set_t), &affinity); | ||||
@@ -132,7 +132,7 @@ namespace SocketHelpers | |||||
// a chance to process before close is called. On Mac OS X shutdown | // a chance to process before close is called. On Mac OS X shutdown | ||||
// does not unblock a select call, so using a lock here will dead-lock | // does not unblock a select call, so using a lock here will dead-lock | ||||
// both threads. | // both threads. | ||||
#if JUCE_LINUX || JUCE_ANDROID | |||||
#if JUCE_LINUX || JUCE_BSD || JUCE_ANDROID | |||||
CriticalSection::ScopedLockType lock (readLock); | CriticalSection::ScopedLockType lock (readLock); | ||||
::close (h); | ::close (h); | ||||
#else | #else | ||||
@@ -780,7 +780,7 @@ bool DatagramSocket::setEnablePortReuse (bool enabled) | |||||
#else | #else | ||||
if (handle >= 0) | if (handle >= 0) | ||||
return SocketHelpers::setOption ((SocketHandle) handle.load(), | return SocketHelpers::setOption ((SocketHandle) handle.load(), | ||||
#if JUCE_WINDOWS || JUCE_LINUX | |||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD | |||||
SO_REUSEADDR, // port re-use is implied by addr re-use on these platforms | SO_REUSEADDR, // port re-use is implied by addr re-use on these platforms | ||||
#else | #else | ||||
SO_REUSEPORT, | SO_REUSEPORT, | ||||
@@ -59,7 +59,7 @@ namespace juce | |||||
#endif | #endif | ||||
//============================================================================== | //============================================================================== | ||||
#if JUCE_IOS || (JUCE_MAC && JUCE_ARM) || JUCE_LINUX | |||||
#if JUCE_IOS || (JUCE_MAC && JUCE_ARM) || JUCE_LINUX || JUCE_BSD | |||||
/** This will try to break into the debugger if the app is currently being debugged. | /** This will try to break into the debugger if the app is currently being debugged. | ||||
If called by an app that's not being debugged, the behaviour isn't defined - it may | If called by an app that's not being debugged, the behaviour isn't defined - it may | ||||
crash or not, depending on the platform. | crash or not, depending on the platform. | ||||
@@ -83,7 +83,7 @@ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4514 4245 4100) | |||||
#include <signal.h> | #include <signal.h> | ||||
#endif | #endif | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
#include <cstring> | #include <cstring> | ||||
#include <signal.h> | #include <signal.h> | ||||
@@ -154,7 +154,7 @@ | |||||
#endif | #endif | ||||
//============================================================================== | //============================================================================== | ||||
#if JUCE_LINUX || JUCE_ANDROID | |||||
#if JUCE_LINUX || JUCE_ANDROID || JUCE_BSD | |||||
#ifdef _DEBUG | #ifdef _DEBUG | ||||
#define JUCE_DEBUG 1 | #define JUCE_DEBUG 1 | ||||
@@ -335,7 +335,7 @@ public: | |||||
/** Parses this string as a 64-bit integer. */ | /** Parses this string as a 64-bit integer. */ | ||||
int64 getIntValue64() const noexcept | int64 getIntValue64() const noexcept | ||||
{ | { | ||||
#if JUCE_LINUX || JUCE_ANDROID || JUCE_MINGW | |||||
#if JUCE_LINUX || JUCE_BSD || JUCE_ANDROID || JUCE_MINGW | |||||
return atoll (data); | return atoll (data); | ||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
return _atoi64 (data); | return _atoi64 (data); | ||||
@@ -96,7 +96,7 @@ public: | |||||
{ | { | ||||
beginTest ("Child Processes"); | beginTest ("Child Processes"); | ||||
#if JUCE_WINDOWS || JUCE_MAC || JUCE_LINUX | |||||
#if JUCE_WINDOWS || JUCE_MAC || JUCE_LINUX || JUCE_BSD | |||||
ChildProcess p; | ChildProcess p; | ||||
#if JUCE_WINDOWS | #if JUCE_WINDOWS | ||||
@@ -139,7 +139,7 @@ public: | |||||
static void setDockIconVisible (bool isVisible); | static void setDockIconVisible (bool isVisible); | ||||
#endif | #endif | ||||
#if JUCE_MAC || JUCE_LINUX || DOXYGEN | |||||
#if JUCE_MAC || JUCE_LINUX || JUCE_BSD || DOXYGEN | |||||
//============================================================================== | //============================================================================== | ||||
/** UNIX ONLY - Attempts to use setrlimit to change the maximum number of file | /** UNIX ONLY - Attempts to use setrlimit to change the maximum number of file | ||||
handles that the app can open. Pass 0 or less as the parameter to mean | handles that the app can open. Pass 0 or less as the parameter to mean | ||||
@@ -89,7 +89,7 @@ File PropertiesFile::Options::getDefaultFile() const | |||||
if (folderName.isNotEmpty()) | if (folderName.isNotEmpty()) | ||||
dir = dir.getChildFile (folderName); | dir = dir.getChildFile (folderName); | ||||
#elif JUCE_LINUX || JUCE_ANDROID | |||||
#elif JUCE_LINUX || JUCE_BSD || JUCE_ANDROID | |||||
auto dir = File (commonToAllUsers ? "/var" : "~") | auto dir = File (commonToAllUsers ? "/var" : "~") | ||||
.getChildFile (folderName.isNotEmpty() ? folderName | .getChildFile (folderName.isNotEmpty() ? folderName | ||||
: ("." + applicationName)); | : ("." + applicationName)); | ||||
@@ -49,7 +49,7 @@ | |||||
#import <IOKit/hid/IOHIDKeys.h> | #import <IOKit/hid/IOHIDKeys.h> | ||||
#import <IOKit/pwr_mgt/IOPMLib.h> | #import <IOKit/pwr_mgt/IOPMLib.h> | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
#include <unistd.h> | #include <unistd.h> | ||||
#endif | #endif | ||||
@@ -85,7 +85,7 @@ | |||||
#include "native/juce_win32_WinRTWrapper.cpp" | #include "native/juce_win32_WinRTWrapper.cpp" | ||||
#endif | #endif | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
#include "native/juce_linux_Messaging.cpp" | #include "native/juce_linux_Messaging.cpp" | ||||
#elif JUCE_ANDROID | #elif JUCE_ANDROID | ||||
@@ -90,7 +90,7 @@ | |||||
#include "interprocess/juce_ConnectedChildProcess.h" | #include "interprocess/juce_ConnectedChildProcess.h" | ||||
#include "interprocess/juce_NetworkServiceDiscovery.h" | #include "interprocess/juce_NetworkServiceDiscovery.h" | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
#include "native/juce_linux_EventLoop.h" | #include "native/juce_linux_EventLoop.h" | ||||
#endif | #endif | ||||
@@ -183,7 +183,7 @@ StringArray JUCE_CALLTYPE JUCEApplicationBase::getCommandLineParameterArray() | |||||
extern void initialiseNSApplication(); | extern void initialiseNSApplication(); | ||||
#endif | #endif | ||||
#if JUCE_LINUX && JUCE_MODULE_AVAILABLE_juce_gui_extra && (! defined(JUCE_WEB_BROWSER) || JUCE_WEB_BROWSER) | |||||
#if (JUCE_LINUX || JUCE_BSD) && JUCE_MODULE_AVAILABLE_juce_gui_extra && (! defined(JUCE_WEB_BROWSER) || JUCE_WEB_BROWSER) | |||||
extern int juce_gtkWebkitMain (int argc, const char* argv[]); | extern int juce_gtkWebkitMain (int argc, const char* argv[]); | ||||
#endif | #endif | ||||
@@ -228,7 +228,7 @@ int JUCEApplicationBase::main (int argc, const char* argv[]) | |||||
initialiseNSApplication(); | initialiseNSApplication(); | ||||
#endif | #endif | ||||
#if JUCE_LINUX && JUCE_MODULE_AVAILABLE_juce_gui_extra && (! defined(JUCE_WEB_BROWSER) || JUCE_WEB_BROWSER) | |||||
#if (JUCE_LINUX || JUCE_BSD) && JUCE_MODULE_AVAILABLE_juce_gui_extra && (! defined(JUCE_WEB_BROWSER) || JUCE_WEB_BROWSER) | |||||
if (argc >= 2 && String (argv[1]) == "--juce-gtkwebkitfork-child") | if (argc >= 2 && String (argv[1]) == "--juce-gtkwebkitfork-child") | ||||
return juce_gtkWebkitMain (argc, argv); | return juce_gtkWebkitMain (argc, argv); | ||||
#endif | #endif | ||||
@@ -144,7 +144,7 @@ int NativeImageType::getTypeID() const | |||||
return 1; | return 1; | ||||
} | } | ||||
#if JUCE_WINDOWS || JUCE_LINUX | |||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD | |||||
ImagePixelData::Ptr NativeImageType::create (Image::PixelFormat format, int width, int height, bool clearImage) const | ImagePixelData::Ptr NativeImageType::create (Image::PixelFormat format, int width, int height, bool clearImage) const | ||||
{ | { | ||||
return new SoftwarePixelData (format, width, height, clearImage); | return new SoftwarePixelData (format, width, height, clearImage); | ||||
@@ -75,7 +75,7 @@ | |||||
#import <QuartzCore/QuartzCore.h> | #import <QuartzCore/QuartzCore.h> | ||||
#import <CoreText/CoreText.h> | #import <CoreText/CoreText.h> | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
#ifndef JUCE_USE_FREETYPE | #ifndef JUCE_USE_FREETYPE | ||||
#define JUCE_USE_FREETYPE 1 | #define JUCE_USE_FREETYPE 1 | ||||
#endif | #endif | ||||
@@ -147,7 +147,7 @@ | |||||
#include "native/juce_win32_Direct2DGraphicsContext.cpp" | #include "native/juce_win32_Direct2DGraphicsContext.cpp" | ||||
#endif | #endif | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
#include "native/juce_linux_Fonts.cpp" | #include "native/juce_linux_Fonts.cpp" | ||||
#include "native/juce_linux_IconHelpers.cpp" | #include "native/juce_linux_IconHelpers.cpp" | ||||
@@ -29,7 +29,8 @@ namespace juce | |||||
static std::unique_ptr<XmlElement> findFontsConfFile() | static std::unique_ptr<XmlElement> findFontsConfFile() | ||||
{ | { | ||||
static const char* pathsToSearch[] = { "/etc/fonts/fonts.conf", | static const char* pathsToSearch[] = { "/etc/fonts/fonts.conf", | ||||
"/usr/share/fonts/fonts.conf" }; | |||||
"/usr/share/fonts/fonts.conf", | |||||
"/usr/local/etc/fonts/fonts.conf" }; | |||||
for (auto* path : pathsToSearch) | for (auto* path : pathsToSearch) | ||||
if (auto xml = parseXML (File (path))) | if (auto xml = parseXML (File (path))) | ||||
@@ -626,7 +626,7 @@ void Component::addToDesktop (int styleWanted, void* nativeWindowToAttachTo) | |||||
{ | { | ||||
const WeakReference<Component> safePointer (this); | const WeakReference<Component> safePointer (this); | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
// it's wise to give the component a non-zero size before | // it's wise to give the component a non-zero size before | ||||
// putting it on the desktop, as X windows get confused by this, and | // putting it on the desktop, as X windows get confused by this, and | ||||
// a (1, 1) minimum size is enforced here. | // a (1, 1) minimum size is enforced here. | ||||
@@ -441,7 +441,7 @@ void FileBrowserComponent::browserRootChanged (const File&) {} | |||||
bool FileBrowserComponent::keyPressed (const KeyPress& key) | bool FileBrowserComponent::keyPressed (const KeyPress& key) | ||||
{ | { | ||||
#if JUCE_LINUX || JUCE_WINDOWS | |||||
#if JUCE_LINUX || JUCE_BSD || JUCE_WINDOWS | |||||
if (key.getModifiers().isCommandDown() | if (key.getModifiers().isCommandDown() | ||||
&& (key.getKeyCode() == 'H' || key.getKeyCode() == 'h')) | && (key.getKeyCode() == 'H' || key.getKeyCode() == 'h')) | ||||
{ | { | ||||
@@ -253,7 +253,7 @@ namespace juce | |||||
#include "native/juce_win32_DragAndDrop.cpp" | #include "native/juce_win32_DragAndDrop.cpp" | ||||
#include "native/juce_win32_FileChooser.cpp" | #include "native/juce_win32_FileChooser.cpp" | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
#include "native/x11/juce_linux_X11_Symbols.cpp" | #include "native/x11/juce_linux_X11_Symbols.cpp" | ||||
#include "native/x11/juce_linux_X11_DragAndDrop.cpp" | #include "native/x11/juce_linux_X11_DragAndDrop.cpp" | ||||
@@ -294,7 +294,7 @@ namespace juce | |||||
#include "lookandfeel/juce_LookAndFeel_V4.h" | #include "lookandfeel/juce_LookAndFeel_V4.h" | ||||
#include "mouse/juce_LassoComponent.h" | #include "mouse/juce_LassoComponent.h" | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
#if JUCE_GUI_BASICS_INCLUDE_XHEADERS | #if JUCE_GUI_BASICS_INCLUDE_XHEADERS | ||||
// If you're missing these headers, you need to install the libx11-dev package | // If you're missing these headers, you need to install the libx11-dev package | ||||
#include <X11/Xlib.h> | #include <X11/Xlib.h> | ||||
@@ -182,7 +182,7 @@ void LookAndFeel::setUsingNativeAlertWindows (bool shouldUseNativeAlerts) | |||||
bool LookAndFeel::isUsingNativeAlertWindows() | bool LookAndFeel::isUsingNativeAlertWindows() | ||||
{ | { | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
return false; // not available currently.. | return false; // not available currently.. | ||||
#else | #else | ||||
return useNativeAlertWindows; | return useNativeAlertWindows; | ||||
@@ -28,7 +28,7 @@ namespace juce | |||||
static juce_wchar getDefaultPasswordChar() noexcept | static juce_wchar getDefaultPasswordChar() noexcept | ||||
{ | { | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
return 0x2022; | return 0x2022; | ||||
#else | #else | ||||
return 0x25cf; | return 0x25cf; | ||||
@@ -31,7 +31,7 @@ bool juce_handleXEmbedEvent (ComponentPeer*, void*); | |||||
/** @internal */ | /** @internal */ | ||||
unsigned long juce_getCurrentFocusWindow (ComponentPeer*); | unsigned long juce_getCurrentFocusWindow (ComponentPeer*); | ||||
#if JUCE_LINUX || DOXYGEN | |||||
#if JUCE_LINUX || JUCE_BSD || DOXYGEN | |||||
//============================================================================== | //============================================================================== | ||||
/** | /** | ||||
@@ -109,7 +109,7 @@ | |||||
#endif | #endif | ||||
//============================================================================== | //============================================================================== | ||||
#elif JUCE_LINUX && JUCE_WEB_BROWSER | |||||
#elif (JUCE_LINUX || JUCE_BSD) && JUCE_WEB_BROWSER | |||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wzero-as-null-pointer-constant", "-Wparentheses") | JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wzero-as-null-pointer-constant", "-Wparentheses") | ||||
// If you're missing this header, you need to install the webkit2gtk-4.0 package | // If you're missing this header, you need to install the webkit2gtk-4.0 package | ||||
@@ -168,7 +168,7 @@ | |||||
#include "native/juce_win32_SystemTrayIcon.cpp" | #include "native/juce_win32_SystemTrayIcon.cpp" | ||||
//============================================================================== | //============================================================================== | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wzero-as-null-pointer-constant") | JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wzero-as-null-pointer-constant") | ||||
#include "native/juce_linux_XEmbedComponent.cpp" | #include "native/juce_linux_XEmbedComponent.cpp" | ||||
@@ -26,7 +26,7 @@ | |||||
namespace juce | namespace juce | ||||
{ | { | ||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_MAC | |||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD || JUCE_MAC | |||||
SystemTrayIconComponent::SystemTrayIconComponent() | SystemTrayIconComponent::SystemTrayIconComponent() | ||||
{ | { | ||||
@@ -26,7 +26,7 @@ | |||||
namespace juce | namespace juce | ||||
{ | { | ||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_MAC || DOXYGEN | |||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD || JUCE_MAC || DOXYGEN | |||||
//============================================================================== | //============================================================================== | ||||
@@ -91,7 +91,7 @@ public: | |||||
*/ | */ | ||||
void* getNativeHandle() const; | void* getNativeHandle() const; | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
/** @internal */ | /** @internal */ | ||||
void paint (Graphics&) override; | void paint (Graphics&) override; | ||||
#endif | #endif | ||||
@@ -54,7 +54,7 @@ | |||||
#endif | #endif | ||||
//============================================================================== | //============================================================================== | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
/* Got an include error here? | /* Got an include error here? | ||||
If you want to install OpenGL support, the packages to get are "mesa-common-dev" | If you want to install OpenGL support, the packages to get are "mesa-common-dev" | ||||
@@ -91,7 +91,7 @@ namespace juce | |||||
void OpenGLExtensionFunctions::initialise() | void OpenGLExtensionFunctions::initialise() | ||||
{ | { | ||||
#if JUCE_WINDOWS || JUCE_LINUX | |||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD | |||||
#define JUCE_INIT_GL_FUNCTION(name, returnType, params, callparams) \ | #define JUCE_INIT_GL_FUNCTION(name, returnType, params, callparams) \ | ||||
name = (type_ ## name) OpenGLHelpers::getExtensionFunction (#name); | name = (type_ ## name) OpenGLHelpers::getExtensionFunction (#name); | ||||
@@ -273,7 +273,7 @@ private: | |||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
#include "native/juce_OpenGL_win32.h" | #include "native/juce_OpenGL_win32.h" | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
#include "native/juce_OpenGL_linux_X11.h" | #include "native/juce_OpenGL_linux_X11.h" | ||||
#elif JUCE_ANDROID | #elif JUCE_ANDROID | ||||
@@ -88,7 +88,7 @@ | |||||
#undef APIENTRY | #undef APIENTRY | ||||
#undef CLEAR_TEMP_APIENTRY | #undef CLEAR_TEMP_APIENTRY | ||||
#endif | #endif | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
#include <GL/gl.h> | #include <GL/gl.h> | ||||
#undef KeyPress | #undef KeyPress | ||||
#elif JUCE_IOS | #elif JUCE_IOS | ||||
@@ -119,7 +119,7 @@ struct OpenGLExtensionFunctions | |||||
#endif | #endif | ||||
//============================================================================== | //============================================================================== | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
#define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) typedef returnType (*type_ ## name) params; type_ ## name name; | #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) typedef returnType (*type_ ## name) params; type_ ## name name; | ||||
JUCE_GL_BASE_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) | JUCE_GL_BASE_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) | ||||
JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) | JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) | ||||
@@ -39,7 +39,7 @@ public: | |||||
// context. You'll need to create this object in one of the OpenGLContext's callbacks. | // context. You'll need to create this object in one of the OpenGLContext's callbacks. | ||||
jassert (OpenGLHelpers::isContextActive()); | jassert (OpenGLHelpers::isContextActive()); | ||||
#if JUCE_WINDOWS || JUCE_LINUX | |||||
#if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD | |||||
if (context.extensions.glGenFramebuffers == nullptr) | if (context.extensions.glGenFramebuffers == nullptr) | ||||
return; | return; | ||||
#endif | #endif | ||||
@@ -35,7 +35,7 @@ void* OpenGLHelpers::getExtensionFunction (const char* functionName) | |||||
{ | { | ||||
#if JUCE_WINDOWS | #if JUCE_WINDOWS | ||||
return (void*) wglGetProcAddress (functionName); | return (void*) wglGetProcAddress (functionName); | ||||
#elif JUCE_LINUX | |||||
#elif JUCE_LINUX || JUCE_BSD | |||||
return (void*) glXGetProcAddress ((const GLubyte*) functionName); | return (void*) glXGetProcAddress ((const GLubyte*) functionName); | ||||
#else | #else | ||||
static void* handle = dlopen (nullptr, RTLD_LAZY); | static void* handle = dlopen (nullptr, RTLD_LAZY); | ||||
@@ -151,7 +151,7 @@ struct OnlineUnlockForm::OverlayComp : public Component, | |||||
static juce_wchar getDefaultPasswordChar() noexcept | static juce_wchar getDefaultPasswordChar() noexcept | ||||
{ | { | ||||
#if JUCE_LINUX | |||||
#if JUCE_LINUX || JUCE_BSD | |||||
return 0x2022; | return 0x2022; | ||||
#else | #else | ||||
return 0x25cf; | return 0x25cf; | ||||
@@ -280,6 +280,8 @@ char OnlineUnlockStatus::MachineIDUtilities::getPlatformPrefix() | |||||
return 'W'; | return 'W'; | ||||
#elif JUCE_LINUX | #elif JUCE_LINUX | ||||
return 'L'; | return 'L'; | ||||
#elif JUCE_BSD | |||||
return 'B'; | |||||
#elif JUCE_IOS | #elif JUCE_IOS | ||||
return 'I'; | return 'I'; | ||||
#elif JUCE_ANDROID | #elif JUCE_ANDROID | ||||
@@ -26,7 +26,7 @@ | |||||
namespace juce | namespace juce | ||||
{ | { | ||||
#if ! (JUCE_LINUX || JUCE_PROJUCER_LIVE_BUILD) | |||||
#if ! (JUCE_LINUX || JUCE_BSD || JUCE_PROJUCER_LIVE_BUILD) | |||||
#if JUCE_MAC || JUCE_IOS | #if JUCE_MAC || JUCE_IOS | ||||
#include "../native/juce_mac_Video.h" | #include "../native/juce_mac_Video.h" | ||||