Browse Source

Projucer: Add a project setting to specify a shell script that will be run after saving

tags/2021-05-28
ed 6 years ago
parent
commit
4dad6ee028
4 changed files with 58 additions and 1 deletions
  1. +11
    -0
      extras/Projucer/Source/Project/jucer_Project.cpp
  2. +4
    -1
      extras/Projucer/Source/Project/jucer_Project.h
  3. +41
    -0
      extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.h
  4. +2
    -0
      extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h

+ 11
- 0
extras/Projucer/Source/Project/jucer_Project.cpp View File

@@ -242,6 +242,9 @@ void Project::initialiseProjectValues()
binaryDataNamespaceValue.referTo (projectRoot, Ids::binaryDataNamespace, getUndoManager(), "BinaryData"); binaryDataNamespaceValue.referTo (projectRoot, Ids::binaryDataNamespace, getUndoManager(), "BinaryData");
compilerFlagSchemesValue.referTo (projectRoot, Ids::compilerFlagSchemes, getUndoManager(), Array<var>(), ","); compilerFlagSchemesValue.referTo (projectRoot, Ids::compilerFlagSchemes, getUndoManager(), Array<var>(), ",");
postExportShellCommandPosixValue.referTo (projectRoot, Ids::postExportShellCommandPosix, getUndoManager());
postExportShellCommandWinValue.referTo (projectRoot, Ids::postExportShellCommandWin, getUndoManager());
} }
void Project::initialiseAudioPluginValues() void Project::initialiseAudioPluginValues()
@@ -1046,6 +1049,14 @@ void Project::createPropertyEditors (PropertyListBuilder& props)
props.addSearchPathProperty (headerSearchPathsValue, "Header Search Paths", "Global header search paths."); props.addSearchPathProperty (headerSearchPathsValue, "Header Search Paths", "Global header search paths.");
props.add (new TextPropertyComponent (postExportShellCommandPosixValue, "Post-Export Shell Command (macOS, Linux)", 1024, false),
"A command that will be executed by the system shell after saving this project on macOS or Linux. "
"The string \"%%1%%\" will be substituted with the absolute path to the project root folder.");
props.add (new TextPropertyComponent (postExportShellCommandWinValue, "Post-Export Shell Command (Windows)", 1024, false),
"A command that will be executed by the system shell after saving this project on Windows. "
"The string \"%%1%%\" will be substituted with the absolute path to the project root folder.");
props.add (new TextPropertyComponent (userNotesValue, "Notes", 32768, true), props.add (new TextPropertyComponent (userNotesValue, "Notes", 32768, true),
"Extra comments: This field is not used for code or project generation, it's just a space where you can express your thoughts."); "Extra comments: This field is not used for code or project generation, it's just a space where you can express your thoughts.");
} }


+ 4
- 1
extras/Projucer/Source/Project/jucer_Project.h View File

