diff options
Diffstat (limited to 'src/common/unicode/meson.build')
-rw-r--r-- | src/common/unicode/meson.build | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/src/common/unicode/meson.build b/src/common/unicode/meson.build new file mode 100644 index 00000000000..13965d59f49 --- /dev/null +++ b/src/common/unicode/meson.build @@ -0,0 +1,106 @@ +UNICODE_VERSION = '15.0.0' + +unicode_data = {} +unicode_baseurl = 'https://www.unicode.org/Public/@0@/ucd/@1@' + +if not wget.found() + subdir_done() +endif + +# These files are part of the Unicode Character Database. Download them on +# demand. +foreach f : ['UnicodeData.txt', 'EastAsianWidth.txt', 'DerivedNormalizationProps.txt', 'CompositionExclusions.txt', 'NormalizationTest.txt'] + url = unicode_baseurl.format(UNICODE_VERSION, f) + target = custom_target(f, + output: f, + command: [wget, wget_flags, url], + build_by_default: false, + ) + unicode_data += {f: target} +endforeach + + +update_unicode_targets = [] + +update_unicode_targets += \ + custom_target('unicode_norm_table.h', + input: [unicode_data['UnicodeData.txt'], unicode_data['CompositionExclusions.txt']], + output: ['unicode_norm_table.h', 'unicode_norm_hashfunc.h'], + command: [ + perl, files('generate-unicode_norm_table.pl'), + '--outdir', '@OUTDIR@', '@INPUT@'], + build_by_default: false, + ) + +update_unicode_targets += \ + custom_target('unicode_nonspacing_table.h', + input: [unicode_data['UnicodeData.txt']], + output: ['unicode_nonspacing_table.h'], + command: [perl, files('generate-unicode_nonspacing_table.pl'), '@INPUT@'], + build_by_default: false, + capture: true, + ) + +update_unicode_targets += \ + custom_target('unicode_east_asian_fw_table.h', + input: [unicode_data['EastAsianWidth.txt']], + output: ['unicode_east_asian_fw_table.h'], + command: [perl, files('generate-unicode_east_asian_fw_table.pl'), '@INPUT@'], + build_by_default: false, + capture: true, + ) + +update_unicode_targets += \ + custom_target('unicode_normprops_table.h', + input: [unicode_data['DerivedNormalizationProps.txt']], + output: ['unicode_normprops_table.h'], + command: [perl, files('generate-unicode_normprops_table.pl'), '@INPUT@'], + build_by_default: false, + capture: true, + ) + +norm_test_table = custom_target('norm_test_table.h', + input: [unicode_data['NormalizationTest.txt']], + output: ['norm_test_table.h'], + command: [perl, files('generate-norm_test_table.pl'), '@INPUT@', '@OUTPUT@'], + build_by_default: false, + ) + +inc = include_directories('.') + +norm_test = executable('norm_test', + ['norm_test.c', norm_test_table], + dependencies: [frontend_port_code], + include_directories: inc, + link_with: [common_static, pgport_static], + build_by_default: false, + kwargs: default_bin_args + { + 'install': false, + } +) + +update_unicode_dep = [] + +if not meson.is_cross_build() + update_unicode_dep += custom_target('norm_test.run', + output: 'norm_test.run', + input: update_unicode_targets, + command: [norm_test], + build_by_default: false, + build_always_stale: true, + ) +endif + + +# Use a custom target, as run targets serialize the output, making this harder +# to debug, and don't deal well with targets with multiple outputs. +update_unicode = custom_target('update-unicode', + depends: update_unicode_dep, + output: ['dont-exist'], + input: update_unicode_targets, + command: ['cp', '@INPUT@', '@SOURCE_ROOT@/src/include/common/'], + build_by_default: false, + build_always_stale: true, +) + +alias_target('update-unicode', update_unicode) |