From 2a341bc918b580bb2e3061de492e27a563e03954 Mon Sep 17 00:00:00 2001 From: anders_k Date: Tue, 3 Nov 2015 23:28:08 +0000 Subject: [PATCH] Better NSIS Menu .manifest requirement detection git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6631 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/NSIS Menu/SConscript | 8 +++----- Examples/makensis.nsi | 2 ++ SCons/Config/ms | 19 +++++++++++++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/Contrib/NSIS Menu/SConscript b/Contrib/NSIS Menu/SConscript index 111a1ce1..22e0336f 100644 --- a/Contrib/NSIS Menu/SConscript +++ b/Contrib/NSIS Menu/SConscript @@ -58,11 +58,9 @@ if env['PLATFORM'] != 'win32' and WhereIs('wx-config') or \ ) # manifest - - if env.has_key('MSVS_VERSION'): - if float(env['MSVS_VERSION'].replace('Exp','')) >= 8.0: - manifest = env.SideEffect('%s.exe.manifest' % target, nsis_menu) - env.DistributeBin(manifest, alias='install-utils') + if env.get('MSVCRT_NEEDSMANIFEST'): + manifest = env.SideEffect('%s.exe.manifest' % target, nsis_menu) + env.DistributeBin(manifest, alias='install-utils') # set directories diff --git a/Examples/makensis.nsi b/Examples/makensis.nsi index 4a39f5fd..73ab8885 100644 --- a/Examples/makensis.nsi +++ b/Examples/makensis.nsi @@ -156,7 +156,9 @@ ${MementoSection} "NSIS Core Files (required)" SecCore File ..\COPYING File ..\NSIS.chm File ..\NSIS.exe + !verbose push 1 File /nonfatal ..\NSIS.exe.manifest + !verbose pop SetOutPath $INSTDIR\Bin File ..\Bin\makensis.exe diff --git a/SCons/Config/ms b/SCons/Config/ms index b0507f52..32d3d33c 100644 --- a/SCons/Config/ms +++ b/SCons/Config/ms @@ -23,6 +23,7 @@ defenv['CPP_REQUIRES_STDLIB'] = 0 defenv['SUBSYS_CON'] = '/subsystem:console' defenv['SUBSYS_WIN'] = '/subsystem:windows' defenv['MSVCRT_FLAG'] = '/MD' +defenv['MSVCRT_NEEDSMANIFEST'] = False defenv['STDCALL'] = '__stdcall' msvs_version = float(defenv['MSVS_VERSION'].replace('Exp','')) @@ -104,6 +105,24 @@ if float(defenv['MSVS_VERSION'].replace('Exp','')) < 8.0: conf.Finish() +# Linking to msvcr?0.dll (/MD) might require a manifest + +confenv = defenv.Clone() +conf = confenv.Configure() +if msvs_version >= 7.0: + conf.env.Append(CCFLAGS = [defenv['MSVCRT_FLAG']]) + code = """ + #include + int main() { return atoi("0"); } + """ + result = True # TryLink should not fail but default to True just in case so distribution will fail as well + if conf.TryLink(code, '.cpp'): + import os + result = os.path.exists('%s.manifest' % conf.lastTarget) + defenv['MSVCRT_NEEDSMANIFEST'] = result +conf.Finish() + + ### unicode tdefenv = defenv.Clone() if tdefenv['UNICODE']: