[libgxps/wip/nacho/meson] Add meson build system



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]