diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_CodeBlocks.h b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_CodeBlocks.h index 27870c7a14..6511dbd559 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_CodeBlocks.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_CodeBlocks.h @@ -22,35 +22,86 @@ ============================================================================== */ +enum CodeBlocksOS +{ + windows, + linux +}; + class CodeBlocksProjectExporter : public ProjectExporter { public: + //============================================================================== - static const char* getNameCodeBlocks() { return "Code::Blocks project"; } - static const char* getValueTreeTypeName() { return "CODEBLOCKS"; } + static const char* getName (CodeBlocksOS os) + { + if (os == windows) + return "Code::Blocks (Windows)"; + else if (os == linux) + return "Code::Blocks (Linux)"; + + // currently no other OSes supported by Codeblocks exporter! + jassertfalse; + return "Code::Blocks (Unknown OS)"; + } + + //============================================================================== + static const char* getValueTreeTypeName (CodeBlocksOS os) + { + if (os == windows) + return "CODEBLOCKS_WINDOWS"; + else if (os == linux) + return "CODEBLOCKS_LINUX"; + + // currently no other OSes supported by Codeblocks exporter! + jassertfalse; + return "CODEBLOCKS_UNKOWN_OS"; + } + + //============================================================================== + static String getTargetFolderName (CodeBlocksOS os) + { + if (os == windows) + return "CodeBlocksWindows"; + else if (os == linux) + return "CodeBlocksLinux"; + + // currently no other OSes supported by Codeblocks exporter! + jassertfalse; + return "CodeBlocksUnknownOS"; + } + //============================================================================== static CodeBlocksProjectExporter* createForSettings (Project& project, const ValueTree& settings) { - if (settings.hasType (getValueTreeTypeName())) - return new CodeBlocksProjectExporter (project, settings); + if (settings.hasType (getValueTreeTypeName(CodeBlocksOS::windows)) || settings.hasType ("CODEBLOCKS")) + return new CodeBlocksProjectExporter (project, settings, CodeBlocksOS::windows); + // this will also import legacy jucer files where CodeBlocks only worked for Windows, + // had valueTreetTypeName "CODEBLOCKS", and there was no OS distinction + + else if (settings.hasType (getValueTreeTypeName(CodeBlocksOS::linux))) + return new CodeBlocksProjectExporter (project, settings, CodeBlocksOS::linux); return nullptr; } //============================================================================== - CodeBlocksProjectExporter (Project& p, const ValueTree& t) : ProjectExporter (p, t) + CodeBlocksProjectExporter (Project& p, const ValueTree& t, CodeBlocksOS codeBlocksOs) + : ProjectExporter (p, t), os (codeBlocksOs) { - name = getNameCodeBlocks(); + name = getName (os); if (getTargetLocationString().isEmpty()) - getTargetLocationValue() = getDefaultBuildsRootFolder() + "CodeBlocks"; + { + getTargetLocationValue() = getDefaultBuildsRootFolder() + getTargetFolderName (os); + } } //============================================================================== bool canLaunchProject() override { return false; } bool launchProject() override { return false; } - bool isCodeBlocks() const override { return true; } - bool isWindows() const override { return true; } + bool isCodeBlocksWindows() const override { return os == CodeBlocksOS::windows; } + bool isCodeBlocksLinux() const override { return os == CodeBlocksOS::linux; } bool usesMMFiles() const override { return false; } bool canCopeWithDuplicateFiles() override { return false; } @@ -119,8 +170,15 @@ private: StringArray getDefines (const BuildConfiguration& config) const { StringPairArray defines; - defines.set ("__MINGW__", "1"); - defines.set ("__MINGW_EXTENSION", String::empty); + if (os == CodeBlocksOS::windows) + { + defines.set ("__MINGW__", "1"); + defines.set ("__MINGW_EXTENSION", String::empty); + } + else + { + defines.set ("LINUX", "1"); + } if (config.isDebug()) { @@ -187,11 +245,16 @@ private: StringArray getIncludePaths (const BuildConfiguration& config) const { StringArray paths; + paths.add ("."); paths.add (RelativePath (project.getGeneratedCodeFolder(), getTargetFolder(), RelativePath::buildTargetFolder).toWindowsStyle()); paths.addArray (config.getHeaderSearchPaths()); + + if (os != CodeBlocksOS::windows) + paths.add ("/usr/include/freetype2"); + return cleanArray (paths); } @@ -260,9 +323,11 @@ private: const StringArray linkerFlags (getLinkerFlags (config)); for (int i = 0; i < linkerFlags.size(); ++i) setAddOption (*linker, "option", linkerFlags[i]); + + const StringArray& libs = (os == CodeBlocksOS::windows) ? mingwLibs : linuxLibs; - for (int i = 0; i < mingwLibs.size(); ++i) - setAddOption (*linker, "library", mingwLibs[i]); + for (int i = 0; i < libs.size(); ++i) + setAddOption (*linker, "library", libs[i]); const StringArray librarySearchPaths (config.getLibrarySearchPaths()); for (int i = 0; i < librarySearchPaths.size(); ++i) @@ -289,10 +354,15 @@ private: void addProjectLinkerOptions (XmlElement& xml) const { XmlElement* const linker = xml.createNewChildElement ("Linker"); - - static const char* defaultLibs[] = { "gdi32", "user32", "kernel32", "comctl32" }; - - StringArray libs (defaultLibs, numElementsInArray (defaultLibs)); + + StringArray libs; + + if (os == CodeBlocksOS::windows) + { + static const char* defaultLibs[] = { "gdi32", "user32", "kernel32", "comctl32" }; + libs = StringArray (defaultLibs, numElementsInArray (defaultLibs)); + } + libs.addTokens (getExternalLibrariesString(), ";\n", "\"'"); libs = cleanArray (libs); @@ -342,6 +412,8 @@ private: { xml.createNewChildElement ("Add")->setAttribute (nm, value); } + + CodeBlocksOS os; JUCE_DECLARE_NON_COPYABLE (CodeBlocksProjectExporter) }; diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Make.h b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Make.h index 80dbbbbd96..5d9a6efc6b 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Make.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Make.h @@ -44,14 +44,14 @@ public: name = getNameLinux(); if (getTargetLocationString().isEmpty()) - getTargetLocationValue() = getDefaultBuildsRootFolder() + "Linux"; + getTargetLocationValue() = getDefaultBuildsRootFolder() + "LinuxMakefile"; } //============================================================================== bool canLaunchProject() override { return false; } bool launchProject() override { return false; } bool usesMMFiles() const override { return false; } - bool isLinux() const override { return true; } + bool isLinuxMakefile() const override { return true; } bool canCopeWithDuplicateFiles() override { return false; } void createExporterProperties (PropertyListBuilder&) override diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.cpp b/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.cpp index deb18dee09..37c0a1d7b3 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.cpp +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.cpp @@ -43,17 +43,18 @@ Array ProjectExporter::getExporterTypes() { Array types; - addType (types, XCodeProjectExporter::getNameMac(), BinaryData::projectIconXcode_png, BinaryData::projectIconXcode_pngSize); - addType (types, XCodeProjectExporter::getNameiOS(), BinaryData::projectIconXcodeIOS_png, BinaryData::projectIconXcodeIOS_pngSize); - addType (types, MSVCProjectExporterVC2015::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); - addType (types, MSVCProjectExporterVC2013::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); - addType (types, MSVCProjectExporterVC2012::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); - addType (types, MSVCProjectExporterVC2010::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); - addType (types, MSVCProjectExporterVC2008::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); - addType (types, MSVCProjectExporterVC2005::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); - addType (types, MakefileProjectExporter::getNameLinux(), BinaryData::projectIconLinuxMakefile_png, BinaryData::projectIconLinuxMakefile_pngSize); - addType (types, AndroidProjectExporter::getNameAndroid(), BinaryData::projectIconAndroid_png, BinaryData::projectIconAndroid_pngSize); - addType (types, CodeBlocksProjectExporter::getNameCodeBlocks(), BinaryData::projectIconCodeblocks_png, BinaryData::projectIconCodeblocks_pngSize); + addType (types, XCodeProjectExporter::getNameMac(), BinaryData::projectIconXcode_png, BinaryData::projectIconXcode_pngSize); + addType (types, XCodeProjectExporter::getNameiOS(), BinaryData::projectIconXcodeIOS_png, BinaryData::projectIconXcodeIOS_pngSize); + addType (types, MSVCProjectExporterVC2015::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); + addType (types, MSVCProjectExporterVC2013::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); + addType (types, MSVCProjectExporterVC2012::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); + addType (types, MSVCProjectExporterVC2010::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); + addType (types, MSVCProjectExporterVC2008::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); + addType (types, MSVCProjectExporterVC2005::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); + addType (types, MakefileProjectExporter::getNameLinux(), BinaryData::projectIconLinuxMakefile_png, BinaryData::projectIconLinuxMakefile_pngSize); + addType (types, AndroidProjectExporter::getNameAndroid(), BinaryData::projectIconAndroid_png, BinaryData::projectIconAndroid_pngSize); + addType (types, CodeBlocksProjectExporter::getName (CodeBlocksOS::windows), BinaryData::projectIconCodeblocks_png, BinaryData::projectIconCodeblocks_pngSize); + addType (types, CodeBlocksProjectExporter::getName (CodeBlocksOS::linux), BinaryData::projectIconCodeblocks_png, BinaryData::projectIconCodeblocks_pngSize); return types; } @@ -74,8 +75,8 @@ ProjectExporter* ProjectExporter::createNewExporter (Project& project, const int case 7: exp = new MSVCProjectExporterVC2005 (project, ValueTree (MSVCProjectExporterVC2005::getValueTreeTypeName())); break; case 8: exp = new MakefileProjectExporter (project, ValueTree (MakefileProjectExporter ::getValueTreeTypeName())); break; case 9: exp = new AndroidProjectExporter (project, ValueTree (AndroidProjectExporter ::getValueTreeTypeName())); break; - case 10: exp = new CodeBlocksProjectExporter (project, ValueTree (CodeBlocksProjectExporter::getValueTreeTypeName())); break; - + case 10: exp = new CodeBlocksProjectExporter (project, ValueTree (CodeBlocksProjectExporter::getValueTreeTypeName (CodeBlocksOS::windows)), CodeBlocksOS::windows); break; + case 11: exp = new CodeBlocksProjectExporter (project, ValueTree (CodeBlocksProjectExporter::getValueTreeTypeName (CodeBlocksOS::linux)), CodeBlocksOS::linux); break; default: jassertfalse; return 0; } @@ -401,9 +402,10 @@ static bool areCompatibleExporters (const ProjectExporter& p1, const ProjectExpo { return (p1.isVisualStudio() && p2.isVisualStudio()) || (p1.isXcode() && p2.isXcode()) - || (p1.isLinux() && p2.isLinux()) + || (p1.isLinuxMakefile() && p2.isLinuxMakefile()) || (p1.isAndroid() && p2.isAndroid()) - || (p1.isCodeBlocks() && p2.isCodeBlocks()); + || (p1.isCodeBlocksWindows() && p2.isCodeBlocksWindows()) + || (p1.isCodeBlocksLinux() && p2.isCodeBlocksLinux()); } void ProjectExporter::createDefaultModulePaths() diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h b/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h index 54861b5271..3523463067 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h @@ -66,11 +66,12 @@ public: virtual bool isXcode() const { return false; } virtual bool isVisualStudio() const { return false; } virtual int getVisualStudioVersion() const { return 0; } - virtual bool isCodeBlocks() const { return false; } + virtual bool isCodeBlocksWindows() const { return false; } + virtual bool isCodeBlocksLinux() const { return false; } virtual bool isAndroid() const { return false; } virtual bool isWindows() const { return false; } - virtual bool isLinux() const { return false; } + virtual bool isLinuxMakefile() const { return false; } virtual bool isOSX() const { return false; } bool mayCompileOnCurrentOS() const diff --git a/extras/Introjucer/Source/Project/jucer_AudioPluginModule.h b/extras/Introjucer/Source/Project/jucer_AudioPluginModule.h index 1e05460837..299b796093 100644 --- a/extras/Introjucer/Source/Project/jucer_AudioPluginModule.h +++ b/extras/Introjucer/Source/Project/jucer_AudioPluginModule.h @@ -243,7 +243,7 @@ namespace VSTHelpers if (exporter.isVisualStudio()) exporter.extraSearchPaths.add (path.toWindowsStyle()); - else if (exporter.isLinux() || exporter.isXcode()) + else if (exporter.isLinuxMakefile() || exporter.isCodeBlocksLinux() || 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.isLinux()) + else if (exporter.isLinuxMakefile() || exporter.isCodeBlocksLinux() ) exporter.extraSearchPaths.add (juceWrapperFolder.toUnixStyle()); if (exporter.isVisualStudio()) diff --git a/extras/Introjucer/Source/Project/jucer_Module.cpp b/extras/Introjucer/Source/Project/jucer_Module.cpp index 813d4f9e82..dc44daeefe 100644 --- a/extras/Introjucer/Source/Project/jucer_Module.cpp +++ b/extras/Introjucer/Source/Project/jucer_Module.cpp @@ -370,11 +370,11 @@ void LibraryModule::prepareExporter (ProjectExporter& exporter, ProjectSaver& pr parseAndAddLibs (exporter.xcodeLibs, moduleInfo.moduleInfo [exporter.isOSX() ? "OSXLibs" : "iOSLibs"].toString()); } - else if (exporter.isLinux()) + else if (exporter.isLinuxMakefile() || exporter.isCodeBlocksLinux()) { parseAndAddLibs (exporter.linuxLibs, moduleInfo.moduleInfo ["LinuxLibs"].toString()); } - else if (exporter.isCodeBlocks()) + else if (exporter.isCodeBlocksWindows()) { parseAndAddLibs (exporter.mingwLibs, moduleInfo.moduleInfo ["mingwLibs"].toString()); } @@ -497,11 +497,17 @@ void LibraryModule::findWildcardMatches (const File& localModuleFolder, const St static bool fileTargetMatches (ProjectExporter& exporter, const String& target) { - if (exporter.isXcode()) return exporterTargetMatches ("xcode", target); - if (exporter.isWindows()) return exporterTargetMatches ("msvc", target); - if (exporter.isLinux()) return exporterTargetMatches ("linux", target); - if (exporter.isAndroid()) return exporterTargetMatches ("android", target); - if (exporter.isCodeBlocks()) return exporterTargetMatches ("mingw", target); + if (exporter.isXcode()) + return exporterTargetMatches ("xcode", target); + if (exporter.isWindows()) + return exporterTargetMatches ("msvc", target); + if (exporter.isLinuxMakefile() || exporter.isCodeBlocksLinux()) + return exporterTargetMatches ("linux", target); + if (exporter.isAndroid()) + return exporterTargetMatches ("android", target); + if (exporter.isCodeBlocksWindows()) + return exporterTargetMatches ("mingw", target); + return target.isEmpty(); }