Browse Source

Added preliminary support for FreeBSD

v6.1.6
Tom Poole 4 years ago
parent
commit
79fbde7099
79 changed files with 507 additions and 242 deletions
  1. +1
    -1
      examples/CMakeLists.txt
  2. +0
    -1
      examples/DemoRunner/CMakeLists.txt
  3. +2
    -2
      examples/DemoRunner/Source/Demos/DemoPIPs1.cpp
  4. +4
    -4
      examples/DemoRunner/Source/Demos/DemoPIPs2.cpp
  5. +3
    -3
      examples/DemoRunner/Source/Main.cpp
  6. +1
    -1
      examples/GUI/VideoDemo.h
  7. +1
    -1
      extras/Build/CMake/JUCECheckAtomic.cmake
  8. +10
    -8
      extras/Build/CMake/JUCEUtils.cmake
  9. +2
    -0
      extras/NetworkGraphicsDemo/Source/SlaveComponent.h
  10. +25
    -35
      extras/Projucer/Source/Application/jucer_Application.cpp
  11. +0
    -3
      extras/Projucer/Source/Application/jucer_Application.h
  12. +5
    -3
      extras/Projucer/Source/Application/jucer_AutoUpdater.cpp
  13. +1
    -1
      extras/Projucer/Source/Application/jucer_CommonHeaders.h
  14. +2
    -2
      extras/Projucer/Source/Licenses/jucer_LicenseController.cpp
  15. +1
    -1
      extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineDLL.h
  16. +1
    -1
      extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineServer.cpp
  17. +1
    -1
      extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineSettings.h
  18. +3
    -3
      extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp
  19. +1
    -1
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CLion.h
  20. +1
    -1
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp
  21. +2
    -0
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h
  22. +2
    -2
      modules/juce_audio_basics/utilities/juce_SmoothedValue.h
  23. +2
    -2
      modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp
  24. +2
    -2
      modules/juce_audio_devices/juce_audio_devices.cpp
  25. +2
    -2
      modules/juce_audio_devices/midi_io/juce_MidiDevices.h
  26. +1
    -1
      modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp
  27. +10
    -10
      modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
  28. +1
    -1
      modules/juce_audio_plugin_client/utility/juce_IncludeSystemHeaders.h
  29. +1
    -1
      modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp
  30. +4
    -4
      modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp
  31. +1
    -1
      modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp
  32. +1
    -1
      modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h
  33. +17
    -17
      modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp
  34. +2
    -2
      modules/juce_audio_processors/juce_audio_processors.cpp
  35. +1
    -1
      modules/juce_audio_processors/utilities/juce_PluginHostType.cpp
  36. +1
    -1
      modules/juce_audio_utils/audio_cd/juce_AudioCDReader.h
  37. +1
    -1
      modules/juce_audio_utils/juce_audio_utils.cpp
  38. +20
    -2
      modules/juce_core/files/juce_File.cpp
  39. +7
    -3
      modules/juce_core/juce_core.cpp
  40. +5
    -0
      modules/juce_core/native/juce_BasicNativeHeaders.h
  41. +108
    -0
      modules/juce_core/native/juce_intel_SharedCode.h
  42. +3
    -2
      modules/juce_core/native/juce_linux_CommonFile.cpp
  43. +8
    -0
      modules/juce_core/native/juce_linux_Files.cpp
  44. +21
    -0
      modules/juce_core/native/juce_linux_Network.cpp
  45. +148
    -14
      modules/juce_core/native/juce_linux_SystemStats.cpp
  46. +22
    -54
      modules/juce_core/native/juce_mac_SystemStats.mm
  47. +7
    -6
      modules/juce_core/native/juce_posix_SharedCode.h
  48. +2
    -2
      modules/juce_core/network/juce_Socket.cpp
  49. +1
    -1
      modules/juce_core/system/juce_PlatformDefs.h
  50. +1
    -1
      modules/juce_core/system/juce_StandardHeader.h
  51. +1
    -1
      modules/juce_core/system/juce_TargetPlatform.h
  52. +1
    -1
      modules/juce_core/text/juce_CharPointer_ASCII.h
  53. +1
    -1
      modules/juce_core/threads/juce_ChildProcess.cpp
  54. +1
    -1
      modules/juce_core/threads/juce_Process.h
  55. +1
    -1
      modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp
  56. +2
    -2
      modules/juce_events/juce_events.cpp
  57. +1
    -1
      modules/juce_events/juce_events.h
  58. +2
    -2
      modules/juce_events/messages/juce_ApplicationBase.cpp
  59. +1
    -1
      modules/juce_graphics/images/juce_Image.cpp
  60. +2
    -2
      modules/juce_graphics/juce_graphics.cpp
  61. +2
    -1
      modules/juce_graphics/native/juce_linux_Fonts.cpp
  62. +1
    -1
      modules/juce_gui_basics/components/juce_Component.cpp
  63. +1
    -1
      modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp
  64. +1
    -1
      modules/juce_gui_basics/juce_gui_basics.cpp
  65. +1
    -1
      modules/juce_gui_basics/juce_gui_basics.h
  66. +1
    -1
      modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp
  67. +1
    -1
      modules/juce_gui_basics/windows/juce_AlertWindow.cpp
  68. +1
    -1
      modules/juce_gui_extra/embedding/juce_XEmbedComponent.h
  69. +2
    -2
      modules/juce_gui_extra/juce_gui_extra.cpp
  70. +1
    -1
      modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp
  71. +2
    -2
      modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h
  72. +3
    -3
      modules/juce_opengl/juce_opengl.cpp
  73. +1
    -1
      modules/juce_opengl/juce_opengl.h
  74. +1
    -1
      modules/juce_opengl/native/juce_OpenGLExtensions.h
  75. +1
    -1
      modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.cpp
  76. +1
    -1
      modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp
  77. +1
    -1
      modules/juce_product_unlocking/marketplace/juce_OnlineUnlockForm.cpp
  78. +2
    -0
      modules/juce_product_unlocking/marketplace/juce_OnlineUnlockStatus.cpp
  79. +1
    -1
      modules/juce_video/playback/juce_VideoComponent.cpp

