Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions commandLine/src/addons/ofAddon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ ofAddon::ofAddon(const ofAddon& other):
xcframeworks(other.xcframeworks),
data(other.data),
defines(other.defines),
afterCompileScript(other.afterCompileScript),
definesCMAKE(other.definesCMAKE),
name(other.name),
addonPath(other.addonPath),
Expand Down Expand Up @@ -528,6 +529,11 @@ void ofAddon::parseVariableValue(const string & variable, const string & value,
else if (variable == ADDON_DEFINES) {
addReplaceStringVector(defines, value, emptyString, addToValue);
}

else if (variable == ADDON_AFTER_COMPILE_SCRIPT) {
if (!addToValue) afterCompileScript.clear();
if (!value.empty()) afterCompileScript.emplace_back(value);
}
}

template<typename T>
Expand Down
3 changes: 3 additions & 0 deletions commandLine/src/addons/ofAddon.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ const string ADDON_PKG_CONFIG_LIBRARIES = "ADDON_PKG_CONFIG_LIBRARIES";
const string ADDON_FRAMEWORKS = "ADDON_FRAMEWORKS";
const string ADDON_XCFRAMEWORKS = "ADDON_XCFRAMEWORKS";
const string ADDON_DLLS_TO_COPY = "ADDON_DLLS_TO_COPY";
const string ADDON_AFTER_COMPILE_SCRIPT = "ADDON_AFTER_COMPILE_SCRIPT";

// About Metadata
const string ADDON_NAME = "ADDON_NAME";
Expand Down Expand Up @@ -129,6 +130,7 @@ const vector<string> AddonProjectVariables = {
ADDON_FRAMEWORKS,
ADDON_DLLS_TO_COPY,
ADDON_ADDITIONAL_LIBS,
ADDON_AFTER_COMPILE_SCRIPT,
};

