From 70408e8ae4460ddce49c02bca753cc55a57085fc Mon Sep 17 00:00:00 2001 From: anders_k Date: Mon, 5 Mar 2012 23:29:20 +0000 Subject: [PATCH] Generate ansi and unicode plugins git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6219 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/ExDLL/SConscript | 38 +++++++++++++------------ Contrib/InstallOptions/SConscript | 5 +++- Contrib/nsDialogs/SConscript | 5 +++- SConstruct | 46 ++++++++++++++++--------------- 4 files changed, 53 insertions(+), 41 deletions(-) diff --git a/Contrib/ExDLL/SConscript b/Contrib/ExDLL/SConscript index 2ea28f33..82c3d691 100644 --- a/Contrib/ExDLL/SConscript +++ b/Contrib/ExDLL/SConscript @@ -26,25 +26,25 @@ example = Split(""" Import('env plugin_env plugin_uenv') +unicodetarget = 'UNICODE' in env['CPPDEFINES'] +lib_targetT = lib_target + # build library -# in Unicode compilation, we should really build both variants but I can't get it to work [Wizou] -if env['UNICODE']: +if unicodetarget: + lib_targetT = lib_targetT + 'W' api_uenv = plugin_uenv.Clone() api_uenv.Append(CPPPATH = ['#Source/exehead']) - libW = api_uenv.Library(lib_target+'W', lib_files) + libW = api_uenv.Library(lib_targetT, lib_files) lib = libW else: api_env = plugin_env.Clone() api_env.Append(CPPPATH = ['#Source/exehead']) - lib = api_env.Library(lib_target, lib_files) + libA = api_env.Library(lib_targetT, lib_files) + lib = libA # distribute library, files and examples -env.DistributeExamples(api_files, path='Plugin/nsis') - if env['PLATFORM'] == 'win32': - if env['UNICODE']: - env.DistributeExamples(libW, lib_target+".lib", path='Plugin/nsis') env.DistributeExamples(lib, path='Plugin/nsis') else: @@ -56,16 +56,20 @@ else: if env.has_key('PREFIX_PLUGINAPI_LIB'): env.Distribute(lib, None, 'pluginapi_lib', '', 'nsis', 'pluginapi', 'pluginapi') -env.DistributeExamples(example, path='Plugin') +if not unicodetarget: + env.DistributeExamples(api_files, path='Plugin/nsis') + env.DistributeExamples(example, path='Plugin') # make sure all the other plug-ins can use the library -env.Install('#$BUILD_PREFIX/api/nsis', api_files + lib) +if unicodetarget: + envT = plugin_uenv + env.Install('#$BUILD_PREFIX/api/nsis', libW) +else: + envT = plugin_env + env.Install('#$BUILD_PREFIX/api/nsis', api_files + libA) + +envT.Append(CPPPATH = ['#$BUILD_PREFIX/api']) +envT.Append(LIBPATH = ['#$BUILD_PREFIX/api/nsis']) +envT.Append(LIBS = [lib_targetT]) -plugin_env.Append(CPPPATH = ['#$BUILD_PREFIX/api']) -plugin_env.Append(LIBPATH = ['#$BUILD_PREFIX/api/nsis']) -plugin_env.Append(LIBS = [lib_target]) -plugin_uenv.Append(CPPPATH = ['#$BUILD_PREFIX/api']) -plugin_uenv.Append(LIBPATH = ['#$BUILD_PREFIX/api/nsis']) -if env['UNICODE']: # MinGW ANSI build tries to link with pluginapi and pluginapiW, this is a hack to stop that [Anders] - plugin_uenv.Append(LIBS = [lib_target+'W']) diff --git a/Contrib/InstallOptions/SConscript b/Contrib/InstallOptions/SConscript index 7923d511..3eac2c87 100644 --- a/Contrib/InstallOptions/SConscript +++ b/Contrib/InstallOptions/SConscript @@ -39,5 +39,8 @@ includes = Split(""" Import('BuildPlugin env') +unicodetarget = 'UNICODE' in env['CPPDEFINES'] + BuildPlugin(target, files, libs, examples, docs, res = resources) -env.DistributeInclude(includes) +if not unicodetarget: + env.DistributeInclude(includes) diff --git a/Contrib/nsDialogs/SConscript b/Contrib/nsDialogs/SConscript index 5e9271bb..d5f1755e 100644 --- a/Contrib/nsDialogs/SConscript +++ b/Contrib/nsDialogs/SConscript @@ -38,5 +38,8 @@ includes = Split(""" Import('BuildPlugin env') +unicodetarget = 'UNICODE' in env['CPPDEFINES'] + BuildPlugin(target, files, libs, examples, docs, res = resources) -env.DistributeInclude(includes) +if not unicodetarget: + env.DistributeInclude(includes) diff --git a/SConstruct b/SConstruct index f271f672..7d495403 100644 --- a/SConstruct +++ b/SConstruct @@ -610,23 +610,13 @@ def DistributeExtras(env, target, examples, docs): ####### Plug-ins ### ###################################################################### -def BuildPluginBoth(target, source, libs, examples = None, docs = None, - entry = 'DllMain', res = None, resources = None, - defines = None, flags = None, nodeflib = True, - cppused = False): - # this function should build the ANSI & Unicode variant of the DLL, but I can't get it to work... help!!! [Wizou] - if defenv['UNICODE']: - #VariantDir('$BUILD_PREFIX/' + plugin + 'W', path) - BuildPlugin(target, source, libs, examples, docs, entry, res, resources, defines, flags, nodeflib, cppused, True) - else: - BuildPlugin(target, source, libs, examples, docs, entry, res, resources, defines, flags, nodeflib, cppused, False) - -def BuildPlugin(target, source, libs, examples = None, docs = None, +def BuildPluginWorker(target, source, libs, examples = None, docs = None, entry = 'DllMain', res = None, resources = None, defines = None, flags = None, nodeflib = True, cppused = False, unicode = False): if unicode: env = plugin_uenv.Clone() + target = target + 'W' else: env = plugin_env.Clone() @@ -650,23 +640,35 @@ def BuildPlugin(target, source, libs, examples = None, docs = None, plugin = i break env.DistributePlugin(plugin) - if unicode: - env.DistributePlugin(plugin, str(plugin)[:-4]+"W.dll") # tweak to generate both plugin.dll & pluginW.dll (until we get to build really both variant) + + if not unicode: # distribute extras only for ANSI builds + DistributeExtras(env, target, examples, docs) + +def BuildPlugin(target, source, libs, examples = None, docs = None, + entry = 'DllMain', res = None, resources = None, + defines = None, flags = None, nodeflib = True, + cppused = False): + unicodetarget = 'UNICODE' in exports['env']['CPPDEFINES'] + BuildPluginWorker(target, source, libs, examples, docs, entry, res, resources, defines, flags, nodeflib, cppused, unicodetarget) + + - #if not unicode: # distribute extras only for ANSI builds - DistributeExtras(env, target, examples, docs) for plugin in plugin_libs + plugins: if plugin in defenv['SKIPPLUGINS']: continue - - path = 'Contrib/' + plugin + + srcpath = 'Contrib/' + plugin build_dir = '$BUILD_PREFIX/' + plugin + pvariants = [{'suff':'', 'e':plugin_env.Clone()}] if defenv['UNICODE']: - exports = {'BuildPlugin' : BuildPluginBoth, 'env' : plugin_uenv.Clone()} - else: - exports = {'BuildPlugin' : BuildPlugin, 'env' : plugin_env.Clone()} - defenv.SConscript(dirs = path, variant_dir = build_dir, duplicate = False, exports = exports) + pvariants += [{'suff':'W', 'e':plugin_uenv.Clone()}] + for pvariant in pvariants: + exports = {'BuildPlugin' : BuildPlugin, 'env' : pvariant['e']} + vdir = build_dir + pvariant['suff'] + defenv.SConscript(dirs = srcpath, variant_dir = vdir, duplicate = False, exports = exports) + + ###################################################################### ####### Utilities ###