+ 1
- 1
examples/CMakeLists.txt View File

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


+ 0
- 1
examples/DemoRunner/CMakeLists.txt View File

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


+ 2
- 2
examples/DemoRunner/Source/Demos/DemoPIPs1.cpp View File

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


+ 4
- 4
examples/DemoRunner/Source/Demos/DemoPIPs2.cpp View File

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


+ 3
- 3
examples/DemoRunner/Source/Main.cpp View File

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


+ 1
- 1
examples/GUI/VideoDemo.h View File

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

+ 1
- 1
extras/Build/CMake/JUCECheckAtomic.cmake View File

@@ -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()




+ 10
- 8
extras/Build/CMake/JUCEUtils.cmake View File

@@ -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()




+ 2
- 0
extras/NetworkGraphicsDemo/Source/SlaveComponent.h View File

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


+ 25
- 35
extras/Projucer/Source/Application/jucer_Application.cpp View File

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


+ 0
- 3
extras/Projucer/Source/Application/jucer_Application.h View File

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


+ 5
- 3
extras/Projucer/Source/Application/jucer_AutoUpdater.cpp View File

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


+ 1
- 1
extras/Projucer/Source/Application/jucer_CommonHeaders.h View File

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


+ 2
- 2
extras/Projucer/Source/Licenses/jucer_LicenseController.cpp View File

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


+ 1
- 1
extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineDLL.h View File

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


+ 1
- 1
extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineServer.cpp View File

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


+ 1
- 1
extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineSettings.h View File

@@ -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?!


+ 3
- 3
extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp View File

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


+ 1
- 1
extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CLion.h View File

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


+ 1
- 1
extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp View File

@@ -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!"


+ 2
- 0
extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h View File

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


+ 2
- 2
modules/juce_audio_basics/utilities/juce_SmoothedValue.h View File

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


+ 2
- 2
modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp View File

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


+ 2
- 2
modules/juce_audio_devices/juce_audio_devices.cpp View File

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


+ 2
- 2
modules/juce_audio_devices/midi_io/juce_MidiDevices.h View File

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


+ 1
- 1
modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp View File

@@ -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 = "";


+ 10
- 10
modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp View File

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


+ 1
- 1
modules/juce_audio_plugin_client/utility/juce_IncludeSystemHeaders.h View File

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


+ 1
- 1
modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp View File

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


+ 4
- 4
modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp View File

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


+ 1
- 1
modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp View File

@@ -23,7 +23,7 @@
============================================================================== ==============================================================================
*/ */
#if JUCE_PLUGINHOST_LADSPA && JUCE_LINUX
#if JUCE_PLUGINHOST_LADSPA && (JUCE_LINUX || JUCE_BSD)
#include <ladspa.h> #include <ladspa.h>


+ 1
- 1
modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h View File

