Browse Source

New class: ChildProcess. Fixed android build problems with paths.

tags/2021-05-28
Julian Storer 14 years ago
parent
commit
4fcd1e3384
71 changed files with 731 additions and 68 deletions
  1. +4
    -0
      extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj
  2. +11
    -0
      extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj
  3. +11
    -0
      extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj
  4. +4
    -0
      extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj
  5. +6
    -0
      extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters
  6. +22
    -0
      extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h
  7. +2
    -2
      extras/JuceDemo/Builds/Android/jni/Android.mk
  8. +4
    -0
      extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj
  9. +11
    -0
      extras/JuceDemo/Builds/VisualStudio2005/Juce Demo.vcproj
  10. +11
    -0
      extras/JuceDemo/Builds/VisualStudio2008/Juce Demo.vcproj
  11. +4
    -0
      extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj
  12. +6
    -0
      extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters
  13. +4
    -0
      extras/JuceDemo/Builds/iOS/Juce Demo.xcodeproj/project.pbxproj
  14. +4
    -0
      extras/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj
  15. +11
    -0
      extras/audio plugin demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj
  16. +11
    -0
      extras/audio plugin demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj
  17. +4
    -0
      extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj
  18. +11
    -0
      extras/audio plugin host/Builds/VisualStudio2005/Plugin Host.vcproj
  19. +11
    -0
      extras/audio plugin host/Builds/VisualStudio2008/Plugin Host.vcproj
  20. +4
    -0
      extras/binarybuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj
  21. +11
    -0
      extras/binarybuilder/Builds/VisualStudio2008/BinaryBuilder.vcproj
  22. +4
    -0
      extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj
  23. +11
    -0
      extras/example projects/Builds/VisualStudio2005/HelloWorld.vcproj
  24. +11
    -0
      extras/example projects/Builds/VisualStudio2008/HelloWorld.vcproj
  25. +4
    -0
      extras/example projects/Builds/iOS/HelloWorld.xcodeproj/project.pbxproj
  26. +4
    -0
      extras/static library/Builds/MacOSX/juce.xcodeproj/project.pbxproj
  27. +11
    -0
      extras/static library/Builds/VisualStudio2008/juce.vcproj
  28. +4
    -0
      extras/static library/Builds/VisualStudio2010/juce.vcxproj
  29. +6
    -0
      extras/static library/Builds/VisualStudio2010/juce.vcxproj.filters
  30. +4
    -0
      extras/the jucer/Builds/MacOSX/Jucer.xcodeproj/project.pbxproj
  31. +11
    -0
      extras/the jucer/Builds/VisualStudio2008/Jucer.vcproj
  32. +4
    -0
      extras/the jucer/Builds/VisualStudio2010/Jucer.vcxproj
  33. +6
    -0
      extras/the jucer/Builds/VisualStudio2010/Jucer.vcxproj.filters
  34. +1
    -1
      modules/juce_audio_basics/buffers/juce_AudioDataConverters.h
  35. +1
    -1
      modules/juce_audio_basics/juce_audio_basics.mm
  36. +1
    -1
      modules/juce_audio_basics/juce_module_info
  37. +1
    -1
      modules/juce_audio_devices/juce_module_info
  38. +1
    -1
      modules/juce_audio_devices/native/juce_linux_JackAudio.cpp
  39. +1
    -1
      modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp
  40. +1
    -1
      modules/juce_audio_formats/format/juce_AudioFormatReader.cpp
  41. +1
    -1
      modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp
  42. +1
    -1
      modules/juce_audio_formats/juce_module_info
  43. +1
    -1
      modules/juce_audio_plugin_client/juce_module_info
  44. +1
    -1
      modules/juce_audio_processors/juce_module_info
  45. +1
    -1
      modules/juce_audio_utils/juce_module_info
  46. +1
    -1
      modules/juce_browser_plugin/juce_module_info
  47. +1
    -0
      modules/juce_core/juce_core.cpp
  48. +3
    -0
      modules/juce_core/juce_core.h
  49. +1
    -1
      modules/juce_core/juce_module_info
  50. +1
    -1
      modules/juce_core/maths/juce_BigInteger.cpp
  51. +1
    -0
      modules/juce_core/native/juce_BasicNativeHeaders.h
  52. +113
    -0
      modules/juce_core/native/juce_posix_SharedCode.h
  53. +27
    -25
      modules/juce_core/native/juce_win32_Files.cpp
  54. +118
    -8
      modules/juce_core/native/juce_win32_Threads.cpp
  55. +1
    -1
      modules/juce_core/network/juce_URL.cpp
  56. +1
    -1
      modules/juce_core/system/juce_StandardHeader.h
  57. +3
    -3
      modules/juce_core/text/juce_String.cpp
  58. +95
    -0
      modules/juce_core/threads/juce_ChildProcess.cpp
  59. +87
    -0
      modules/juce_core/threads/juce_ChildProcess.h
  60. +1
    -1
      modules/juce_cryptography/juce_module_info
  61. +1
    -1
      modules/juce_data_structures/juce_module_info
  62. +1
    -1
      modules/juce_events/juce_module_info
  63. +1
    -1
      modules/juce_graphics/juce_graphics.mm
  64. +1
    -1
      modules/juce_graphics/juce_module_info
  65. +1
    -1
      modules/juce_gui_basics/juce_module_info
  66. +1
    -2
      modules/juce_gui_basics/keyboard/juce_KeyPress.cpp
  67. +7
    -2
      modules/juce_gui_basics/positioning/juce_MarkerList.cpp
  68. +2
    -0
      modules/juce_gui_basics/positioning/juce_MarkerList.h
  69. +1
    -1
      modules/juce_gui_extra/juce_module_info
  70. +1
    -1
      modules/juce_opengl/juce_module_info
  71. +1
    -1
      modules/juce_video/juce_module_info

+ 4
- 0
extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj View File

