[libgxps/wip/nacho/meson] Add meson build system
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgxps/wip/nacho/meson] Add meson build system
- Date: Fri, 5 May 2017 19:48:16 +0000 (UTC)
commit 64179beba692a26f48e047346843a26c6e22cff8
Author: Ignacio Casal Quinteiro <qignacio amazon com>
Date: Tue May 2 21:55:50 2017 +0200
Add meson build system
libgxps/meson.build | 76 +++++++++++++++++++++
meson.build | 184 +++++++++++++++++++++++++++++++++++++++++++++++++++
meson_options.txt | 3 +
3 files changed, 263 insertions(+), 0 deletions(-)
---
diff --git a/libgxps/meson.build b/libgxps/meson.build
new file mode 100644
index 0000000..99237bc
--- /dev/null
+++ b/libgxps/meson.build
@@ -0,0 +1,76 @@
+headers = [
+ 'gxps.h',
+]
+
+private_headers = [
+
+]
+
+sources = [
+ 'gxps-archive.c',
+ 'gxps-brush.c',
+ 'gxps-color.c',
+ 'gxps-core-properties.c',
+ 'gxps-debug.c',
+ 'gxps-document.c',
+ 'gxps-document-structure.c',
+ 'gxps-error.c',
+ 'gxps-file.c',
+ 'gxps-fonts.c',
+ 'gxps-glyphs.c',
+ 'gxps-links.c',
+ 'gxps-matrix.c',
+ 'gxps-images.c',
+ 'gxps-page.c',
+ 'gxps-parse-utils.c',
+ 'gxps-path.c',
+]
+
+install_headers(headers, subdir: gxps_includedir_real)
+
+platform_deps = [ glib, gobject, gio, cairo, archive, freetype ]
+
+if cc.get_id() == 'msvc'
+ gxps_link_args = []
+else
+ gxps_link_args = [ '-Wl,-Bsymbolic-functions' ]
+endif
+
+gxps = shared_library('gxps',
+ include_directories: core_inc,
+ sources: sources + private_headers,
+ version: libversion,
+ soversion: soversion,
+ install: true,
+ dependencies: platform_deps,
+ c_args: extra_args + common_flags + debug_flags + [ '-DG_LOG_DOMAIN="GXPS"' ],
+ link_args: gxps_link_args)
+
+# Internal dependency, for tests
+gxps_inc = include_directories([ '.', '..' ])
+gxps_dep = declare_dependency(link_with: gxps,
+ include_directories: [ gxps_inc ],
+ dependencies: platform_deps)
+
+pkgg = import('pkgconfig')
+
+pkgg.generate(libraries: [ gxps ],
+ version: libversion,
+ name: 'libgxps',
+ description: 'XPS Documents library.',
+ requires: 'gio-2.0, gobject-2.0, libarchive, cairo-1.0')
+
+if build_gir
+ gir_extra_args = [
+ '--identifier-prefix=GXPS',
+ '--c-include=gxps.h'
+ ]
+ gnome.generate_gir(gxps,
+ sources: headers + sources,
+ nsversion: apiversion,
+ identifier_prefix: 'GXPS',
+ symbol_prefix: 'gxps',
+ includes: [ 'GObject-2.0', 'GLib-2.0', 'Gio-2.0', 'cairo-1.0' ],
+ install: true,
+ extra_args: gir_extra_args)
+endif
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..8d0fa2e
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,184 @@
+project('libgxps', 'c',
+ version: '0.2.5',
+ default_options: [
+ 'buildtype=debugoptimized'
+ ],
+ license: 'LGPL2+',
+ meson_version: '>= 0.36.0')
+
+gxps_version = meson.project_version()
+version_array = gxps_version.split('.')
+gxps_major_version = version_array[0].to_int()
+gxps_minor_version = version_array[1].to_int()
+gxps_micro_version = version_array[2].to_int()
+
+apiversion = '1.0'
+
+# The interface age is reset every time we add new API; this
+# should only happen during development cycles, otherwise the
+# interface age is the same as the micro version
+if gxps_minor_version.is_odd()
+ gxps_interface_age = 0
+else
+ gxps_interface_age = gxps_micro_version
+endif
+
+soversion = 0
+# maintaining compatibility with the previous libtool versioning
+# current = minor * 100 + micro - interface
+# revision = interface
+current = gxps_minor_version * 100 + gxps_micro_version - gxps_interface_age
+revision = gxps_interface_age
+libversion = '@0@.@1@.@2@'.format(soversion, current, revision)
+
+gxps_prefix = get_option('prefix')
+gxps_libdir = join_paths(gxps_prefix, get_option('libdir'))
+gxps_includedir = join_paths(gxps_prefix, get_option('includedir'))
+gxps_includedir_real = join_paths(gxps_includedir,
+ 'libgxps-@0@'.format(apiversion),
+ 'libgxps')
+gxps_datadir = join_paths(gxps_prefix, get_option('datadir'))
+
+cc = meson.get_compiler('c')
+host_system = host_machine.system()
+
+conf = configuration_data()
+
+# Compat variables for pkgconfig
+conf.set('prefix', gxps_prefix)
+conf.set('exec_prefix', gxps_prefix)
+conf.set('libdir', gxps_libdir)
+conf.set('includedir', gxps_includedir)
+
+# Version macros
+conf.set('VERSION', gxps_version)
+
+# Compiler flags
+if cc.get_id() == 'msvc'
+ # Make MSVC more pedantic, this is a recommended pragma list
+ # from _Win32_Programming_ by Rector and Newcomer. Taken from
+ # glib's msvc_recommended_pragmas.h--please see that file for
+ # the meaning of the warning codes used here
+ test_cflags = [
+ '-we4002', # too many actual parameters for macro
+ '-we4003', # not enough actual parameters for macro
+ '-w14010', # single-line comment contains line-continuation character
+ '-we4013', # 'function' undefined; assuming extern returning int
+ '-w14016', # no function return type; using int as default
+ '-we4020', # too many actual parameters
+ '-we4021', # too few actual parameters
+ '-we4027', # function declared without formal parameter list
+ '-we4029', # declared formal parameter list different from definition
+ '-we4033', # 'function' must return a value
+ '-we4035', # 'function' : no return value
+ '-we4045', # array bounds overflow
+ '-we4047', # different levels of indirection
+ '-we4049', # terminating line number emission
+ '-we4053', # an expression of type void was used as an operand
+ '-we4071', # no function prototype given
+ '-we4819', # the file contains a character that cannot be represented in the current code page
+ ]
+elif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
+ test_cflags = [
+ '-Wpointer-arith',
+ '-Wmissing-declarations',
+ '-Wformat=2',
+ '-Wstrict-prototypes',
+ '-Wmissing-prototypes',
+ '-Wnested-externs',
+ '-Wold-style-definition',
+ '-Wdeclaration-after-statement',
+ '-Wunused',
+ '-Wno-uninitialized',
+ '-Wshadow',
+ '-Wcast-align',
+ '-Wmissing-noreturn',
+ '-Wmissing-format-attribute',
+ '-Wlogical-op',
+ '-Wno-discarded-qualifiers',
+ '-Werror=implicit',
+ '-Werror=nonnull',
+ '-Werror=init-self',
+ '-Werror=main',
+ '-Werror=missing-braces',
+ '-Werror=sequence-point',
+ '-Werror=return-type',
+ '-Werror=trigraphs',
+ '-Werror=array-bounds',
+ '-Werror=write-strings',
+ '-Werror=address',
+ '-Werror=int-to-pointer-cast',
+ '-Werror=pointer-to-int-cast',
+ '-Werror=empty-body',
+ '-fno-strict-aliasing',
+ '-Wno-int-conversion',
+ ]
+else
+ test_cflags = []
+endif
+common_flags = []
+foreach cflag: test_cflags
+ if cc.has_argument(cflag)
+ common_flags += [ cflag ]
+ endif
+endforeach
+
+extra_args= []
+
+cdata = configuration_data()
+
+if host_system == 'windows'
+ if cc.get_id() == 'msvc'
+ cdata.set('_GXPS_EXTERN', '__declspec(dllexport) extern')
+ else
+ cdata.set('_GXPS_EXTERN', '__attribute__((visibility("default"))) __declspec(dllexport) extern')
+ extra_args += ['-fvisibility=hidden']
+ endif
+else
+ cdata.set('_GXPS_EXTERN', '__attribute__((visibility("default"))) extern')
+ extra_args += ['-fvisibility=hidden']
+endif
+
+core_inc = include_directories('.')
+
+# Required dependencies
+glib_req = '2.36.0'
+cairo_req = '1.10.0'
+archive_req = '2.8.0'
+
+glib = dependency('glib-2.0', version: '>=' + glib_req)
+gobject = dependency('gobject-2.0', version: '>=' + glib_req)
+gio = dependency('gio-2.0', version: '>=' + glib_req)
+cairo = dependency('cairo', version: '>=' + cairo_req)
+archive = dependency('libarchive', version: '>=' archive_req)
+freetype = dependency('freetype2')
+
+build_gir = gobject.found()
+if get_option('enable-introspection')
+ # XXX: Not nice, but probably our best option
+ gir = find_program('g-ir-scanner', required: false)
+ build_gir = gir.found() and not meson.is_cross_build()
+endif
+
+gnome = import('gnome')
+
+configure_file(output: 'config.h', configuration: cdata)
+
+# Generate the pkg-config files
+configure_file(input: 'libgxps-@0 pc in'.format(apiversion),
+ output: 'libgxps-@0@.pc'.format(apiversion),
+ configuration: conf,
+ install: true,
+ install_dir: join_paths(gxps_libdir, 'pkgconfig'))
+
+subdir('libgxps')
+#subdir('tools')
+
+#if get_option('enable-test')
+# gtk3 = dependency('gtk+-3.0')
+# subdir('test')
+#endif
+
+#if get_option('enable-gtk-doc')
+# subdir('docs')
+#endif
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..012b071
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,3 @@
+option('enable-test', type: 'boolean', value: false, description: 'Compile test application')
+option('enable-gtk-doc', type: 'boolean', value: false, description: 'Enable generating the API reference
(depends on GTK-Doc)')
+option('enable-introspection', type: 'boolean', value: true, description: 'Enable GObject Introspection')
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]