@@ -26,7 +26,7 @@
namespace juce namespace juce
{ {
#if (JUCE_PLUGINHOST_LADSPA && JUCE_LINUX) || DOXYGEN
#if (JUCE_PLUGINHOST_LADSPA && (JUCE_LINUX || JUCE_BSD)) || DOXYGEN
//============================================================================== //==============================================================================
/** /**


+ 17
- 17
modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp View File

@@ -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 (&micro, nullptr); gettimeofday (&micro, 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 (":", ";"));


+ 2
- 2
modules/juce_audio_processors/juce_audio_processors.cpp View File

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


+ 1
- 1
modules/juce_audio_processors/utilities/juce_PluginHostType.cpp View File

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


+ 1
- 1
modules/juce_audio_utils/audio_cd/juce_AudioCDReader.h View File

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


+ 1
- 1
modules/juce_audio_utils/juce_audio_utils.cpp View File

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


+ 20
- 2
modules/juce_core/files/juce_File.cpp View File

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


+ 7
- 3
modules/juce_core/juce_core.cpp View File

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


+ 5
- 0
modules/juce_core/native/juce_BasicNativeHeaders.h View File

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


+ 108
- 0
modules/juce_core/native/juce_intel_SharedCode.h View File

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

+ 3
- 2
modules/juce_core/native/juce_linux_CommonFile.cpp View File

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


+ 8
- 0
modules/juce_core/native/juce_linux_Files.cpp View File

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


+ 21
- 0
modules/juce_core/native/juce_linux_Network.cpp View File

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


+ 148
- 14
modules/juce_core/native/juce_linux_SystemStats.cpp View File

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


+ 22
- 54
modules/juce_core/native/juce_mac_SystemStats.mm View File

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


+ 7
- 6
modules/juce_core/native/juce_posix_SharedCode.h View File

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


+ 2
- 2
modules/juce_core/network/juce_Socket.cpp View File

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


+ 1
- 1
modules/juce_core/system/juce_PlatformDefs.h View File

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


+ 1
- 1
modules/juce_core/system/juce_StandardHeader.h View File

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


+ 1
- 1
modules/juce_core/system/juce_TargetPlatform.h View File

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


+ 1
- 1
modules/juce_core/text/juce_CharPointer_ASCII.h View File

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


+ 1
- 1
modules/juce_core/threads/juce_ChildProcess.cpp View File

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


+ 1
- 1
modules/juce_core/threads/juce_Process.h View File

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


+ 1
- 1
modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp View File

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


+ 2
- 2
modules/juce_events/juce_events.cpp View File

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


+ 1
- 1
modules/juce_events/juce_events.h View File

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


+ 2
- 2
modules/juce_events/messages/juce_ApplicationBase.cpp View File

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


+ 1
- 1
modules/juce_graphics/images/juce_Image.cpp View File

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


+ 2
- 2
modules/juce_graphics/juce_graphics.cpp View File

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


+ 2
- 1
modules/juce_graphics/native/juce_linux_Fonts.cpp View File

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


+ 1
- 1
modules/juce_gui_basics/components/juce_Component.cpp View File

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


+ 1
- 1
modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp View File

@@ -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'))
{ {


+ 1
- 1
modules/juce_gui_basics/juce_gui_basics.cpp View File

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


+ 1
- 1
modules/juce_gui_basics/juce_gui_basics.h View File

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


+ 1
- 1
modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp View File

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


+ 1
- 1
modules/juce_gui_basics/windows/juce_AlertWindow.cpp View File

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


+ 1
- 1
modules/juce_gui_extra/embedding/juce_XEmbedComponent.h View File

@@ -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
//============================================================================== //==============================================================================
/** /**


+ 2
- 2
modules/juce_gui_extra/juce_gui_extra.cpp View File

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


+ 1
- 1
modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp View File

@@ -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()
{ {


+ 2
- 2
modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h View File

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


+ 3
- 3
modules/juce_opengl/juce_opengl.cpp View File

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


+ 1
- 1
modules/juce_opengl/juce_opengl.h View File

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


+ 1
- 1
modules/juce_opengl/native/juce_OpenGLExtensions.h View File

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


+ 1
- 1
modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.cpp View File

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


+ 1
- 1
modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp View File

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


+ 1
- 1
modules/juce_product_unlocking/marketplace/juce_OnlineUnlockForm.cpp View File

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


+ 2
- 0
modules/juce_product_unlocking/marketplace/juce_OnlineUnlockStatus.cpp View File

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


+ 1
- 1
modules/juce_video/playback/juce_VideoComponent.cpp View File

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


Loading…
Cancel
Save