diff options
author | mpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-08 21:24:55 +0000 |
---|---|---|
committer | mpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-08 21:24:55 +0000 |
commit | 5514903c95d657d5cf912dd037a661feb246a4f1 (patch) | |
tree | d12f7ebae4663476676318a7a19fcc672a466b05 /gears/SConscript.installers | |
parent | 9ecab85317b126cde2d20146d9789032881d74e2 (diff) | |
download | chromium_src-5514903c95d657d5cf912dd037a661feb246a4f1.zip chromium_src-5514903c95d657d5cf912dd037a661feb246a4f1.tar.gz chromium_src-5514903c95d657d5cf912dd037a661feb246a4f1.tar.bz2 |
Add win32 installer to Gears SConscripts.
Review URL: http://codereview.chromium.org/6591
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@3054 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gears/SConscript.installers')
-rw-r--r-- | gears/SConscript.installers | 126 |
1 files changed, 112 insertions, 14 deletions
diff --git a/gears/SConscript.installers b/gears/SConscript.installers index 7196893..9d81681 100644 --- a/gears/SConscript.installers +++ b/gears/SConscript.installers @@ -3,13 +3,19 @@ # found in the LICENSE file. import os +import re +import subprocess Import('env') env = env.Clone( INSTALLER_BASEDIR = 'installers', INSTALLER_BASENAME = 'gears-${OS}-${MODE}-${VERSION}', - FF_INSTALLER = '$INSTALLER_BASEDIR/${INSTALLER_BASENAME}.xpi', + FF_XPI = '$INSTALLER_BASEDIR/${INSTALLER_BASENAME}.xpi', + WIN32_INSTALLER_MSI = '$INSTALLER_BASEDIR/${INSTALLER_BASENAME}.msi', + + FF2_MODULE = '${SHLIBPREFIX}gears_ff2${SHLIBSUFFIX}', + MODULE = '${SHLIBPREFIX}gears${SHLIBSUFFIX}', # Qualify our OUTDIRs relative to the SConscript files. This is for use # with Copy(), which runs from that dir. @@ -35,6 +41,89 @@ common_resources = [ '$OPEN_DIR/ui/common/location_data.png', ] +def Shell(cmd): + """Execute a shell command and return the output.""" + cmd[0] = env.Entry(cmd[0]).abspath + cmd = env.subst(cmd) + return subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE).communicate()[0] + +if env['OS'] == 'win32': + def GGUIDGen(value): + """Generate a GGUID for the given value.""" + return Shell(['$GGUIDGEN', '$NAMESPACE_GUID', value + '-$VERSION']) + env.Replace( + GGUIDGEN = '#/$OPEN_DIR/tools/gguidgen.exe', + NAMESPACE_GUID = '36F65206-5D4E-4752-9D52-27708E10DA79', +# MSI version numbers must have the form <major>.<minor>.<build>. To meet this, +# we combine our build and patch version numbers like so: +# MSI_VERSION = <major>.<minor>.<BUILD * 100 + PATCH>. +# Note: This assumes that the BUILD and PATCH variables adhere to the range +# requirements in version.mk. See comments in version.mk for more details. + MSI_BUILD = eval(env.subst('$BUILD * 100 + $PATCH')), + MSI_VERSION = '${MAJOR}.${MINOR}.${MSI_BUILD}', + ) + + # You can change the names of PRODUCT_ID vars, but NEVER change their values! + + # Building wxiobjs with candle + env.Replace( + CANDLEDEFPREFIX = '-d', + CANDLEDEFSUFFIX = '', + _CANDLEDEFFLAGS = ('${_defines(CANDLEDEFPREFIX, CANDLEDEFINES, ' + 'CANDLEDEFSUFFIX, __env__)}'), + CANDLECOM = 'candle.exe -out $TARGET $SOURCE ${_CANDLEDEFFLAGS}', + ) + env.Append( +# Note: Since light.exe is run from $OPEN_DIR, candle.exe must generate +# output with paths relative to that dir. + SCONS_DIR = '../../../..', # the scons dir relative to OPEN_DIR + CANDLEDEFINES = [ + ('OurWin32ProductId', + GGUIDGen('OUR_PRODUCT_ID')), + ('OurComponentGUID_FFComponentsDirFiles', + GGUIDGen('OUR_COMPONENT_GUID_FF_COMPONENTS_DIR_FILES')), + ('OurComponentGUID_FFContentDirFiles', + GGUIDGen('OUR_COMPONENT_GUID_FF_CONTENT_DIR_FILES')), + ('OurComponentGUID_FFDirFiles', + GGUIDGen('OUR_COMPONENT_GUID_FF_DIR_FILES')), + ('OurComponentGUID_FFLibDirFiles', + GGUIDGen('OUR_COMPONENT_GUID_FF_LIB_DIR_FILES')), + ('OurComponentGUID_FFRegistry', + GGUIDGen('OUR_COMPONENT_GUID_FF_REGISTRY')), + ('OurComponentGUID_IEFiles', + GGUIDGen('OUR_COMPONENT_GUID_IE_FILES')), + ('OurComponentGUID_IERegistry', + GGUIDGen('OUR_COMPONENT_GUID_IE_REGISTRY')), + ('OurComponentGUID_SharedFiles', + GGUIDGen('OUR_COMPONENT_GUID_SHARED_FILES')), + ('OurComponentGUID_SharedVersionedFiles', + GGUIDGen('OUR_COMPONENT_GUID_SHARED_VERSIONED_FILES')), + ('OurComponentGUID_SharedRegistry', + GGUIDGen('OUR_COMPONENT_GUID_SHARED_REGISTRY')), + ('OurNpapiProductId', + GGUIDGen('OUR_2ND_PRODUCT_ID')), + ('OurComponentGUID_NpapiFiles', + GGUIDGen('OUR_COMPONENT_GUID_NPAPI_FILES')), + ('OurComponentGUID_NpapiRegistry', + GGUIDGen('OUR_COMPONENT_GUID_NPAPI_REGISTRY')), + ('OurMsiVersion', '$MSI_VERSION'), + ('OurCommonPath', '$SCONS_DIR/$COMMON_OUTDIR'), + ('OurIEPath', '$SCONS_DIR/$IE_OUTDIR'), + ('OurIpcTestPath', '$SCONS_DIR/$BASE_OUTDIR/ipc_test'), # TODO + ('OurFFPath', + '$SCONS_DIR/$BASE_OUTDIR/$INSTALLER_BASEDIR/$INSTALLER_BASENAME'), + ('OurNpapiPath', '$SCONS_DIR/$NPAPI_OUTDIR'), + ] + ) + wix_langs = [re.sub('-', '_', lang) for lang in env['I18N_LANGS']] + env.Append( + CANDLEDEFINES = + [('OurComponentGUID_FFLang' + lang + 'DirFiles', + GGUIDGen('OUR_COMPONENT_GUID_FF_' + lang + '_DIR_FILES')) + for lang in wix_langs], + ) + def IsDir(path): """Test if path (relative to the toplevel dir) is a directory.""" path = env.Entry("#/" + path).abspath @@ -84,10 +173,8 @@ def FirefoxInstaller(env): ('components/', ['$FF3_OUTDIR/gears.xpt', '$OPEN_DIR/base/firefox/static_files/components/bootstrap.js']), - ('components/${SHLIBPREFIX}gears_ff2${SHLIBSUFFIX}', - ['$FF2_OUTDIR/${SHLIBPREFIX}gears${SHLIBSUFFIX}']), - ('components/${SHLIBPREFIX}gears${SHLIBSUFFIX}', - ['$FF3_OUTDIR/${SHLIBPREFIX}gears${SHLIBSUFFIX}']), + ('components/$FF2_MODULE', ['$FF2_OUTDIR/$MODULE']), + ('components/$MODULE', ['$FF3_OUTDIR/$MODULE']), ] if env['OS'] != 'win32': @@ -123,15 +210,26 @@ def FirefoxInstaller(env): '(cd ${TARGET.base} && zip -r ../${TARGET.file} .)' ] - return env.Command('$FF_INSTALLER', srcs, actions) - -def Win32Installer(env): - env.Command('$WIN32_INSTALLER', [], - 'light.exe -out $TARGET $SOURCE') - - + return env.Command('$FF_XPI', srcs, actions) env.AddMethod(FirefoxInstaller, 'FirefoxInstaller') +def Win32Installer(env): + wxiobj = env.Command( + StripOutdir(['$IE_OUTDIR/$GENFILES_DIR/win32_msi.wxiobj']), + StripOutdir(['$IE_OUTDIR/$GENFILES_DIR/win32_msi.wxs']), + '$CANDLECOM') + # light.exe must be run from $OPEN_DIR + msi = env.Command('$WIN32_INSTALLER_MSI', wxiobj, + 'cd $OPEN_DIR && light.exe -out ${TARGET.abspath} ${SOURCE.abspath}') + env.Depends(msi, '$FF_XPI') + env.Depends(msi, StripOutdir(['$IE_OUTDIR/$MODULE'])) + return msi +env.AddMethod(Win32Installer, 'Win32Installer') + +installers = [] if 'FF3' in env['VALID_BROWSERS']: - installer = env.FirefoxInstaller() - env.Alias('gears-installers', installer) + installers += env.FirefoxInstaller() +if env['OS'] in 'win32': + installers += env.Win32Installer() + +env.Alias('gears-installers', installers) |