blob: 430ae613a51528ca977392991386540a7d0bd4bd [file] [log] [blame]
project('ots', 'c', 'cpp',
version: '8.2.0',
default_options : ['cpp_std=c++11', 'default_library=static', 'warning_level=2'],
meson_version : '>= 0.55.2',
)
subdir('tests')
cxx = meson.get_compiler('cpp')
conf = configuration_data()
conf.set_quoted('PACKAGE', meson.project_name())
conf.set_quoted('VERSION', meson.project_version())
if get_option('debug')
conf.set('OTS_DEBUG', 1)
endif
if get_option('graphite')
conf.set('OTS_GRAPHITE', 1)
endif
freetype = dependency('freetype2', required: false)
if freetype.found()
conf.set('HAVE_FREETYPE', 1)
endif
coretext = dependency('appleframeworks', modules: 'applicationservices',
required: false)
if coretext.found()
conf.set('HAVE_CORETEXT', 1)
endif
gdi32 = cxx.find_library('gdi32', required: false)
if gdi32.found()
conf.set('HAVE_WIN32', 1)
endif
configure_file(output: 'config.h',
configuration: conf)
ots_sources = [
'src/avar.cc',
'src/avar.h',
'src/cff.cc',
'src/cff.h',
'src/cff_charstring.cc',
'src/cff_charstring.h',
'src/cmap.cc',
'src/cmap.h',
'src/cvar.cc',
'src/cvar.h',
'src/cvt.cc',
'src/cvt.h',
'src/fpgm.cc',
'src/fpgm.h',
'src/fvar.cc',
'src/fvar.h',
'src/gasp.cc',
'src/gasp.h',
'src/gdef.cc',
'src/gdef.h',
'src/glyf.cc',
'src/glyf.h',
'src/gpos.cc',
'src/gpos.h',
'src/gsub.cc',
'src/gsub.h',
'src/gvar.cc',
'src/gvar.h',
'src/hdmx.cc',
'src/hdmx.h',
'src/head.cc',
'src/head.h',
'src/hhea.cc',
'src/hhea.h',
'src/hmtx.h',
'src/hvar.cc',
'src/hvar.h',
'src/kern.cc',
'src/kern.h',
'src/layout.cc',
'src/layout.h',
'src/loca.cc',
'src/loca.h',
'src/ltsh.cc',
'src/ltsh.h',
'src/math.cc',
'src/math_.h',
'src/maxp.cc',
'src/maxp.h',
'src/metrics.cc',
'src/metrics.h',
'src/mvar.cc',
'src/mvar.h',
'src/name.cc',
'src/name.h',
'src/os2.cc',
'src/os2.h',
'src/ots.cc',
'src/ots.h',
'src/post.cc',
'src/post.h',
'src/prep.cc',
'src/prep.h',
'src/stat.cc',
'src/stat.h',
'src/variations.cc',
'src/variations.h',
'src/vdmx.cc',
'src/vdmx.h',
'src/vhea.cc',
'src/vhea.h',
'src/vmtx.h',
'src/vorg.cc',
'src/vorg.h',
'src/vvar.cc',
'src/vvar.h',
]
zlib = dependency('zlib', fallback : ['zlib', 'zlib_dep'])
libwoff2dec = dependency('libwoff2dec',
fallback: ['google-woff2', 'woff2_decoder_dep'])
ots_deps = [zlib, libwoff2dec]
if get_option('graphite')
ots_sources += [
'src/feat.cc',
'src/feat.h',
'src/glat.cc',
'src/glat.h',
'src/gloc.cc',
'src/gloc.h',
'src/graphite.h',
'src/sile.h',
'src/sile.cc',
'src/silf.h',
'src/silf.cc',
'src/sill.h',
'src/sill.cc',
]
liblz4 = dependency('liblz4', fallback: ['lz4', 'liblz4_dep'])
ots_deps += [liblz4]
endif
libots = library('ots',
ots_sources,
include_directories: include_directories('include'),
cpp_args : '-DHAVE_CONFIG_H',
dependencies: ots_deps,
)
ots_sanitize = executable('ots-sanitize',
'util/ots-sanitize.cc',
'util/test-context.h',
include_directories: include_directories('include'),
link_with: libots,
install: true,
)
install_man('docs/ots-sanitize.1')
fuzzer_ldflags = []
fuzzer_defines = []
if get_option('fuzzer_ldflags') != ''
fuzzer_ldflags += get_option('fuzzer_ldflags').split()
fuzzer_defines += ['-DOTS_FUZZER_NO_MAIN']
endif
ots_fuzzer = executable('ots-fuzzer',
'util/ots-fuzzer.cc',
include_directories: include_directories(['include', 'src']),
cpp_args: fuzzer_defines,
link_with: libots,
link_args: fuzzer_ldflags,
)
if freetype.found() or coretext.found() or gdi32.found()
deps = [freetype, gdi32]
if coretext.found()
deps += [coretext]
endif
ots_idempotent = executable('ots-idempotent',
'util/ots-idempotent.cc',
'util/test-context.h',
include_directories: include_directories('include'),
link_with: libots,
dependencies: deps,
install: true,
)
install_man('docs/ots-idempotent.1')
foreach file_name : good_fonts
test(file_name, ots_idempotent,
args: meson.current_source_dir() / 'tests' / file_name,
suite: 'good',
)
endforeach
endif
if freetype.found() or coretext.found()
deps = [freetype]
if coretext.found()
deps += [coretext]
endif
executable('ots-validator-checker',
'util/ots-validator-checker.cc',
include_directories: include_directories('include'),
link_with: libots,
dependencies: deps,
install: true,
)
install_man('docs/ots-validator-checker.1')
endif
if freetype.found()
executable('ots-side-by-side',
'util/ots-side-by-side.cc',
include_directories: include_directories('include'),
link_with: libots,
dependencies: freetype,
install: true,
)
install_man('docs/ots-side-by-side.1')
endif
if cxx.has_header('sys/time.h')
executable('ots-perf',
'util/ots-perf.cc',
include_directories: include_directories('include'),
link_with: libots,
install: true,
)
install_man('docs/ots-perf.1')
endif
# https://mesonbuild.com/Dependencies.html#gtest-and-gmock
gtest = dependency('gtest', main : true, fallback : ['gtest', 'gtest_main_dep'])
cff_charstring = executable('cff_charstring',
'tests/cff_charstring_test.cc',
include_directories: include_directories(['include', 'src']),
link_with: libots,
dependencies: gtest,
)
test('cff_charstring', cff_charstring)
layout_common_table = executable('layout_common_table',
'tests/layout_common_table_test.cc',
include_directories: include_directories(['include', 'src']),
link_with: libots,
dependencies: gtest,
)
test('layout_common_table', layout_common_table,
protocol: 'gtest',
)
foreach file_name : bad_fonts
test(file_name, ots_sanitize,
args: meson.current_source_dir() / 'tests' / file_name,
suite: 'bad',
should_fail: true,
)
endforeach
foreach file_name : fuzzing_fonts
test(file_name, ots_fuzzer,
args: meson.current_source_dir() / 'tests' / file_name,
suite: 'fuzzing',
)
endforeach