Search code examples
antnsis

Passing parameters to NSIS from Ant


I have an existing Ant script that calls MakeNSIS and successfully creates an installer file. I want the output path to be changed within Ant, and then passed along to NSIS. Currently, I have tried calling NSIS in this way:

    <exec executable="${nsis_exe.dir}/makensis.exe">
        <arg value="${installer.dir}/installer.nsi" />
        <arg value="/DTEST=myvalue"/>
        <arg value="/DBUILD_VERSION_LABEL=${build.version.label}"/>
    </exec>

But I have not been able to retrieve this value in the nsi file. I cannot use this solution because I want to use the parameter in the File command, which requires a symbol, not a variable, to work correctly.

I'm using the following in my nsi file:

DetailPrint ${TEST}
DetailPrint ${DTEST}
DetailPrint ${BUILD_VERSION_LABEL}
File /r "C:\DTU\Build\${BUILD_VERSION_LABEL}\*" 

And the errors I receive are:

[exec] warning: unknown variable/constant "{TEST}" detected, ignoring (../Solution/third_party/NSIS_Build/dtu_installer.nsi:184)
[exec] DetailPrint: "${TEST}"
[exec] warning: unknown variable/constant "{DTEST}" detected, ignoring (../Solution/third_party/NSIS_Build/dtu_installer.nsi:185)
[exec] DetailPrint: "${DTEST}"
[exec] warning: unknown variable/constant "{BUILD_VERSION_LABEL}" detected, ignoring (../Solution/third_party/NSIS_Build/dtu_installer.nsi:186)
[exec] DetailPrint: "${BUILD_VERSION_LABEL}"
[exec] File: Returning to: "C:\DTU\Build\${BUILD_VERSION_LABEL}"
[exec] File: "C:\DTU\Build\${BUILD_VERSION_LABEL}\*" -> no files found.

Any ideas what I could use or what I'm doing wrong?


Solution

  • The issue I had was the order of my arguments. I had the following in my ANT script:

    <exec executable="${nsis_exe.dir}/makensis.exe">
            <arg value="${installer.dir}/installer.nsi" />
            <arg value="/DTEST=myvalue"/>
            <arg value="/DBUILD_VERSION_LABEL=${build.version.label}"/>
    </exec>
    

    But apparently I cannot see the /D parameters in the nsi file this way. If I change it so the nsi file is the last parameter, it works:

    <exec executable="${nsis_exe.dir}/makensis.exe">
            <arg value="/DTEST=myvalue"/>
            <arg value="/DBUILD_VERSION_LABEL=${build.version.label}"/>
            <arg value="${installer.dir}/installer.nsi" />
    </exec>
    

    Then I can access the parameters in the nsi file as I was:

    DetailPrint ${TEST}
    DetailPrint ${BUILD_VERSION_LABEL}
    File /r "C:\DTU\Build\${BUILD_VERSION_LABEL}\*"