@@ -188,6 +188,8 @@
2BA7CD667A4D3962F968735B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; };
6E0B0A8EDCC37862B7ECBEBC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; };
875C1BC09CB8295D6799B5F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; };
DF2E980AB106BC34560B6636 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
0CFE85845D2C6ABBA077A319 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChildProcess.h"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
0A8AE7AC4AEF66AD97735443 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; };
23E4DA8F3BD72654C717FAF9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
9854BAFA65D92D059DF49F71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; };
@@ -891,6 +893,8 @@
6E0B0A8EDCC37862B7ECBEBC,
875C1BC09CB8295D6799B5F8 ); name = containers; sourceTree = "<group>"; };
2C3262AC916A51359D03A579 = { isa = PBXGroup; children = (
DF2E980AB106BC34560B6636,
0CFE85845D2C6ABBA077A319,
0A8AE7AC4AEF66AD97735443,
23E4DA8F3BD72654C717FAF9,
9854BAFA65D92D059DF49F71,


+ 11
- 0
extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj View File

@@ -548,6 +548,17 @@
<File RelativePath="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
</Filter>
<Filter Name="threads">
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 11
- 0
extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj View File

@@ -548,6 +548,17 @@
<File RelativePath="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
</Filter>
<Filter Name="threads">
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 4
- 0
extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj View File

@@ -215,6 +215,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_Variant.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ReadWriteLock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@@ -1039,6 +1042,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SortedSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 6
- 0
extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters View File

@@ -379,6 +379,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_Variant.cpp">
<Filter>Juce Modules\juce_core\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ReadWriteLock.cpp">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClCompile>
@@ -1473,6 +1476,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h">
<Filter>Juce Modules\juce_core\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClInclude>


+ 22
- 0
extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h View File

@@ -244,6 +244,19 @@ private:
<< "include $(BUILD_SHARED_LIBRARY)" << newLine;
}
String createIncludePathFlags (const Project::BuildConfiguration& config)
{
String flags;
StringArray searchPaths (extraSearchPaths);
searchPaths.addArray (config.getHeaderSearchPaths());
searchPaths.removeDuplicates (false);
for (int i = 0; i < searchPaths.size(); ++i)
flags << " -I " << FileHelpers::unixStylePath (replacePreprocessorTokens (config, searchPaths[i])).quoted();
return flags;
}
String createCPPFlags (bool forDebug)
{
String flags ("-fsigned-char -fexceptions -frtti");
@@ -251,6 +264,15 @@ private:
if (forDebug)
flags << " -g";
for (int i = 0; i < configs.size(); ++i)
{
if (configs.getReference(i).isDebug() == forDebug)
{
flags << createIncludePathFlags (configs.getReference(i));
break;
}
}
StringPairArray defines;
defines.set ("JUCE_ANDROID", "1");


+ 2
- 2
extras/JuceDemo/Builds/Android/jni/Android.mk View File

@@ -47,9 +47,9 @@ LOCAL_SRC_FILES := \
../../../../../modules/juce_video/juce_video.cpp\
ifeq ($(CONFIG),Debug)
LOCAL_CPPFLAGS += -fsigned-char -fexceptions -frtti -g -O0 -D "JUCE_ANDROID=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_ANDROID_7F0E4A25=1"
LOCAL_CPPFLAGS += -fsigned-char -fexceptions -frtti -g -I "../../JuceLibraryCode" -O0 -D "JUCE_ANDROID=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_ANDROID_7F0E4A25=1"
else
LOCAL_CPPFLAGS += -fsigned-char -fexceptions -frtti -Os -D "JUCE_ANDROID=1" -D "NDEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_ANDROID_7F0E4A25=1"
LOCAL_CPPFLAGS += -fsigned-char -fexceptions -frtti -I "../../JuceLibraryCode" -Os -D "JUCE_ANDROID=1" -D "NDEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_ANDROID_7F0E4A25=1"
endif
include $(BUILD_SHARED_LIBRARY)

+ 4
- 0
extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj View File

@@ -315,6 +315,8 @@
427FE8BEB90565F99AEAF9E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; };
85D325D62B8AA3E9586E4533 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; };
AE233608DB7055E4081B3C70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; };
F5F5B442F0CEF8BBF78DECBE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
23C5A1CC9CE4A632410A3A91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChildProcess.h"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
215202E499A7A22438F5DACA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; };
4ABBF6D78A8F52DB78A97171 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
BE2CD642B591698C3E8615F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; };
@@ -1191,6 +1193,8 @@
85D325D62B8AA3E9586E4533,
AE233608DB7055E4081B3C70 ); name = containers; sourceTree = "<group>"; };
420A8DE4E0228CBC3D953B00 = { isa = PBXGroup; children = (
F5F5B442F0CEF8BBF78DECBE,
23C5A1CC9CE4A632410A3A91,
215202E499A7A22438F5DACA,
4ABBF6D78A8F52DB78A97171,
BE2CD642B591698C3E8615F8,


+ 11
- 0
extras/JuceDemo/Builds/VisualStudio2005/Juce Demo.vcproj View File

@@ -1282,6 +1282,17 @@
<File RelativePath="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
</Filter>
<Filter Name="threads">
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 11
- 0
extras/JuceDemo/Builds/VisualStudio2008/Juce Demo.vcproj View File

@@ -1282,6 +1282,17 @@
<File RelativePath="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
</Filter>
<Filter Name="threads">
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 4
- 0
extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj View File

@@ -398,6 +398,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_Variant.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ReadWriteLock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@@ -1292,6 +1295,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SortedSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 6
- 0
extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters View File

@@ -670,6 +670,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_Variant.cpp">
<Filter>Juce Modules\juce_core\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ReadWriteLock.cpp">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClCompile>
@@ -1944,6 +1947,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h">
<Filter>Juce Modules\juce_core\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClInclude>


+ 4
- 0
extras/JuceDemo/Builds/iOS/Juce Demo.xcodeproj/project.pbxproj View File

@@ -305,6 +305,8 @@
427FE8BEB90565F99AEAF9E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; };
85D325D62B8AA3E9586E4533 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; };
AE233608DB7055E4081B3C70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; };
F5F5B442F0CEF8BBF78DECBE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
23C5A1CC9CE4A632410A3A91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChildProcess.h"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
215202E499A7A22438F5DACA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; };
4ABBF6D78A8F52DB78A97171 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
BE2CD642B591698C3E8615F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; };
@@ -1181,6 +1183,8 @@
85D325D62B8AA3E9586E4533,
AE233608DB7055E4081B3C70 ); name = containers; sourceTree = "<group>"; };
420A8DE4E0228CBC3D953B00 = { isa = PBXGroup; children = (
F5F5B442F0CEF8BBF78DECBE,
23C5A1CC9CE4A632410A3A91,
215202E499A7A22438F5DACA,
4ABBF6D78A8F52DB78A97171,
BE2CD642B591698C3E8615F8,


+ 4
- 0
extras/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj View File

@@ -301,6 +301,8 @@
B9387C0717F60E8448CD4A93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; };
FB9CB92E796C4C73074186E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; };
14EDCA503A51FE7FB7FE8D30 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; };
6CBF37AA5FAF9146A5602E7E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
9A8F3414FBC54FDDF0DD7B52 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChildProcess.h"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
981B963DE7884BBEE6D82B8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; };
B075892FD970FB65267CB231 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
25E5699A13720227ED5966B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; };
@@ -1143,6 +1145,8 @@
FB9CB92E796C4C73074186E4,
14EDCA503A51FE7FB7FE8D30 ); name = containers; sourceTree = "<group>"; };
B9C3113C3E132546EC787CB1 = { isa = PBXGroup; children = (
6CBF37AA5FAF9146A5602E7E,
9A8F3414FBC54FDDF0DD7B52,
981B963DE7884BBEE6D82B8B,
B075892FD970FB65267CB231,
25E5699A13720227ED5966B9,


+ 11
- 0
extras/audio plugin demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj View File

@@ -1291,6 +1291,17 @@
<File RelativePath="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
</Filter>
<Filter Name="threads">
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 11
- 0
extras/audio plugin demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj View File

@@ -1291,6 +1291,17 @@
<File RelativePath="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
</Filter>
<Filter Name="threads">
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 4
- 0
extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj View File

@@ -258,6 +258,8 @@
54083520C7AA5911B1F0371D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; };
976D73482A1F97017074727D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; };
B0BD847AEA05490C202179B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; };
078F01B40F52ECD31E932AF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
255FFE3EAB799A5A680067DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChildProcess.h"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
23FC5056A83C964C5F0B1704 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; };
5B454349892346F39FAFBEBA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
B0B523A4C3265DA5568C5232 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; };
@@ -1082,6 +1084,8 @@
976D73482A1F97017074727D,
B0BD847AEA05490C202179B9 ); name = containers; sourceTree = "<group>"; };
4494DB56EFB670D455AB683A = { isa = PBXGroup; children = (
078F01B40F52ECD31E932AF8,
255FFE3EAB799A5A680067DB,
23FC5056A83C964C5F0B1704,
5B454349892346F39FAFBEBA,
B0B523A4C3265DA5568C5232,


+ 11
- 0
extras/audio plugin host/Builds/VisualStudio2005/Plugin Host.vcproj View File

@@ -1133,6 +1133,17 @@
<File RelativePath="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
</Filter>
<Filter Name="threads">
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 11
- 0
extras/audio plugin host/Builds/VisualStudio2008/Plugin Host.vcproj View File

@@ -1133,6 +1133,17 @@
<File RelativePath="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
</Filter>
<Filter Name="threads">
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 4
- 0
extras/binarybuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj View File

@@ -73,6 +73,8 @@
99513107F04F61661876FA4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; };
DBC57E2F62B5AF65D6FA359A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; };
F4058F5113AA515196A62CD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; };
4CD70C9B37F8E4387419DD15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
69B70915D41E92BFDF952AF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChildProcess.h"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
78445B3DD0D19EA0B681DA22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; };
90AD4E20C2C95D57F53561D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
050E3E8AFCCB5509CC12155F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; };
@@ -259,6 +261,8 @@
DBC57E2F62B5AF65D6FA359A,
F4058F5113AA515196A62CD7 ); name = containers; sourceTree = "<group>"; };
99FCE63C175C8838BB212B67 = { isa = PBXGroup; children = (
4CD70C9B37F8E4387419DD15,
69B70915D41E92BFDF952AF8,
78445B3DD0D19EA0B681DA22,
90AD4E20C2C95D57F53561D8,
050E3E8AFCCB5509CC12155F,


+ 11
- 0
extras/binarybuilder/Builds/VisualStudio2008/BinaryBuilder.vcproj View File

@@ -346,6 +346,17 @@
<File RelativePath="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
</Filter>
<Filter Name="threads">
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 4
- 0
extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj View File

@@ -88,6 +88,8 @@
EF68F092DAC017371B6454B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; };
21CD3EBA3C464526D9E89004 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; };
4B1D4FFCFC3CF72289959650 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; };
92EFCC3611899AF97808479F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
C0BFB9B0BDAF4870D2748462 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChildProcess.h"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
CE5C1AD8AA624461B97F359B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; };
E6A50EBB9B5AF418F913DB41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
5B15FE26C55D0BCABFF070C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; };
@@ -693,6 +695,8 @@
21CD3EBA3C464526D9E89004,
4B1D4FFCFC3CF72289959650 ); name = containers; sourceTree = "<group>"; };
EFF4A6D8F1ED2FF9BE1F86D1 = { isa = PBXGroup; children = (
92EFCC3611899AF97808479F,
C0BFB9B0BDAF4870D2748462,
CE5C1AD8AA624461B97F359B,
E6A50EBB9B5AF418F913DB41,
5B15FE26C55D0BCABFF070C9,


+ 11
- 0
extras/example projects/Builds/VisualStudio2005/HelloWorld.vcproj View File

@@ -348,6 +348,17 @@
<File RelativePath="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
</Filter>
<Filter Name="threads">
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 11
- 0
extras/example projects/Builds/VisualStudio2008/HelloWorld.vcproj View File

@@ -348,6 +348,17 @@
<File RelativePath="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
</Filter>
<Filter Name="threads">
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 4
- 0
extras/example projects/Builds/iOS/HelloWorld.xcodeproj/project.pbxproj View File

@@ -86,6 +86,8 @@
EF68F092DAC017371B6454B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; };
21CD3EBA3C464526D9E89004 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; };
4B1D4FFCFC3CF72289959650 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; };
92EFCC3611899AF97808479F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
C0BFB9B0BDAF4870D2748462 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChildProcess.h"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
CE5C1AD8AA624461B97F359B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; };
E6A50EBB9B5AF418F913DB41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
5B15FE26C55D0BCABFF070C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; };
@@ -691,6 +693,8 @@
21CD3EBA3C464526D9E89004,
4B1D4FFCFC3CF72289959650 ); name = containers; sourceTree = "<group>"; };
EFF4A6D8F1ED2FF9BE1F86D1 = { isa = PBXGroup; children = (
92EFCC3611899AF97808479F,
C0BFB9B0BDAF4870D2748462,
CE5C1AD8AA624461B97F359B,
E6A50EBB9B5AF418F913DB41,
5B15FE26C55D0BCABFF070C9,


+ 4
- 0
extras/static library/Builds/MacOSX/juce.xcodeproj/project.pbxproj View File

@@ -215,6 +215,8 @@
A4F1CA6B07A550F9E78F82C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; };
E6550782791B9FE9A603CD27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; };
0FA528C43A0141E466B0C463 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; };
5777950E4F5ED4BB442275A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
75479288EB748232AFAFB285 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChildProcess.h"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
73E4E4A1E8378E23859A63BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; };
9B3DD783D92F4DDBC54E0964 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
00AEC7FE0322458C9C2BAEEC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; };
@@ -1032,6 +1034,8 @@
E6550782791B9FE9A603CD27,
0FA528C43A0141E466B0C463 ); name = containers; sourceTree = "<group>"; };
948C7FA03FC278BC8B3AC4E4 = { isa = PBXGroup; children = (
5777950E4F5ED4BB442275A1,
75479288EB748232AFAFB285,
73E4E4A1E8378E23859A63BE,
9B3DD783D92F4DDBC54E0964,
00AEC7FE0322458C9C2BAEEC,


+ 11
- 0
extras/static library/Builds/VisualStudio2008/juce.vcproj View File

@@ -1096,6 +1096,17 @@
<File RelativePath="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
</Filter>
<Filter Name="threads">
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 4
- 0
extras/static library/Builds/VisualStudio2010/juce.vcxproj View File

@@ -361,6 +361,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_Variant.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ReadWriteLock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@@ -1238,6 +1241,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SortedSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 6
- 0
extras/static library/Builds/VisualStudio2010/juce.vcxproj.filters View File

@@ -556,6 +556,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_Variant.cpp">
<Filter>Juce Modules\juce_core\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ReadWriteLock.cpp">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClCompile>
@@ -1779,6 +1782,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h">
<Filter>Juce Modules\juce_core\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClInclude>


+ 4
- 0
extras/the jucer/Builds/MacOSX/Jucer.xcodeproj/project.pbxproj View File

@@ -224,6 +224,8 @@
CCF4492B4B4F31BDA891E22C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; };
0F688642BDC57FBD67152E7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; };
28A897747DBB21A827C215C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; };
707A14CE8208B48F0535C507 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
9D5A01382E2E62066FA112DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChildProcess.h"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
9BE763502BE26EF846ACC304 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; };
B44056431CD92E9F864059BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
29A146BE47DC25505D2D0E31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; };
@@ -953,6 +955,8 @@
0F688642BDC57FBD67152E7D,
28A897747DBB21A827C215C9 ); name = containers; sourceTree = "<group>"; };
BD8FFE50726C48804C3C144A = { isa = PBXGroup; children = (
707A14CE8208B48F0535C507,
9D5A01382E2E62066FA112DA,
9BE763502BE26EF846ACC304,
B44056431CD92E9F864059BA,
29A146BE47DC25505D2D0E31,


+ 11
- 0
extras/the jucer/Builds/VisualStudio2008/Jucer.vcproj View File

@@ -515,6 +515,17 @@
<File RelativePath="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
</Filter>
<Filter Name="threads">
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<File RelativePath="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 4
- 0
extras/the jucer/Builds/VisualStudio2010/Jucer.vcxproj View File

@@ -206,6 +206,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_Variant.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ReadWriteLock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@@ -1042,6 +1045,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SortedSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_DynamicLibrary.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_InterProcessLock.h"/>


+ 6
- 0
extras/the jucer/Builds/VisualStudio2010/Jucer.vcxproj.filters View File

@@ -391,6 +391,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_Variant.cpp">
<Filter>Juce Modules\juce_core\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.cpp">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\threads\juce_ReadWriteLock.cpp">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClCompile>
@@ -1548,6 +1551,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h">
<Filter>Juce Modules\juce_core\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_ChildProcess.h">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\threads\juce_CriticalSection.h">
<Filter>Juce Modules\juce_core\threads</Filter>
</ClInclude>


+ 1
- 1
modules/juce_audio_basics/buffers/juce_AudioDataConverters.h View File

@@ -298,7 +298,7 @@ public:
{
public:
typedef const void VoidType;
static inline void* toVoidPtr (VoidType* v) noexcept { return const_cast<void*> (v); }
static inline void* toVoidPtr (VoidType* v) noexcept { return const_cast <void*> (v); }
enum { isConst = 1 };
};
#endif


+ 1
- 1
modules/juce_audio_basics/juce_audio_basics.mm View File

@@ -23,4 +23,4 @@
==============================================================================
*/
#include "juce_audio_basics.cpp"
#include "juce_audio_basics.cpp"

+ 1
- 1
modules/juce_audio_basics/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_audio_basics",
"name": "JUCE audio and midi data classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Classes for audio buffer manipulation, midi message handling, synthesis, etc",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 1
modules/juce_audio_devices/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_audio_devices",
"name": "JUCE audio and midi I/O device classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Classes to play and record from audio and midi i/o devices.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 1
modules/juce_audio_devices/native/juce_linux_JackAudio.cpp View File

@@ -385,7 +385,7 @@ private:
if (callback != nullptr)
{
callback->audioDeviceIOCallback (const_cast<const float**> (inChans.getData()), numActiveInChans,
callback->audioDeviceIOCallback (const_cast <const float**> (inChans.getData()), numActiveInChans,
outChans, numActiveOutChans, numSamples);
}
else


+ 1
- 1
modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp View File

@@ -375,7 +375,7 @@ public:
destData[j] = (samplesToWrite[i][j] >> bitsToShift);
}
samplesToWrite = const_cast<const int**> (channels.getData());
samplesToWrite = const_cast <const int**> (channels.getData());
}
return FLAC__stream_encoder_process (encoder, (const FLAC__int32**) samplesToWrite, numSamples) != 0;


+ 1
- 1
modules/juce_audio_formats/format/juce_AudioFormatReader.cpp View File

@@ -69,7 +69,7 @@ bool AudioFormatReader::read (int* const* destSamples,
if (numSamplesToRead <= 0)
return true;
if (! readSamples (const_cast<int**> (destSamples),
if (! readSamples (const_cast <int**> (destSamples),
jmin ((int) numChannels, numDestChannels), startOffsetInDestBuffer,
startSampleInSource, numSamplesToRead))
return false;


+ 1
- 1
modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp View File

@@ -101,7 +101,7 @@ bool AudioFormatWriter::writeFromAudioReader (AudioFormatReader& reader,
}
}
if (! write (const_cast<const int**> (buffers), numToDo))
if (! write (const_cast <const int**> (buffers), numToDo))
return false;
numSamplesToRead -= numToDo;


+ 1
- 1
modules/juce_audio_formats/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_audio_formats",
"name": "JUCE audio file format codecs",
"version": "2.0.2",
"version": "2.0.3",
"description": "Classes for reading and writing various audio file formats.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 1
modules/juce_audio_plugin_client/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_audio_plugin_client",
"name": "JUCE audio plugin wrapper classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Classes for building VST, RTAS and AU plugins.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 1
modules/juce_audio_processors/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_audio_processors",
"name": "JUCE audio plugin hosting classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Classes for loading and playing VST, AU, or internally-generated audio processors.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 1
modules/juce_audio_utils/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_audio_utils",
"name": "JUCE extra audio utility classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Classes for audio-related GUI and miscellaneous tasks.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 1
modules/juce_browser_plugin/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_browser_plugin_client",
"name": "JUCE browser plugin wrapper classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Classes for building NPAPI and ActiveX browser plugins.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 0
modules/juce_core/juce_core.cpp View File

@@ -84,6 +84,7 @@
#include "text/juce_StringArray.cpp"
#include "text/juce_StringPairArray.cpp"
#include "text/juce_StringPool.cpp"
#include "threads/juce_ChildProcess.cpp"
#include "threads/juce_ReadWriteLock.cpp"
#include "threads/juce_Thread.cpp"
#include "threads/juce_ThreadPool.cpp"


+ 3
- 0
modules/juce_core/juce_core.h View File

@@ -326,6 +326,9 @@ BEGIN_JUCE_NAMESPACE
#ifndef __JUCE_STRINGPOOL_JUCEHEADER__
#include "text/juce_StringPool.h"
#endif
#ifndef __JUCE_CHILDPROCESS_JUCEHEADER__
#include "threads/juce_ChildProcess.h"
#endif
#ifndef __JUCE_CRITICALSECTION_JUCEHEADER__
#include "threads/juce_CriticalSection.h"
#endif


+ 1
- 1
modules/juce_core/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_core",
"name": "JUCE core classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "The essential set of basic JUCE classes, as required by all the other JUCE modules. Includes text, container, memory, threading and i/o functionality.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 1
modules/juce_core/maths/juce_BigInteger.cpp View File

@@ -905,7 +905,7 @@ String BigInteger::toString (const int base, const int minimumNumCharacters) con
if (base == 2 || base == 8 || base == 16)
{
const int bits = (base == 2) ? 1 : (base == 8 ? 3 : 4);
static const char* const hexDigits = "0123456789abcdef";
static const char hexDigits[] = "0123456789abcdef";
for (;;)
{


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

@@ -199,6 +199,7 @@
#include <pwd.h>
#include <dirent.h>
#include <fnmatch.h>
#include <sys/wait.h>
#endif
// Need to clear various moronic redefinitions made by system headers..


+ 113
- 0
modules/juce_core/native/juce_posix_SharedCode.h View File

@@ -919,3 +919,116 @@ void* DynamicLibrary::getFunction (const String& functionName) noexcept
{
return handle != nullptr ? dlsym (handle, functionName.toUTF8()) : nullptr;
}
//==============================================================================
class ChildProcess::ActiveProcess
{
public:
ActiveProcess (const StringArray& arguments)
: childPID (0), pipeHandle (0), readHandle (0)
{
int pipeHandles[2] = { 0 };
if (pipe (pipeHandles) == 0)
{
const int result = fork();
if (result < 0)
{
close (pipeHandles[0]);
close (pipeHandles[1]);
}
else if (result == 0)
{
// we're the child process..
close (pipeHandles[0]); // close the read handle
dup2 (pipeHandles[1], 1); // turns the pipe into stdout
Array<char*> argv;
for (int i = 0; i < arguments.size(); ++i)
argv.add (arguments[i].toUTF8().getAddress());
argv.add (nullptr);
execvp (argv[0], argv.getRawDataPointer());
exit (-1);
}
else
{
// we're the parent process..
childPID = result;
pipeHandle = pipeHandles[0];
close (pipeHandles[1]); // close the write handle
}
}
}
~ActiveProcess()
{
if (readHandle != 0)
fclose (readHandle);
if (pipeHandle != 0)
close (pipeHandle);
}
bool isRunning() const
{
if (childPID != 0)
{
int childState;
const int pid = waitpid (childPID, &childState, WNOHANG);
return pid > 0 && ! (WIFEXITED (childState) || WIFSIGNALED (childState));
}
return false;
}
int read (void* const dest, const int numBytes)
{
if (readHandle == 0 && childPID != 0)
readHandle = fdopen (pipeHandle, "r");
if (readHandle != 0)
return fread (dest, 1, numBytes, readHandle);
return 0;
}
int childPID;
private:
int pipeHandle;
FILE* readHandle;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ActiveProcess);
};
bool ChildProcess::start (const String& command)
{
StringArray tokens;
tokens.addTokens (command, true);
tokens.removeEmptyStrings (true);
if (tokens.size() == 0)
return false;
activeProcess = new ActiveProcess (tokens);
if (activeProcess->childPID == 0)
activeProcess = nullptr;
return activeProcess != nullptr;
}
bool ChildProcess::isRunning() const
{
return activeProcess != nullptr && activeProcess->isRunning();
}
int ChildProcess::readProcessOutput (void* dest, int numBytes)
{
return activeProcess != nullptr ? activeProcess->read (dest, numBytes) : 0;
}

+ 27
- 25
modules/juce_core/native/juce_win32_Files.cpp View File

@@ -30,6 +30,11 @@
//==============================================================================
namespace WindowsFileHelpers
{
DWORD getAtts (const String& path)
{
return GetFileAttributes (path.toWideCharPointer());
}
int64 fileTimeToTime (const FILETIME* const ft)
{
static_jassert (sizeof (ULARGE_INTEGER) == sizeof (FILETIME)); // tell me if this fails!
@@ -46,13 +51,14 @@ namespace WindowsFileHelpers
{
if (path.isNotEmpty() && path[1] == ':' && path[2] == 0)
path << '\\';
else
path = (path + " ").dropLastCharacters(1); // (mess with the string to make sure it's not sharing its internal storage)
WCHAR* p = const_cast <WCHAR*> (path.toWideCharPointer());
const int numBytes = CharPointer_UTF16::getBytesRequiredFor (path.getCharPointer()) + 4;
HeapBlock<WCHAR> pathCopy;
pathCopy.calloc (numBytes, 1);
path.copyToUTF16 (pathCopy, numBytes);
if (PathStripToRoot (p))
return String ((const WCHAR*) p);
if (PathStripToRoot (pathCopy))
path = static_cast <const WCHAR*> (pathCopy);
return path;
}
@@ -104,25 +110,25 @@ const String File::separatorString ("\\");
bool File::exists() const
{
return fullPath.isNotEmpty()
&& GetFileAttributes (fullPath.toWideCharPointer()) != INVALID_FILE_ATTRIBUTES;
&& WindowsFileHelpers::getAtts (fullPath) != INVALID_FILE_ATTRIBUTES;
}
bool File::existsAsFile() const
{
return fullPath.isNotEmpty()
&& (GetFileAttributes (fullPath.toWideCharPointer()) & FILE_ATTRIBUTE_DIRECTORY) == 0;
&& (WindowsFileHelpers::getAtts (fullPath) & FILE_ATTRIBUTE_DIRECTORY) == 0;
}
bool File::isDirectory() const
{
const DWORD attr = GetFileAttributes (fullPath.toWideCharPointer());
const DWORD attr = WindowsFileHelpers::getAtts (fullPath);
return ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) && (attr != INVALID_FILE_ATTRIBUTES);
}
bool File::hasWriteAccess() const
{
if (exists())
return (GetFileAttributes (fullPath.toWideCharPointer()) & FILE_ATTRIBUTE_READONLY) == 0;
return (WindowsFileHelpers::getAtts (fullPath) & FILE_ATTRIBUTE_READONLY) == 0;
// on windows, it seems that even read-only directories can still be written into,
// so checking the parent directory's permissions would return the wrong result..
@@ -131,25 +137,20 @@ bool File::hasWriteAccess() const
bool File::setFileReadOnlyInternal (const bool shouldBeReadOnly) const
{
DWORD attr = GetFileAttributes (fullPath.toWideCharPointer());
const DWORD oldAtts = WindowsFileHelpers::getAtts (fullPath);
if (attr == INVALID_FILE_ATTRIBUTES)
if (oldAtts == INVALID_FILE_ATTRIBUTES)
return false;
if (shouldBeReadOnly == ((attr & FILE_ATTRIBUTE_READONLY) != 0))
return true;
if (shouldBeReadOnly)
attr |= FILE_ATTRIBUTE_READONLY;
else
attr &= ~FILE_ATTRIBUTE_READONLY;
return SetFileAttributes (fullPath.toWideCharPointer(), attr) != FALSE;
const DWORD newAtts = shouldBeReadOnly ? (oldAtts | FILE_ATTRIBUTE_READONLY)
: (oldAtts & ~FILE_ATTRIBUTE_READONLY);
return newAtts == oldAtts
|| SetFileAttributes (fullPath.toWideCharPointer(), newAtts) != FALSE;
}
bool File::isHidden() const
{
return (GetFileAttributes (getFullPathName().toWideCharPointer()) & FILE_ATTRIBUTE_HIDDEN) != 0;
return (WindowsFileHelpers::getAtts (fullPath) & FILE_ATTRIBUTE_HIDDEN) != 0;
}
//==============================================================================
@@ -170,12 +171,13 @@ bool File::moveToTrash() const
SHFILEOPSTRUCT fos = { 0 };
// The string we pass in must be double null terminated..
String doubleNullTermPath (getFullPathName() + " ");
WCHAR* const p = const_cast <WCHAR*> (doubleNullTermPath.toWideCharPointer());
p [getFullPathName().length()] = 0;
const int numBytes = CharPointer_UTF16::getBytesRequiredFor (fullPath.getCharPointer()) + 8;
HeapBlock<WCHAR> doubleNullTermPath;
doubleNullTermPath.calloc (numBytes, 1);
fullPath.copyToUTF16 (doubleNullTermPath, numBytes);
fos.wFunc = FO_DELETE;
fos.pFrom = p;
fos.pFrom = doubleNullTermPath;
fos.fFlags = FOF_ALLOWUNDO | FOF_NOERRORUI | FOF_SILENT | FOF_NOCONFIRMATION
| FOF_NOCONFIRMMKDIR | FOF_RENAMEONCOLLISION;


+ 118
- 8
modules/juce_core/native/juce_win32_Threads.cpp View File

@@ -390,14 +390,14 @@ public:
switch (WaitForSingleObject (handle, timeOutMillisecs < 0 ? INFINITE : timeOutMillisecs))
{
case WAIT_OBJECT_0:
case WAIT_ABANDONED:
break;
case WAIT_TIMEOUT:
default:
close();
break;
case WAIT_OBJECT_0:
case WAIT_ABANDONED:
break;
case WAIT_TIMEOUT:
default:
close();
break;
}
}
}
@@ -459,3 +459,113 @@ void InterProcessLock::exit()
if (pimpl != nullptr && --(pimpl->refCount) == 0)
pimpl = nullptr;
}
//==============================================================================
class ChildProcess::ActiveProcess
{
public:
ActiveProcess (const String& command)
: ok (false), readPipe (0), writePipe (0)
{
SECURITY_ATTRIBUTES securityAtts = { 0 };
securityAtts.nLength = sizeof (securityAtts);
securityAtts.bInheritHandle = TRUE;
if (CreatePipe (&readPipe, &writePipe, &securityAtts, 0)
&& SetHandleInformation (readPipe, HANDLE_FLAG_INHERIT, 0))
{
STARTUPINFOW startupInfo = { 0 };
startupInfo.cb = sizeof (startupInfo);
startupInfo.hStdError = writePipe;
startupInfo.hStdOutput = writePipe;
startupInfo.dwFlags = STARTF_USESTDHANDLES;
ok = CreateProcess (nullptr, const_cast <LPWSTR> (command.toWideCharPointer()),
nullptr, nullptr, TRUE, CREATE_NO_WINDOW | CREATE_UNICODE_ENVIRONMENT,
nullptr, nullptr, &startupInfo, &processInfo) != FALSE;
}
}
~ActiveProcess()
{
if (ok)
{
CloseHandle (processInfo.hThread);
CloseHandle (processInfo.hProcess);
}
if (readPipe != 0)
CloseHandle (readPipe);
if (writePipe != 0)
CloseHandle (writePipe);
}
bool isRunning() const
{
return WaitForSingleObject (processInfo.hProcess, 0) != WAIT_OBJECT_0;
}
int read (void* dest, int numNeeded) const
{
int total = 0;
while (ok && numNeeded > 0)
{
DWORD available = 0;
if (! PeekNamedPipe ((HANDLE) readPipe, nullptr, 0, nullptr, &available, nullptr))
break;
const int numToDo = jmin ((int) available, numNeeded);
if (available == 0)
{
if (! isRunning())
break;
Thread::yield();
}
else
{
DWORD numRead = 0;
if (! ReadFile ((HANDLE) readPipe, dest, numToDo, &numRead, nullptr))
break;
total += numRead;
dest = addBytesToPointer (dest, numRead);
numNeeded -= numRead;
}
}
return total;
}
bool ok;
private:
HANDLE readPipe, writePipe;
PROCESS_INFORMATION processInfo;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ActiveProcess);
};
bool ChildProcess::start (const String& command)
{
activeProcess = new ActiveProcess (command);
if (! activeProcess->ok)
activeProcess = nullptr;
return activeProcess != nullptr;
}
bool ChildProcess::isRunning() const
{
return activeProcess != nullptr && activeProcess->isRunning();
}
int ChildProcess::readProcessOutput (void* dest, int numBytes)
{
return activeProcess != nullptr ? activeProcess->read (dest, numBytes) : 0;
}

+ 1
- 1
modules/juce_core/network/juce_URL.cpp View File

@@ -431,7 +431,7 @@ String URL::addEscapeChars (const String& s, const bool isParameter)
}
else
{
static const char* const hexDigits = "0123456789abcdef";
static const char hexDigits[] = "0123456789abcdef";
utf8.set (i, '%');
utf8.insert (++i, hexDigits [((uint8) c) >> 4]);


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

@@ -33,7 +33,7 @@
*/
#define JUCE_MAJOR_VERSION 2
#define JUCE_MINOR_VERSION 0
#define JUCE_BUILDNUMBER 2
#define JUCE_BUILDNUMBER 3
/** Current Juce version number.


+ 3
- 3
modules/juce_core/text/juce_String.cpp View File

@@ -1033,7 +1033,7 @@ bool String::matchesWildcard (const String& wildcard, const bool ignoreCase) con
String String::repeatedString (const String& stringToRepeat, int numberOfTimesToRepeat)
{
if (numberOfTimesToRepeat <= 0)
return String::empty;
return empty;
String result (PreallocationBytes (stringToRepeat.getByteOffsetOfEnd() * numberOfTimesToRepeat));
CharPointerType n (result.text);
@@ -1953,7 +1953,7 @@ String String::createStringFromData (const void* const data_, const int size)
}
//==============================================================================
static juce_wchar emptyChar = 0;
static const juce_wchar emptyChar = 0;
template <class CharPointerType_Src, class CharPointerType_Dest>
struct StringEncodingConverter
@@ -2011,7 +2011,7 @@ CharPointer_UTF32 String::toUTF32() const { return StringEncodingConverter <Char
const wchar_t* String::toWideCharPointer() const
{
return (const wchar_t*) StringEncodingConverter <CharPointerType, CharPointer_wchar_t>::convert (*this).getAddress();
return StringEncodingConverter <CharPointerType, CharPointer_wchar_t>::convert (*this).getAddress();
}
//==============================================================================


+ 95
- 0
modules/juce_core/threads/juce_ChildProcess.cpp View File

@@ -0,0 +1,95 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-11 by Raw Material Software Ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the GNU General
Public License (Version 2), as published by the Free Software Foundation.
A copy of the license is included in the JUCE distribution, or can be found
online at www.gnu.org/licenses.
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.rawmaterialsoftware.com/juce for more information.
==============================================================================
*/
BEGIN_JUCE_NAMESPACE
ChildProcess::ChildProcess() {}
ChildProcess::~ChildProcess() {}
bool ChildProcess::waitForProcessToFinish (const int timeoutMs) const
{
const int64 timeoutTime = Time::getMillisecondCounter() + timeoutMs;
do
{
if (! isRunning())
return true;
}
while (timeoutMs < 0 || Time::getMillisecondCounter() < timeoutTime);
return false;
}
String ChildProcess::readAllProcessOutput()
{
MemoryOutputStream result;
for (;;)
{
char buffer [512];
const int num = readProcessOutput (buffer, sizeof (buffer));
if (num <= 0)
break;
result.write (buffer, num);
}
return result.toString();
}
//==============================================================================
#if JUCE_UNIT_TESTS
#include "../unit_tests/juce_UnitTest.h"
class ChildProcessTests : public UnitTest
{
public:
ChildProcessTests() : UnitTest ("ChildProcess") {}
void runTest()
{
#if JUCE_WINDOWS || JUCE_MAC || JUCE_LINUX
ChildProcess p;
#if JUCE_WINDOWS
expect (p.start ("tasklist"));
#else
expect (p.start ("ls /"));
#endif
String output (p.readAllProcessOutput());
expect (output.isNotEmpty());
#endif
}
};
static ChildProcessTests childProcessUnitTests;
#endif
END_JUCE_NAMESPACE

+ 87
- 0
modules/juce_core/threads/juce_ChildProcess.h View File

@@ -0,0 +1,87 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-11 by Raw Material Software Ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the GNU General
Public License (Version 2), as published by the Free Software Foundation.
A copy of the license is included in the JUCE distribution, or can be found
online at www.gnu.org/licenses.
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.rawmaterialsoftware.com/juce for more information.
==============================================================================
*/
#ifndef __JUCE_CHILDPROCESS_JUCEHEADER__
#define __JUCE_CHILDPROCESS_JUCEHEADER__
//==============================================================================
/**
Launches and monitors a child process.
This class lets you launch an executable, and read its output. You can also
use it to check whether the child process has finished.
*/
class ChildProcess
{
public:
/** Creates a process object.
To actually launch the process, use start().
*/
ChildProcess();
/** Destructor.
Note that deleting this object won't terminate the child process.
*/
~ChildProcess();
/** Attempts to launch a child process command.
The command should be the name of the executable file, followed by any arguments
that are required.
If the process has already been launched, this will launch it again. If a problem
occurs, the method will return false.
*/
bool start (const String& command);
/** Returns true if the child process is alive. */
bool isRunning() const;
/** Attempts to read some output from the child process.
This will attempt to read up to the given number of bytes of data from the
process. It returns the number of bytes that were actually read.
*/
int readProcessOutput (void* destBuffer, int numBytesToRead);
/** Blocks until the process has finished, and then returns its complete output
as a string.
*/
String readAllProcessOutput();
/** Blocks until the process is no longer running. */
bool waitForProcessToFinish (int timeoutMs) const;
private:
//==============================================================================
class ActiveProcess;
friend class ScopedPointer<ActiveProcess>;
ScopedPointer<ActiveProcess> activeProcess;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ChildProcess);
};
#endif // __JUCE_CHILDPROCESS_JUCEHEADER__

+ 1
- 1
modules/juce_cryptography/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_cryptography",
"name": "JUCE cryptography classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Classes for various basic cryptography functions, including RSA, Blowfish, MD5, SHA, etc.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 1
modules/juce_data_structures/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_data_structures",
"name": "JUCE data model helper classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Classes for undo/redo management, and smart data structures.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 1
modules/juce_events/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_events",
"name": "JUCE message and event handling classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Classes for running an application's main event loop and sending/receiving messages, timers, etc.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 1
modules/juce_graphics/juce_graphics.mm View File

@@ -23,4 +23,4 @@
==============================================================================
*/
#include "juce_graphics.cpp"
#include "juce_graphics.cpp"

+ 1
- 1
modules/juce_graphics/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_graphics",
"name": "JUCE graphics classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Classes for 2D vector graphics, image loading/saving, font handling, etc.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 1
modules/juce_gui_basics/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_gui_basics",
"name": "JUCE GUI core classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Basic user-interface components and related classes.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 2
modules/juce_gui_basics/keyboard/juce_KeyPress.cpp View File

@@ -207,8 +207,7 @@ const KeyPress KeyPress::createFromDescription (const String& desc)
{
// give up and use the hex code..
const int hexCode = desc.fromFirstOccurrenceOf ("#", false, false)
.toLowerCase()
.retainCharacters ("0123456789abcdef")
.retainCharacters ("0123456789abcdefABCDEF")
.getHexValue32();
if (hexCode > 0)


+ 7
- 2
modules/juce_gui_basics/positioning/juce_MarkerList.cpp View File

@@ -88,10 +88,15 @@ const MarkerList::Marker* MarkerList::getMarker (const int index) const noexcept
}
const MarkerList::Marker* MarkerList::getMarker (const String& name) const noexcept
{
return getMarkerByName (name);
}
MarkerList::Marker* MarkerList::getMarkerByName (const String& name) const noexcept
{
for (int i = 0; i < markers.size(); ++i)
{
const Marker* const m = markers.getUnchecked(i);
Marker* const m = markers.getUnchecked(i);
if (m->name == name)
return m;
@@ -102,7 +107,7 @@ const MarkerList::Marker* MarkerList::getMarker (const String& name) const noexc
void MarkerList::setMarker (const String& name, const RelativeCoordinate& position)
{
Marker* const m = const_cast <Marker*> (getMarker (name));
Marker* const m = getMarkerByName (name);
if (m != nullptr)
{


+ 2
- 0
modules/juce_gui_basics/positioning/juce_MarkerList.h View File

@@ -179,6 +179,8 @@ private:
OwnedArray<Marker> markers;
ListenerList<Listener> listeners;
Marker* getMarkerByName (const String& name) const noexcept;
JUCE_LEAK_DETECTOR (MarkerList);
};


+ 1
- 1
modules/juce_gui_extra/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_gui_extra",
"name": "JUCE extended GUI classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Miscellaneous GUI classes for specialised tasks.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 1
modules/juce_opengl/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_opengl",
"name": "JUCE OpenGL classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Classes for rendering OpenGL in a JUCE window.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


+ 1
- 1
modules/juce_video/juce_module_info View File

@@ -1,7 +1,7 @@
{
"id": "juce_video",
"name": "JUCE video playback and capture classes",
"version": "2.0.2",
"version": "2.0.3",
"description": "Classes for playing video and capturing camera input.",
"website": "http://www.juce.com/juce",
"license": "GPL/Commercial",


Loading…
Cancel
Save