diff options
author | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-08 00:05:26 +0000 |
---|---|---|
committer | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-08 00:05:26 +0000 |
commit | c1a3747e37f843500dedb1ba8483598c0b10a788 (patch) | |
tree | 8b9c0a9494f9d4803cb7ad23ecdfa7969ae70a4e /gears/SConscript.dll | |
parent | 91d192155b5eb22ea22c48d7cd735aee93d5e568 (diff) | |
download | chromium_src-c1a3747e37f843500dedb1ba8483598c0b10a788.zip chromium_src-c1a3747e37f843500dedb1ba8483598c0b10a788.tar.gz chromium_src-c1a3747e37f843500dedb1ba8483598c0b10a788.tar.bz2 |
Add Firefox installer support to Gears SConscripts.
Review URL: http://codereview.chromium.org/5674
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@2982 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gears/SConscript.dll')
-rw-r--r-- | gears/SConscript.dll | 85 |
1 files changed, 58 insertions, 27 deletions
diff --git a/gears/SConscript.dll b/gears/SConscript.dll index ed57916..d5e023d 100644 --- a/gears/SConscript.dll +++ b/gears/SConscript.dll @@ -7,10 +7,7 @@ import re Import('env') -env = env.Clone( - # The source directory relative to the build directory. - SRC_DIR = '../../../..', -) +env = env.Clone() # TODO: move all these builders out to site_scons or somesuch. # Building M4 files @@ -90,7 +87,7 @@ env.Append( ], M4PATH = [ '$OPEN_DIR', - '$GEARS_DIR', + '.', ], ) @@ -139,9 +136,9 @@ env.Append(BUILDERS = {'Stab': stab_builder}) # Must be run from within the gears dir. More hoops to jump through to fix up # path names and arguments. env.Replace( -# OPEN_DIR looks like "./foo/bar", but we want the length of "foo/bar/". +# len() + 1 to include trailing '/' # TODO: is there a better way to strip off $OPEN_DIR from $SOURCE? - LEN_OPEN_DIR = len(env.subst('$OPEN_DIR')) - 1, + LEN_OPEN_DIR = len(os.path.normpath(env.subst('$OPEN_DIR'))) + 1, BIN2CPP = 'cd $OPEN_DIR && python tools/bin2cpp.py', BIN2CPPCOM = '$BIN2CPP ${str(SOURCE)[LEN_OPEN_DIR:]} > ${TARGET.abspath}', ) @@ -158,7 +155,8 @@ env.Tool('midl') if env['BROWSER'] == 'IE': env.Replace( - IDLINCPREFIX = '/I$SRC_DIR', + SCONS_DIR = '../../../..', # the scons dir relative to OPEN_DIR + IDLINCPREFIX = '/I$SCONS_DIR', IDLINCSUFFIX = '', _IDLINCFLAGS = ('${_concat(IDLINCPREFIX, CPPPATH, IDLINCSUFFIX, ' '__env__, RDirs, TARGET, SOURCE)}'), @@ -169,12 +167,12 @@ if env['BROWSER'] == 'IE': MIDLCOM = ( 'cd $OPEN_DIR && ' '$MIDL ${_IDLDEFFLAGS} ${_IDLINCFLAGS} -env win32 -Oicf ' - '/tlb $SRC_DIR/${TARGET.base}.tlb ' - '/h $SRC_DIR/${TARGET.base}.h ' - '/iid $SRC_DIR/${TARGET.base}_i.c ' - '/proxy $SRC_DIR/${TARGET.base}_p.c ' - '/dlldata $SRC_DIR/${TARGET.base}_data.c ' - '$SRC_DIR/$SOURCE' + '/tlb $SCONS_DIR/${TARGET.base}.tlb ' + '/h $SCONS_DIR/${TARGET.base}.h ' + '/iid $SCONS_DIR/${TARGET.base}_i.c ' + '/proxy $SCONS_DIR/${TARGET.base}_p.c ' + '/dlldata $SCONS_DIR/${TARGET.base}_data.c ' + '$SCONS_DIR/$SOURCE' ), ) elif env['BROWSER'] in ['FF2', 'FF3']: @@ -194,9 +192,8 @@ elif env['BROWSER'] in ['FF2', 'FF3']: else: env['GECKO_BASE'] = '$THIRD_PARTY_DIR/gecko_1.9' - env.PrependENVPath('PATH', env.Dir('$SRC_DIR/$GECKO_BIN').abspath) + env.PrependENVPath('PATH', env.Dir('#/$GECKO_BIN').abspath) -import SCons.Builder def MyIdlEmitter(target, source, env): """Produce the list of outputs generated by our IDL compiler. Outputs differ depending on whether we're using xpidl (Firefox) or midl (IE).""" @@ -216,6 +213,17 @@ env['BUILDERS']['TypeLibrary'] = copy.copy(env['BUILDERS']['TypeLibrary']) env['BUILDERS']['TypeLibrary'].emitter = MyIdlEmitter +# Building .xpt files. + +if env['BROWSER'] in ['FF2', 'FF3']: + env.Replace( + XPTLINK = 'xpt_link', + XPTLINKCOM = '$XPTLINK $TARGET $SOURCES', + ) + xpt_builder = Builder(action = '$XPTLINKCOM', src_suffix = '.xpt') + env.Append(BUILDERS = {'XptLink': xpt_builder}) + + # C++ defines env_common = env.Clone() @@ -387,6 +395,7 @@ def NewInputs(): srcs = NewInputs() m4srcs = NewInputs() html_m4srcs = NewInputs() +i18n_m4srcs = NewInputs() stabsrcs = NewInputs() idlsrcs = NewInputs() binsrcs = NewInputs() @@ -823,6 +832,11 @@ html_m4srcs['all'] += [ '$OPEN_DIR/ui/common/shortcuts_dialog.html_m4', ] +i18n_m4srcs['FF3'] += [ + '$OPEN_DIR/ui/generated/' + lang + '/i18n.dtd.m4' + for lang in i18n_langs +] + #TODO: $(IE_OUTDIR)/string_table.res #----------------------------------------------------------------------------- @@ -1167,6 +1181,7 @@ elif env['BROWSER'] == 'IE': srcs['FF2'] += srcs['FF3'] m4srcs['FF2'] += m4srcs['FF3'] html_m4srcs['FF2'] += html_m4srcs['FF3'] +i18n_m4srcs['FF2'] += i18n_m4srcs['FF3'] stabsrcs['FF2'] += stabsrcs['FF3'] idlsrcs['FF2'] += idlsrcs['FF3'] binsrcs['FF2'] += binsrcs['FF3'] @@ -1175,6 +1190,7 @@ binsrcs['FF2'] += binsrcs['FF3'] srcs['all'] += srcs[env['BROWSER']] m4srcs['all'] += m4srcs[env['BROWSER']] html_m4srcs['all'] += html_m4srcs[env['BROWSER']] +i18n_m4srcs['all'] += i18n_m4srcs[env['BROWSER']] stabsrcs['all'] += stabsrcs[env['BROWSER']] idlsrcs['all'] += idlsrcs[env['BROWSER']] binsrcs['all'] += binsrcs[env['BROWSER']] @@ -1187,11 +1203,9 @@ def PatternRule(target, source, env=env): # genfiles/%: %.m4 m4s = [] -m4s = [env_common.M4( - *PatternRule('$GENFILES_DIR/${SOURCE.filebase}', src)) +m4s = [env_common.M4(*PatternRule('$GENFILES_DIR/${SOURCE.filebase}', src)) for src in m4srcs['common']] -m4s += [env_browser.M4( - *PatternRule('$GENFILES_DIR/${SOURCE.filebase}', src)) +m4s += [env_browser.M4(*PatternRule('$GENFILES_DIR/${SOURCE.filebase}', src)) for src in m4srcs['all']] # genfiles/%.html: %.html_m4 @@ -1199,6 +1213,18 @@ html_m4s = [env_browser.M4( *PatternRule('$GENFILES_DIR/${SOURCE.filebase}.html', src)) for src in html_m4srcs['all']] +# genfiles/i18n/%: %.m4 +# This magic grabs the last *2* components from the path ("en-US/foo.m4") +def PathEnd(path, n): + """Returns the last n components of the given path. + Example: PathEnd('/foo/bar/baz', 2) == 'bar/baz'""" + split_path = os.path.normpath(path).split(os.sep) + return os.sep.join(split_path[-n:]) +env['PathEnd'] = PathEnd +tmp_pattern = '$GENFILES_DIR/i18n/${PathEnd(str(SOURCE.base), 2)}' +i18n_m4s = [env_browser.M4(*PatternRule(tmp_pattern, src)) + for src in i18n_m4srcs['all']] + # genfiles/%.js: %.js.stab stabs = [env_browser.Stab( *PatternRule('$GENFILES_DIR/${SOURCE.filebase}', src)) @@ -1215,17 +1241,22 @@ bins = [env_common.Bin2cpp( srcs['all'] += bins # genfiles/%.tlb: %.idl -if idlsrcs['all']: - idls = [env_browser.TypeLibrary( - *PatternRule('$GENFILES_DIR/${SOURCE.filebase}.tlb', src)) - for src in idlsrcs['all']] - srcs['all'] += [x for x in idls[0] if str(x).endswith('_i.c')] +xptsrcs = [] +for src in idlsrcs['all']: + idl = env_browser.TypeLibrary( + *PatternRule('$GENFILES_DIR/${SOURCE.filebase}.tlb', src)) + srcs['all'] += [x for x in idl if str(x).endswith('_i.c')] + if env['BROWSER'] in ['FF2', 'FF3']: + xptsrcs += [x for x in idl if str(x).endswith('.xpt')] + +if env['BROWSER'] in ['FF2', 'FF3']: + env_browser.XptLink('gears.xpt', xptsrcs) # TODO: figure out why the .rc scanner doesn't notice these dependencies. if env['OS'] == 'win32': env_browser.Depends(ui_res, html_m4s) env_browser.Depends(module_res, m4s) -lib = env_browser.ChromeSharedLibrary('gears', +module = env_browser.ChromeSharedLibrary('gears', srcs['all'] + libs + dll_resources) -env_browser.Alias('gears', lib) +env.Alias('gears', module) |