[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, 9 Jun 2017 16:50:04 +0000 (UTC)
commit 6e90f9a93fac38ec90f69738cae0df5845f5fa81
Author: Ignacio Casal Quinteiro <qignacio amazon com>
Date: Tue May 2 21:55:50 2017 +0200
Add meson build system
libgxps/meson.build | 109 +++++++++++++++++++++++++
meson.build | 220 +++++++++++++++++++++++++++++++++++++++++++++++++++
meson_options.txt | 6 ++
test/meson.build | 11 +++
tools/meson.build | 100 +++++++++++++++++++++++
5 files changed, 446 insertions(+), 0 deletions(-)
---
diff --git a/libgxps/meson.build b/libgxps/meson.build
new file mode 100644
index 0000000..82e4796
--- /dev/null
+++ b/libgxps/meson.build
@@ -0,0 +1,109 @@
+headers = [
+ 'gxps.h',
+ 'gxps-core-properties.h',
+ 'gxps-document.h',
+ 'gxps-document-structure.h',
+ 'gxps-error.h',
+ 'gxps-file.h',
+ 'gxps-links.h',
+ 'gxps-page.h',
+]
+
+private_headers = [
+ 'gxps-archive.h',
+ 'gxps-brush.h',
+ 'gxps-color.h',
+ 'gxps-debug.h',
+ 'gxps-fonts.h',
+ 'gxps-glyphs.h',
+ 'gxps-images.h',
+ 'gxps-matrix.h',
+ 'gxps-page-private.h',
+ 'gxps-parse-utils.h',
+ 'gxps-path.h',
+ 'gxps-private.h',
+]
+
+introspection_sources = [
+ '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-glyphs.c',
+ 'gxps-links.c',
+ 'gxps-matrix.c',
+ 'gxps-page.c',
+ 'gxps-path.c',
+]
+
+sources = [
+ 'gxps-archive.c',
+ 'gxps-fonts.c',
+ 'gxps-images.c',
+ 'gxps-parse-utils.c',
+]
+
+sources = [ sources + introspection_sources ]
+
+version_data = configuration_data()
+version_data.set('GXPS_MAJOR_VERSION', gxps_major_version)
+version_data.set('GXPS_MINOR_VERSION', gxps_minor_version)
+version_data.set('GXPS_MICRO_VERSION', gxps_micro_version)
+version_data.set('PACKAGE_VERSION', meson.project_version())
+
+gxps_version_h = configure_file(input: 'gxps-version.h.in',
+ output: 'gxps-version.h',
+ install_dir: gxps_headers_installdir,
+ install: true,
+ configuration: version_data)
+
+install_headers(headers, subdir: gxps_headers_installdir)
+
+gxps_deps = [ glib_dep, gobject_dep, gio_dep, cairo_dep, cairo_pdf_dep, cairo_ps_dep, cairo_svg_dep,
archive_dep, freetype_dep, png_dep, lcms2_dep, jpeg_dep, tiff_dep, libm_dep ]
+
+common_ldflags = []
+
+if host_system == 'linux'
+ common_ldflags = [ '-Wl,-Bsymbolic' ]
+endif
+
+gxps = shared_library('gxps',
+ include_directories: core_inc,
+ sources: sources + headers + private_headers + [ gxps_version_h ],
+ version: libversion,
+ soversion: soversion,
+ install: true,
+ dependencies: gxps_deps,
+ c_args: extra_args + common_flags + [
+ '-DG_LOG_DOMAIN="GXPS"',
+ '-DGXPS_COMPILATION',
+ ],
+ link_args: common_ldflags)
+
+# Internal dependency, for tests
+gxps_inc = include_directories([ '.', '..' ])
+gxps_dep = declare_dependency(link_with: gxps,
+ include_directories: [ gxps_inc ],
+ dependencies: gxps_deps)
+
+if build_gir
+ gir_extra_args = [
+ '--identifier-prefix=GXPS',
+ '--c-include=gxps.h'
+ ]
+ gnome.generate_gir(gxps,
+ sources: introspection_sources + headers + [ gxps_version_h ],
+ namespace: 'Gxps',
+ 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 + [
+ '-DGXPS_COMPILATION',
+ ])
+endif
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..741dfe5
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,220 @@
+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_headers_installdir = join_paths(gxps_includedir, 'libgxps')
+gxps_datadir = join_paths(gxps_prefix, get_option('datadir'))
+
+cc = meson.get_compiler('c')
+host_system = host_machine.system()
+
+add_project_arguments('-DHAVE_CONFIG_H', language: 'c')
+
+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',
+ '-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_dep = dependency('glib-2.0', version: '>=' + glib_req)
+gobject_dep = dependency('gobject-2.0', version: '>=' + glib_req)
+gio_dep = dependency('gio-2.0', version: '>=' + glib_req)
+cairo_dep = dependency('cairo', version: '>=' + cairo_req)
+cairo_pdf_dep = dependency('cairo-pdf', version: '>=' + cairo_req, required: false)
+cairo_ps_dep = dependency('cairo-ps', version: '>=' + cairo_req, required: false)
+cairo_svg_dep = dependency('cairo-svg', version: '>=' + cairo_req, required: false)
+archive_dep = dependency('libarchive', version: '>=' + archive_req)
+freetype_dep = dependency('freetype2')
+png_dep = dependency('libpng', required: false)
+lcms2_dep = dependency('lcms2', required: get_option('with-liblcms2'))
+jpeg_dep = dependency('libjpeg', required: get_option('with-libjpeg'))
+tiff_dep = dependency('libtiff-4', required: get_option('with-libtiff'))
+
+if cairo_pdf_dep.found()
+ cdata.set('HAVE_CAIRO_PDF', 1)
+endif
+
+if cairo_ps_dep.found()
+ cdata.set('HAVE_CAIRO_PS', 1)
+endif
+
+if cairo_svg_dep.found()
+ cdata.set('HAVE_CAIRO_SVG', 1)
+endif
+
+if png_dep.found()
+ cdata.set('HAVE_LIBPNG', 1)
+endif
+
+if lcms2_dep.found()
+ cdata.set('HAVE_LIBLCMS2', 1)
+endif
+
+if jpeg_dep.found()
+ cdata.set('HAVE_LIBJPEG', 1)
+endif
+
+if tiff_dep.found()
+ cdata.set('HAVE_LIBTIFF', 1)
+endif
+
+# Maths functions might be implemented in libm
+libm_dep = cc.find_library('m')
+
+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.pc.in',
+ output: 'libgxps.pc',
+ configuration: conf,
+ install: true,
+ install_dir: join_paths(gxps_libdir, 'pkgconfig'))
+
+subdir('libgxps')
+subdir('tools')
+
+if get_option('enable-test')
+ gtk3_dep = 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..ec9f05f
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,6 @@
+option('enable-test', type: 'boolean', value: true, 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')
+option('with-liblcms2', type: 'boolean', value: true, description: 'With Little CMS 2')
+option('with-libjpeg', type: 'boolean', value: true, description: 'With libjpeg')
+option('with-libtiff', type: 'boolean', value: true, description: 'With libtiff')
diff --git a/test/meson.build b/test/meson.build
new file mode 100644
index 0000000..4dbaf06
--- /dev/null
+++ b/test/meson.build
@@ -0,0 +1,11 @@
+test_programs = [
+ 'test-gxps',
+]
+
+foreach test_program: test_programs
+ executable(test_program, test_program + '.c',
+ dependencies: [ gxps_dep, gtk3_dep ],
+ include_directories: gxps_inc)
+endforeach
+
+
diff --git a/tools/meson.build b/tools/meson.build
new file mode 100644
index 0000000..866b2c8
--- /dev/null
+++ b/tools/meson.build
@@ -0,0 +1,100 @@
+tools_sources = [
+ 'gxps-converter.c',
+ 'gxps-converter.h',
+ 'gxps-image-converter.c',
+ 'gxps-image-converter.h',
+ 'gxps-image-writer.c',
+ 'gxps-image-writer.h',
+ 'gxps-print-converter.c',
+ 'gxps-print-converter.h',
+]
+
+gxps_tools_deps = [ glib_dep, gobject_dep, gio_dep, cairo_dep, cairo_pdf_dep, cairo_ps_dep, cairo_svg_dep,
archive_dep, freetype_dep, png_dep, lcms2_dep, jpeg_dep, tiff_dep, libm_dep, gxps_dep ]
+
+gxps_tools = static_library('gxpstools',
+ include_directories: core_inc,
+ sources: tools_sources,
+ install: false,
+ dependencies: gxps_tools_deps)
+
+gxps_tools_dep = declare_dependency(link_with: gxps_tools,
+ dependencies: gxps_tools_deps)
+
+if png_dep.found()
+ xpstopng_sources = [
+ 'gxps-converter-main.c',
+ 'gxps-png-converter.c',
+ 'gxps-png-converter.h',
+ 'gxps-png-writer.c',
+ 'gxps-png-writer.h',
+ ]
+
+ executable('xpstopng', xpstopng_sources,
+ dependencies: [ gxps_tools_dep ],
+ c_args: [
+ '-DCONVERTER_TYPE=GXPS_TYPE_PNG_CONVERTER',
+ '-DCONVERTER_HEADER=gxps-png-converter.h',
+ ])
+endif
+
+if jpeg_dep.found()
+ xpstojpeg_sources = [
+ 'gxps-converter-main.c',
+ 'gxps-jpeg-converter.c',
+ 'gxps-jpeg-converter.h',
+ 'gxps-jpeg-writer.c',
+ 'gxps-jpeg-writer.h',
+ ]
+
+ executable('xpstojpeg', xpstojpeg_sources,
+ dependencies: [ gxps_tools_dep ],
+ c_args: [
+ '-DCONVERTER_TYPE=GXPS_TYPE_JPEG_CONVERTER',
+ '-DCONVERTER_HEADER=gxps-jpeg-converter.h',
+ ])
+endif
+
+if cairo_pdf_dep.found()
+ xpstopdf_sources = [
+ 'gxps-converter-main.c',
+ 'gxps-pdf-converter.c',
+ 'gxps-pdf-converter.h',
+ ]
+
+ executable('xpstopdf', xpstopdf_sources,
+ dependencies: [ gxps_tools_dep ],
+ c_args: [
+ '-DCONVERTER_TYPE=GXPS_TYPE_PDF_CONVERTER',
+ '-DCONVERTER_HEADER=gxps-pdf-converter.h',
+ ])
+endif
+
+if cairo_ps_dep.found()
+ xpstops_sources = [
+ 'gxps-converter-main.c',
+ 'gxps-ps-converter.c',
+ 'gxps-ps-converter.h',
+ ]
+
+ executable('xpstops', xpstops_sources,
+ dependencies: [ gxps_tools_dep ],
+ c_args: [
+ '-DCONVERTER_TYPE=GXPS_TYPE_PS_CONVERTER',
+ '-DCONVERTER_HEADER=gxps-ps-converter.h',
+ ])
+endif
+
+if cairo_svg_dep.found()
+ xpstosvg_sources = [
+ 'gxps-converter-main.c',
+ 'gxps-svg-converter.c',
+ 'gxps-svg-converter.h',
+ ]
+
+ executable('xpstosvg', xpstosvg_sources,
+ dependencies: [ gxps_tools_dep ],
+ c_args: [
+ '-DCONVERTER_TYPE=GXPS_TYPE_SVG_CONVERTER',
+ '-DCONVERTER_HEADER=gxps-svg-converter.h',
+ ])
+endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]