diff --git a/Contrib/Graphics/SConscript b/Contrib/Graphics/SConscript
index 6073988c..9154337e 100644
--- a/Contrib/Graphics/SConscript
+++ b/Contrib/Graphics/SConscript
@@ -78,7 +78,7 @@ def join(prefix, list):
return map(lambda x: '%s/%s' % (prefix, x), list)
def dist(dir, files):
- defenv.DistributeContribs('Graphics/%s' % dir, join(dir, files))
+ defenv.DistributeContrib(join(dir, files), path='Graphics/%s' % dir)
dist('Checks', checks)
dist('Header', headers)
diff --git a/Contrib/Language files/SConscript b/Contrib/Language files/SConscript
index ff5b8c9a..152e757b 100644
--- a/Contrib/Language files/SConscript
+++ b/Contrib/Language files/SConscript
@@ -52,4 +52,4 @@ languages = Split("""
Import('defenv')
-defenv.DistributeContribs('Language files', languages)
+defenv.DistributeContrib(languages, path='Language files')
diff --git a/Contrib/Library/LibraryLocal/SConscript b/Contrib/Library/LibraryLocal/SConscript
index 21f0253e..bfb2bbef 100644
--- a/Contrib/Library/LibraryLocal/SConscript
+++ b/Contrib/Library/LibraryLocal/SConscript
@@ -12,4 +12,4 @@ libs = Split("""
Import('BuildUtil')
-BuildUtil(target, files, libs, flags = ['$EXCEPTION_FLAG'], install = 'Bin')
+BuildUtil(target, files, libs, flags = ['$EXCEPTION_FLAG'])
diff --git a/Contrib/Library/RegTool/SConscript b/Contrib/Library/RegTool/SConscript
index 6dcbfa28..d40a0f6d 100644
--- a/Contrib/Library/RegTool/SConscript
+++ b/Contrib/Library/RegTool/SConscript
@@ -14,4 +14,4 @@ libs = Split("""
Import('BuildUtil')
-BuildUtil(target, files, libs, entry = 'WinMain', nodeflib = True, install_as = 'Bin/RegTool.bin')
+BuildUtil(target, files, libs, entry = 'WinMain', nodeflib = True, file_name = 'RegTool.bin')
diff --git a/Contrib/MakeLangId/SConscript b/Contrib/MakeLangId/SConscript
index 32839714..b62609ca 100644
--- a/Contrib/MakeLangId/SConscript
+++ b/Contrib/MakeLangId/SConscript
@@ -19,5 +19,5 @@ libs = Split("""
Import('BuildUtil')
-BuildUtil(target, files, libs, res = res, resources = resources, entry = 'WinMain', install = 'Bin')
+BuildUtil(target, files, libs, res = res, resources = resources, entry = 'WinMain')
diff --git a/Contrib/Makensisw/SConscript b/Contrib/Makensisw/SConscript
index 1775e737..91207391 100644
--- a/Contrib/Makensisw/SConscript
+++ b/Contrib/Makensisw/SConscript
@@ -53,7 +53,7 @@ BuildUtil(
res = res,
resources = resources,
entry = 'WinMain',
- install = '',
defines = ['WIN32_MEAN_AND_LEAN', 'RELEASE=2.0'],
- docs = docs
+ docs = docs,
+ root_util = True
)
diff --git a/Contrib/Modern UI/Readme.html b/Contrib/Modern UI/Readme.html
index 4aa5e07f..ddb841e5 100644
--- a/Contrib/Modern UI/Readme.html
+++ b/Contrib/Modern UI/Readme.html
@@ -364,12 +364,12 @@ side.
"parameter">ui_file
The interface files with a customized dialog resource IDD_SELCOM
with a small description area.
-Default: {NSISDIR}\Contrib\UIs\modern_smalldesc.exe
+Default: ${NSISDIR}\Contrib\UIs\modern_smalldesc.exe
MUI_UI_COMPONENTSPAGE_NODESC ui_file
The interface files with a customized dialog resource IDD_SELCOM
without a description area.
-Default: {NSISDIR}\Contrib\UIs\modern_nodesc.exe
+Default: ${NSISDIR}\Contrib\UIs\modern_nodesc.exe
Configuration file\\
-If a file named "nsisconf.nsh" in the same directory as makensis.exe exists, it will be included by default before any scripts (unless the /NOCONFIG command line parameter is used).
\ No newline at end of file
+If a file named "nsisconf.nsh" in the config directory exists, it will be included by default before any scripts (unless the /NOCONFIG command line parameter is used). The config directory on Windows is the same directory as makensis.exe is in. On other platforms this is set at install time and defaults to $PREFIX/etc/. You can alter this at runtime, see \k{usageenvironment} for more information.
diff --git a/Docs/src/usage.but b/Docs/src/usage.but
index d61a84b0..48b9da26 100644
--- a/Docs/src/usage.but
+++ b/Docs/src/usage.but
@@ -19,7 +19,7 @@ If you want to use MakeNSIS on the command line, the syntax of the makensis comm
\b /PAUSE makes makensis pause before quitting, which is useful when executing directly from Windows.
-\b /NOCONFIG disables inclusion of \\nsisconf.nsh. Without this parameter, installer defaults are set from nsisconf.nsh.
+\b /NOCONFIG disables inclusion of nsisconf.nsh. Without this parameter, installer defaults are set from nsisconf.nsh.
\b /CMDHELP prints basic usage information for command (if specified), or all commands (if command is not specified).
@@ -39,6 +39,14 @@ If you want to use MakeNSIS on the command line, the syntax of the makensis comm
\b If multiple scripts are specified, they are treated as one concatenated script.
+\S1{usageenvironment} Environment variables
+
+makensis checks a number of environment variables that tell it where to locate the things it needs in order to create installers. These variables include:
+
+\b NSISDIR, NSISCONFDIR - Places where nsis data and config files are installed. NSISDIR alters the script variable $\{NSISDIR\}. See \k{varconstant} for more info.
+
+\b APPDATA (on Windows) or HOME (on other platforms) - Location of the per-user configuration file.
+
\S1{usageexamples} Examples
Basic usage:
diff --git a/Docs/src/var.but b/Docs/src/var.but
index ae6dd87c..35688c33 100644
--- a/Docs/src/var.but
+++ b/Docs/src/var.but
@@ -77,7 +77,9 @@ The location of the installer executable (technically you can modify this variab
\e{$\{NSISDIR\}}
-A symbol that contains the path where NSIS is installed. Detected at compile time. Useful if you want to call resources that are in NSIS directory e.g. Icons, UIs...
+A symbol that contains the path where NSIS is installed. Useful if you want to call resources that are in NSIS directory e.g. Icons, UIs etc.
+
+When compiled with support for keeping makensis and the data in the same place (the default on Windows), it is in the same place as makensis, on other platforms it is set at compile time (See the INSTALL file for info). In both instances you can modify it at runtime by setting the NSISDIR environment variable. See \k{usageenvironment} for more info.
\e{$WINDIR}
diff --git a/Examples/SConscript b/Examples/SConscript
index 78ba323c..71bd7637 100644
--- a/Examples/SConscript
+++ b/Examples/SConscript
@@ -42,5 +42,5 @@ mui_examples = [
Import('env')
-env.DistributeExamples('', examples)
-env.DistributeExamples('Modern UI', mui_examples)
+env.DistributeExamples(examples)
+env.DistributeExamples(mui_examples, path='Modern UI')
diff --git a/INSTALL b/INSTALL
index 76a32e64..881e5dcb 100644
--- a/INSTALL
+++ b/INSTALL
@@ -53,6 +53,15 @@ This is a trimmed version of Appendix "Building NSIS" of the documentation.
drop it in a downloaded precompiled package such as the nightly
build.
+ * Options for POSIX installs
+
+ PREFIX: defaults to /usr/local
+ PREFIX_BIN: Where to put native binaries. Defaults to $PREFIX/bin/
+ PREFIX_CONF: Where to put the config file. Defaults to $PREFIX/etc/
+ PREFIX_DATA: Where to put the plugins, stubs, etc. Defaults to $PREFIX/share/nsis/
+ PREFIX_DOC: Where to put the docs and examples. Defaults to $PREFIX/share/doc/nsis/
+ PREFIX_DEST: The install root Useful for packagers. Defaults to the root directory.
+
- Problems
* Get help in the forum:
diff --git a/Include/SConscript b/Include/SConscript
index b817fa29..c187435a 100644
--- a/Include/SConscript
+++ b/Include/SConscript
@@ -14,5 +14,5 @@ includes = Split("""
Import('env')
-env.Distribute('Include', includes)
-env.DistributeDocs('StrFunc', 'StrFunc.txt')
+env.DistributeInclude(includes)
+env.DistributeDocs('StrFunc.txt', path='StrFunc')
diff --git a/SCons/config.py b/SCons/config.py
index 0255dc65..42c60e6d 100644
--- a/SCons/config.py
+++ b/SCons/config.py
@@ -399,6 +399,14 @@ cfg.Add(
)
)
+cfg.Add(
+ BoolOption(
+ 'NSIS_CONFIG_CONST_DATA_PATH',
+ 'determines if plugins, includes, stubs etc. are located in a constant path set at build-time',
+ defenv['PLATFORM'] != 'win32'
+ )
+)
+
### Generate help
Help(cfg.GenerateHelpText(defenv))
@@ -467,3 +475,4 @@ AddBoolDefine('NSIS_SUPPORT_STANDARD_PREDEFINES')
AddBoolDefine('NSIS_LOCKWINDOW_SUPPORT')
AddBoolDefine('NSIS_CONFIG_PLUGIN_SUPPORT')
AddBoolDefine('NSIS_FIX_COMMENT_HANDLING')
+AddBoolDefine('NSIS_CONFIG_CONST_DATA_PATH')
diff --git a/SConstruct b/SConstruct
index 278d18c6..ef5614b3 100644
--- a/SConstruct
+++ b/SConstruct
@@ -56,6 +56,11 @@ misc = [
'VPatch'
]
+doc = [
+ 'TODO.txt',
+ 'license.txt'
+]
+
defenv = Environment()
Export('defenv')
@@ -79,6 +84,30 @@ cvs_version = strftime('%d-%b-%Y.cvs', gmtime())
opts = Options()
+install_dirs = {
+ 'win32': {
+ 'dest': '',
+ 'prefix': '',
+ 'conf': '$PREFIX',
+ 'bin': '$PREFIX',
+ 'data': '$PREFIX',
+ 'doc': '$PREFIX',
+ },
+ 'default': {
+ 'dest': '',
+ 'prefix': '/usr/local',
+ 'conf': '$PREFIX/etc',
+ 'bin': '$PREFIX/bin',
+ 'data': '$PREFIX/share/nsis',
+ 'doc': '$PREFIX/share/doc/nsis',
+ }
+}
+
+if defenv['PLATFORM'] in install_dirs:
+ dirs = install_dirs[defenv['PLATFORM']]
+else:
+ dirs = install_dirs['default']
+
# version
opts.Add(('VERSION', 'Version of NSIS', cvs_version))
opts.Add(('VER_MAJOR', 'Major version of NSIS (recommended for dist-installer)', None))
@@ -86,11 +115,12 @@ opts.Add(('VER_MINOR', 'Minor version of NSIS (recommended for dist-installer)',
opts.Add(('VER_REVISION', 'Revision of NSIS (recommended for dist-installer)', None))
opts.Add(('VER_BUILD', 'Build version of NSIS (recommended for dist-installer)', None))
# installation
-opts.Add(PathOption('PREFIX', 'Installation prefix', None))
+opts.Add(('PREFIX', 'Installation prefix', dirs['prefix']))
opts.Add(ListOption('SKIPSTUBS', 'A list of stubs that will not be built', 'none', stubs))
opts.Add(ListOption('SKIPPLUGINS', 'A list of plug-ins that will not be built', 'none', plugins))
opts.Add(ListOption('SKIPUTILS', 'A list of utilities that will not be built', 'none', utils))
opts.Add(ListOption('SKIPMISC', 'A list of plug-ins that will not be built', 'none', misc))
+opts.Add(ListOption('SKIPDOC', 'A list of doc files that will not be built/installed', 'none', doc))
# build tools
opts.Add(BoolOption('MSTOOLKIT', 'Use Microsoft Visual C++ Toolkit', 'no'))
opts.Add(BoolOption('CHMDOCS', 'Build CHM documentation, requires hhc.exe', hhc))
@@ -99,6 +129,12 @@ opts.Add(PathOption('LIBPATH', 'Path to search for libraries', None))
# build options
opts.Add(BoolOption('DEBUG', 'Build executables with debugging information', 'no'))
opts.Add(PathOption('CODESIGNER', 'A program used to sign executables', None))
+# path related build options
+opts.Add(('PREFIX_DEST', 'Intermediate installation prefix (extra install time prefix)', dirs['dest']))
+opts.Add(('PREFIX_CONF', 'Path to install nsisconf.nsh to', dirs['conf']))
+opts.Add(('PREFIX_BIN', 'Path to install native binaries to', dirs['bin']))
+opts.Add(('PREFIX_DATA', 'Path to install nsis data to (plugins, includes, stubs, contrib, win32 binaries)', dirs['data']))
+opts.Add(('PREFIX_DOC','Path to install nsis README / INSTALL / TODO files to.', dirs['doc']))
opts.Update(defenv)
@@ -123,36 +159,74 @@ defenv.Execute(Delete('$ZIPDISTDIR'))
defenv.Execute(Delete('$INSTDISTDIR'))
defenv.Execute(Delete('$TESTDISTDIR'))
-def Distribute(dir, files):
- defenv.Install('$ZIPDISTDIR/%s' % dir, files)
- defenv.Install('$INSTDISTDIR/%s' % dir, files)
- defenv.Install('$TESTDISTDIR/%s' % dir, files)
+if defenv['PLATFORM'] != 'win32':
+ defenv.Append(NSIS_CPPDEFINES = [('PREFIX_CONF', defenv['PREFIX_CONF'])])
+ defenv.Append(NSIS_CPPDEFINES = [('PREFIX_DATA', defenv['PREFIX_DATA'])])
+
+def Distribute(files, names, component, path, subpath, alias, install_alias=None):
+ if isinstance(files, (str, type(File('SConstruct')))):
+ files = [files]
+ files = map(File, files)
+
+ if isinstance(names, str):
+ names = [names]
+ if not names:
+ names = map(str, files)
+ names = map(os.path.basename, names)
+
+ for d in ('$ZIPDISTDIR', '$INSTDISTDIR', '$TESTDISTDIR'):
+ paths = map(lambda file: os.path.join(d, path, subpath, file), names)
+ defenv.InstallAs(paths, files)
if defenv.has_key('PREFIX') and defenv['PREFIX']:
- ins = defenv.Install('$PREFIX/%s' % dir, files)
+ prefix = '${PREFIX_DEST}${PREFIX_%s}' % component.upper()
+ paths = map(lambda file: os.path.join(prefix, path, subpath, file), names)
+ ins = defenv.InstallAs(paths, files)
+ else:
+ ins = []
+
+ if ins:
+ defenv.Alias('install', ins)
+ defenv.Alias('install-%s' % component, ins)
+ if alias:
+ defenv.Alias(alias, ins)
+ if install_alias:
+ defenv.Alias('install-%s' % install_alias, ins)
+
return ins
- return []
+def DistributeBin(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'bin', '', path, alias)
-def DistributeAs(path, file):
- defenv.InstallAs('$ZIPDISTDIR/%s' % path, file)
- defenv.InstallAs('$INSTDISTDIR/%s' % path, file)
- defenv.InstallAs('$TESTDISTDIR/%s' % path, file)
+def DistributeConf(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'conf', '', path, alias)
- if defenv.has_key('PREFIX') and defenv['PREFIX']:
- ins = defenv.InstallAs('$PREFIX/%s' % path, file)
- return ins
+def DistributeW32Bin(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'data', 'Bin', path, alias, 'w32bin')
- return []
+def DistributeStubs(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'data', 'Stubs', path, alias, 'stubs')
-def DistributeExamples(dir, examples):
- return Distribute('Examples/%s' % dir, examples)
+def DistributePlugin(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'data', 'Plugins', path, alias, 'plugins')
-def DistributeDocs(dir, docs):
- return Distribute('Docs/%s' % dir, docs)
+def DistributeContrib(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'data', 'Contrib', path, alias, 'contrib')
-def DistributeContribs(dir, contribs):
- return Distribute('Contrib/%s' % dir, contribs)
+def DistributeMenu(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'data', 'Menu', path, alias, 'menu')
+
+def DistributeInclude(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'data', 'Include', path, alias, 'includes')
+
+def DistributeDoc(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'doc', '', path, alias)
+
+def DistributeDocs(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'doc', 'Docs', path, alias, 'docs')
+
+def DistributeExamples(files, names=[], path='', alias=None):
+ return defenv.Distribute(files, names, 'doc', 'Examples', path, alias, 'examples')
def Sign(targets):
if defenv.has_key('CODESIGNER'):
@@ -164,10 +238,17 @@ def TestScript(scripts):
defenv.Install('$TESTDISTDIR/Tests', scripts)
defenv.Distribute = Distribute
-defenv.DistributeAs = DistributeAs
-defenv.DistributeExamples = DistributeExamples
+defenv.DistributeBin = DistributeBin
+defenv.DistributeConf = DistributeConf
+defenv.DistributeW32Bin = DistributeW32Bin
+defenv.DistributeStubs = DistributeStubs
+defenv.DistributePlugin = DistributePlugin
+defenv.DistributeContrib = DistributeContrib
+defenv.DistributeMenu = DistributeMenu
+defenv.DistributeInclude = DistributeInclude
+defenv.DistributeDoc = DistributeDoc
defenv.DistributeDocs = DistributeDocs
-defenv.DistributeContribs = DistributeContribs
+defenv.DistributeExamples = DistributeExamples
defenv.Sign = Sign
defenv.TestScript = TestScript
@@ -202,22 +283,6 @@ plugin_env = envs[2]
util_env = envs[3]
cp_util_env = envs[4]
-######################################################################
-####### Aliases ###
-######################################################################
-
-defenv.Alias('install', '$PREFIX')
-defenv.Alias('install-docs', '$PREFIX/NSIS.chm')
-defenv.Alias('install-docs', '$PREFIX/Docs')
-defenv.Alias('install-examples', '$PREFIX/Examples')
-defenv.Alias('install-plugins', '$PREFIX/Plugins')
-defenv.Alias('install-stubs', '$PREFIX/Stubs')
-defenv.Alias('install-includes', '$PREFIX/Include')
-
-# defined elsewhere:
-# install-compiler
-# install-utils
-
######################################################################
####### Distribution ###
######################################################################
@@ -228,18 +293,28 @@ defenv.Alias('dist-zip', zip_target)
AlwaysBuild(defenv.AddPostAction(zip_target, Delete('$ZIPDISTDIR')))
-defenv['INSTVER'] = '/DVERSION=$VERSION'
+if defenv['PLATFORM'] == 'win32':
+ optchar = '/'
+else:
+ optchar = '-'
+
+defenv['INSTVER'] = '%sDVERSION=$VERSION' % optchar
if defenv.has_key('VER_MAJOR') and defenv.has_key('VER_MINOR') \
and defenv.has_key('VER_REVISION') and defenv.has_key('VER_BUILD'):
- defenv['INSTVER'] += ' /DVER_MAJOR=$VER_MAJOR'
- defenv['INSTVER'] += ' /DVER_MINOR=$VER_MINOR'
- defenv['INSTVER'] += ' /DVER_REVISION=$VER_REVISION'
- defenv['INSTVER'] += ' /DVER_BUILD=$VER_BUILD'
+ defenv['INSTVER'] += ' %sDVER_MAJOR=$VER_MAJOR' % optchar
+ defenv['INSTVER'] += ' %sDVER_MINOR=$VER_MINOR' % optchar
+ defenv['INSTVER'] += ' %sDVER_REVISION=$VER_REVISION' % optchar
+ defenv['INSTVER'] += ' %sDVER_BUILD=$VER_BUILD' % optchar
+
+inst_env = {}
+inst_env['NSISDIR'] = os.path.abspath(str(defenv['INSTDISTDIR']))
+inst_env['NSISCONFDIR'] = os.path.abspath(str(defenv['INSTDISTDIR']))
installer_target = defenv.Command('nsis-${VERSION}-setup${DISTSUFFIX}.exe',
'$INSTDISTDIR' + os.sep + 'Examples' + os.sep + 'makensis.nsi',
'$INSTDISTDIR' + os.sep + 'makensis$PROGSUFFIX ' +
- '/DOUTFILE=$TARGET.abspath $INSTVER $SOURCE')
+ '%sDOUTFILE=$TARGET.abspath $INSTVER $SOURCE' % optchar,
+ ENV = inst_env)
defenv.Depends(installer_target, '$INSTDISTDIR')
defenv.Sign(installer_target)
defenv.Alias('dist-installer', installer_target)
@@ -252,8 +327,12 @@ defenv.Alias('dist', ['dist-zip', 'dist-installer'])
####### Distribute Basics ###
######################################################################
-defenv.Distribute('', 'license.txt')
-defenv.Distribute('', 'nsisconf.nsh')
+for d in doc:
+ if d in defenv['SKIPDOC']:
+ continue
+ defenv.DistributeDoc(d)
+
+defenv.DistributeConf('nsisconf.nsh')
######################################################################
####### Stubs ###
@@ -273,7 +352,7 @@ def BuildStub(compression, solid):
target = defenv.SConscript(dirs = 'Source/exehead', build_dir = build_dir, duplicate = False, exports = exports)
env.SideEffect('%s/stub_%s.map' % (build_dir, stub), target)
- env.DistributeAs('Stubs/%s%s' % (compression, suffix), target)
+ env.DistributeStubs(target, names=compression+suffix)
defenv.Alias(compression, target)
defenv.Alias('stubs', target)
@@ -285,7 +364,7 @@ for stub in stubs:
BuildStub(stub, False)
BuildStub(stub, True)
-defenv.DistributeAs('Stubs/uninst', 'Source/exehead/uninst.ico')
+defenv.DistributeStubs('Source/exehead/uninst.ico',names='uninst')
######################################################################
####### makensis ###
@@ -300,8 +379,7 @@ makensis_env.SideEffect('%s/makensis.map' % build_dir, makensis)
defenv.Alias('makensis', makensis)
-ins = defenv.Distribute('', makensis)
-defenv.Alias('install-compiler', ins)
+ins = defenv.DistributeBin(makensis,alias='install-compiler')
######################################################################
####### Common Functions ###
@@ -331,9 +409,9 @@ def CleanMap(env, target, target_name):
def DistributeExtras(env, target, examples, docs):
if examples:
- env.DistributeExamples(target, examples)
+ env.DistributeExamples(examples, path=target)
if docs:
- env.DistributeDocs(target, docs)
+ env.DistributeDocs(docs, path=target)
######################################################################
####### Plug-ins ###
@@ -360,7 +438,11 @@ def BuildPlugin(target, source, libs, examples = None, docs = None,
CleanMap(env, plugin, target)
- env.Distribute('Plugins', plugin)
+ for i in plugin:
+ if str(i)[-4:].lower() == '.dll':
+ plugin = i
+ break
+ env.DistributePlugin(plugin)
DistributeExtras(env, target, examples, docs)
@@ -380,8 +462,9 @@ for plugin in plugins:
def BuildUtil(target, source, libs, entry = None, res = None,
resources = None, defines = None, flags = None,
- nodeflib = False, install = None, install_as = None,
- examples = None, docs = None, cross_platform = False):
+ nodeflib = False, file_name = '', path='', contrib = False,
+ examples = None, docs = None, cross_platform = False,
+ root_util = False):
if not cross_platform:
env = util_env.Copy()
else:
@@ -391,6 +474,9 @@ def BuildUtil(target, source, libs, entry = None, res = None,
AppendRES(env, source, res, resources)
+ if file_name != '':
+ target = "%s/%s" % (target, file_name)
+
util = env.Program(target, source, LIBS = libs)
defenv.Alias(target, util)
defenv.Alias('utils', util)
@@ -399,13 +485,12 @@ def BuildUtil(target, source, libs, entry = None, res = None,
CleanMap(env, util, target)
- if install is not None:
- ins = env.Distribute(install, util)
- defenv.Alias('install-utils', ins)
-
- if install_as is not None:
- ins = env.DistributeAs(install_as, util)
- defenv.Alias('install-utils', ins)
+ if contrib:
+ ins = env.DistributeContrib(util, path=path, alias='install-utils')
+ elif cross_platform and not env['PLATFORM'] == 'win32' or root_util and env['PLATFORM'] == 'win32':
+ ins = env.DistributeBin(util, path=path, alias='install-utils')
+ else:
+ ins = env.DistributeW32Bin(util, path=path, alias='install-utils')
DistributeExtras(env, target, examples, docs)
@@ -496,6 +581,8 @@ defenv.Ignore('$BUILD_PREFIX', '$BUILD_PREFIX/tests')
# test scripts
test_env = defenv.Copy(ENV = os.environ) # env needed for some scripts
+test_env['ENV']['NSISDIR'] = os.path.abspath(str(defenv['TESTDISTDIR']))
+test_env['ENV']['NSISCONFDIR'] = os.path.abspath(str(defenv['TESTDISTDIR']))
def test_scripts(target, source, env):
from os import walk, sep
diff --git a/Source/build.cpp b/Source/build.cpp
index a07d0bf4..2d96ddfa 100644
--- a/Source/build.cpp
+++ b/Source/build.cpp
@@ -243,6 +243,10 @@ definedlist.add("NSIS_SUPPORT_LANG_IN_STRINGS");
definedlist.add("NSIS_FIX_DEFINES_IN_STRINGS");
#endif
+#ifdef NSIS_CONFIG_CONST_DATA_PATH
+ definedlist.add("NSIS_CONFIG_CONST_DATA_PATH");
+#endif
+
db_opt_save=db_comp_save=db_full_size=db_opt_save_u=db_comp_save_u=db_full_size_u=0;
// Added by Amir Szekely 31st July 2002
@@ -463,18 +467,24 @@ definedlist.add("NSIS_SUPPORT_LANG_IN_STRINGS");
void CEXEBuild::initialize(const char *makensis_path)
{
- string nsis_dir = get_executable_dir(makensis_path);
-
- definedlist.add("NSISDIR",nsis_dir.c_str());
+ string nsis_dir;
+ const char *dir = getenv("NSISDIR");
+ if (dir) nsis_dir = dir;
+ else {
+#ifndef NSIS_CONFIG_CONST_DATA_PATH
+ nsis_dir = get_executable_dir(makensis_path);
+#else
+ nsis_dir = CONST_STR(PREFIX_DATA);
+#endif
+ }
+ definedlist.add("NSISDIR", nsis_dir.c_str());
string includes_dir = nsis_dir;
- includes_dir += PLATFORM_PATH_SEPARATOR_STR;
- includes_dir += "Include";
+ includes_dir += PLATFORM_PATH_SEPARATOR_STR"Include";
include_dirs.add(includes_dir.c_str(),0);
stubs_dir = nsis_dir;
- stubs_dir += PLATFORM_PATH_SEPARATOR_STR;
- stubs_dir += "Stubs";
+ stubs_dir += PLATFORM_PATH_SEPARATOR_STR"Stubs";
if (set_compressor("zlib", false) != PS_OK)
{
@@ -3156,19 +3166,11 @@ void CEXEBuild::build_plugin_table(void)
plugin_used = false;
uninst_plugin_used = false;
- char* nsisdir = definedlist.find("NSISDIR");
- if (nsisdir)
- {
- char* searchPath = new char [strlen(nsisdir)+9];
- if (searchPath)
- {
- sprintf(searchPath,"%s" PLATFORM_PATH_SEPARATOR_STR "Plugins",nsisdir);
- INFO_MSG("Processing plugin dlls: \"%s" PLATFORM_PATH_SEPARATOR_STR "*.dll\"\n",searchPath);
- m_plugins.FindCommands(searchPath, display_info?true:false);
- INFO_MSG("\n");
- delete[] searchPath;
- }
- }
+ string searchPath = definedlist.find("NSISDIR");
+ searchPath += PLATFORM_PATH_SEPARATOR_STR"Plugins";
+ INFO_MSG("Processing plugin dlls: \"%s" PLATFORM_PATH_SEPARATOR_STR "*.dll\"\n",searchPath.c_str());
+ m_plugins.FindCommands(searchPath, display_info?true:false);
+ INFO_MSG("\n");
}
#define FLAG_OFFSET(flag) (FIELD_OFFSET(exec_flags, flag)/sizeof(int))
diff --git a/Source/makenssi.cpp b/Source/makenssi.cpp
index 2eff9c67..1cdd6569 100644
--- a/Source/makenssi.cpp
+++ b/Source/makenssi.cpp
@@ -390,8 +390,17 @@ int main(int argc, char **argv)
if (!g_noconfig)
{
g_noconfig=1;
-
- string main_conf = get_executable_dir(argv[0]) + PLATFORM_PATH_SEPARATOR_STR + "nsisconf.nsh";
+ string main_conf;
+ char* env_var = getenv("NSISCONFDIR");
+ if(env_var == NULL)
+#ifndef NSIS_CONFIG_CONST_DATA_PATH
+ main_conf = get_executable_dir(argv[0]);
+#else
+ main_conf = CONST_STR(PREFIX_CONF);
+#endif
+ else main_conf = env_var;
+ main_conf += PLATFORM_PATH_SEPARATOR_STR;
+ main_conf += "nsisconf.nsh";
if (process_config(build, main_conf))
return 1;