godot/modules/text_server_adv/SCsub
bruvzg 066ca97690
Add Text Server related options to the build profiles editor.
Adds SCons options to disable Brotli and Graphite.
Adds option categories to the build profiles editor.
Adds options default state to the build profiles editor.
Adds Text Server related options to the build profiles editor.
Fix misplaced OpenGL/Vulkan SCons options.
2022-08-03 15:06:43 +03:00

528 lines
17 KiB
Python

#!/usr/bin/env python
Import("env")
Import("env_modules")
env_text_server_adv = env_modules.Clone()
def make_icu_data(target, source, env):
dst = target[0].srcnode().abspath
g = open(dst, "w", encoding="utf-8")
g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
g.write("/* (C) 2016 and later: Unicode, Inc. and others. */\n")
g.write("/* License & terms of use: https://www.unicode.org/copyright.html */\n")
g.write("#ifndef _ICU_DATA_H\n")
g.write("#define _ICU_DATA_H\n")
g.write('#include "unicode/utypes.h"\n')
g.write('#include "unicode/udata.h"\n')
g.write('#include "unicode/uversion.h"\n')
f = open(source[0].srcnode().abspath, "rb")
buf = f.read()
g.write('extern "C" U_EXPORT const size_t U_ICUDATA_SIZE = ' + str(len(buf)) + ";\n")
g.write('extern "C" U_EXPORT const unsigned char U_ICUDATA_ENTRY_POINT[] = {\n')
for i in range(len(buf)):
g.write("\t" + str(buf[i]) + ",\n")
g.write("};\n")
g.write("#endif")
# Thirdparty source files
thirdparty_obj = []
freetype_enabled = env.module_check_dependencies("text_server_adv", ["freetype"], True)
msdfgen_enabled = env.module_check_dependencies("text_server_adv", ["msdfgen"], True)
if env["builtin_harfbuzz"]:
env_harfbuzz = env_modules.Clone()
env_harfbuzz.disable_warnings()
thirdparty_dir = "#thirdparty/harfbuzz/"
thirdparty_sources = [
"src/hb-aat-layout.cc",
"src/hb-aat-map.cc",
"src/hb-blob.cc",
"src/hb-buffer-serialize.cc",
"src/hb-buffer-verify.cc",
"src/hb-buffer.cc",
"src/hb-common.cc",
#'src/hb-coretext.cc',
#'src/hb-directwrite.cc',
"src/hb-draw.cc",
"src/hb-face.cc",
"src/hb-fallback-shape.cc",
"src/hb-font.cc",
#'src/hb-gdi.cc',
#'src/hb-glib.cc',
#'src/hb-gobject-structs.cc',
"src/hb-icu.cc",
"src/hb-map.cc",
"src/hb-number.cc",
"src/hb-ot-cff1-table.cc",
"src/hb-ot-cff2-table.cc",
"src/hb-ot-color.cc",
"src/hb-ot-face.cc",
"src/hb-ot-font.cc",
"src/hb-ot-layout.cc",
"src/hb-ot-map.cc",
"src/hb-ot-math.cc",
"src/hb-ot-meta.cc",
"src/hb-ot-metrics.cc",
"src/hb-ot-name.cc",
"src/hb-ot-shaper-arabic.cc",
"src/hb-ot-shaper-default.cc",
"src/hb-ot-shaper-hangul.cc",
"src/hb-ot-shaper-hebrew.cc",
"src/hb-ot-shaper-indic-table.cc",
"src/hb-ot-shaper-indic.cc",
"src/hb-ot-shaper-khmer.cc",
"src/hb-ot-shaper-myanmar.cc",
"src/hb-ot-shaper-syllabic.cc",
"src/hb-ot-shaper-thai.cc",
"src/hb-ot-shaper-use.cc",
"src/hb-ot-shaper-vowel-constraints.cc",
"src/hb-ot-shape-fallback.cc",
"src/hb-ot-shape-normalize.cc",
"src/hb-ot-shape.cc",
"src/hb-ot-tag.cc",
"src/hb-ot-var.cc",
"src/hb-set.cc",
"src/hb-shape-plan.cc",
"src/hb-shape.cc",
"src/hb-shaper.cc",
"src/hb-static.cc",
"src/hb-style.cc",
"src/hb-subset-cff-common.cc",
"src/hb-subset-cff1.cc",
"src/hb-subset-cff2.cc",
"src/hb-subset-input.cc",
"src/hb-subset-plan.cc",
"src/hb-subset-repacker.cc",
"src/hb-subset.cc",
"src/hb-ucd.cc",
"src/hb-unicode.cc",
#'src/hb-uniscribe.cc'
]
if freetype_enabled:
thirdparty_sources += [
"src/hb-ft.cc",
]
if env["graphite"]:
thirdparty_sources += [
"src/hb-graphite2.cc",
]
thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
env_harfbuzz.Prepend(CPPPATH=["#thirdparty/harfbuzz/src"])
env_harfbuzz.Append(CCFLAGS=["-DHAVE_ICU"])
if env["builtin_icu"]:
env_harfbuzz.Prepend(CPPPATH=["#thirdparty/icu4c/common/", "#thirdparty/icu4c/i18n/"])
env_harfbuzz.Append(CCFLAGS=["-DU_HAVE_LIB_SUFFIX=1", "-DU_LIB_SUFFIX_C_NAME=_godot", "-DHAVE_ICU_BUILTIN"])
if freetype_enabled:
env_harfbuzz.Append(
CCFLAGS=[
"-DHAVE_FREETYPE",
"-DHAVE_GRAPHITE2",
]
)
if env["builtin_freetype"]:
env_harfbuzz.Prepend(CPPPATH=["#thirdparty/freetype/include"])
if env["builtin_graphite"] and env["graphite"]:
env_harfbuzz.Prepend(CPPPATH=["#thirdparty/graphite/include"])
env_harfbuzz.Append(CCFLAGS=["-DGRAPHITE2_STATIC"])
if env["platform"] == "android" or env["platform"] == "linuxbsd":
env_harfbuzz.Append(CCFLAGS=["-DHAVE_PTHREAD"])
if env["platform"] == "javascript":
if env["threads_enabled"]:
env_harfbuzz.Append(CCFLAGS=["-DHAVE_PTHREAD"])
else:
env_harfbuzz.Append(CCFLAGS=["-DHB_NO_MT"])
env_text_server_adv.Prepend(CPPPATH=["#thirdparty/harfbuzz/src"])
lib = env_harfbuzz.add_library("harfbuzz_builtin", thirdparty_sources)
thirdparty_obj += lib
# Needs to be appended to arrive after libscene in the linker call,
# but we don't want it to arrive *after* system libs, so manual hack
# LIBS contains first SCons Library objects ("SCons.Node.FS.File object")
# and then plain strings for system library. We insert between the two.
inserted = False
for idx, linklib in enumerate(env["LIBS"]):
if isinstance(linklib, (str, bytes)): # first system lib such as "X11", otherwise SCons lib object
env["LIBS"].insert(idx, lib)
inserted = True
break
if not inserted:
env.Append(LIBS=[lib])
if env["builtin_graphite"] and freetype_enabled and env["graphite"]:
env_graphite = env_modules.Clone()
env_graphite.disable_warnings()
thirdparty_dir = "#thirdparty/graphite/"
thirdparty_sources = [
"src/gr_char_info.cpp",
"src/gr_face.cpp",
"src/gr_features.cpp",
"src/gr_font.cpp",
"src/gr_logging.cpp",
"src/gr_segment.cpp",
"src/gr_slot.cpp",
"src/CmapCache.cpp",
"src/Code.cpp",
"src/Collider.cpp",
"src/Decompressor.cpp",
"src/Face.cpp",
#'src/FileFace.cpp',
"src/FeatureMap.cpp",
"src/Font.cpp",
"src/GlyphCache.cpp",
"src/GlyphFace.cpp",
"src/Intervals.cpp",
"src/Justifier.cpp",
"src/NameTable.cpp",
"src/Pass.cpp",
"src/Position.cpp",
"src/Segment.cpp",
"src/Silf.cpp",
"src/Slot.cpp",
"src/Sparse.cpp",
"src/TtfUtil.cpp",
"src/UtfCodec.cpp",
"src/FileFace.cpp",
"src/json.cpp",
]
if not env_graphite.msvc:
thirdparty_sources += ["src/direct_machine.cpp"]
else:
thirdparty_sources += ["src/call_machine.cpp"]
thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
env_graphite.Prepend(CPPPATH=["#thirdparty/graphite/src", "#thirdparty/graphite/include"])
env_graphite.Append(
CCFLAGS=[
"-DGRAPHITE2_STATIC",
"-DGRAPHITE2_NTRACING",
"-DGRAPHITE2_NFILEFACE",
]
)
lib = env_graphite.add_library("graphite_builtin", thirdparty_sources)
thirdparty_obj += lib
# Needs to be appended to arrive after libscene in the linker call,
# but we don't want it to arrive *after* system libs, so manual hack
# LIBS contains first SCons Library objects ("SCons.Node.FS.File object")
# and then plain strings for system library. We insert between the two.
inserted = False
for idx, linklib in enumerate(env["LIBS"]):
if isinstance(linklib, (str, bytes)): # first system lib such as "X11", otherwise SCons lib object
env["LIBS"].insert(idx, lib)
inserted = True
break
if not inserted:
env.Append(LIBS=[lib])
if env["builtin_icu"]:
env_icu = env_modules.Clone()
env_icu.disable_warnings()
thirdparty_dir = "#thirdparty/icu4c/"
thirdparty_sources = [
"common/appendable.cpp",
"common/bmpset.cpp",
"common/brkeng.cpp",
"common/brkiter.cpp",
"common/bytesinkutil.cpp",
"common/bytestream.cpp",
"common/bytestrie.cpp",
"common/bytestriebuilder.cpp",
"common/bytestrieiterator.cpp",
"common/caniter.cpp",
"common/characterproperties.cpp",
"common/chariter.cpp",
"common/charstr.cpp",
"common/cmemory.cpp",
"common/cstr.cpp",
"common/cstring.cpp",
"common/cwchar.cpp",
"common/dictbe.cpp",
"common/dictionarydata.cpp",
"common/dtintrv.cpp",
"common/edits.cpp",
"common/emojiprops.cpp",
"common/errorcode.cpp",
"common/filteredbrk.cpp",
"common/filterednormalizer2.cpp",
"common/icudataver.cpp",
"common/icuplug.cpp",
"common/loadednormalizer2impl.cpp",
"common/localebuilder.cpp",
"common/localematcher.cpp",
"common/localeprioritylist.cpp",
"common/locavailable.cpp",
"common/locbased.cpp",
"common/locdispnames.cpp",
"common/locdistance.cpp",
"common/locdspnm.cpp",
"common/locid.cpp",
"common/loclikely.cpp",
"common/loclikelysubtags.cpp",
"common/locmap.cpp",
"common/locresdata.cpp",
"common/locutil.cpp",
"common/lsr.cpp",
"common/lstmbe.cpp",
"common/messagepattern.cpp",
"common/normalizer2.cpp",
"common/normalizer2impl.cpp",
"common/normlzr.cpp",
"common/parsepos.cpp",
"common/patternprops.cpp",
"common/pluralmap.cpp",
"common/propname.cpp",
"common/propsvec.cpp",
"common/punycode.cpp",
"common/putil.cpp",
"common/rbbi.cpp",
"common/rbbi_cache.cpp",
"common/rbbidata.cpp",
"common/rbbinode.cpp",
"common/rbbirb.cpp",
"common/rbbiscan.cpp",
"common/rbbisetb.cpp",
"common/rbbistbl.cpp",
"common/rbbitblb.cpp",
"common/resbund.cpp",
"common/resbund_cnv.cpp",
"common/resource.cpp",
"common/restrace.cpp",
"common/ruleiter.cpp",
"common/schriter.cpp",
"common/serv.cpp",
"common/servlk.cpp",
"common/servlkf.cpp",
"common/servls.cpp",
"common/servnotf.cpp",
"common/servrbf.cpp",
"common/servslkf.cpp",
"common/sharedobject.cpp",
"common/simpleformatter.cpp",
"common/static_unicode_sets.cpp",
"common/stringpiece.cpp",
"common/stringtriebuilder.cpp",
"common/uarrsort.cpp",
"common/ubidi.cpp",
"common/ubidi_props.cpp",
"common/ubidiln.cpp",
"common/ubiditransform.cpp",
"common/ubidiwrt.cpp",
"common/ubrk.cpp",
"common/ucase.cpp",
"common/ucasemap.cpp",
"common/ucasemap_titlecase_brkiter.cpp",
"common/ucat.cpp",
"common/uchar.cpp",
"common/ucharstrie.cpp",
"common/ucharstriebuilder.cpp",
"common/ucharstrieiterator.cpp",
"common/uchriter.cpp",
"common/ucln_cmn.cpp",
"common/ucmndata.cpp",
"common/ucnv.cpp",
"common/ucnv2022.cpp",
"common/ucnv_bld.cpp",
"common/ucnv_cb.cpp",
"common/ucnv_cnv.cpp",
"common/ucnv_ct.cpp",
"common/ucnv_err.cpp",
"common/ucnv_ext.cpp",
"common/ucnv_io.cpp",
"common/ucnv_lmb.cpp",
"common/ucnv_set.cpp",
"common/ucnv_u16.cpp",
"common/ucnv_u32.cpp",
"common/ucnv_u7.cpp",
"common/ucnv_u8.cpp",
"common/ucnvbocu.cpp",
"common/ucnvdisp.cpp",
"common/ucnvhz.cpp",
"common/ucnvisci.cpp",
"common/ucnvlat1.cpp",
"common/ucnvmbcs.cpp",
"common/ucnvscsu.cpp",
"common/ucnvsel.cpp",
"common/ucol_swp.cpp",
"common/ucptrie.cpp",
"common/ucurr.cpp",
"common/udata.cpp",
"common/udatamem.cpp",
"common/udataswp.cpp",
"common/uenum.cpp",
"common/uhash.cpp",
"common/uhash_us.cpp",
"common/uidna.cpp",
"common/uinit.cpp",
"common/uinvchar.cpp",
"common/uiter.cpp",
"common/ulist.cpp",
"common/uloc.cpp",
"common/uloc_keytype.cpp",
"common/uloc_tag.cpp",
"common/umapfile.cpp",
"common/umath.cpp",
"common/umutablecptrie.cpp",
"common/umutex.cpp",
"common/unames.cpp",
"common/unifiedcache.cpp",
"common/unifilt.cpp",
"common/unifunct.cpp",
"common/uniset.cpp",
"common/uniset_closure.cpp",
"common/uniset_props.cpp",
"common/unisetspan.cpp",
"common/unistr.cpp",
"common/unistr_case.cpp",
"common/unistr_case_locale.cpp",
"common/unistr_cnv.cpp",
"common/unistr_props.cpp",
"common/unistr_titlecase_brkiter.cpp",
"common/unorm.cpp",
"common/unormcmp.cpp",
"common/uobject.cpp",
"common/uprops.cpp",
"common/ures_cnv.cpp",
"common/uresbund.cpp",
"common/uresdata.cpp",
"common/usc_impl.cpp",
"common/uscript.cpp",
"common/uscript_props.cpp",
"common/uset.cpp",
"common/uset_props.cpp",
"common/usetiter.cpp",
# "common/ushape.cpp",
"common/usprep.cpp",
"common/ustack.cpp",
"common/ustr_cnv.cpp",
"common/ustr_titlecase_brkiter.cpp",
"common/ustr_wcs.cpp",
"common/ustrcase.cpp",
"common/ustrcase_locale.cpp",
"common/ustrenum.cpp",
"common/ustrfmt.cpp",
"common/ustring.cpp",
"common/ustrtrns.cpp",
"common/utext.cpp",
"common/utf_impl.cpp",
"common/util.cpp",
"common/util_props.cpp",
"common/utrace.cpp",
"common/utrie.cpp",
"common/utrie2.cpp",
"common/utrie2_builder.cpp",
"common/utrie_swap.cpp",
"common/uts46.cpp",
"common/utypes.cpp",
"common/uvector.cpp",
"common/uvectr32.cpp",
"common/uvectr64.cpp",
"common/wintz.cpp",
"i18n/scriptset.cpp",
"i18n/ucln_in.cpp",
"i18n/uspoof.cpp",
"i18n/uspoof_impl.cpp",
]
thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
icu_data_name = "icudt71l.dat"
if env_icu["tools"]:
env_icu.Depends("#thirdparty/icu4c/icudata.gen.h", "#thirdparty/icu4c/" + icu_data_name)
env_icu.Command("#thirdparty/icu4c/icudata.gen.h", "#thirdparty/icu4c/" + icu_data_name, make_icu_data)
env_text_server_adv.Prepend(CPPPATH=["#thirdparty/icu4c/"])
else:
thirdparty_sources += ["icu_data/icudata_stub.cpp"]
env_icu.Prepend(CPPPATH=["#thirdparty/icu4c/common/", "#thirdparty/icu4c/i18n/"])
env_icu.Append(
CXXFLAGS=[
"-DU_STATIC_IMPLEMENTATION",
"-DU_COMMON_IMPLEMENTATION",
"-DUCONFIG_NO_COLLATION",
"-DUCONFIG_NO_CONVERSION",
"-DUCONFIG_NO_FORMATTING",
"-DUCONFIG_NO_SERVICE",
"-DUCONFIG_NO_IDNA",
"-DUCONFIG_NO_FILE_IO",
"-DUCONFIG_NO_TRANSLITERATION",
"-DUCONFIG_NO_REGULAR_EXPRESSIONS",
"-DPKGDATA_MODE=static",
"-DU_ENABLE_DYLOAD=0",
"-DU_HAVE_LIB_SUFFIX=1",
"-DU_LIB_SUFFIX_C_NAME=_godot",
"-DICU_DATA_NAME=" + icu_data_name,
]
)
env_text_server_adv.Append(
CXXFLAGS=[
"-DU_HAVE_LIB_SUFFIX=1",
"-DU_LIB_SUFFIX_C_NAME=_godot",
"-DICU_DATA_NAME=" + icu_data_name,
]
)
if env_text_server_adv["tools"]:
env_text_server_adv.Append(CXXFLAGS=["-DICU_STATIC_DATA"])
env_text_server_adv.Prepend(CPPPATH=["#thirdparty/icu4c/common/", "#thirdparty/icu4c/i18n/"])
lib = env_icu.add_library("icu_builtin", thirdparty_sources)
thirdparty_obj += lib
# Needs to be appended to arrive after libscene in the linker call,
# but we don't want it to arrive *after* system libs, so manual hack
# LIBS contains first SCons Library objects ("SCons.Node.FS.File object")
# and then plain strings for system library. We insert between the two.
inserted = False
for idx, linklib in enumerate(env["LIBS"]):
if isinstance(linklib, (str, bytes)): # first system lib such as "X11", otherwise SCons lib object
env["LIBS"].insert(idx, lib)
inserted = True
break
if not inserted:
env.Append(LIBS=[lib])
# Godot source files
module_obj = []
if env["builtin_msdfgen"] and msdfgen_enabled:
env_text_server_adv.Prepend(CPPPATH=["#thirdparty/msdfgen"])
if env["builtin_freetype"] and freetype_enabled:
env_text_server_adv.Prepend(CPPPATH=["#thirdparty/freetype/include"])
if env["builtin_graphite"] and freetype_enabled and env["graphite"]:
env_text_server_adv.Prepend(CPPPATH=["#thirdparty/graphite/include"])
env_text_server_adv.add_source_files(module_obj, "*.cpp")
env.modules_sources += module_obj
# Needed to force rebuilding the module files when the thirdparty library is updated.
env.Depends(module_obj, thirdparty_obj)