@@ -133,6 +133,9 @@ public:
void addCompilerFlagScheme (const String&); void addCompilerFlagScheme (const String&);
void removeCompilerFlagScheme (const String&); void removeCompilerFlagScheme (const String&);
String getPostExportShellCommandPosixString() const { return postExportShellCommandPosixValue.get(); }
String getPostExportShellCommandWinString() const { return postExportShellCommandWinValue.get(); }
//============================================================================== //==============================================================================
String getPluginNameString() const { return pluginNameValue.get(); } String getPluginNameString() const { return pluginNameValue.get(); }
String getPluginDescriptionString() const { return pluginDescriptionValue.get();} String getPluginDescriptionString() const { return pluginDescriptionValue.get();}
@@ -425,7 +428,7 @@ private:
ValueWithDefault projectNameValue, projectUIDValue, projectLineFeedValue, projectTypeValue, versionValue, bundleIdentifierValue, companyNameValue, ValueWithDefault projectNameValue, projectUIDValue, projectLineFeedValue, projectTypeValue, versionValue, bundleIdentifierValue, companyNameValue,
companyCopyrightValue, companyWebsiteValue, companyEmailValue, displaySplashScreenValue, reportAppUsageValue, splashScreenColourValue, cppStandardValue, companyCopyrightValue, companyWebsiteValue, companyEmailValue, displaySplashScreenValue, reportAppUsageValue, splashScreenColourValue, cppStandardValue,
headerSearchPathsValue, preprocessorDefsValue, userNotesValue, maxBinaryFileSizeValue, includeBinaryDataInJuceHeaderValue, binaryDataNamespaceValue, headerSearchPathsValue, preprocessorDefsValue, userNotesValue, maxBinaryFileSizeValue, includeBinaryDataInJuceHeaderValue, binaryDataNamespaceValue,
compilerFlagSchemesValue;
compilerFlagSchemesValue, postExportShellCommandPosixValue, postExportShellCommandWinValue;
ValueWithDefault pluginFormatsValue, pluginNameValue, pluginDescriptionValue, pluginManufacturerValue, pluginManufacturerCodeValue, ValueWithDefault pluginFormatsValue, pluginNameValue, pluginDescriptionValue, pluginManufacturerValue, pluginManufacturerCodeValue,
pluginCodeValue, pluginChannelConfigsValue, pluginCharacteristicsValue, pluginAUExportPrefixValue, pluginAAXIdentifierValue, pluginCodeValue, pluginChannelConfigsValue, pluginCharacteristicsValue, pluginAUExportPrefixValue, pluginAAXIdentifierValue,


+ 41
- 0
extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.h View File

@@ -108,6 +108,7 @@ public:
writeAppHeader (modules); writeAppHeader (modules);
writeModuleCppWrappers (modules); writeModuleCppWrappers (modules);
writeProjects (modules, specifiedExporterToSave, ! showProgressBox); writeProjects (modules, specifiedExporterToSave, ! showProgressBox);
runPostExportScript();
// if the project root has changed after writing the other files then re-save it // if the project root has changed after writing the other files then re-save it
if (project.getProjectRoot().toXmlString().hashCode() != projectRootHash) if (project.getProjectRoot().toXmlString().hashCode() != projectRootHash)
@@ -708,6 +709,46 @@ private:
void writeProjects (const OwnedArray<LibraryModule>&, const String&, bool); void writeProjects (const OwnedArray<LibraryModule>&, const String&, bool);
void runPostExportScript()
{
#if JUCE_WINDOWS
auto cmdString = project.getPostExportShellCommandWinString();
#else
auto cmdString = project.getPostExportShellCommandPosixString();
#endif
auto shellCommand = cmdString.replace ("%%1%%", project.getProjectFolder().getFullPathName());
if (shellCommand.isNotEmpty())
{
#if JUCE_WINDOWS
StringArray argList ("cmd.exe", "/c");
#else
StringArray argList ("/bin/sh", "-c");
#endif
argList.add (shellCommand);
ChildProcess shellProcess;
if (! shellProcess.start (argList))
{
addError ("Failed to run shell command: " + argList.joinIntoString (" "));
return;
}
if (! shellProcess.waitForProcessToFinish (10000))
{
addError ("Timeout running shell command: " + argList.joinIntoString (" "));
return;
}
auto exitCode = shellProcess.getExitCode();
if (exitCode != 0)
addError ("Shell command: " + argList.joinIntoString (" ") + " failed with exit code: " + String (exitCode));
}
}
void saveExporter (ProjectExporter* exporter, const OwnedArray<LibraryModule>& modules) void saveExporter (ProjectExporter* exporter, const OwnedArray<LibraryModule>& modules)
{ {
try try


+ 2
- 0
extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h View File

@@ -352,6 +352,8 @@ namespace Ids
DECLARE_ID (compilerFlagSchemes); DECLARE_ID (compilerFlagSchemes);
DECLARE_ID (compilerFlagScheme); DECLARE_ID (compilerFlagScheme);
DECLARE_ID (dontQueryForUpdate); DECLARE_ID (dontQueryForUpdate);
DECLARE_ID (postExportShellCommandPosix);
DECLARE_ID (postExportShellCommandWin);
const Identifier ID ("id"); const Identifier ID ("id");
const Identifier ID_uppercase ("ID"); const Identifier ID_uppercase ("ID");


Loading…
Cancel
Save