harfbuzz/src/meson.build

366 lines
8.6 KiB
Meson

hb_base_sources = [
'hb-blob.cc',
'hb-buffer-serialize.cc',
'hb-buffer.cc',
'hb-draw.cc',
'hb-common.cc',
'hb-face.cc',
'hb-font.cc',
'hb-map.cc',
'hb-ot-cff1-table.cc',
'hb-ot-cff2-table.cc',
'hb-ot-name.cc',
'hb-ot-tag.cc',
'hb-set.cc',
'hb-shape.cc',
'hb-shape-plan.cc',
'hb-shaper.cc',
'hb-static.cc',
'hb-unicode.cc',
'hb-ucd.cc',
'hb-number.cc'
]
hb_base_headers = files([
'hb.h',
'hb-blob.h',
'hb-buffer.h',
'hb-draw.h',
'hb-common.h',
'hb-deprecated.h',
'hb-face.h',
'hb-font.h',
'hb-map.h',
'hb-set.h',
'hb-shape.h',
'hb-shape-plan.h',
'hb-unicode.h',
'hb-version.h',
'hb-number.hh'
])
hb_base_ragel_sources = [
'hb-buffer-deserialize-json.rl',
'hb-buffer-deserialize-text.rl',
]
hb_fallback_sources = [
'hb-fallback-shape.cc',
]
hb_ot_sources = [
'hb-aat-layout.cc',
'hb-aat-map.cc',
'hb-ot-face.cc',
'hb-ot-font.cc',
'hb-ot-metrics.cc',
'hb-ot-layout.cc',
'hb-ot-color.cc',
'hb-ot-map.cc',
'hb-ot-math.cc',
'hb-ot-shape.cc',
'hb-ot-shape-complex-arabic.cc',
'hb-ot-shape-complex-default.cc',
'hb-ot-shape-complex-hangul.cc',
'hb-ot-shape-complex-hebrew.cc',
'hb-ot-shape-complex-indic.cc',
'hb-ot-shape-complex-indic-table.cc',
'hb-ot-shape-complex-khmer.cc',
'hb-ot-shape-complex-myanmar.cc',
'hb-ot-shape-complex-thai.cc',
'hb-ot-shape-complex-use.cc',
'hb-ot-shape-complex-use-table.cc',
'hb-ot-shape-complex-vowel-constraints.cc',
'hb-ot-shape-normalize.cc',
'hb-ot-shape-fallback.cc',
'hb-ot-cff1-table.cc',
'hb-ot-cff2-table.cc',
'hb-ot-var.cc',
]
hb_ot_headers = files([
'hb-ot.h',
'hb-ot-deprecated.h',
'hb-ot-metrics.h',
'hb-ot-color.h',
'hb-ot-font.h',
'hb-ot-layout.h',
'hb-ot-math.h',
'hb-ot-name.h',
'hb-ot-shape.h',
'hb-ot-var.h',
])
hb_ot_ragel_sources = [
'hb-ot-shape-complex-indic-machine.rl',
'hb-ot-shape-complex-khmer-machine.rl',
'hb-ot-shape-complex-myanmar-machine.rl',
'hb-ot-shape-complex-use-machine.rl',
]
hb_ft_sources = [
'hb-ft.cc',
]
hb_ft_headers = files([
'hb-ft.h',
])
hb_glib_sources = [
'hb-glib.cc',
]
hb_glib_headers = files([
'hb-glib.h',
])
hb_graphite2_sources = [
'hb-graphite2.cc',
]
hb_graphite2_headers = files([
'hb-graphite2.h',
])
hb_icu_sources = [
'hb-icu.cc',
]
hb_icu_headers = files([
'hb-icu.h',
])
hb_subset_sources = [
'hb-ot-cff1-table.cc',
'hb-ot-cff2-table.cc',
'hb-static.cc',
'hb-subset.cc',
'hb-subset-cff1.cc',
'hb-subset-cff2.cc',
'hb-subset-cff-common.cc',
'hb-subset-input.cc',
'hb-subset-plan.cc',
'hb-number.cc',
'hb-ot-meta.cc'
]
hb_subset_headers = files([
'hb-subset.h',
'hb-number.hh',
'hb-ot-meta.h'
])
hb_gobject_sources = [
'hb-gobject-structs.cc'
]
hb_gobject_headers = files([
'hb-gobject.h',
'hb-gobject-structs.h',
])
incucdn = []
incsrc = include_directories('.')
hb_sources = hb_base_sources + hb_fallback_sources + hb_ot_sources
hb_headers = hb_base_headers + hb_ot_headers
if conf.get('HAVE_FREETYPE', 0) == 1
hb_sources += hb_ft_sources
hb_headers += hb_ft_headers
endif
if conf.get('HAVE_GRAPHITE2', 0) == 1
hb_sources += hb_graphite2_sources
hb_headers += hb_graphite2_headers
endif
if conf.get('HAVE_GLIB', 0) == 1
hb_sources += hb_glib_sources
hb_headers += hb_glib_headers
endif
if conf.get('HAVE_ICU', 0) == 1
hb_sources += hb_icu_sources
hb_headers += hb_icu_headers
endif
if conf.get('HAVE_UNISCRIBE', 0) == 1
hb_sources += ['hb-uniscribe.cc']
hb_headers += ['hb-uniscribe.h']
endif
if conf.get('HAVE_DIRECTWRITE', 0) == 1
hb_sources += ['hb-directwrite.cc']
hb_headers += ['hb-directwrite.h']
endif
if conf.get('HAVE_CORETEXT', 0) == 1
hb_sources += ['hb-coretext.cc']
hb_headers += ['hb-coretext.h']
endif
# harfbuzz
gen_def = find_program('gen-def.py')
harfbuzz_def = custom_target('harfbuzz.def',
command: [gen_def, '@OUTPUT@', '@INPUT@'],
input: hb_headers,
output: 'harfbuzz.def')
version = '0.' + '0'.join(meson.project_version().split('.')) + '.0'
libharfbuzz = library('harfbuzz', hb_sources,
include_directories: [incconfig, incucdn],
dependencies: deps,
cpp_args: cpp_args,
vs_module_defs: harfbuzz_def,
soversion: '0',
version: version,
install: true,
name_prefix: 'lib')
libharfbuzz_dep = declare_dependency(
link_with: libharfbuzz,
include_directories: [incsrc, incucdn],
dependencies: deps)
# harfbuzz-subset
harfbuzz_subset_def = custom_target('harfbuzz-subset.def',
command: [gen_def, '@OUTPUT@', '@INPUT@'],
input: hb_subset_headers,
output: 'harfbuzz-subset.def')
libharfbuzz_subset = library('harfbuzz-subset', hb_subset_sources,
include_directories: incconfig,
link_with: [libharfbuzz],
cpp_args: cpp_args,
vs_module_defs: harfbuzz_subset_def,
soversion: '0',
version: version,
install: true,
name_prefix: 'lib')
libharfbuzz_subset_dep = declare_dependency(
link_with: libharfbuzz_subset,
include_directories: incsrc,
dependencies: deps)
pkgmod.generate(libharfbuzz,
description: 'HarfBuzz text shaping library',
subdirs: [meson.project_name()],
version: meson.project_version(),
)
pkgmod.generate(libharfbuzz_subset,
description: 'HarfBuzz font subsetter',
subdirs: [meson.project_name()],
version: meson.project_version(),
)
have_gobject = conf.get('HAVE_GOBJECT', 0) == 1
cmake_config = configuration_data()
cmake_config.set('libdir', '${prefix}/@0@'.format(get_option('libdir')))
cmake_config.set('includedir', '${prefix}/@0@'.format(get_option('includedir')))
cmake_config.set('HB_LIBTOOL_VERSION_INFO', hb_libtool_version_info)
cmake_config.set('have_gobject', have_gobject ? 'true' : 'false')
configure_file(input: 'harfbuzz-config.cmake.in',
output: 'harfbuzz-config.cmake',
configuration: cmake_config,
install_dir: join_paths(get_option('libdir'), 'cmake', 'harfbuzz'))
if have_gobject
gnome = import('gnome')
h_templ = configure_file(
input: 'hb-gobject-enums.h.tmpl',
output: 'hb-gobject-enums-tmp.h.tmpl',
configuration: configuration_data(),
format: 'cmake')
cc_templ = configure_file(
input: 'hb-gobject-enums.cc.tmpl',
output: 'hb-gobject-enums-tmp.cc.tmpl',
configuration: configuration_data(),
format: 'cmake')
enums = gnome.mkenums('hb-gobject',
sources: hb_headers,
h_template: h_templ,
c_template: cc_templ,
identifier_prefix: 'hb_',
symbol_prefix: 'hb_gobject',
)
enum_c = custom_target('hb-gobject-enums.cc',
input: enums[0],
output: 'hb-gobject-enums.cc',
command: [python3, files('fix_get_types.py')[0], '@INPUT@', '@OUTPUT@']
)
enum_h = custom_target('hb-gobject-enums.h',
input: enums[1],
output: 'hb-gobject-enums.h',
command: [python3, files('fix_get_types.py')[0], '@INPUT@', '@OUTPUT@'],
install: true,
install_dir: join_paths(get_option('prefix'), get_option('includedir'), meson.project_name()),
)
hb_gobject_sources += [enum_c]
harfbuzz_gobject_def = custom_target('harfbuzz-gobject.def',
command: [gen_def, '@OUTPUT@', '@INPUT@'],
input: [hb_gobject_headers, enum_h],
output: 'harfbuzz-gobject.def')
libharfbuzz_gobject = library('harfbuzz-gobject', [hb_gobject_sources, enum_c, enum_h],
include_directories: incconfig,
dependencies: deps,
link_with: [libharfbuzz],
cpp_args: cpp_args,
vs_module_defs: harfbuzz_gobject_def,
soversion: '0',
version: version,
install: true,
name_prefix: 'lib')
gir = find_program('g-ir-scanner', required: get_option('introspection'))
build_gir = gir.found() and not meson.is_cross_build()
if build_gir
hb_gen_files_gir = gnome.generate_gir(libharfbuzz, libharfbuzz_gobject,
sources: [hb_headers, hb_sources, hb_gobject_headers, hb_gobject_sources, enum_h],
namespace: 'HarfBuzz',
nsversion: '0.0',
identifier_prefix: 'hb_',
symbol_prefix: 'hb_',
includes: ['GObject-2.0'],
install: true,
extra_args: ['--cflags-begin',
'-DHB_H',
'-DHB_H_IN',
'-DHB_OT_H',
'-DHB_OT_H_IN',
'-DHB_GOBJECT_H',
'-DHB_GOBJECT_H_IN',
'-DHB_EXTERN=',
'--cflags-end'])
endif
libharfbuzz_gobject_dep = declare_dependency(
link_with: libharfbuzz_gobject,
include_directories: incsrc,
sources: hb_gen_files_gir,
dependencies: deps)
pkgmod.generate(libharfbuzz_gobject,
description: 'HarfBuzz text shaping library GObject integration',
subdirs: [meson.project_name()],
version: meson.project_version(),
)
else
libharfbuzz_gobject_dep = dependency('', required: false)
endif
install_headers(hb_headers + hb_gobject_headers + hb_subset_headers, subdir: meson.project_name())