- NSIS Discussion
- Can I make a script require a minimum NSIS version?
Archive: Can I make a script require a minimum NSIS version?
dllmain
6th January 2008 16:31 UTC
Can I make a script require a minimum NSIS version?
Hello!
I'd like to make sure that a certain script throws an error if compiled with a version prior to X like I can do in Autoconf:
AC_PREREQ(2.60)
Is there a way to achieve this with NSIS? I didn't find anything about this.
Thanks in advance,
Sebastian
Afrow UK
6th January 2008 16:48 UTC
!if `${NSIS_VERSION}` < 2.34
!error `NSIS version 2.34 or greater required.`
!endif
Stu
dllmain
6th January 2008 17:11 UTC
Thanks for the hint about ${NSIS_VERSION} but your code doesn't work, for two reasons:
- ${NSIS_VERSION} starts with "v" as in "v2.34"
- < seems to only compare numbers, not strings.
Still a good start, I think I can make something of that.
fabian.rap.more
6th January 2008 17:12 UTC
the code should still work
!if `${NSIS_VERSION}` < v2.34
!error `NSIS version 2.34 or greater required.`
!endif
dllmain
6th January 2008 17:31 UTC
If I try that exact code with the string 2.35 it doesn't fail for my local NSIS 2.34. So it seems it's always false.
fabian.rap.more
6th January 2008 17:54 UTC
did you try enclosing v2.35 within quotes?
dllmain
6th January 2008 18:23 UTC
yes, no luck.
fabian.rap.more
6th January 2008 18:35 UTC
try this
!define NO "v2.35"
!if `${NSIS_VERSION}` < '${NO}'
!error `NSIS version 2.34 or greater required.`
!endif
dllmain
6th January 2008 18:37 UTC
I did some research in between. I found out the following:
- The ${NSIS_VERSION} constant was first introduced in 2.0b4
- 2.15 is the only release in [2.0b4, 2.34] without the "v" prefix in ${NSIS_VERSION}
With that and an idea from
here I was able to construct this code for detecting NSIS >=2.34:
!ifndef NSIS_VERSION
; Anything before 2.0b4
!error "NSIS 2.34 or later required."
!endif
!define "X${NSIS_VERSION}"
!ifdef Xv2.33 | Xv2.32 | Xv2.31 | Xv2.30 | Xv2.29 | Xv2.28 | Xv2.27 | Xv2.26 | Xv2.25 | Xv2.24 | Xv2.23 | Xv2.22 | Xv2.21 | Xv2.20 | Xv2.19 | Xv2.18 | Xv2.17 | Xv2.16 | X2.15 | Xv2.14 | Xv2.13 | Xv2.12 | Xv2.11 | Xv2.10 | Xv2.09 | Xv2.08 | Xv2.07 | Xv2.06 | Xv2.05 | Xv2.04 | Xv2.03 | Xv2.02 | Xv2.01 | Xv2.0
; Stable releases, 2.15 without "v" prefix
!error "NSIS 2.34 or later required."
!endif
!ifdef Xv2.0b4 | Xv2.0rc1 | Xv2.0rc2 | Xv2.0rc3 | Xv2.0rc4 | Xv2.07b0
; Pre-releases
!error "NSIS 2.34 or later required."
!endif
!undef "X${NSIS_VERSION}"
Please report any bugs you find.
dllmain
6th January 2008 18:43 UTC
Originally posted by fabian.rap.more
try this
!define NO "v2.35"
!if `${NSIS_VERSION}` < '${NO}'
!error `NSIS version 2.34 or greater required.`
!endif
Just saw this. I tried that and with other quote chars as well - still doesn't work for me. It makes me wonder if you actually try the code you paste here.
zeeh3
6th January 2008 18:46 UTC
I think none of these commands allow use of variables.
fabian.rap.more
6th January 2008 18:47 UTC
i always try my scripts before posting them...............
Afrow UK
6th January 2008 19:31 UTC
You're right, that doesn't work.
This does though. Used a bit of a hack to strip the v from the front using /date:
!define VERSION_A 2.34
!define /date VERSION_B %${NSIS_VERSION}
!if `${VERSION_B}` < `${VERSION_A}`
!error `NSIS version ${VERSION_A} or greater required. You are using ${NSIS_VERSION}.`
!endif
Stu
dllmain
6th January 2008 20:47 UTC
The only problem I can think of is that it accepts Xrc1 if X is required. Other than that very smart solution.
I made a macro/file of that, see attachment. Usage is
!include "RequireVersion.nsh"
!insertmacro REQUIRE_VERSION "2.34"
Afrow UK
6th January 2008 21:11 UTC
That's good. Should make a Wiki page.
Stu