summaryrefslogtreecommitdiff
path: root/boilerplate
diff options
context:
space:
mode:
authorMathieu Duponchelle <mathieu@centricular.com>2018-05-21 20:08:22 +0200
committerTim-Philipp Müller <tim@centricular.com>2020-07-31 12:21:50 +0100
commit596a82f2d185b101bd74645492821fe2f9e0daa0 (patch)
tree3a595c888df37054bebb989455e73ea3683c6477 /boilerplate
parenta75f8df95761bf88b54c326c5312117ea5073010 (diff)
downloadcairo-596a82f2d185b101bd74645492821fe2f9e0daa0.tar.gz
Add meson build definitions
Co-Authored by: Nirbheek Chauhan <nirbheek@centricular.com> lb90 <luca.bacci982@gmail.com> Tim-Philipp Müller <tim@centricular.com>
Diffstat (limited to 'boilerplate')
-rw-r--r--boilerplate/make-cairo-boilerplate-constructors.py38
-rw-r--r--boilerplate/make-cairo-boilerplate-constructors.sh2
-rw-r--r--boilerplate/meson.build43
3 files changed, 83 insertions, 0 deletions
diff --git a/boilerplate/make-cairo-boilerplate-constructors.py b/boilerplate/make-cairo-boilerplate-constructors.py
new file mode 100644
index 000000000..8e02fa500
--- /dev/null
+++ b/boilerplate/make-cairo-boilerplate-constructors.py
@@ -0,0 +1,38 @@
+# IMPORTANT: Keep in sync with make-cairo-boilerplate-constructors.sh
+# and test/make-cairo-test-constructors.py!
+import argparse
+import sys
+import re
+
+if __name__=='__main__':
+ parser = argparse.ArgumentParser()
+ parser.add_argument('output')
+ parser.add_argument('input', nargs='+')
+ args = parser.parse_args()
+
+ boilerplate_names = []
+
+ match_boilerplate_line = re.compile(r'^CAIRO_BOILERPLATE.*')
+ match_boilerplate_name = re.compile(r'^CAIRO_BOILERPLATE.*\((.*),.*')
+
+ for fname in args.input:
+ with open(fname, 'r') as f:
+ for l in f.readlines():
+ if match_boilerplate_line.match(l):
+ boilerplate_names.append(match_boilerplate_name.match(l).group(1))
+
+ with open(args.output, 'w') as f:
+ f.write('/* WARNING: Autogenerated file - see %s! */\n\n' % sys.argv[0])
+ f.write('#include "cairo-boilerplate-private.h"\n\n')
+ f.write('void _cairo_boilerplate_register_all (void);\n\n')
+
+ for boilerplate_name in boilerplate_names:
+ f.write('extern void _register_%s (void);\n' % boilerplate_name)
+
+ f.write('\nvoid\n')
+ f.write('_cairo_boilerplate_register_all (void)\n')
+ f.write('{\n')
+
+ for boilerplate_name in boilerplate_names:
+ f.write(' _register_%s ();\n' % boilerplate_name)
+ f.write('}\n')
diff --git a/boilerplate/make-cairo-boilerplate-constructors.sh b/boilerplate/make-cairo-boilerplate-constructors.sh
index 09716ca9e..1503e9970 100644
--- a/boilerplate/make-cairo-boilerplate-constructors.sh
+++ b/boilerplate/make-cairo-boilerplate-constructors.sh
@@ -1,4 +1,6 @@
#! /bin/sh
+#
+# IMPORTANT: Keep in sync with make-cairo-boilerplate-constructors.py!
if test $# -eq 0; then
echo "$0: no input files." >&2
diff --git a/boilerplate/meson.build b/boilerplate/meson.build
new file mode 100644
index 000000000..325396d6e
--- /dev/null
+++ b/boilerplate/meson.build
@@ -0,0 +1,43 @@
+cairo_boilerplate_sources = [
+ 'cairo-boilerplate-getopt.c',
+ 'cairo-boilerplate-system.c',
+ 'cairo-boilerplate.c',
+]
+
+cairo_boilerplate_feature_sources = {
+ 'cairo-xlib': ['cairo-boilerplate-xlib.c'],
+ 'cairo-qt': ['cairo-boilerplate-qt.cpp'],
+ 'cairo-quartz': ['cairo-boilerplate-quartz.c'],
+ 'cairo-xcb': ['cairo-boilerplate-xcb.c'],
+ 'cairo-win32': ['cairo-boilerplate-win32.c', 'cairo-boilerplate-win32-printing.c'],
+ 'cairo-drm': ['cairo-boilerplate-drm.c'],
+ 'cairo-cogl': ['cairo-boilerplate-cogl.c'],
+ 'cairo-directfb': ['cairo-boilerplate-directfb.c'],
+ 'cairo-pdf': ['cairo-boilerplate-pdf.c'],
+ 'cairo-ps': ['cairo-boilerplate-ps.c'],
+ 'cairo-svg': ['cairo-boilerplate-svg.c'],
+ 'cairo-vg': ['cairo-boilerplate-vg.c'],
+ 'cairo-script': ['cairo-boilerplate-script.c'],
+ # All tests crash with FPE
+ # 'cairo-egl': ['cairo-boilerplate-egl.c'],
+ # cairo-glx: ['cairo-boilerplate-glx.c'],
+ 'cairo-wgl': ['cairo-boilerplate-wgl.c'],
+}
+
+foreach feature: built_features
+ source_key = feature.get('source-key', feature.get('name'))
+ cairo_boilerplate_sources += cairo_boilerplate_feature_sources.get(source_key, [])
+endforeach
+
+cairo_boilerplate_constructors = custom_target('cairo-boilerplate-constructors.c',
+ input: files(cairo_boilerplate_sources),
+ output: 'cairo-boilerplate-constructors.c',
+ command: [python3, files('make-cairo-boilerplate-constructors.py')[0], '@OUTPUT@', '@INPUT@'])
+
+libcairoboilerplate = static_library('cairoboilerplate', cairo_boilerplate_sources + [cairo_boilerplate_constructors],
+ c_args: ['-DHAVE_CONFIG_H'],
+ cpp_args: ['-DHAVE_CONFIG_H'],
+ include_directories: [incbase, incsrc],
+ dependencies: deps,
+ link_with: [libcairo],
+)