Index: INSTALL =================================================================== RCS file: /cvsroot/nsis/NSIS/INSTALL,v retrieving revision 1.5 diff -u -r1.5 INSTALL --- INSTALL 9 Nov 2005 08:41:00 -0000 1.5 +++ INSTALL 20 Jan 2006 14:13:35 -0000 @@ -53,6 +53,15 @@ 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: Index: SConstruct =================================================================== RCS file: /cvsroot/nsis/NSIS/SConstruct,v retrieving revision 1.57 diff -u -r1.57 SConstruct --- SConstruct 17 Dec 2005 13:54:34 -0000 1.57 +++ SConstruct 20 Jan 2006 15:30:34 -0000 @@ -56,6 +56,11 @@ 'VPatch' ] +doc = [ + 'TODO.txt', + 'license.txt' +] + defenv = Environment() Export('defenv') @@ -79,6 +84,30 @@ 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_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 @@ # 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('$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') + +def DistributeStubs(files, names=[], path='', alias=None): + return defenv.Distribute(files, names, 'data', 'Stubs', path, alias, 'stubs') + +def DistributePlugin(files, names=[], path='', alias=None): + return defenv.Distribute(files, names, 'data', 'Plugins', path, alias, 'plugins') + +def DistributeContrib(files, names=[], path='', alias=None): + return defenv.Distribute(files, names, 'data', 'Contrib', path, alias, 'contrib') + +def DistributeMenu(files, names=[], path='', alias=None): + return defenv.Distribute(files, names, 'data', 'Menu', path, alias, 'menu') - return [] +def DistributeInclude(files, names=[], path='', alias=None): + return defenv.Distribute(files, names, 'data', 'Include', path, alias, 'includes') -def DistributeExamples(dir, examples): - return Distribute('Examples/%s' % dir, examples) +def DistributeDoc(files, names=[], path='', alias=None): + return defenv.Distribute(files, names, 'doc', '', path, alias) -def DistributeDocs(dir, docs): - return Distribute('Docs/%s' % dir, docs) +def DistributeDocs(files, names=[], path='', alias=None): + return defenv.Distribute(files, names, 'doc', 'Docs', path, alias, 'docs') -def DistributeContribs(dir, contribs): - return Distribute('Contrib/%s' % dir, contribs) +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 @@ 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 @@ -203,22 +284,6 @@ 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 @@ 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 @@ ####### 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 @@ 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 @@ 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 @@ 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 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ # 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 Index: Contrib/Graphics/SConscript =================================================================== RCS file: /cvsroot/nsis/NSIS/Contrib/Graphics/SConscript,v retrieving revision 1.1 diff -u -r1.1 SConscript --- Contrib/Graphics/SConscript 30 Apr 2005 18:04:55 -0000 1.1 +++ Contrib/Graphics/SConscript 20 Jan 2006 14:13:35 -0000 @@ -78,7 +78,7 @@ 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) Index: Contrib/Language files/SConscript =================================================================== RCS file: /cvsroot/nsis/NSIS/Contrib/Language files/SConscript,v retrieving revision 1.4 diff -u -r1.4 SConscript --- Contrib/Language files/SConscript 11 Aug 2005 15:58:38 -0000 1.4 +++ Contrib/Language files/SConscript 20 Jan 2006 14:13:47 -0000 @@ -52,4 +52,4 @@ Import('defenv') -defenv.DistributeContribs('Language files', languages) +defenv.DistributeContrib(languages, path='Language files') Index: Contrib/Library/LibraryLocal/SConscript =================================================================== RCS file: /cvsroot/nsis/NSIS/Contrib/Library/LibraryLocal/SConscript,v retrieving revision 1.1 diff -u -r1.1 SConscript --- Contrib/Library/LibraryLocal/SConscript 16 Apr 2005 18:48:50 -0000 1.1 +++ Contrib/Library/LibraryLocal/SConscript 20 Jan 2006 14:13:47 -0000 @@ -12,4 +12,4 @@ Import('BuildUtil') -BuildUtil(target, files, libs, flags = ['$EXCEPTION_FLAG'], install = 'Bin') +BuildUtil(target, files, libs, flags = ['$EXCEPTION_FLAG']) Index: Contrib/Library/RegTool/SConscript =================================================================== RCS file: /cvsroot/nsis/NSIS/Contrib/Library/RegTool/SConscript,v retrieving revision 1.3 diff -u -r1.3 SConscript --- Contrib/Library/RegTool/SConscript 17 Sep 2005 08:50:41 -0000 1.3 +++ Contrib/Library/RegTool/SConscript 20 Jan 2006 14:13:47 -0000 @@ -14,4 +14,4 @@ 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') Index: Contrib/MakeLangId/SConscript =================================================================== RCS file: /cvsroot/nsis/NSIS/Contrib/MakeLangId/SConscript,v retrieving revision 1.2 diff -u -r1.2 SConscript --- Contrib/MakeLangId/SConscript 22 Oct 2005 12:05:33 -0000 1.2 +++ Contrib/MakeLangId/SConscript 20 Jan 2006 14:13:47 -0000 @@ -19,5 +19,5 @@ Import('BuildUtil') -BuildUtil(target, files, libs, res = res, resources = resources, entry = 'WinMain', install = 'Bin') +BuildUtil(target, files, libs, res = res, resources = resources, entry = 'WinMain') Index: Contrib/Makensisw/SConscript =================================================================== RCS file: /cvsroot/nsis/NSIS/Contrib/Makensisw/SConscript,v retrieving revision 1.4 diff -u -r1.4 SConscript --- Contrib/Makensisw/SConscript 19 Jun 2005 11:20:15 -0000 1.4 +++ Contrib/Makensisw/SConscript 20 Jan 2006 15:12:46 -0000 @@ -53,7 +53,7 @@ res = res, resources = resources, entry = 'WinMain', - install = '', defines = ['WIN32_MEAN_AND_LEAN', 'RELEASE=2.0'], - docs = docs + docs = docs, + root_util = True ) Index: Contrib/Modern UI/Readme.html =================================================================== RCS file: /cvsroot/nsis/NSIS/Contrib/Modern UI/Readme.html,v retrieving revision 1.149 diff -u -r1.149 Readme.html --- Contrib/Modern UI/Readme.html 20 Jan 2006 12:36:30 -0000 1.149 +++ Contrib/Modern UI/Readme.html 20 Jan 2006 14:13:55 -0000 @@ -364,12 +364,12 @@ "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

