summaryrefslogtreecommitdiffstats
path: root/meson.build
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2021-01-11 05:46:46 +0100
committerDavid Robillard <d@drobilla.net>2021-04-14 13:07:52 -0400
commitfd01c2cc782613084d0cba4409a11c1b069a78a3 (patch)
tree5e09088cfd87af7b9e0ac3ed5088078469471078 /meson.build
parent6e556e0818d096befb969e5f8c49f52437a2cece (diff)
downloadsuil-fd01c2cc782613084d0cba4409a11c1b069a78a3.tar.gz
suil-fd01c2cc782613084d0cba4409a11c1b069a78a3.tar.bz2
suil-fd01c2cc782613084d0cba4409a11c1b069a78a3.zip
WIP: Switch to Meson
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build262
1 files changed, 262 insertions, 0 deletions
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..7a413ff
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,262 @@
+project('suil', ['c', 'cpp'],
+ version: '0.24.13',
+ license: 'ISC',
+ meson_version: '>= 0.49.2',
+ default_options: [
+ 'b_ndebug=if-release',
+ 'buildtype=release',
+ 'c_std=c99',
+ 'default_library=both',
+ 'warning_level=2',
+ ])
+
+suil_src_root = meson.current_source_dir()
+major_version = meson.project_version().split('.')[0]
+version_suffix = '-@0@'.format(major_version)
+versioned_name = 'suil' + version_suffix
+
+# Load build tools
+pkg = import('pkgconfig')
+cc = meson.get_compiler('c')
+cpp = meson.get_compiler('cpp')
+
+# Enable Objective C support if we're building for MacOS
+if host_machine.system() == 'darwin'
+ add_languages(['objc'])
+ objcc = meson.get_compiler('objc')
+endif
+
+# Set ultra strict warnings for developers, if requested
+if get_option('strict')
+ subdir('meson')
+
+ c_warnings = all_c_warnings
+ if cc.get_id() == 'clang'
+ c_warnings += [
+ '-Wno-atomic-implicit-seq-cst',
+ '-Wno-cast-qual',
+ '-Wno-disabled-macro-expansion',
+ '-Wno-padded',
+ '-Wno-reserved-id-macro',
+ '-Wno-variadic-macros',
+ ]
+ elif cc.get_id() == 'gcc'
+ c_warnings += [
+ '-Wno-padded',
+ '-Wno-suggest-attribute=const',
+ '-Wno-suggest-attribute=pure',
+ '-Wno-extra-semi', # Qt headers
+ ]
+ elif cc.get_id() == 'msvc'
+ c_warnings += [
+ '/wd4514', # unreferenced inline function has been removed
+ '/wd4820', # padding added after construct
+ '/wd4191', # unsafe function conversion
+ '/wd5045', # will insert Spectre mitigation for memory load
+ ]
+ endif
+
+ add_project_arguments(cc.get_supported_arguments(c_warnings),
+ language: ['c'])
+
+ cpp_warnings = all_cpp_warnings
+ if cpp.get_id() == 'clang'
+ cpp_warnings += [
+ '-Wno-atomic-implicit-seq-cst',
+ '-Wno-cast-qual',
+ '-Wno-disabled-macro-expansion',
+ '-Wno-old-style-cast',
+ '-Wno-padded',
+ '-Wno-reserved-id-macro',
+ '-Wno-variadic-macros',
+ '-Wno-zero-as-null-pointer-constant',
+ ]
+ elif cpp.get_id() == 'gcc'
+ cpp_warnings += [
+ '-Wno-cast-qual',
+ '-Wno-padded',
+ '-Wno-suggest-attribute=const',
+ '-Wno-suggest-attribute=pure',
+ '-Wno-useless-cast',
+ '-Wno-volatile',
+ ]
+ endif
+
+ add_project_arguments(cpp.get_supported_arguments(cpp_warnings),
+ language: ['cpp'])
+endif
+
+# Add special arguments for MSVC
+if cc.get_id() == 'msvc'
+ msvc_args = [
+ '/D_CRT_SECURE_NO_WARNINGS',
+ '/TP',
+ '/experimental:external',
+ '/external:W0',
+ '/external:anglebrackets',
+ ]
+
+ add_project_arguments(msvc_args, language: ['c'])
+endif
+
+c_headers = ['include/suil/suil.h']
+c_header_files = files(c_headers)
+
+sources = [
+ 'src/host.c',
+ 'src/instance.c',
+]
+
+# System libraries
+dl_dep = cc.find_library('dl', required: false)
+
+# Dependencies
+
+lv2_dep = dependency('lv2',
+ version: '>= 1.18.3',
+ fallback: ['lv2', 'lv2_dep'])
+
+x11_dep = dependency('x11', required: false)
+gtk2_dep = dependency('gtk+-2.0', version: '>=2.18.0', required: false)#, include_type: 'system')
+gtk2_x11_dep = dependency('gtk+-x11-2.0', required: false)#, include_type: 'system')
+gtk2_quartz_dep = dependency('gtk+-quartz-2.0', required: false)#, include_type: 'system')
+gtk3_dep = dependency('gtk+-3.0', version: '>=3.14.0', required: false)#, include_type: 'system')
+gtk3_x11_dep = dependency('gtk+-x11-3.0', version: '>=3.14.0', required: false)#, include_type: 'system')
+qt5_dep = dependency('Qt5Widgets', version: '>=5.1.0', required: false)#, include_type: 'system')
+qt5_x11_dep = dependency('Qt5X11Extras', version: '>=5.1.0', required: false)#, include_type: 'system')
+# qt5_cocoa_dep = ...
+
+# Determine library type and the flags needed to build it
+if get_option('default_library') == 'both'
+ if host_machine.system() == 'windows'
+ error('default_library=both is not supported on Windows')
+ endif
+
+ library_type = 'both_libraries'
+ library_args = ['-DSUIL_INTERNAL']
+ prog_args = []
+elif get_option('default_library') == 'shared'
+ library_type = 'shared_library'
+ library_args = ['-DSUIL_INTERNAL']
+ prog_args = []
+else
+ library_type = 'static_library'
+ library_args = ['-DSUIL_INTERNAL', '-DSUIL_STATIC']
+ prog_args = ['-DSUIL_STATIC']
+endif
+
+# Build main shared and/or static library/libraries
+libsuil = build_target(
+ versioned_name,
+ sources,
+ version: meson.project_version(),
+ include_directories: include_directories(['include']),
+ c_args: library_args,
+ dependencies: [dl_dep, lv2_dep],
+ gnu_symbol_visibility: 'hidden',
+ install: true,
+ target_type: library_type)
+
+suil_dep = declare_dependency(
+ include_directories: include_directories(['include']),
+ dependencies: [dl_dep],
+ link_with: libsuil)
+
+pkg.generate(
+ libsuil,
+ name: 'Suil',
+ filebase: versioned_name,
+ subdirs: [versioned_name],
+ version: meson.project_version(),
+ description: 'A library for hosting LV2 plugin UIs')
+
+# Install header to a versioned include directory
+install_headers(c_headers, subdir: versioned_name / 'suil')
+
+# # if not get_option('docs').disabled()
+# # subdir('doc')
+# # endif
+
+# if get_option('tests')
+# subdir('test')
+# endif
+
+if gtk2_dep.found() and qt5_dep.found()
+ shared_module('suil_gtk2_in_qt5',
+ 'src/gtk2_in_qt5.cpp',
+ dependencies: [gtk2_dep, lv2_dep, qt5_dep],
+ gnu_symbol_visibility: 'hidden',
+ include_directories: include_directories(['include']),
+ install: true)
+
+ shared_module('suil_qt5_in_gtk2',
+ 'src/qt5_in_gtk.cpp',
+ dependencies: [gtk3_dep, lv2_dep, qt5_dep],
+ gnu_symbol_visibility: 'hidden',
+ include_directories: include_directories(['include']),
+ install: true)
+endif
+
+if gtk2_dep.found() and gtk2_x11_dep.found() and x11_dep.found()
+ shared_module('suil_x11_in_gtk2',
+ 'src/x11_in_gtk2.c',
+ dependencies: [gtk2_dep, gtk2_x11_dep, lv2_dep, x11_dep],
+ gnu_symbol_visibility: 'hidden',
+ include_directories: include_directories(['include']),
+ install: true)
+endif
+
+if gtk3_dep.found() and gtk3_x11_dep.found() and x11_dep.found()
+ shared_module('suil_x11_in_gtk3',
+ 'src/x11_in_gtk3.c',
+ dependencies: [gtk3_dep, gtk3_x11_dep, lv2_dep, x11_dep],
+ gnu_symbol_visibility: 'hidden',
+ include_directories: include_directories(['include']),
+ install: true)
+endif
+
+if gtk3_dep.found() and qt5_dep.found()
+ shared_module('suil_qt5_in_gtk3',
+ 'src/qt5_in_gtk.cpp',
+ dependencies: [gtk3_dep, lv2_dep, qt5_dep],
+ gnu_symbol_visibility: 'hidden',
+ include_directories: include_directories(['include']),
+ install: true)
+endif
+
+if gtk2_dep.found() and gtk2_quartz_dep.found()
+ shared_module('suil_cocoa_in_gtk2',
+ 'src/cocoa_in_gtk2.mm',
+ dependencies: [gtk3_dep, lv2_dep, qt5_dep],
+ gnu_symbol_visibility: 'hidden',
+ include_directories: include_directories(['include']),
+ install: true)
+endif
+
+if gtk2_dep.found() and host_machine.system() == 'windows'
+ shared_module('suil_win_in_gtk2',
+ 'src/win_in_gtk2.cpp',
+ dependencies: [gtk2_dep, lv2_dep],
+ gnu_symbol_visibility: 'hidden',
+ include_directories: include_directories(['include']),
+ install: true)
+endif
+
+if qt5_dep.found() and qt5_x11_dep.found()
+ shared_module('suil_x11_in_qt5',
+ 'src/x11_in_qt5.cpp',
+ dependencies: [lv2_dep, qt5_dep, qt5_x11_dep],
+ gnu_symbol_visibility: 'hidden',
+ include_directories: include_directories(['include']),
+ install: true)
+
+endif
+
+if meson.version().version_compare('>=0.53.0')
+ # summary('Tests', get_option('tests'), bool_yn: true)
+
+ summary('Install prefix', get_option('prefix'))
+
+ summary('Headers', get_option('prefix') / get_option('includedir'))
+ summary('Libraries', get_option('prefix') / get_option('libdir'))
+endif