summaryrefslogtreecommitdiffstats
path: root/gears/SConscript.dll
diff options
context:
space:
mode:
Diffstat (limited to 'gears/SConscript.dll')
-rw-r--r--gears/SConscript.dll85
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)