Open/Close sectionConfiguration 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. Index: Docs/src/usage.but =================================================================== RCS file: /cvsroot/nsis/NSIS/Docs/src/usage.but,v retrieving revision 1.12 diff -u -r1.12 usage.but --- Docs/src/usage.but 23 Jul 2005 10:29:14 -0000 1.12 +++ Docs/src/usage.but 20 Jan 2006 14:21:58 -0000 @@ -19,7 +19,7 @@ \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 @@ \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: Index: Docs/src/var.but =================================================================== RCS file: /cvsroot/nsis/NSIS/Docs/src/var.but,v retrieving revision 1.35 diff -u -r1.35 var.but --- Docs/src/var.but 16 Sep 2005 11:27:51 -0000 1.35 +++ Docs/src/var.but 20 Jan 2006 14:21:58 -0000 @@ -77,7 +77,9 @@ \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} Index: Examples/SConscript =================================================================== RCS file: /cvsroot/nsis/NSIS/Examples/SConscript,v retrieving revision 1.6 diff -u -r1.6 SConscript --- Examples/SConscript 28 Jul 2005 17:58:35 -0000 1.6 +++ Examples/SConscript 20 Jan 2006 14:21:58 -0000 @@ -42,5 +42,5 @@ Import('env') -env.DistributeExamples('', examples) -env.DistributeExamples('Modern UI', mui_examples) +env.DistributeExamples(examples) +env.DistributeExamples(mui_examples, path='Modern UI') Index: Include/SConscript =================================================================== RCS file: /cvsroot/nsis/NSIS/Include/SConscript,v retrieving revision 1.2 diff -u -r1.2 SConscript --- Include/SConscript 21 Jun 2005 17:43:36 -0000 1.2 +++ Include/SConscript 20 Jan 2006 14:21:58 -0000 @@ -14,5 +14,5 @@ Import('env') -env.Distribute('Include', includes) -env.DistributeDocs('StrFunc', 'StrFunc.txt') +env.DistributeInclude(includes) +env.DistributeDocs('StrFunc.txt', path='StrFunc') Index: SCons/config.py =================================================================== RCS file: /cvsroot/nsis/NSIS/SCons/config.py,v retrieving revision 1.3 diff -u -r1.3 config.py --- SCons/config.py 16 Oct 2005 12:50:29 -0000 1.3 +++ SCons/config.py 20 Jan 2006 14:42:51 -0000 @@ -399,6 +399,14 @@ ) ) +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_LOCKWINDOW_SUPPORT') AddBoolDefine('NSIS_CONFIG_PLUGIN_SUPPORT') AddBoolDefine('NSIS_FIX_COMMENT_HANDLING') +AddBoolDefine('NSIS_CONFIG_CONST_DATA_PATH') Index: Source/build.cpp =================================================================== RCS file: /cvsroot/nsis/NSIS/Source/build.cpp,v retrieving revision 1.194 diff -u -r1.194 build.cpp --- Source/build.cpp 9 Dec 2005 13:15:21 -0000 1.194 +++ Source/build.cpp 20 Jan 2006 14:43:24 -0000 @@ -243,6 +243,10 @@ 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 @@ 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 @@ 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)) Index: Source/makenssi.cpp =================================================================== RCS file: /cvsroot/nsis/NSIS/Source/makenssi.cpp,v retrieving revision 1.71 diff -u -r1.71 makenssi.cpp --- Source/makenssi.cpp 20 Jan 2006 12:36:30 -0000 1.71 +++ Source/makenssi.cpp 20 Jan 2006 14:43:46 -0000 @@ -390,8 +390,17 @@ 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;