* Basic System::Call support when compiling with 64-bit MinGW/GCC toolchain

* Win64 fixes


git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6607 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
anders_k 2015-09-17 14:30:07 +00:00
parent 757d16f937
commit 286edd20c4
41 changed files with 335 additions and 232 deletions

View file

@ -4,7 +4,17 @@ Import('defenv')
### imports
Import('FlagsConfigure')
Import('FlagsConfigure GetOptionOrEnv')
### HACKS!
if GetOptionOrEnv('NSIS_SCONS_GNU_ENVPATHHACK'):
import os
defenv['ENV']['PATH'] = os.getenv('PATH') # Major hack!
import_env = ['SystemDrive', 'SystemRoot', 'TEMP', 'TMP', 'PATHEXT']
for var in import_env:
if var in os.environ:
defenv['ENV'][var] = os.environ.get(var, '')
#print defenv.Dump()
### cross compiling
@ -15,10 +25,11 @@ def cross_env(env):
### flags
def entry(x,u):
if x == 'NSISWinMainNOCRT':
x = '_' + x
elif x == 'DllMain':
x = '_DllMain@12'
if defenv['TARGET_ARCH'] == 'x86':
if x == 'NSISWinMainNOCRT':
x = '_' + x
elif x == 'DllMain':
x = '_DllMain@12'
return '-Wl,-e%s' % x
defenv['ENTRY_FLAG'] = entry
@ -203,6 +214,12 @@ conf.Finish()
# sure the sections will be written in the correct order.
#
if defenv['TARGET_ARCH'] == 'amd64':
stub_env.Append(LINKFLAGS = ['-B pei-x86-64'])
stub_uenv.Append(LINKFLAGS = ['-B pei-x86-64'])
else:
stub_env.Append(LINKFLAGS = ['--oformat pei-i386'])
stub_uenv.Append(LINKFLAGS = ['--oformat pei-i386'])
stub_env.Append(LINKFLAGS = ['-T', File('linker_script').rfile()])
stub_uenv.Append(LINKFLAGS = ['-T', File('linker_script').rfile()])

View file

@ -1,4 +1,6 @@
OUTPUT_FORMAT(pei-i386)
/*
OUTPUT_FORMAT(pei-i386 VS pei-x86-64) must be set somewhere else
*/
SECTIONS
{
.text __image_base__ + __section_alignment__ :

View file

@ -118,4 +118,17 @@ def FlagsConfigure(env):
"""
return env.Configure(custom_tests = { 'CheckCompileFlag' : check_compile_flag, 'CheckLinkFlag': check_link_flag })
Export('AddAvailableLibs AddZLib FlagsConfigure GetAvailableLibs')
def GetOptionOrEnv(name, defval = None):
"""
Get option set on scons command line or in os.environ
"""
import os
#if optenv and optenv.has_key(name):
# return optenv[name]
if ARGUMENTS.has_key(name):
return ARGUMENTS[name]
if os.environ.has_key(name):
return os.environ[name]
return defval
Export('AddAvailableLibs AddZLib FlagsConfigure GetAvailableLibs GetOptionOrEnv')