? .sconf_temp ? .sconsign.dblite ? .test ? ChangeLog ? build ? config.log ? debian ? nsis-07-Jan-2006.cvs.zip ? SCons/Tools/crossmingw.pyc 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 7 Jan 2006 08:16:19 -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 7 Jan 2006 08:16:20 -0000 @@ -56,6 +56,11 @@ 'VPatch' ] +doc = [ + 'TODO.txt', + 'license.txt' +] + defenv = Environment() Export('defenv') @@ -79,6 +84,29 @@ opts = Options() +install_dirs={ + 'win32': { + 'dest': '', + 'prefix': '', + 'conf': '', + 'bin': '', + 'data': '', + 'doc': '', + },'default':{ + 'dest': '', + 'prefix': '/usr/local', + 'conf': '$PREFIX/etc', + 'bin': '$PREFIX/bin', + 'data': '$PREFIX/share/nsis', + 'doc': '$PREFIX/share/doc/nsis', + } +} + +if defenv['PLATFORM'] == 'win32': + dirs = install_dirs['win32'] +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 +114,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 +128,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 +158,64 @@ 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.has_key('PREFIX') and defenv['PREFIX']: - ins = defenv.Install('$PREFIX/%s' % dir, files) - return ins - - return [] +for define in ('PREFIX_CONF', 'PREFIX_DATA'): + defenv.Append(NSIS_CPPDEFINES = [(define, '"'+defenv[define]+'"')]) -def DistributeAs(path, file): - defenv.InstallAs('$ZIPDISTDIR/%s' % path, file) - defenv.InstallAs('$INSTDISTDIR/%s' % path, file) - defenv.InstallAs('$TESTDISTDIR/%s' % path, file) - - if defenv.has_key('PREFIX') and defenv['PREFIX']: - ins = defenv.InstallAs('$PREFIX/%s' % path, file) - return ins - - return [] +def Distribute(files, names, component, path, subpath, alias, install_alias=None): + if names == []: + for d in ('$ZIPDISTDIR', '$INSTDISTDIR', '$TESTDISTDIR'): + defenv.Install( os.path.join(d, path, subpath), files) + ins = defenv.Install( os.path.join('$PREFIX_DEST','$PREFIX_%s'%component.upper(), path, subpath), files) + else: + if isinstance(names, str): + names = [names] + for d in ('$ZIPDISTDIR', '$INSTDISTDIR', '$TESTDISTDIR'): + dir = os.path.join(d, path, subpath) + installed_files = map(lambda x: os.path.join(dir, x), names) + defenv.InstallAs( installed_files, files) + dir = os.path.join('$PREFIX_DEST','$PREFIX_%s'%component.upper(), path) + installed_files = map(lambda x: os.path.join(dir, x), names) + ins = defenv.InstallAs( installed_files, files) + defenv.Alias('install', ins ) + defenv.Alias('install-'+component, ins) + if alias is not None: + defenv.Alias( alias, ins ) + if install_alias is not None: + defenv.Alias( 'install-'+install_alias, ins ) + return ins + +def DistributeBin(files, names=[], path='', alias=None): + return defenv.Distribute(files, names, 'bin', '', path, alias) + +def DistributeConf(files, names=[], path='', alias=None): + return defenv.Distribute(files, names, 'conf', '', path, alias) + +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') + +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 +227,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 +273,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 +282,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 +316,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 +341,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 +353,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 +368,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 +398,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 +427,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,7 +451,7 @@ def BuildUtil(target, source, libs, entry = None, res = None, resources = None, defines = None, flags = None, - nodeflib = False, install = None, install_as = None, + nodeflib = False, file_name = '', path='', contrib = False, examples = None, docs = None, cross_platform = False): if not cross_platform: env = util_env.Copy() @@ -391,6 +462,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 +473,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: + 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 +569,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 7 Jan 2006 08:16:20 -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 7 Jan 2006 08:16:20 -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 7 Jan 2006 08:16:20 -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 7 Jan 2006 08:16:20 -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 7 Jan 2006 08:16:20 -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 7 Jan 2006 08:16:20 -0000 @@ -53,7 +53,6 @@ res = res, resources = resources, entry = 'WinMain', - install = '', defines = ['WIN32_MEAN_AND_LEAN', 'RELEASE=2.0'], docs = docs ) Index: Contrib/Modern UI/Readme.html =================================================================== RCS file: /cvsroot/nsis/NSIS/Contrib/Modern UI/Readme.html,v retrieving revision 1.148 diff -u -r1.148 Readme.html --- Contrib/Modern UI/Readme.html 2 Dec 2005 12:04:35 -0000 1.148 +++ Contrib/Modern UI/Readme.html 7 Jan 2006 08:16:22 -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 7 Jan 2006 08:16:24 -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 7 Jan 2006 08:16:25 -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 7 Jan 2006 08:16:25 -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 7 Jan 2006 08:16:25 -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 7 Jan 2006 08:16:25 -0000 @@ -399,6 +399,14 @@ ) ) +cfg.Add( + BoolOption( + 'NSIS_CONFIG_RELOCATABLE_PATHS', + 'determines if plugins, includes, stubs etc are located at runtime based on the location of the compiler (only available on Win32).', + 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_RELOCATABLE_PATHS') 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 7 Jan 2006 08:16:28 -0000 @@ -243,6 +243,10 @@ definedlist.add("NSIS_FIX_DEFINES_IN_STRINGS"); #endif +#ifdef NSIS_CONFIG_RELOCATABLE_PATHS + definedlist.add("NSIS_CONFIG_RELOCATABLE_PATHS"); +#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 { +#ifdef NSIS_CONFIG_RELOCATABLE_PATHS + 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.70 diff -u -r1.70 makenssi.cpp --- Source/makenssi.cpp 2 Jul 2005 16:49:31 -0000 1.70 +++ Source/makenssi.cpp 7 Jan 2006 08:16:29 -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 ) +#ifdef NSIS_CONFIG_RELOCATABLE_PATHS + 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;