diff --git a/Docs/src/history.but b/Docs/src/history.but index 27888b16..184d42b9 100644 --- a/Docs/src/history.but +++ b/Docs/src/history.but @@ -36,6 +36,8 @@ Released on ? ?th, 2020 \S2{} Build System +\b Primitive SOURCE_DATE_EPOCH support (\W{http://sf.net/p/nsis/patches/294}{patch #294}) + \b Python 3 fixes (\W{http://sf.net/p/nsis/patches/296}{patch #296}) \H{v3.05} 3.05 diff --git a/SCons/Config/gnu b/SCons/Config/gnu index bfcb362d..1e6b509e 100644 --- a/SCons/Config/gnu +++ b/SCons/Config/gnu @@ -4,13 +4,13 @@ Import('defenv') ### imports -Import('FlagsConfigure GetOptionOrEnv') +Import('FlagsConfigure GetOptionOrEnv GetStdSysEnvVarList') ### HACKS! if GetOptionOrEnv('NSIS_SCONS_GNU_ENVPATHHACK'): import os defenv['ENV']['PATH'] = os.getenv('PATH') # Major hack! - import_env = ['SystemDrive', 'SystemRoot', 'TEMP', 'TMP', 'PATHEXT'] + import_env = GetStdSysEnvVarList(path=True, temp=True) for var in import_env: if var in os.environ: defenv['ENV'][var] = os.environ.get(var, '') diff --git a/SCons/Tools/mstoolkit.py b/SCons/Tools/mstoolkit.py index 1edbb7a4..42d3ed20 100644 --- a/SCons/Tools/mstoolkit.py +++ b/SCons/Tools/mstoolkit.py @@ -290,7 +290,7 @@ def generate(env): targ_arc = env.get('TARGET_ARCH', 'x86') if "None" == env.get('MSVC_USE_SCRIPT', '!'): - for x in ['INCLUDE', 'LIB', 'PATH', 'CL', 'LINK', 'ML']: env['ENV'][x] = "" + for x in ['INCLUDE', 'LIB', 'PATH', 'CL', '_CL_', 'LINK', '_LINK_', 'ML']: env['ENV'][x] = "" if not env.WhereIs('cl', os.environ['PATH']): raise SCons.Errors.InternalError("CL not found in %s" % os.environ['PATH']) include_path = os.environ['INCLUDE'] @@ -312,6 +312,7 @@ def generate(env): env.PrependENVPath('INCLUDE', include_path) env.PrependENVPath('LIB', lib_path) env.PrependENVPath('PATH', exe_path) + # 'LIBPATH' = ? env['ENV']['CPU'] = (targ_arc.upper(), 'i386')['x86' in targ_arc.lower()] # AMD64/ARM64 or i386 env['ENV']['TARGETOS'] = 'BOTH' diff --git a/SCons/utils.py b/SCons/utils.py index 0b5315e9..92d50ceb 100644 --- a/SCons/utils.py +++ b/SCons/utils.py @@ -1,3 +1,31 @@ +def IsExecutingOnWindows(): + import sys, os + if sys.platform.startswith('win') or os.name == 'nt': return True + return False + +def GetWindowsStdSysEnvVarList(path=False, temp=True, user=True, os=True, shell=True, cpu=True): + ret = [] + if os: ret += 'OS WINDIR SYSTEMDRIVE SYSTEMROOT ALLUSERSPROFILE Public ProgramData CommonProgramFiles CommonProgramFiles(x86) CommonProgramW6432 ProgramFiles ProgramFiles(x86) ProgramW6432'.split() + if cpu: ret += 'NUMBER_OF_PROCESSORS PROCESSOR_ARCHITECTURE PROCESSOR_ARCHITEW6432 PROCESSOR_IDENTIFIER PROCESSOR_LEVEL PROCESSOR_REVISION'.split() + if user: ret += 'COMPUTERNAME USERNAME USERPROFILE APPDATA LOCALAPPDATA HOMEDRIVE HOMESHARE HOMEPATH LOGONSERVER USERDNSDOMAIN USERDOMAIN USERDOMAIN_ROAMINGPROFILE ClientName SessionName'.split() + if shell: ret += 'COMSPEC PATHEXT PSModulePath'.split() # PROMPT + if temp: ret += 'TEMP TMP'.split() + if path: ret += 'PATH'.split() + return ret +def GetPosixStdSysEnvVarList(path=False, temp=True, user=True, os=True, shell=True, cpu=True): + ret = [] + if os: ret += 'HOSTALIASES'.split() + if user: ret += 'HOME USER LOGNAME DATEMSK UID'.split() # XDG_* TZ LANGUAGE LANG LC_* NLSPATH + if shell: ret += 'SHELL TERM TERMCAP'.split() + if temp: ret += 'TMPDIR'.split() + if path: ret += 'PATH MANPATH'.split() + return ret +def GetStdSysEnvVarList(path=False, temp=True, user=True, os=True, shell=True, cpu=True): + func = GetPosixStdSysEnvVarList + if IsExecutingOnWindows(): func = GetWindowsStdSysEnvVarList + return func(path=path, temp=temp, user=user, os=os, shell=shell, cpu=cpu) + + def AddAvailableLibs(env, libs): """ Scans through a list of libraries and adds @@ -145,10 +173,10 @@ def ReadU32LE(f, fpos=None, defval=None): return FileUnpackRead("