Generate ansi and unicode plugins

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6219 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
anders_k 2012-03-05 23:29:20 +00:00
parent 200b6c0831
commit 70408e8ae4
4 changed files with 53 additions and 41 deletions

View file

@ -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'])

View file

@ -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)

View file

@ -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)

View file

@ -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 ###