1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

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

This commit is contained in:
Julian Storer 2011-09-02 12:48:36 +01:00
parent 5fc80a9b79
commit 4fcd1e3384
71 changed files with 730 additions and 67 deletions

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,

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

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

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

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>

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

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)

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,

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

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

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

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>

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,

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,

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

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

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,

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

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

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,

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

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,

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

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

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,

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,

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

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

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>

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,

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

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

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>

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

View file

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

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

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

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

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;

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;

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;

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

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

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

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

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

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"

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

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

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

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

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

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;

View file

@ -390,14 +390,14 @@ public:
switch (WaitForSingleObject (handle, timeOutMillisecs < 0 ? INFINITE : timeOutMillisecs))
{
case WAIT_OBJECT_0:
case WAIT_ABANDONED:
break;
case WAIT_OBJECT_0:
case WAIT_ABANDONED:
break;
case WAIT_TIMEOUT:
default:
close();
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;
}

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

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.

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();
}
//==============================================================================

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

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__

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

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

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

View file

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

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

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

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)

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

View file

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

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

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

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