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
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
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.
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