class ofAddon {
Expand Down Expand Up @@ -176,6 +178,7 @@ class ofAddon {
vector < string > xcframeworks; // osx only
vector < string > data;
vector < string > defines;
vector < string > afterCompileScript; // one entry per line, run after the build

vector < string > definesCMAKE;

Expand Down
15 changes: 14 additions & 1 deletion commandLine/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ enum optionIndex { UNKNOWN,
BACKUP_PROJECT_FILES,
FRAMEWORKS,
CLEANNAME_DISABLE,
DEFINES
DEFINES,
POSTBUILD
};

constexpr option::Descriptor usage[] = {
Expand Down Expand Up @@ -60,6 +61,7 @@ constexpr option::Descriptor usage[] = {
{ CLEANNAME_DISABLE, 0, "n", "cleanname", option::Arg::Optional, " --cleanname, -f \tcleanname" },

{ DEFINES, 0, "D", "defines", option::Arg::Optional, " --defines, -D \tpreprocessor defines list (such as OF_USE_ANGLE=1,MY_FLAG)" },
{ POSTBUILD, 0, "P", "postbuild", option::Arg::Optional, " --postbuild, -P \tscript to run after the project compiles (Xcode run script / VS post-build event)" },

{ 0, 0, 0, 0, 0, 0 }
};
Expand Down Expand Up @@ -88,6 +90,7 @@ vector<fs::path> srcPaths;
vector<string> targets;
vector<string> frameworks;
vector<string> defines;
string postBuildScript;
string ofPathEnv;
string templateName;

Expand Down Expand Up @@ -275,6 +278,9 @@ void updateProject(const fs::path & path, const string & target, bool bConsiderP
for (auto & d : defines) {
project->addProjectDefine(d);
}
if (!postBuildScript.empty()) {
project->addProjectAfterRule(postBuildScript);
}

for (auto & srcPath : srcPaths) {
project->addSrcRecursively(srcPath);
Expand Down Expand Up @@ -596,6 +602,10 @@ int main(int argc, char ** argv) {
defines = ofSplitString(options[DEFINES].arg, ",", true, true);
}

if (options[POSTBUILD].count() > 0 && options[POSTBUILD].arg != NULL) {
postBuildScript = ofTrim(options[POSTBUILD].arg);
}


if (parse.nonOptionsCount() > 0) {
projectName = parse.nonOption(0);
Expand Down Expand Up @@ -750,6 +760,9 @@ int main(int argc, char ** argv) {
for (auto & d : defines) {
project->addProjectDefine(d);
}
if (!postBuildScript.empty()) {
project->addProjectAfterRule(postBuildScript);
}

for (auto & s : srcPaths) {
project->addSrcRecursively(s);
Expand Down
18 changes: 10 additions & 8 deletions commandLine/src/projects/baseProject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -586,6 +586,10 @@ void baseProject::addAddon(ofAddon & addon){

addAddonDefines(addon);
addAddonFrameworks(addon);
if (!addon.afterCompileScript.empty()) {
ofLogVerbose() << "adding addon after compile script: " << addon.name;
addAfterRule(ofJoinString(addon.afterCompileScript, "\n"));
}
copyAddonData(addon);
addAddonProps(addon);
}
Expand Down Expand Up @@ -793,14 +797,12 @@ void baseProject::parseConfigMake(){
auto config = ofTrim(line);
if(config[0] == '#') continue;
if(config == "") continue;
if(config.find("=")!=string::npos){
auto varValue = ofSplitString(config,"=",true,true);
if(varValue.size()>1){
auto var = ofTrim(varValue[0]);
auto value = ofTrim(varValue[1]);
if (var=="PROJECT_AFTER_OSX" && target=="osx"){
addAfterRule(value);
}
auto eq = config.find("=");
if(eq!=string::npos){
auto var = ofTrim(config.substr(0, eq));
auto value = ofTrim(config.substr(eq + 1));
if (var=="PROJECT_AFTER_OSX" && target=="osx" && !value.empty()){
addAfterRule(value);
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions commandLine/src/projects/baseProject.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ class baseProject {
addDefine(define, libType);
projectDefines.emplace_back(define);
}
// project-level post-build script (-P/--postbuild)
void addProjectAfterRule(const std::string & script) { addAfterRule(script); }


#ifdef OFADDON_OUTPUT_JSON_DEBUG
Expand Down
16 changes: 16 additions & 0 deletions commandLine/src/projects/visualStudioProject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -593,6 +593,22 @@ void visualStudioProject::addCPPFLAG(const string& cppflag, LibType libType){
}


void visualStudioProject::addAfterRule(const string & script) {
pugi::xpath_node_set commands = doc.select_nodes("//ItemDefinitionGroup/PostBuildEvent/Command");
if (commands.empty()) {
for (auto & event : doc.select_nodes("//ItemDefinitionGroup/PostBuildEvent")) {
event.node().append_child("Command").append_child(pugi::node_pcdata);
}
commands = doc.select_nodes("//ItemDefinitionGroup/PostBuildEvent/Command");
}
for (auto & command : commands) {
pugi::xml_node text = command.node().first_child();
if (!text) text = command.node().append_child(pugi::node_pcdata);
string value = ofTrim(text.value());
text.set_value((value.empty() ? script : value + "\n" + script).c_str());
}
}

void visualStudioProject::addDefine(const string& define, LibType libType) {
addCompileOption("PreprocessorDefinitions", define, ";", libType);
// pugi::xpath_node_set items = doc.select_nodes("//ItemDefinitionGroup");
Expand Down
2 changes: 1 addition & 1 deletion commandLine/src/projects/visualStudioProject.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class visualStudioProject : public baseProject {
}

void addLDFLAG(const std::string& ldflag, LibType libType = RELEASE_LIB) override {}
void addAfterRule(const std::string& script) override {}
void addAfterRule(const std::string& script) override;



Expand Down
32 changes: 14 additions & 18 deletions commandLine/src/projects/xcodeProject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -598,24 +598,20 @@ void xcodeProject::addCPPFLAG(const string & cppflag, LibType libType) {
}

void xcodeProject::addAfterRule(const string & rule) {
// return;
// cout << ">>>>>> addAfterRule " << rule << endl;
addCommand("Add :objects:" + afterPhaseUUID + ":buildActionMask string 2147483647");
// addCommand("Add :objects:"+afterPhaseUUID+":files array");
// addCommand("Add :objects:"+afterPhaseUUID+":inputPaths array");
addCommand("Add :objects:" + afterPhaseUUID + ":isa string PBXShellScriptBuildPhase");
// addCommand("Add :objects:"+afterPhaseUUID+":outputPaths array");
addCommand("Add :objects:" + afterPhaseUUID + ":runOnlyForDeploymentPostprocessing string 0");
addCommand("Add :objects:" + afterPhaseUUID + ":shellPath string /bin/sh");
addCommand("Add :objects:" + afterPhaseUUID + ":showEnvVarsInLog string 0");

// ofStringReplace(rule, "\"", "\\\"");
// addCommand("Add :objects:"+afterPhaseUUID+":shellScript string \"" + rule + "\"");
addCommand("Add :objects:" + afterPhaseUUID + ":shellScript string " + rule);

// adding this phase to build phases array
// TODO: Check if nit needs another buildConfigurationListUUID for debug.
addCommand("Add :objects:" + buildConfigurationListUUID + ":buildPhases: string " + afterPhaseUUID);
// own phase per script, so several addons don't overwrite each other
string phaseUUID { generateUUID("afterCompile-" + rule) };
addCommand("Add :objects:" + phaseUUID + ":buildActionMask string 2147483647");
addCommand("Add :objects:" + phaseUUID + ":files array");
addCommand("Add :objects:" + phaseUUID + ":inputPaths array");
addCommand("Add :objects:" + phaseUUID + ":outputPaths array");
addCommand("Add :objects:" + phaseUUID + ":isa string PBXShellScriptBuildPhase");
addCommand("Add :objects:" + phaseUUID + ":name string Run Script - After Compile");
addCommand("Add :objects:" + phaseUUID + ":runOnlyForDeploymentPostprocessing string 0");
addCommand("Add :objects:" + phaseUUID + ":shellPath string /bin/sh");
addCommand("Add :objects:" + phaseUUID + ":showEnvVarsInLog string 0");
addCommand("Add :objects:" + phaseUUID + ":shellScript string " + rule);
// buildConfigurationListUUID is the app's PBXNativeTarget
addCommand("Add :objects:" + buildConfigurationListUUID + ":buildPhases: string " + phaseUUID);
}

void xcodeProject::addAddonLibs(const ofAddon & addon) {
Expand Down
5 changes: 4 additions & 1 deletion frontend/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -1223,7 +1223,8 @@ function generate() {
addonList: addonValueArray, //$("#addonsDropdown").val();
ofPath: $("#ofPath").val(),
verbose: bVerbose,
defines: definesArr.join(',')
defines: definesArr.join(','),
postBuild: $('#postBuildScript').val().trim()
};

// console.log(gen);
Expand Down Expand Up @@ -1354,6 +1355,7 @@ function enableAdvancedMode(isAdvanced) {
$('#ofPathButton').show();
$('#emsdkField').show();
$('#customDefinesField').show();
$('#postBuildField').show();
if (!defaultSettings['detachConsole']) {
$('body').addClass('showConsole');
}
Expand All @@ -1372,6 +1374,7 @@ function enableAdvancedMode(isAdvanced) {
$('#ofPathButton').hide();
$('#emsdkField').hide();
$('#customDefinesField').hide();
$('#postBuildField').hide();
$("body").removeClass('advanced');
$('a.updateMultiMenuOption').hide();
}
Expand Down
4 changes: 4 additions & 0 deletions frontend/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,10 @@
<input type="text" placeholder="MY_FLAG,OTHER_FLAG=1..." id="customDefines">
</div>
</div>
<div class="field advanced" id="postBuildField" style="display: none">
<label data-i18n="field.postBuild">Post-build script:</label>
<textarea rows="2" id="postBuildScript" data-i18n-placeholder="placeholder.postBuild" placeholder="Runs after the project compiles - Xcode run script / VS post-build event"></textarea>
</div>
<div id="templateSection" class="field">
<label data-i18n="field.template">Template:</label>
<div class="ui multiple search selection dropdown" id="templatesDropdown">
Expand Down
6 changes: 6 additions & 0 deletions frontend/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -1583,6 +1583,7 @@ ipcMain.on('downloadModularLibs', async (event, { ofPath, tag, names }) => {
* ofPath: string,
* verbose: boolean,
* defines: string,
* postBuild: string,
* }} GenerateArgument */

/**
Expand All @@ -1600,6 +1601,7 @@ function generateFunction(event, generate) {
projectPath,
projectName,
defines,
postBuild,
} = generate;

const args = [];
Expand Down Expand Up @@ -1634,6 +1636,10 @@ function generateFunction(event, generate) {
args.push(`-D${defines}`);
}

if (postBuild != null && postBuild.length > 0) {
args.push(`-P${postBuild}`);
}

if (projectName != null && projectPath != null) {
args.push(path.join(projectPath, projectName));
}
Expand Down
4 changes: 3 additions & 1 deletion frontend/locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -148,5 +148,7 @@
"field.glesVersion": "OpenGL-ES-Version (iOS / tvOS):",
"option.glesDefault": "Standard (OpenGL ES 2.0)",
"field.glVersion": "OpenGL-Version (Desktop):",
"option.glDefault": "Standard (OpenGL 2.1)"
"option.glDefault": "Standard (OpenGL 2.1)",
"field.postBuild": "Post-Build-Skript:",
"placeholder.postBuild": "Läuft nach dem Kompilieren des Projekts - Xcode Run Script / VS-Postbuildereignis"
}
4 changes: 3 additions & 1 deletion frontend/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -148,5 +148,7 @@
"field.glesVersion": "OpenGL ES version (iOS / tvOS):",
"option.glesDefault": "Default (OpenGL ES 2.0)",
"field.glVersion": "OpenGL version (desktop):",
"option.glDefault": "Default (OpenGL 2.1)"
"option.glDefault": "Default (OpenGL 2.1)",
"field.postBuild": "Post-build script:",
"placeholder.postBuild": "Runs after the project compiles - Xcode run script / VS post-build event"
}
4 changes: 3 additions & 1 deletion frontend/locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -148,5 +148,7 @@
"field.glesVersion": "Versión de OpenGL ES (iOS / tvOS):",
"option.glesDefault": "Predeterminado (OpenGL ES 2.0)",
"field.glVersion": "Versión de OpenGL (escritorio):",
"option.glDefault": "Predeterminado (OpenGL 2.1)"
"option.glDefault": "Predeterminado (OpenGL 2.1)",
"field.postBuild": "Script posterior a la compilación:",
"placeholder.postBuild": "Se ejecuta después de compilar el proyecto - run script de Xcode / evento posterior a la compilación de VS"
}
4 changes: 3 additions & 1 deletion frontend/locales/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -148,5 +148,7 @@
"field.glesVersion": "Version OpenGL ES (iOS / tvOS) :",
"option.glesDefault": "Par défaut (OpenGL ES 2.0)",
"field.glVersion": "Version OpenGL (bureau) :",
"option.glDefault": "Par défaut (OpenGL 2.1)"
"option.glDefault": "Par défaut (OpenGL 2.1)",
"field.postBuild": "Script post-compilation :",
"placeholder.postBuild": "S'exécute après la compilation du projet - run script Xcode / événement post-build VS"
}
4 changes: 3 additions & 1 deletion frontend/locales/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -148,5 +148,7 @@
"field.glesVersion": "OpenGL ES バージョン (iOS / tvOS):",
"option.glesDefault": "デフォルト (OpenGL ES 2.0)",
"field.glVersion": "OpenGL バージョン (デスクトップ):",
"option.glDefault": "デフォルト (OpenGL 2.1)"
"option.glDefault": "デフォルト (OpenGL 2.1)",
"field.postBuild": "ビルド後スクリプト:",
"placeholder.postBuild": "プロジェクトのコンパイル後に実行 - Xcode の Run Script / VS のビルド後イベント"
}
4 changes: 3 additions & 1 deletion frontend/locales/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -148,5 +148,7 @@
"field.glesVersion": "OpenGL ES 버전 (iOS / tvOS):",
"option.glesDefault": "기본값 (OpenGL ES 2.0)",
"field.glVersion": "OpenGL 버전 (데스크톱):",
"option.glDefault": "기본값 (OpenGL 2.1)"
"option.glDefault": "기본값 (OpenGL 2.1)",
"field.postBuild": "빌드 후 스크립트:",
"placeholder.postBuild": "프로젝트 컴파일 후 실행 - Xcode Run Script / VS 빌드 후 이벤트"
}
4 changes: 3 additions & 1 deletion frontend/locales/pt.json
Original file line number Diff line number Diff line change
Expand Up @@ -148,5 +148,7 @@
"field.glesVersion": "Versão do OpenGL ES (iOS / tvOS):",
"option.glesDefault": "Padrão (OpenGL ES 2.0)",
"field.glVersion": "Versão do OpenGL (desktop):",
"option.glDefault": "Padrão (OpenGL 2.1)"
"option.glDefault": "Padrão (OpenGL 2.1)",
"field.postBuild": "Script pós-compilação:",
"placeholder.postBuild": "Executa após compilar o projeto - run script do Xcode / evento pós-build do VS"
}
4 changes: 3 additions & 1 deletion frontend/locales/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -148,5 +148,7 @@
"field.glesVersion": "Версия OpenGL ES (iOS / tvOS):",
"option.glesDefault": "По умолчанию (OpenGL ES 2.0)",
"field.glVersion": "Версия OpenGL (десктоп):",
"option.glDefault": "По умолчанию (OpenGL 2.1)"
"option.glDefault": "По умолчанию (OpenGL 2.1)",
"field.postBuild": "Скрипт после сборки:",
"placeholder.postBuild": "Запускается после компиляции проекта - Run Script в Xcode / событие после сборки в VS"
}
4 changes: 3 additions & 1 deletion frontend/locales/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -148,5 +148,7 @@
"field.glesVersion": "OpenGL ES 版本(iOS / tvOS):",
"option.glesDefault": "默认(OpenGL ES 2.0)",
"field.glVersion": "OpenGL 版本(桌面):",
"option.glDefault": "默认(OpenGL 2.1)"
"option.glDefault": "默认(OpenGL 2.1)",
"field.postBuild": "编译后脚本:",
"placeholder.postBuild": "项目编译后运行 - Xcode Run Script / VS 生成后事件"
}
Loading