Add Meson build definitions Fixes #490 http://mesonbuild.com
diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..f1aa94b --- /dev/null +++ b/meson.build
@@ -0,0 +1,189 @@ +project('harfbuzz', 'c', 'cpp', + version: '1.7.6') + +cpp = meson.get_compiler('cpp') + +python3 = import('python').find_installation('python3') + +check_headers = [ + ['unistd.h'], + ['sys/mman.h'], + ['xlocale.h'], + ['stdbool.h'], +] + +check_funcs = [ + ['atexit'], + ['mprotect'], + ['sysconf'], + ['getpagesize'], + ['mmap'], + ['isatty'], + ['newlocale'], + ['strtod_l'], + ['round'], +] + +check_freetype_funcs = [ + ['FT_Get_Var_Blend_Coordinates'], + ['FT_Set_Var_Blend_Coordinates'], + ['FT_Done_MM_Var'], +] + +check_alignofs = [ + ['struct{char;}', {'conf-name': 'ALIGNOF_STRUCT_CHAR__'}] +] + +freetype_dep = dependency('freetype2', required: false) +glib_dep = dependency('glib-2.0', required: false) +gobject_dep = dependency('gobject-2.0', required: false) +cairo_dep = dependency('cairo', required: false) +cairo_ft_dep = dependency('cairo-ft', required: false) +fontconfig_dep = dependency('fontconfig', required: false) +graphite2_dep = dependency('graphite2', required: false) +icu_dep = dependency('icu-uc', required: false) +m_dep = cpp.find_library('m') + +deps = [m_dep] + +conf = configuration_data() +incbase = include_directories('.') +cpp_args = ['-DHAVE_CONFIG_H'] + +warn_cflags = [ + '-Wno-non-virtual-dtor', +] + +cpp_args += cpp.get_supported_arguments(warn_cflags) + +if glib_dep.found() + conf.set('HAVE_GLIB', 1) + deps += [glib_dep] +endif + +if gobject_dep.found() + conf.set('HAVE_GOBJECT', 1) + deps += [gobject_dep] +endif + +if cairo_dep.found() + conf.set('HAVE_CAIRO', 1) + deps += [cairo_dep] +endif + +if cairo_ft_dep.found() + conf.set('HAVE_CAIRO_FT', 1) + deps += [cairo_ft_dep] +endif + +if graphite2_dep.found() + conf.set('HAVE_GRAPHITE2', 1) + deps += [graphite2_dep] +endif + +if icu_dep.found() + conf.set('HAVE_ICU', 1) + conf.set('HAVE_ICU_BUILTIN', 1) + deps += [icu_dep] +endif + +if freetype_dep.found() + conf.set('HAVE_FREETYPE', 1) + deps += [freetype_dep] + + if freetype_dep.type_name() == 'internal' + foreach func: check_freetype_funcs + name = func[0] + conf.set('HAVE_@0@'.format(name.to_upper()), 1) + endforeach + else + check_funcs += check_freetype_funcs + endif +endif + +if fontconfig_dep.found() + conf.set('HAVE_FONTCONFIG', 1) + deps += [fontconfig_dep] +endif + +if host_machine.system() != 'windows' + thread_dep = dependency('threads', required: false) + + if thread_dep.found() + conf.set('HAVE_PTHREAD', 1) + deps += [thread_dep] + else + check_headers += ['sched.h'] + check_funcs += ['sched_yield', {'link_with': 'rt'}] + endif +endif + +conf.set('HAVE_OT', true) +conf.set('HAVE_FALLBACK', true) +conf.set_quoted('PACKAGE_NAME', 'HarfBuzz') +conf.set_quoted('PACKAGE_VERSION', meson.project_version()) + +foreach check : check_headers + name = check[0] + + if cpp.has_header(name) + conf.set('HAVE_@0@'.format(name.to_upper().underscorify()), 1) + endif +endforeach + +foreach check : check_funcs + name = check[0] + opts = check.length() > 1 ? check[1] : {} + link_withs = opts.get('link_with', []) + extra_deps = [] + found = true + + # First try without linking + + found = cpp.has_function(name) + + if not found and link_withs.length() > 0 + found = true + + foreach link_with : link_withs + dep = cpp.find_library(link_with, required: false) + if dep.found() + extra_deps += dep + else + found = false + endif + endforeach + + if found + found = cpp.has_function(name, dependencies: extra_deps) + endif + endif + + if found + deps += extra_deps + conf.set('HAVE_@0@'.format(name.to_upper()), 1) + endif +endforeach + +foreach check : check_alignofs + type = check[0] + opts = check.length() > 1 ? check[1] : {} + + conf_name = opts.get('conf-name', 'ALIGNOF_@0@'.format(type.to_upper())) + + conf.set(conf_name, cpp.alignment(type)) +endforeach + +if cpp.links(files('meson-cc-tests/intel-atomic-primitives-test.c'), name: 'Intel atomics') + conf.set('HAVE_INTEL_ATOMIC_PRIMITIVES', 1) +endif + +if cpp.links(files('meson-cc-tests/solaris-atomic-operations.c'), name: 'Solaris atomic ops') + conf.set('HAVE_SOLARIS_ATOMIC_OPS', 1) +endif + +subdir('src') +subdir('util') +subdir('test') + +configure_file(output: 'config.h', configuration: conf)