Projucer. AAX post-build VStudio problem

Dear Juce team,

I inform you that aax projucer creation fails. The reason is post-build scripts have some string format problem: here is the script generated by Projucer:

copy /Y "$(OutDir)\$(TargetFileName)" "$(OutDir)\$(TargetName).vst3"
mkdir "$(OutDir)\$(TargetName).aaxplugin"
mkdir "$(OutDir)\$(TargetName).aaxplugin\Contents"
mkdir "$(OutDir)\$(TargetName).aaxplugin\Contents\x64"
copy /Y "$(OutDir)\$(TargetFileName)" "$(OutDir)\$(TargetName).aaxplugin\Contents\x64\$(TargetName).aaxplugin"
C:\Intlaas\00 SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\Contents\x64" "C:\Intlaas\00 SDKs\AAX\Utilities\PlugIn.ico"

and it is evaluated as:

copy /Y "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.dll" "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.vst3"
mkdir "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.aaxplugin"
mkdir "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.aaxplugin\Contents"
mkdir "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.aaxplugin\Contents\x64"
copy /Y "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.dll" "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.aaxplugin\Contents\x64\TeslaST.aaxplugin"
C:\Intlaas\00 SDKs\AAX\Utilities\CreatePackage.bat "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.aaxplugin\Contents\x64" "C:\Intlaas\00 SDKs\AAX\Utilities\PlugIn.ico"

please observe the double backslash created. Also, the last line has not quotes so the space character is misleaded. As a result, the compiler yields the following errors:

1>------ Build started: Project: TeslaST, Configuration: Release64 x64 ------
1>  TeslaST.vcxproj -> C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\TeslaST.dll
1>          1 archivo(s) copiado(s).
1>          1 archivo(s) copiado(s).
1>  "C:\Intlaas\00" no se reconoce como un comando interno o externo,
1>  programa o archivo por lotes ejecutable.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: The command "copy /Y "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.dll" "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.vst3"
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: mkdir "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.aaxplugin"
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: mkdir "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.aaxplugin\Contents"
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: mkdir "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.aaxplugin\Contents\x64"
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: copy /Y "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.dll" "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.aaxplugin\Contents\x64\TeslaST.aaxplugin"
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: C:\Intlaas\00 SDKs\AAX\Utilities\CreatePackage.bat "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.aaxplugin\Contents\x64" "C:\Intlaas\00 SDKs\AAX\Utilities\PlugIn.ico"
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: :VCEnd" exited with code 9009.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Finally, in the configuration manager we can observe that Release64 and Debug64 configurations have not “Build” box ticked, so it cannot be compiled buy automated sequence.

Thank you in advance,

Gabriel Solsona

OK This is fixed on develop now.

Thank you!
Let’s see…

Gabriel

Dear Fabian,

Allow me to say again that the last line post-build command would have to been surrounded in quotes due to space character misleading:

C:\Intlaas\00 SDKs\AAX\Utilities\CreatePackage.bat "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.aaxplugin\Contents\x64" "C:\Intlaas\00 SDKs\AAX\Utilities\PlugIn.ico"

must be rendered in:

"C:\Intlaas\00 SDKs\AAX\Utilities\CreatePackage.bat" "C:\Intlaas\13 TeslaST\Builds\VisualStudio2015\x64\Release64\\TeslaST.aaxplugin\Contents\x64" "C:\Intlaas\00 SDKs\AAX\Utilities\PlugIn.ico"

The rest of the tweak works flawlessly.

Thank you!

Gabriel Solsona

@fabian This still generates additional errors, when the SDK Path is defined relative to the Projucer project file (which is explicitly allowed, according the context-help)

And another bug, if the folder currently exists which is created, it will result in an error, and the compilation will not successfull!

if not exist "$(OutDir)$(TargetName).aaxplugin" mkdir "$(OutDir)$(TargetName).aaxplugin"

So three things have to be fixed:

post-build command has to be surrounded by quotes

if the SDK-path is relative to the projucer file, this has to be considered

if a folder already exists, don’t create it

these 3 issues should be fixed, otherwise it will break the current build process in VS

Sorry for the delay. I was travelling.

OK I think this is fixed on develop now. I’m not 100% sure about the relative SDK-path problem: adding the quotes seemed to also magically fix this problem with relative SDK-paths albeit I have no idea why. So please test… maybe I’m just lucky somehow.

Thank you Fabian,

I’ll try it and give you an answer. I hope it will be ok!

Gabriel

Thanks, i will check it, maybe the relative paths are already resolved correctly when i look into the code :wink:

Dear Fabian,

So far, it works flawlessly (32 & 64 bits compilation checked). Nice work! Thank you for your support.

Gabriel

Hey Fabian and all.

This was not working for me and I believe it is because my target VS2015 project folder is one folder deeper than the jucer file.

To fix it I went into the post build step and added an extra …\ onto the two relative paths and it worked.

-Logan

What exactly is your build setup? I tried a deeper build folder structure:

…and it worked for me?!?

It worked with a relative AAX Path?

1 Like

@fabian the relative path issue for the script isn’t solved yet. The path which is used is relative to the *.jucer file, but not relative to the *.sln file.
I had to add “…\…\” to the path of the CreatePackage.bat and to the path of the Icon file.
If there is a single error in the script, every line will error with a MSB3073 code.

When i look into the Project Exporter, the aaxPath var is directly used to create the relative path of the CreatePackage.bat and the *.ico file which is wrong, because the aaxPath is relative to the jucer file.

EDIT:
the problem happens when the AAX-SDK is defined with a relative path which is explicitly allowed, according the context-help

OK. I hope this is fixed now on develop. You’ll need to re-build the Projucer. I’ve also modified the Projucer to now correctly indicate if an AAX SDK path is found or not - even if the path is relative.