project('ots', 'c', 'cpp',
  version: '8.1.3',
  default_options : ['cpp_std=c++11', 'default_library=static', 'warning_level=2'],
  meson_version : '>= 0.55.2',
)

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,
)


executable('ots-sanitize',
  'util/ots-sanitize.cc',
  'util/test-context.h',
  include_directories: include_directories('include'),
  link_with: libots,
  install: true,
)


fuzzer_ldflags = []
fuzzer_defines = []
if get_option('fuzzer_ldflags') != ''
  fuzzer_ldflags += get_option('fuzzer_ldflags').split()
  fuzzer_defines += ['-DOTS_FUZZER_NO_MAIN']
endif

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
  executable('ots-idempotent',
    'util/ots-idempotent.cc',
    'util/test-context.h',
    include_directories: include_directories('include'),
    link_with: libots,
    dependencies: deps,
    install: true,
  )
  test_good_fonts = find_program('tests/test_good_fonts.sh')
  test('test_good_fonts',
    test_good_fonts,
    timeout: 9999,
    env: [
      'top_srcdir=@0@'.format(meson.current_source_dir()),
      'top_builddir=@0@'.format(meson.current_build_dir()),
    ]
  )
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,
  )
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,
  )
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,
  )
endif


install_man('docs/ots-sanitize.1')

# 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)


test('test_bad_fonts',
  find_program('tests/test_bad_fonts.sh'),
  env: [
    'top_srcdir=@0@'.format(meson.current_source_dir()),
    'top_builddir=@0@'.format(meson.current_build_dir()),
  ]
)


test('test_fuzzed_fonts',
  find_program('tests/test_fuzzed_fonts.sh'),
  timeout: 9999,
  env: [
    'top_srcdir=@0@'.format(meson.current_source_dir()),
    'top_builddir=@0@'.format(meson.current_build_dir()),
  ]
)
