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:
parent
200b6c0831
commit
70408e8ae4
4 changed files with 53 additions and 41 deletions
|
@ -26,25 +26,25 @@ example = Split("""
|
||||||
|
|
||||||
Import('env plugin_env plugin_uenv')
|
Import('env plugin_env plugin_uenv')
|
||||||
|
|
||||||
|
unicodetarget = 'UNICODE' in env['CPPDEFINES']
|
||||||
|
lib_targetT = lib_target
|
||||||
|
|
||||||
# build library
|
# build library
|
||||||
# in Unicode compilation, we should really build both variants but I can't get it to work [Wizou]
|
if unicodetarget:
|
||||||
if env['UNICODE']:
|
lib_targetT = lib_targetT + 'W'
|
||||||
api_uenv = plugin_uenv.Clone()
|
api_uenv = plugin_uenv.Clone()
|
||||||
api_uenv.Append(CPPPATH = ['#Source/exehead'])
|
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
|
lib = libW
|
||||||
else:
|
else:
|
||||||
api_env = plugin_env.Clone()
|
api_env = plugin_env.Clone()
|
||||||
api_env.Append(CPPPATH = ['#Source/exehead'])
|
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
|
# distribute library, files and examples
|
||||||
|
|
||||||
env.DistributeExamples(api_files, path='Plugin/nsis')
|
|
||||||
|
|
||||||
if env['PLATFORM'] == 'win32':
|
if env['PLATFORM'] == 'win32':
|
||||||
if env['UNICODE']:
|
|
||||||
env.DistributeExamples(libW, lib_target+".lib", path='Plugin/nsis')
|
|
||||||
env.DistributeExamples(lib, path='Plugin/nsis')
|
env.DistributeExamples(lib, path='Plugin/nsis')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -56,16 +56,20 @@ else:
|
||||||
if env.has_key('PREFIX_PLUGINAPI_LIB'):
|
if env.has_key('PREFIX_PLUGINAPI_LIB'):
|
||||||
env.Distribute(lib, None, 'pluginapi_lib', '', 'nsis', 'pluginapi', 'pluginapi')
|
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
|
# 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'])
|
|
||||||
|
|
|
@ -39,5 +39,8 @@ includes = Split("""
|
||||||
|
|
||||||
Import('BuildPlugin env')
|
Import('BuildPlugin env')
|
||||||
|
|
||||||
|
unicodetarget = 'UNICODE' in env['CPPDEFINES']
|
||||||
|
|
||||||
BuildPlugin(target, files, libs, examples, docs, res = resources)
|
BuildPlugin(target, files, libs, examples, docs, res = resources)
|
||||||
env.DistributeInclude(includes)
|
if not unicodetarget:
|
||||||
|
env.DistributeInclude(includes)
|
||||||
|
|
|
@ -38,5 +38,8 @@ includes = Split("""
|
||||||
|
|
||||||
Import('BuildPlugin env')
|
Import('BuildPlugin env')
|
||||||
|
|
||||||
|
unicodetarget = 'UNICODE' in env['CPPDEFINES']
|
||||||
|
|
||||||
BuildPlugin(target, files, libs, examples, docs, res = resources)
|
BuildPlugin(target, files, libs, examples, docs, res = resources)
|
||||||
env.DistributeInclude(includes)
|
if not unicodetarget:
|
||||||
|
env.DistributeInclude(includes)
|
||||||
|
|
46
SConstruct
46
SConstruct
|
@ -610,23 +610,13 @@ def DistributeExtras(env, target, examples, docs):
|
||||||
####### Plug-ins ###
|
####### Plug-ins ###
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
def BuildPluginBoth(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):
|
|
||||||
# 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,
|
|
||||||
entry = 'DllMain', res = None, resources = None,
|
entry = 'DllMain', res = None, resources = None,
|
||||||
defines = None, flags = None, nodeflib = True,
|
defines = None, flags = None, nodeflib = True,
|
||||||
cppused = False, unicode = False):
|
cppused = False, unicode = False):
|
||||||
if unicode:
|
if unicode:
|
||||||
env = plugin_uenv.Clone()
|
env = plugin_uenv.Clone()
|
||||||
|
target = target + 'W'
|
||||||
else:
|
else:
|
||||||
env = plugin_env.Clone()
|
env = plugin_env.Clone()
|
||||||
|
|
||||||
|
@ -650,23 +640,35 @@ def BuildPlugin(target, source, libs, examples = None, docs = None,
|
||||||
plugin = i
|
plugin = i
|
||||||
break
|
break
|
||||||
env.DistributePlugin(plugin)
|
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:
|
for plugin in plugin_libs + plugins:
|
||||||
if plugin in defenv['SKIPPLUGINS']:
|
if plugin in defenv['SKIPPLUGINS']:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
path = 'Contrib/' + plugin
|
srcpath = 'Contrib/' + plugin
|
||||||
build_dir = '$BUILD_PREFIX/' + plugin
|
build_dir = '$BUILD_PREFIX/' + plugin
|
||||||
|
pvariants = [{'suff':'', 'e':plugin_env.Clone()}]
|
||||||
if defenv['UNICODE']:
|
if defenv['UNICODE']:
|
||||||
exports = {'BuildPlugin' : BuildPluginBoth, 'env' : plugin_uenv.Clone()}
|
pvariants += [{'suff':'W', 'e':plugin_uenv.Clone()}]
|
||||||
else:
|
for pvariant in pvariants:
|
||||||
exports = {'BuildPlugin' : BuildPlugin, 'env' : plugin_env.Clone()}
|
exports = {'BuildPlugin' : BuildPlugin, 'env' : pvariant['e']}
|
||||||
defenv.SConscript(dirs = path, variant_dir = build_dir, duplicate = False, exports = exports)
|
vdir = build_dir + pvariant['suff']
|
||||||
|
defenv.SConscript(dirs = srcpath, variant_dir = vdir, duplicate = False, exports = exports)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
####### Utilities ###
|
####### Utilities ###
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue