From 5e7ae00fab61ea8364fc9d143690bc0cec182a99 Mon Sep 17 00:00:00 2001 From: Chris Savoie Date: Thu, 31 Oct 2019 19:59:47 -0700 Subject: [PATCH] [Custom Build Steps] Fixes to get custom build steps working. * Add quotes to executable if it's a single line string that doesn't already have quotes. * Standardize the path when looking up the build step since it may be lower cased. --- Sharpmake.Generators/VisualStudio/Vcxproj.cs | 14 +++- .../qtfilecustombuild_vs2017_win64.vcxproj | 72 +++++++++---------- 2 files changed, 47 insertions(+), 39 deletions(-) diff --git a/Sharpmake.Generators/VisualStudio/Vcxproj.cs b/Sharpmake.Generators/VisualStudio/Vcxproj.cs index 4c1cce30b..35c142cad 100644 --- a/Sharpmake.Generators/VisualStudio/Vcxproj.cs +++ b/Sharpmake.Generators/VisualStudio/Vcxproj.cs @@ -178,11 +178,17 @@ public static Dictionary CombineCustomFileB foreach (var customBuildStep in buildSteps) { var relativeBuildStep = customBuildStep.MakePathRelative(resolver, (path, commandRelative) => Util.SimplifyPath(Util.PathGetRelative(referencePath, path))); - relativeBuildStep.AdditionalInputs.Add(relativeBuildStep.Executable); + var executable = relativeBuildStep.Executable; + if (!executable.StartsWith("\"") && !executable.EndsWith("\"") && !executable.Contains("\n")) + { + executable = string.Format("\"{0}\"", executable); + } + + relativeBuildStep.AdditionalInputs.Add(executable); // Build the command. string command = string.Format( "{0} {1}", - relativeBuildStep.Executable, + executable, relativeBuildStep.ExecutableArguments ); @@ -1430,10 +1436,12 @@ IList skipFiles { fileGenerator.Write(Template.Project.ProjectFilesCustomBuildBegin); + var standardPath = Util.PathMakeStandard(file.FileNameProjectRelative); + foreach (Project.Configuration conf in context.ProjectConfigurations) { CombinedCustomFileBuildStep buildStep; - if (configurationCustomFileBuildSteps[conf].TryGetValue(file.FileNameProjectRelative, out buildStep)) + if (configurationCustomFileBuildSteps[conf].TryGetValue(standardPath, out buildStep)) { using (fileGenerator.Declare("conf", conf)) using (fileGenerator.Declare("platformName", Util.GetPlatformString(conf.Platform, conf.Project, conf.Target))) diff --git a/samples/QTFileCustomBuild/reference/projects/qtfilecustombuild_vs2017_win64.vcxproj b/samples/QTFileCustomBuild/reference/projects/qtfilecustombuild_vs2017_win64.vcxproj index 914e989b0..ad6623cee 100644 --- a/samples/QTFileCustomBuild/reference/projects/qtfilecustombuild_vs2017_win64.vcxproj +++ b/samples/QTFileCustomBuild/reference/projects/qtfilecustombuild_vs2017_win64.vcxproj @@ -345,90 +345,90 @@ Rcc Debug exec.qrc - ..\qt\5.9.2\msvc2017_64\bin\rcc.exe -name exec ..\codebase\exec.qrc -o obj\win64\qt\debug\qrc_exec.cpp - ..\qt\5.9.2\msvc2017_64\bin\rcc.exe + "..\qt\5.9.2\msvc2017_64\bin\rcc.exe" -name exec ..\codebase\exec.qrc -o obj\win64\qt\debug\qrc_exec.cpp + "..\qt\5.9.2\msvc2017_64\bin\rcc.exe" obj\win64\qt\debug\qrc_exec.cpp Rcc Release exec.qrc - ..\qt\5.9.2\msvc2017_64\bin\rcc.exe -name exec ..\codebase\exec.qrc -o obj\win64\qt\release\qrc_exec.cpp - ..\qt\5.9.2\msvc2017_64\bin\rcc.exe + "..\qt\5.9.2\msvc2017_64\bin\rcc.exe" -name exec ..\codebase\exec.qrc -o obj\win64\qt\release\qrc_exec.cpp + "..\qt\5.9.2\msvc2017_64\bin\rcc.exe" obj\win64\qt\release\qrc_exec.cpp Rcc Retail exec.qrc - ..\qt\5.9.2\msvc2017_64\bin\rcc.exe -name exec ..\codebase\exec.qrc -o obj\win64\qt\retail\qrc_exec.cpp - ..\qt\5.9.2\msvc2017_64\bin\rcc.exe + "..\qt\5.9.2\msvc2017_64\bin\rcc.exe" -name exec ..\codebase\exec.qrc -o obj\win64\qt\retail\qrc_exec.cpp + "..\qt\5.9.2\msvc2017_64\bin\rcc.exe" obj\win64\qt\retail\qrc_exec.cpp Moc Debug floatanglespinbox.h - ..\qt\5.9.2\msvc2017_64\bin\moc.exe -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\debug -fstdafx.h -f..\codebase\floatanglespinbox.h ..\codebase\floatanglespinbox.h -o obj\win64\qt\debug\moc_floatanglespinbox.cpp - ..\qt\5.9.2\msvc2017_64\bin\moc.exe + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\debug -fstdafx.h -f..\codebase\floatanglespinbox.h ..\codebase\floatanglespinbox.h -o obj\win64\qt\debug\moc_floatanglespinbox.cpp + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" obj\win64\qt\debug\moc_floatanglespinbox.cpp Moc Release floatanglespinbox.h - ..\qt\5.9.2\msvc2017_64\bin\moc.exe -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\release -fstdafx.h -f..\codebase\floatanglespinbox.h ..\codebase\floatanglespinbox.h -o obj\win64\qt\release\moc_floatanglespinbox.cpp - ..\qt\5.9.2\msvc2017_64\bin\moc.exe + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\release -fstdafx.h -f..\codebase\floatanglespinbox.h ..\codebase\floatanglespinbox.h -o obj\win64\qt\release\moc_floatanglespinbox.cpp + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" obj\win64\qt\release\moc_floatanglespinbox.cpp Moc Retail floatanglespinbox.h - ..\qt\5.9.2\msvc2017_64\bin\moc.exe -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\retail -fstdafx.h -f..\codebase\floatanglespinbox.h ..\codebase\floatanglespinbox.h -o obj\win64\qt\retail\moc_floatanglespinbox.cpp - ..\qt\5.9.2\msvc2017_64\bin\moc.exe + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\retail -fstdafx.h -f..\codebase\floatanglespinbox.h ..\codebase\floatanglespinbox.h -o obj\win64\qt\retail\moc_floatanglespinbox.cpp + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" obj\win64\qt\retail\moc_floatanglespinbox.cpp Moc Debug floatcosanglespinbox.h - ..\qt\5.9.2\msvc2017_64\bin\moc.exe -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\debug -fstdafx.h -f..\codebase\floatcosanglespinbox.h ..\codebase\floatcosanglespinbox.h -o obj\win64\qt\debug\moc_floatcosanglespinbox.cpp - ..\qt\5.9.2\msvc2017_64\bin\moc.exe + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\debug -fstdafx.h -f..\codebase\floatcosanglespinbox.h ..\codebase\floatcosanglespinbox.h -o obj\win64\qt\debug\moc_floatcosanglespinbox.cpp + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" obj\win64\qt\debug\moc_floatcosanglespinbox.cpp Moc Release floatcosanglespinbox.h - ..\qt\5.9.2\msvc2017_64\bin\moc.exe -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\release -fstdafx.h -f..\codebase\floatcosanglespinbox.h ..\codebase\floatcosanglespinbox.h -o obj\win64\qt\release\moc_floatcosanglespinbox.cpp - ..\qt\5.9.2\msvc2017_64\bin\moc.exe + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\release -fstdafx.h -f..\codebase\floatcosanglespinbox.h ..\codebase\floatcosanglespinbox.h -o obj\win64\qt\release\moc_floatcosanglespinbox.cpp + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" obj\win64\qt\release\moc_floatcosanglespinbox.cpp Moc Retail floatcosanglespinbox.h - ..\qt\5.9.2\msvc2017_64\bin\moc.exe -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\retail -fstdafx.h -f..\codebase\floatcosanglespinbox.h ..\codebase\floatcosanglespinbox.h -o obj\win64\qt\retail\moc_floatcosanglespinbox.cpp - ..\qt\5.9.2\msvc2017_64\bin\moc.exe + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\retail -fstdafx.h -f..\codebase\floatcosanglespinbox.h ..\codebase\floatcosanglespinbox.h -o obj\win64\qt\retail\moc_floatcosanglespinbox.cpp + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" obj\win64\qt\retail\moc_floatcosanglespinbox.cpp Moc Debug privatewidget.h - ..\qt\5.9.2\msvc2017_64\bin\moc.exe -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\debug -fstdafx.h -f..\codebase\privatewidget.h ..\codebase\privatewidget.h -o obj\win64\qt\debug\moc_privatewidget.cpp - ..\qt\5.9.2\msvc2017_64\bin\moc.exe + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\debug -fstdafx.h -f..\codebase\privatewidget.h ..\codebase\privatewidget.h -o obj\win64\qt\debug\moc_privatewidget.cpp + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" obj\win64\qt\debug\moc_privatewidget.cpp Moc Release privatewidget.h - ..\qt\5.9.2\msvc2017_64\bin\moc.exe -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\release -fstdafx.h -f..\codebase\privatewidget.h ..\codebase\privatewidget.h -o obj\win64\qt\release\moc_privatewidget.cpp - ..\qt\5.9.2\msvc2017_64\bin\moc.exe + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\release -fstdafx.h -f..\codebase\privatewidget.h ..\codebase\privatewidget.h -o obj\win64\qt\release\moc_privatewidget.cpp + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" obj\win64\qt\release\moc_privatewidget.cpp Moc Retail privatewidget.h - ..\qt\5.9.2\msvc2017_64\bin\moc.exe -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\retail -fstdafx.h -f..\codebase\privatewidget.h ..\codebase\privatewidget.h -o obj\win64\qt\retail\moc_privatewidget.cpp - ..\qt\5.9.2\msvc2017_64\bin\moc.exe + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\retail -fstdafx.h -f..\codebase\privatewidget.h ..\codebase\privatewidget.h -o obj\win64\qt\retail\moc_privatewidget.cpp + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" obj\win64\qt\retail\moc_privatewidget.cpp Uic Debug privatewidget.ui - ..\qt\5.9.2\msvc2017_64\bin\uic.exe ..\codebase\privatewidget.ui -o obj\win64\qt\debug\ui_privatewidget.h - ..\qt\5.9.2\msvc2017_64\bin\uic.exe + "..\qt\5.9.2\msvc2017_64\bin\uic.exe" ..\codebase\privatewidget.ui -o obj\win64\qt\debug\ui_privatewidget.h + "..\qt\5.9.2\msvc2017_64\bin\uic.exe" obj\win64\qt\debug\ui_privatewidget.h Uic Release privatewidget.ui - ..\qt\5.9.2\msvc2017_64\bin\uic.exe ..\codebase\privatewidget.ui -o obj\win64\qt\release\ui_privatewidget.h - ..\qt\5.9.2\msvc2017_64\bin\uic.exe + "..\qt\5.9.2\msvc2017_64\bin\uic.exe" ..\codebase\privatewidget.ui -o obj\win64\qt\release\ui_privatewidget.h + "..\qt\5.9.2\msvc2017_64\bin\uic.exe" obj\win64\qt\release\ui_privatewidget.h Uic Retail privatewidget.ui - ..\qt\5.9.2\msvc2017_64\bin\uic.exe ..\codebase\privatewidget.ui -o obj\win64\qt\retail\ui_privatewidget.h - ..\qt\5.9.2\msvc2017_64\bin\uic.exe + "..\qt\5.9.2\msvc2017_64\bin\uic.exe" ..\codebase\privatewidget.ui -o obj\win64\qt\retail\ui_privatewidget.h + "..\qt\5.9.2\msvc2017_64\bin\uic.exe" obj\win64\qt\retail\ui_privatewidget.h Moc Debug privatewidget.cpp - ..\qt\5.9.2\msvc2017_64\bin\moc.exe -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\debug ..\codebase\privatewidget.cpp -o obj\win64\qt\debug\privatewidget.moc - ..\codebase\privatewidget.cpp;..\qt\5.9.2\msvc2017_64\bin\moc.exe + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\debug ..\codebase\privatewidget.cpp -o obj\win64\qt\debug\privatewidget.moc + "..\qt\5.9.2\msvc2017_64\bin\moc.exe";..\codebase\privatewidget.cpp obj\win64\qt\debug\privatewidget.moc Moc Release privatewidget.cpp - ..\qt\5.9.2\msvc2017_64\bin\moc.exe -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\release ..\codebase\privatewidget.cpp -o obj\win64\qt\release\privatewidget.moc - ..\codebase\privatewidget.cpp;..\qt\5.9.2\msvc2017_64\bin\moc.exe + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\release ..\codebase\privatewidget.cpp -o obj\win64\qt\release\privatewidget.moc + "..\qt\5.9.2\msvc2017_64\bin\moc.exe";..\codebase\privatewidget.cpp obj\win64\qt\release\privatewidget.moc Moc Retail privatewidget.cpp - ..\qt\5.9.2\msvc2017_64\bin\moc.exe -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\retail ..\codebase\privatewidget.cpp -o obj\win64\qt\retail\privatewidget.moc - ..\codebase\privatewidget.cpp;..\qt\5.9.2\msvc2017_64\bin\moc.exe + "..\qt\5.9.2\msvc2017_64\bin\moc.exe" -DQT_NO_DEBUG -DQT_SHARED -DWIN32 -D_HAS_EXCEPTIONS=0 -D_MSC_VER=1910 -I. -I..\qt\5.9.2\msvc2017_64\include -Iobj\win64\qt\retail ..\codebase\privatewidget.cpp -o obj\win64\qt\retail\privatewidget.moc + "..\qt\5.9.2\msvc2017_64\bin\moc.exe";..\codebase\privatewidget.cpp obj\win64\qt\retail\privatewidget.moc