diff options
Diffstat (limited to 'o3d/base/icu38_o3d.scons')
-rw-r--r-- | o3d/base/icu38_o3d.scons | 487 |
1 files changed, 487 insertions, 0 deletions
diff --git a/o3d/base/icu38_o3d.scons b/o3d/base/icu38_o3d.scons new file mode 100644 index 0000000..701e511 --- /dev/null +++ b/o3d/base/icu38_o3d.scons @@ -0,0 +1,487 @@ +# Copyright 2009, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# +# This file is based on the icu38.scons file from the Chrome project, +# Copyright (c) 2006-2008 The Chromium Authors. + +# Variables to control what does or doesn't get built here: +# +# CombinedLib +# When True, builds a combined libicu.a (or icu.lib) containing +# the common, i18n, stubdata and toolutil parts of ICU. When +# False, builds those as separate libraries. +# +# GeneratedDataLib +# When True, specifies that we want to build a libicudata.a +# (or icudata.lib) library containing the data. When False, +# we copy out the icudt38l.dat file or the Chromium icudt38.dll +# file. +# +# Note that we've only verified the behavior that each platform +# needs to build the way it currently wants, so don't expect that +# you can just change the way a given platform builds without maybe +# having to fix things. For example, attempts to set GenerateDataLib +# on Windows will need to fix problems executing the utilities that +# handle the generation. + +import os + +CombinedLib = True +GenerateDataLib = False + +Import('env') + +env = env.Clone( + GENERATED_DIR = env.Dir('$ICU38_DIR/generated'), + GENCCODE = env.File('$ICU38_DIR/generated/genccode$PROGSUFFIX'), + ICUPKG = env.File('$ICU38_DIR/generated/icupkg$PROGSUFFIX'), +) + +env.ApplySConscript([ + '$CHROME_SRC_DIR/build/external_code.scons', +]) + +env.Prepend( + CPPPATH = [ + '$ICU38_DIR/source/common', + '$ICU38_DIR/public/common', + '$ICU38_DIR/source/i18n', + '$ICU38_DIR/public/i18n', + '$ICU38_DIR/source/tools/toolutil', + ], + CPPDEFINES = [ + 'U_STATIC_IMPLEMENTATION', + ], +) + +if env.Bit('mac'): + env.FilterOut(CCFLAGS=['-Werror'], + CPPDEFINES=['DEBUG']) + env['GENCCODE_NAME'] = 'icudt38l' + env['GENCCODE_FLAGS'] = '-a gcc-darwin -n $GENCCODE_NAME -e icudt38' + env['GENCCODE_SUFFIX'] = '.s' + +if env.Bit('linux'): + env['GENCCODE_NAME'] = 'icudt38l' + env['GENCCODE_FLAGS'] = '-a gcc -n $GENCCODE_NAME -e icudt38' + env['GENCCODE_SUFFIX'] = '.s' + +if env.Bit('windows'): + env['GENCCODE_NAME'] = 'icudt38' + env['GENCCODE_FLAGS'] = '-e icudt38' + env['GENCCODE_SUFFIX'] = '.c' + +if env.Bit('windows'): + # /Wd4996 to silence warning about strncpy + env.Append(CCFLAGS = ['/WX', '/wd4996']) +else: + env.Append( + CCFLAGS = [ + # TODO: fix ICU to not depend on this flag. + '-fno-strict-aliasing', + + '-Wno-parentheses', + + # See uprv_UnicodeStringDummy at end of source/common/unistr.cpp. + '-Wno-unused-function', + ] + ) + +if 'WIN32_LEAN_AND_MEAN' in env['CPPDEFINES']: + env['CPPDEFINES'].remove('WIN32_LEAN_AND_MEAN') + +common_input_files = [ + 'source/common/bmpset.cpp', + 'source/common/brkeng.cpp', + 'source/common/brkiter.cpp', + 'source/common/caniter.cpp', + 'source/common/chariter.cpp', + 'source/common/cmemory.c', + 'source/common/cstring.c', + 'source/common/cwchar.c', + 'source/common/dictbe.cpp', + 'source/common/locbased.cpp', + 'source/common/locid.cpp', + 'source/common/locmap.c', + 'source/common/locutil.cpp', + 'source/common/normlzr.cpp', + 'source/common/parsepos.cpp', + 'source/common/propname.cpp', + 'source/common/punycode.c', + 'source/common/putil.c', + 'source/common/rbbi.cpp', + 'source/common/rbbidata.cpp', + 'source/common/rbbinode.cpp', + 'source/common/rbbirb.cpp', + 'source/common/rbbiscan.cpp', + 'source/common/rbbisetb.cpp', + 'source/common/rbbistbl.cpp', + 'source/common/rbbitblb.cpp', + 'source/common/resbund.cpp', + 'source/common/resbund_cnv.cpp', + 'source/common/ruleiter.cpp', + 'source/common/schriter.cpp', + 'source/common/serv.cpp', + 'source/common/servlk.cpp', + 'source/common/servlkf.cpp', + 'source/common/servls.cpp', + 'source/common/servnotf.cpp', + 'source/common/servrbf.cpp', + 'source/common/servslkf.cpp', + 'source/common/triedict.cpp', + 'source/common/uarrsort.c', + 'source/common/ubidi.c', + 'source/common/ubidi_props.c', + 'source/common/ubidiln.c', + 'source/common/ubidiwrt.c', + 'source/common/ubrk.cpp', + 'source/common/ucase.c', + 'source/common/ucasemap.c', + 'source/common/ucat.c', + 'source/common/uchar.c', + 'source/common/uchriter.cpp', + 'source/common/ucln_cmn.c', + 'source/common/ucmndata.c', + 'source/common/ucnv.c', + 'source/common/ucnv_bld.c', + 'source/common/ucnv_cb.c', + 'source/common/ucnv_cnv.c', + 'source/common/ucnv_err.c', + 'source/common/ucnv_ext.c', + 'source/common/ucnv_io.c', + 'source/common/ucnv_lmb.c', + 'source/common/ucnv_set.c', + 'source/common/ucnv_u16.c', + 'source/common/ucnv_u32.c', + 'source/common/ucnv_u7.c', + 'source/common/ucnv_u8.c', + 'source/common/ucnv2022.c', + 'source/common/ucnvbocu.c', + 'source/common/ucnvdisp.c', + 'source/common/ucnvhz.c', + 'source/common/ucnvisci.c', + 'source/common/ucnvlat1.c', + 'source/common/ucnvmbcs.c', + 'source/common/ucnvscsu.c', + 'source/common/ucol_swp.c', + 'source/common/udata.c', + 'source/common/udatamem.c', + 'source/common/udataswp.c', + 'source/common/uenum.c', + 'source/common/uhash.c', + 'source/common/uhash_us.cpp', + 'source/common/uidna.cpp', + 'source/common/uinit.c', + 'source/common/uinvchar.c', + 'source/common/uiter.cpp', + 'source/common/uloc.c', + 'source/common/umapfile.c', + 'source/common/umath.c', + 'source/common/umutex.c', + 'source/common/unames.c', + 'source/common/unifilt.cpp', + 'source/common/unifunct.cpp', + 'source/common/uniset.cpp', + 'source/common/uniset_props.cpp', + 'source/common/unisetspan.cpp', + 'source/common/unistr.cpp', + 'source/common/unistr_case.cpp', + 'source/common/unistr_cnv.cpp', + 'source/common/unistr_props.cpp', + 'source/common/unorm.cpp', + 'source/common/unorm_it.c', + 'source/common/unormcmp.cpp', + 'source/common/uobject.cpp', + 'source/common/uprops.c', + 'source/common/ures_cnv.c', + 'source/common/uresbund.c', + 'source/common/uresdata.c', + 'source/common/usc_impl.c', + 'source/common/uscript.c', + 'source/common/uset.cpp', + 'source/common/uset_props.cpp', + 'source/common/usetiter.cpp', + 'source/common/ushape.c', + 'source/common/usprep.cpp', + 'source/common/ustack.cpp', + 'source/common/ustr_cnv.c', + 'source/common/ustr_wcs.c', + 'source/common/ustrcase.c', + 'source/common/ustrenum.cpp', + 'source/common/ustrfmt.c', + 'source/common/ustring.c', + 'source/common/ustrtrns.c', + 'source/common/utext.cpp', + 'source/common/utf_impl.c', + 'source/common/util.cpp', + 'source/common/util_props.cpp', + 'source/common/utrace.c', + 'source/common/utrie.c', + 'source/common/utypes.c', + 'source/common/uvector.cpp', + 'source/common/uvectr32.cpp', + 'source/common/wintz.c', +] + +i18n_input_files = [ + 'source/i18n/anytrans.cpp', + 'source/i18n/astro.cpp', + 'source/i18n/basictz.cpp', + 'source/i18n/bocsu.c', + 'source/i18n/buddhcal.cpp', + 'source/i18n/calendar.cpp', + 'source/i18n/casetrn.cpp', + 'source/i18n/choicfmt.cpp', + 'source/i18n/coleitr.cpp', + 'source/i18n/coll.cpp', + 'source/i18n/cpdtrans.cpp', + 'source/i18n/csdetect.cpp', + 'source/i18n/csmatch.cpp', + 'source/i18n/csr2022.cpp', + 'source/i18n/csrecog.cpp', + 'source/i18n/csrmbcs.cpp', + 'source/i18n/csrsbcs.cpp', + 'source/i18n/csrucode.cpp', + 'source/i18n/csrutf8.cpp', + 'source/i18n/curramt.cpp', + 'source/i18n/currfmt.cpp', + 'source/i18n/currunit.cpp', + 'source/i18n/datefmt.cpp', + 'source/i18n/dcfmtsym.cpp', + 'source/i18n/decimfmt.cpp', + 'source/i18n/digitlst.cpp', + 'source/i18n/dtfmtsym.cpp', + 'source/i18n/dtrule.cpp', + 'source/i18n/esctrn.cpp', + 'source/i18n/fmtable.cpp', + 'source/i18n/fmtable_cnv.cpp', + 'source/i18n/format.cpp', + 'source/i18n/funcrepl.cpp', + 'source/i18n/gregocal.cpp', + 'source/i18n/gregoimp.cpp', + 'source/i18n/hebrwcal.cpp', + 'source/i18n/indiancal.cpp', + 'source/i18n/inputext.cpp', + 'source/i18n/islamcal.cpp', + 'source/i18n/japancal.cpp', + 'source/i18n/measfmt.cpp', + 'source/i18n/measure.cpp', + 'source/i18n/msgfmt.cpp', + 'source/i18n/name2uni.cpp', + 'source/i18n/nfrs.cpp', + 'source/i18n/nfrule.cpp', + 'source/i18n/nfsubs.cpp', + 'source/i18n/nortrans.cpp', + 'source/i18n/nultrans.cpp', + 'source/i18n/numfmt.cpp', + 'source/i18n/olsontz.cpp', + 'source/i18n/persncal.cpp', + 'source/i18n/plurfmt.cpp', + 'source/i18n/plurrule.cpp', + 'source/i18n/quant.cpp', + 'source/i18n/rbnf.cpp', + 'source/i18n/rbt.cpp', + 'source/i18n/rbt_data.cpp', + 'source/i18n/rbt_pars.cpp', + 'source/i18n/rbt_rule.cpp', + 'source/i18n/rbt_set.cpp', + 'source/i18n/rbtz.cpp', + 'source/i18n/regexcmp.cpp', + 'source/i18n/regexst.cpp', + 'source/i18n/reldtfmt.cpp', + 'source/i18n/rematch.cpp', + 'source/i18n/remtrans.cpp', + 'source/i18n/repattrn.cpp', + 'source/i18n/search.cpp', + 'source/i18n/simpletz.cpp', + 'source/i18n/smpdtfmt.cpp', + 'source/i18n/sortkey.cpp', + 'source/i18n/strmatch.cpp', + 'source/i18n/strrepl.cpp', + 'source/i18n/stsearch.cpp', + 'source/i18n/taiwncal.cpp', + 'source/i18n/tblcoll.cpp', + 'source/i18n/timezone.cpp', + 'source/i18n/titletrn.cpp', + 'source/i18n/tolowtrn.cpp', + 'source/i18n/toupptrn.cpp', + 'source/i18n/translit.cpp', + 'source/i18n/transreg.cpp', + 'source/i18n/tridpars.cpp', + 'source/i18n/tzrule.cpp', + 'source/i18n/tztrans.cpp', + 'source/i18n/ucal.cpp', + 'source/i18n/ucln_in.c', + 'source/i18n/ucol.cpp', + 'source/i18n/ucol_bld.cpp', + 'source/i18n/ucol_cnt.cpp', + 'source/i18n/ucol_elm.cpp', + 'source/i18n/ucol_res.cpp', + 'source/i18n/ucol_sit.cpp', + 'source/i18n/ucol_tok.cpp', + 'source/i18n/ucol_wgt.c', + 'source/i18n/ucoleitr.cpp', + 'source/i18n/ucsdet.cpp', + 'source/i18n/ucurr.cpp', + 'source/i18n/udat.cpp', + 'source/i18n/ulocdata.c', + 'source/i18n/umsg.cpp', + 'source/i18n/unesctrn.cpp', + 'source/i18n/uni2name.cpp', + 'source/i18n/unum.cpp', + 'source/i18n/uregex.cpp', + 'source/i18n/uregexc.cpp', + 'source/i18n/usearch.cpp', + 'source/i18n/utmscale.c', + 'source/i18n/utrans.cpp', + 'source/i18n/vtzone.cpp', + 'source/i18n/windtfmt.cpp', + 'source/i18n/winnmfmt.cpp', +] + +stubdata_input_files = [ + 'source/stubdata/stubdata.c', +] + +toolutil_input_files = [ + 'source/tools/toolutil/filestrm.c', + 'source/tools/toolutil/package.cpp', + 'source/tools/toolutil/pkgitems.cpp', + 'source/tools/toolutil/propsvec.c', + 'source/tools/toolutil/swapimpl.cpp', + 'source/tools/toolutil/toolutil.c', + 'source/tools/toolutil/toolutil.vcproj', + 'source/tools/toolutil/ucbuf.c', + 'source/tools/toolutil/ucm.c', + 'source/tools/toolutil/ucmstate.c', + 'source/tools/toolutil/unewdata.c', + 'source/tools/toolutil/uoptions.c', + 'source/tools/toolutil/uparse.c', + 'source/tools/toolutil/writesrc.c', + 'source/tools/toolutil/xmlparser.cpp', +] + +def MakeObject(env, source, extra_defines): + base, ext = os.path.splitext(source) + return env.ComponentObject(base, '$ICU38_DIR/' + source, + CPPDEFINES = env['CPPDEFINES'] + extra_defines) + + + +if CombinedLib: + + # These empirically fail to build when U_COMMON_IMPLEMENTATION + # isn't defined in addition to U_COMBINED_IMPLEMENTATION. Remove + # them from the source file list and re-append them with Nodes + # for custom-built object files with both defined. + + need_common_implementation = [ + 'source/common/ubidi.c', + 'source/common/ubidiln.c', + ] + + objects = [] + for n in need_common_implementation: + common_input_files.remove(n) + o = MakeObject(env, n, ['U_COMMON_IMPLEMENTATION', + 'U_COMBINED_IMPLEMENTATION']) + objects.append(o) + + sources = common_input_files + i18n_input_files + stubdata_input_files + objects += [MakeObject(env, n, ['U_COMBINED_IMPLEMENTATION']) + for n in sources] + + icu_lib = env.ComponentLibrary('icu', objects); + +else: + + common_objects = [MakeObject(env, n, ['U_COMMON_IMPLEMENTATION']) + for n in common_input_files] + icu_lib = env.ComponentLibrary('icuuc', common_objects) + + i18n_objects = [MakeObject(env, n, ['U_I18N_IMPLEMENTATION']) + for n in i18n_input_files] + env.ComponentLibrary('icui18n', i18n_objects) + + stubdata_objects = [MakeObject(env, n, []) for n in stubdata_input_files] + env.ComponentLibrary('icudata_stub', stubdata_objects) + + toolutil_objects = [MakeObject(env, n, ['U_TOOLUTIL_IMPLEMENTATION']) + for n in toolutil_input_files] + + env.ComponentLibrary('icutu', toolutil_objects) + + +if GenerateDataLib: + + icudata_lst = env.Command(['$GENERATED_DIR/icudata.lst', + '$GENERATED_DIR/icudt38l/ucadata.icu'], + ['source/data/in/icudt38l.dat'], + ('$ICUPKG -d ${TARGETS[1].dir} --list -x "*"' + ' $SOURCE > $TARGET')) + env.Depends(icudata_lst, '$ICUPKG') + + icudt38_dat = env.Command(['$GENERATED_DIR/${GENCCODE_NAME}.dat'], + icudata_lst, + ('$ICUPKG -tl -c -s ${SOURCES[1].dir}' + ' -a $SOURCE new $TARGET')) + env.Depends(icudt38_dat, '$ICUPKG') + + icudt38_src = env.Command( + '$GENERATED_DIR/${GENCCODE_NAME}_dat${GENCCODE_SUFFIX}', + icudt38_dat, + '$GENCCODE $GENCCODE_FLAGS -d ${TARGET.dir} $SOURCE') + env.Depends(icudt38_src, '$GENCCODE') + + icu_data = env.ComponentLibrary('icudata', icudt38_src) + + if CombinedLib: + lib_list = ['icu'] + else: + lib_list = ['icui18n', 'icutu', 'icuuc', 'icudata_stub'] + + env_tools = env.Clone(LIBS = lib_list) + + env_tools.Program(env['GENCCODE'], + '$ICU38_DIR/source/tools/genccode/genccode.c') + env_tools.Program(env['ICUPKG'], '$ICU38_DIR/source/tools/icupkg/icupkg.cpp') + +else: + + icu_data = None + + # The ICU library isn't useful without the data properly installed. + if env.Bit('windows'): + icu_data = env.Replicate('$ARTIFACTS_DIR', 'icudt38.dll') + else: + icu_data = env.Replicate('$ARTIFACTS_DIR', + '$ICU38_DIR/source/data/in/icudt38l.dat') + + env.Requires(icu_lib, icu_data) |