Projucer. AAX post-build VStudio problem


#1

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


#2

OK This is fixed on develop now.


#3

Thank you!
Let’s see…

Gabriel


#4

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


#5

@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)


#6

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


#7

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


#8

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.


#9

Thank you Fabian,

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

Gabriel


#10

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


#11

Dear Fabian,

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

Gabriel


#12

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


#13

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

…and it worked for me?!?


#14

It worked with a relative AAX Path?


#15

@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.


#16

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


#17

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.