zenpoy
zenpoy

Reputation: 20136

NSIS: How to check if a var exists

What is the best way to check if a var exists in NSIS?

Currently I do something like this:

${If} $NonExistentVar == $$NonExistentVar

But this won't work as expected in case an existing var some_var have the value of $some_var, I know it's rare but, is there a better way of checking it?

section non_existent_var
    detailprint "non existent: $NonExistentVar"
    var /global ExistentVar
    detailprint "existent: $ExistentVar"
    ${If} $NonExistentVar == $$NonExistentVar
        detailprint "PASS: NonExistent doesn't exist"
    ${Else}
        detailprint "FAIL: NonExistent exists"
    ${EndIf}

    ${If} $ExistentVar == $$ExistentVar
        detailprint "FAIL: ExistentVar doesn't exist"
    ${Else}
        detailprint "PASS: ExistentVar exists"
    ${EndIf}

    strcpy $ExistentVar "$$ExistentVar"

    ${If} $ExistentVar == $$ExistentVar
        detailprint "FAIL: ExistentVar doesn't exist"
    ${Else}
        detailprint "PASS: ExistentVar exists"
    ${EndIf}
SectionEnd

gives:

non existent: $NonExistentVar
existent: 
PASS: NonExistent doesn't exist
PASS: ExistentVar exists
FAIL: ExistentVar doesn't exist
Completed

Upvotes: 2

Views: 2803

Answers (1)

Anders
Anders

Reputation: 101756

Why not use a define? This is a check that should happen at compile time after all.

!macro DeclareDetactableVariable name
!ifndef VAR_${name}
Var /Global ${name}
!define VAR_${name}
!endif
!macroend

!insertmacro DeclareDetactableVariable foo
!ifdef VAR_foo
...
!endif

Upvotes: 1

Related Questions