@@ -21,7 +21,7 @@ ifeq ($(CONFIG),Debug) | |||
CPPFLAGS := $(DEPFLAGS) -std=c++11 -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ~/SDKs/vstsdk2.4 -I ../../JuceLibraryCode -I ../../../../modules | |||
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 | |||
CXXFLAGS += $(CFLAGS) | |||
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -shared -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt | |||
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) --no-undefined -shared -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt | |||
TARGET := JuceDemoPlugin.so | |||
BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) | |||
@@ -41,7 +41,7 @@ ifeq ($(CONFIG),Release) | |||
CPPFLAGS := $(DEPFLAGS) -std=c++11 -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ~/SDKs/vstsdk2.4 -I ../../JuceLibraryCode -I ../../../../modules | |||
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -Os | |||
CXXFLAGS += $(CFLAGS) | |||
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -shared -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt | |||
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) --no-undefined -shared -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt | |||
TARGET := JuceDemoPlugin.so | |||
BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) | |||
@@ -164,9 +164,7 @@ String GeneratedCode::getClassDeclaration() const | |||
parentClassLines.addTokens (parentClasses, ",", StringRef()); | |||
parentClassLines.addArray (getExtraParentClasses()); | |||
parentClassLines.trim(); | |||
parentClassLines.removeEmptyStrings(); | |||
parentClassLines.removeDuplicates (false); | |||
parentClassLines = getCleanedStringArray (parentClassLines); | |||
if (parentClassLines.contains ("public Button", false)) | |||
parentClassLines.removeString ("public Component", false); | |||
@@ -186,9 +184,7 @@ String GeneratedCode::getInitialiserList() const | |||
if (parentClassInitialiser.isNotEmpty()) | |||
inits.insert (0, parentClassInitialiser); | |||
inits.trim(); | |||
inits.removeEmptyStrings(); | |||
inits.removeDuplicates (false); | |||
inits = getCleanedStringArray (inits); | |||
String s; | |||
@@ -217,12 +213,10 @@ String GeneratedCode::getInitialiserList() const | |||
static String getIncludeFileCode (StringArray files) | |||
{ | |||
files.trim(); | |||
files.removeEmptyStrings(); | |||
files.removeDuplicates (false); | |||
String s; | |||
files = getCleanedStringArray (files); | |||
for (int i = 0; i < files.size(); ++i) | |||
s << "#include \"" << files[i] << "\"\n"; | |||
@@ -158,11 +158,7 @@ void JucerDocument::setParentClasses (const String& classes) | |||
{ | |||
if (classes != parentClasses) | |||
{ | |||
StringArray parentClassLines; | |||
parentClassLines.addTokens (classes, ",", StringRef()); | |||
parentClassLines.trim(); | |||
parentClassLines.removeEmptyStrings(); | |||
parentClassLines.removeDuplicates (false); | |||
StringArray parentClassLines (getCleanedStringArray (StringArray::fromTokens (classes, ",", StringRef()))); | |||
for (int i = parentClassLines.size(); --i >= 0;) | |||
{ | |||
@@ -336,9 +336,7 @@ private: | |||
if (getInternetNeeded()) s.add ("android.permission.INTERNET"); | |||
if (getAudioRecordNeeded()) s.add ("android.permission.RECORD_AUDIO"); | |||
s.trim(); | |||
s.removeDuplicates (false); | |||
return s; | |||
return getCleanedStringArray (s); | |||
} | |||
//============================================================================== | |||
@@ -557,7 +555,8 @@ private: | |||
String flags; | |||
StringArray searchPaths (extraSearchPaths); | |||
searchPaths.addArray (config.getHeaderSearchPaths()); | |||
searchPaths.removeDuplicates (false); | |||
searchPaths = getCleanedStringArray (searchPaths); | |||
for (int i = 0; i < searchPaths.size(); ++i) | |||
flags << " -I " << FileHelpers::unixStylePath (replacePreprocessorTokens (config, searchPaths[i])).quoted(); | |||
@@ -95,7 +95,8 @@ public: | |||
bool canLaunchProject() override { return false; } | |||
bool launchProject() override { return false; } | |||
bool isCodeBlocksWindows() const override { return os == windowsTarget; } | |||
bool isCodeBlocksLinux() const override { return os == linuxTarget; } | |||
bool isCodeBlocksLinux() const override { return isLinux(); } | |||
bool isLinux() const override { return os == linuxTarget; } | |||
bool usesMMFiles() const override { return false; } | |||
bool canCopeWithDuplicateFiles() override { return false; } | |||
@@ -153,14 +154,6 @@ private: | |||
xml.createNewChildElement ("Option")->setAttribute ("compiler", "gcc"); | |||
} | |||
static StringArray cleanArray (StringArray s) | |||
{ | |||
s.trim(); | |||
s.removeDuplicates (false); | |||
s.removeEmptyStrings (true); | |||
return s; | |||
} | |||
StringArray getDefines (const BuildConfiguration& config) const | |||
{ | |||
StringPairArray defines; | |||
@@ -191,7 +184,7 @@ private: | |||
for (int i = 0; i < defines.size(); ++i) | |||
defs.add (defines.getAllKeys()[i] + "=" + defines.getAllValues()[i]); | |||
return cleanArray (defs); | |||
return getCleanedStringArray (defs); | |||
} | |||
StringArray getCompilerFlags (const BuildConfiguration& config) const | |||
@@ -221,12 +214,12 @@ private: | |||
} | |||
} | |||
return cleanArray (flags); | |||
return getCleanedStringArray (flags); | |||
} | |||
StringArray getLinkerFlags (const BuildConfiguration& config) const | |||
{ | |||
StringArray flags; | |||
StringArray flags (makefileExtraLinkerFlags); | |||
if (! config.isDebug()) | |||
flags.add ("-s"); | |||
@@ -234,7 +227,7 @@ private: | |||
flags.addTokens (replacePreprocessorTokens (config, getExtraLinkerFlagsString()).trim(), | |||
" \n", "\"'"); | |||
return cleanArray (flags); | |||
return getCleanedStringArray (flags); | |||
} | |||
StringArray getIncludePaths (const BuildConfiguration& config) const | |||
@@ -250,7 +243,7 @@ private: | |||
if (! isCodeBlocksWindows()) | |||
paths.add ("/usr/include/freetype2"); | |||
return cleanArray (paths); | |||
return getCleanedStringArray (paths); | |||
} | |||
static int getTypeIndex (const ProjectType& type) | |||
@@ -360,7 +353,7 @@ private: | |||
libs.addTokens (getExternalLibrariesString(), ";\n", "\"'"); | |||
libs = cleanArray (libs); | |||
libs = getCleanedStringArray (libs); | |||
for (int i = 0; i < libs.size(); ++i) | |||
setAddOption (*linker, "library", replacePreprocessorDefs (getAllPreprocessorDefs(), libs[i])); | |||
@@ -291,8 +291,7 @@ protected: | |||
{ | |||
StringArray searchPaths (extraSearchPaths); | |||
searchPaths.addArray (config.getHeaderSearchPaths()); | |||
searchPaths.removeDuplicates (false); | |||
return searchPaths; | |||
return getCleanedStringArray (searchPaths); | |||
} | |||
virtual String createConfigName (const BuildConfiguration& config) const | |||
@@ -52,6 +52,7 @@ public: | |||
bool launchProject() override { return false; } | |||
bool usesMMFiles() const override { return false; } | |||
bool isLinuxMakefile() const override { return true; } | |||
bool isLinux() const override { return true; } | |||
bool canCopeWithDuplicateFiles() override { return false; } | |||
void createExporterProperties (PropertyListBuilder&) override | |||
@@ -147,7 +148,7 @@ private: | |||
searchPaths.insert (0, "/usr/include/freetype2"); | |||
searchPaths.insert (0, "/usr/include"); | |||
searchPaths.removeDuplicates (false); | |||
searchPaths = getCleanedStringArray (searchPaths); | |||
for (int i = 0; i < searchPaths.size(); ++i) | |||
out << " -I " << escapeSpaces (FileHelpers::unixStylePath (replacePreprocessorTokens (config, searchPaths[i]))); | |||
@@ -165,11 +166,18 @@ private: | |||
{ | |||
out << " LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR)"; | |||
if (makefileIsDLL) | |||
out << " -shared"; | |||
{ | |||
StringArray flags (makefileExtraLinkerFlags); | |||
if (makefileIsDLL) | |||
flags.add ("-shared"); | |||
if (! config.isDebug()) | |||
out << " -fvisibility=hidden"; | |||
if (! config.isDebug()) | |||
flags.add ("-fvisibility=hidden"); | |||
if (flags.size() > 0) | |||
out << " " << getCleanedStringArray (flags).joinIntoString (" "); | |||
} | |||
out << config.getGCCLibraryPathFlags(); | |||
@@ -661,8 +661,8 @@ private: | |||
StringArray paths (extraSearchPaths); | |||
paths.addArray (config.getHeaderSearchPaths()); | |||
paths.add ("$(inherited)"); | |||
paths.removeDuplicates (false); | |||
paths.removeEmptyStrings(); | |||
paths = getCleanedStringArray (paths); | |||
for (int i = 0; i < paths.size(); ++i) | |||
{ | |||
@@ -723,8 +723,7 @@ private: | |||
for (int i = 0; i < xcodeLibs.size(); ++i) | |||
flags.add (getLinkerFlagForLib (xcodeLibs[i])); | |||
flags.removeEmptyStrings (true); | |||
flags.removeDuplicates (false); | |||
flags = getCleanedStringArray (flags); | |||
} | |||
StringArray getProjectSettings (const XcodeBuildConfiguration& config) const | |||
@@ -876,7 +875,7 @@ private: | |||
s.add ("OTHER_LDFLAGS = \"" + linkerFlags.joinIntoString (" ") + "\""); | |||
librarySearchPaths.addArray (config.getLibrarySearchPaths()); | |||
librarySearchPaths.removeDuplicates (false); | |||
librarySearchPaths = getCleanedStringArray (librarySearchPaths); | |||
if (librarySearchPaths.size() > 0) | |||
{ | |||
@@ -926,11 +925,8 @@ private: | |||
} | |||
s.addTokens (config.getCustomXcodeFlags(), ",", "\"'"); | |||
s.trim(); | |||
s.removeEmptyStrings(); | |||
s.removeDuplicates (false); | |||
return s; | |||
return getCleanedStringArray (s); | |||
} | |||
void addFrameworks() const | |||
@@ -68,10 +68,11 @@ public: | |||
virtual int getVisualStudioVersion() const { return 0; } | |||
virtual bool isCodeBlocksWindows() const { return false; } | |||
virtual bool isCodeBlocksLinux() const { return false; } | |||
virtual bool isLinuxMakefile() const { return false; } | |||
virtual bool isAndroid() const { return false; } | |||
virtual bool isWindows() const { return false; } | |||
virtual bool isLinuxMakefile() const { return false; } | |||
virtual bool isLinux() const { return false; } | |||
virtual bool isOSX() const { return false; } | |||
bool mayCompileOnCurrentOS() const | |||
@@ -81,7 +82,7 @@ public: | |||
#elif JUCE_WINDOWS | |||
return isWindows() || isAndroid(); | |||
#elif JUCE_LINUX | |||
return isLinuxMakefile() || isCodeBlocksLinux() || isAndroid(); | |||
return isLinux() || isAndroid(); | |||
#else | |||
#error | |||
#endif | |||
@@ -173,7 +174,7 @@ public: | |||
//============================================================================== | |||
String makefileTargetSuffix; | |||
bool makefileIsDLL; | |||
StringArray linuxLibs; | |||
StringArray linuxLibs, makefileExtraLinkerFlags; | |||
//============================================================================== | |||
String msvcTargetSuffix; | |||
@@ -243,7 +243,7 @@ namespace VSTHelpers | |||
if (exporter.isVisualStudio()) | |||
exporter.extraSearchPaths.add (path.toWindowsStyle()); | |||
else if (exporter.isLinuxMakefile() || exporter.isCodeBlocksLinux() || exporter.isXcode()) | |||
else if (exporter.isLinux() || exporter.isXcode()) | |||
exporter.extraSearchPaths.insert (0, path.toUnixStyle()); | |||
} | |||
} | |||
@@ -282,7 +282,7 @@ namespace VSTHelpers | |||
if (exporter.isWindows()) | |||
exporter.extraSearchPaths.add (juceWrapperFolder.toWindowsStyle()); | |||
else if (exporter.isLinuxMakefile() || exporter.isCodeBlocksLinux() ) | |||
else if (exporter.isLinux()) | |||
exporter.extraSearchPaths.add (juceWrapperFolder.toUnixStyle()); | |||
if (exporter.isVisualStudio()) | |||
@@ -305,6 +305,9 @@ namespace VSTHelpers | |||
config->getValue (Ids::postbuildCommand) = "copy /Y \"$(OutDir)\\$(TargetFileName)\" \"$(OutDir)\\$(TargetName).vst3\""; | |||
} | |||
} | |||
if (exporter.isLinux()) | |||
exporter.makefileExtraLinkerFlags.add ("--no-undefined"); | |||
} | |||
static inline void createPropertyEditors (ProjectExporter& exporter, PropertyListBuilder& props, bool isVST3) | |||
@@ -370,7 +370,7 @@ void LibraryModule::prepareExporter (ProjectExporter& exporter, ProjectSaver& pr | |||
parseAndAddLibs (exporter.xcodeLibs, moduleInfo.moduleInfo [exporter.isOSX() ? "OSXLibs" : "iOSLibs"].toString()); | |||
} | |||
else if (exporter.isLinuxMakefile() || exporter.isCodeBlocksLinux()) | |||
else if (exporter.isLinux()) | |||
{ | |||
parseAndAddLibs (exporter.linuxLibs, moduleInfo.moduleInfo ["LinuxLibs"].toString()); | |||
} | |||
@@ -501,7 +501,7 @@ static bool fileTargetMatches (ProjectExporter& exporter, const String& target) | |||
return exporterTargetMatches ("xcode", target); | |||
if (exporter.isWindows()) | |||
return exporterTargetMatches ("msvc", target); | |||
if (exporter.isLinuxMakefile() || exporter.isCodeBlocksLinux()) | |||
if (exporter.isLinux()) | |||
return exporterTargetMatches ("linux", target); | |||
if (exporter.isAndroid()) | |||
return exporterTargetMatches ("android", target); | |||
@@ -165,16 +165,18 @@ StringArray getSearchPathsFromString (const String& searchPath) | |||
{ | |||
StringArray s; | |||
s.addTokens (searchPath, ";\r\n", StringRef()); | |||
s.trim(); | |||
s.removeEmptyStrings(); | |||
s.removeDuplicates (false); | |||
return s; | |||
return getCleanedStringArray (s); | |||
} | |||
StringArray getCommaOrWhitespaceSeparatedItems (const String& sourceString) | |||
{ | |||
StringArray s; | |||
s.addTokens (sourceString, ", \t\r\n", StringRef()); | |||
return getCleanedStringArray (s); | |||
} | |||
StringArray getCleanedStringArray (StringArray s) | |||
{ | |||
s.trim(); | |||
s.removeEmptyStrings(); | |||
s.removeDuplicates (false); | |||
@@ -56,6 +56,8 @@ void showSVGPathDataToolWindow (ScopedPointer<Component>& ownerPointer); | |||
bool cancelAnyModalComponents(); | |||
bool reinvokeCommandAfterCancellingModalComps (const ApplicationCommandTarget::InvocationInfo&); | |||
StringArray getCleanedStringArray (StringArray); | |||
//============================================================================== | |||
class RolloverHelpComp : public Component, | |||
private Timer | |||