[retro-gtk] build: Add Meson support



commit 781a8af9a442857e4a41f1c7364dbf89fc883ffb
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Thu Sep 28 10:52:30 2017 +0200

    build: Add Meson support

 .editorconfig                                |    5 +
 demos/meson.build                            |   14 +++
 flatpak/org.gnome.Retro.DemoSamplesTest.json |    5 +-
 meson.build                                  |   37 ++++++
 retro-gtk/meson.build                        |  154 ++++++++++++++++++++++++++
 retro-gtk/retro-gtk-version.h.in             |   81 ++++++++++++++
 retro-gtk/retro-gtk.h                        |    1 +
 retro-gtk/retro-module-query.c               |    2 +
 8 files changed, 296 insertions(+), 3 deletions(-)
---
diff --git a/.editorconfig b/.editorconfig
index c862fe8..14415a2 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -31,5 +31,10 @@ indent_size = 8
 tab_size = 8
 indent_style = space
 
+[meson.build]
+indent_size = 2
+tab_size = 2
+indent_style = space
+
 [NEWS]
 max_line_length = 72
diff --git a/demos/meson.build b/demos/meson.build
new file mode 100644
index 0000000..7db27a2
--- /dev/null
+++ b/demos/meson.build
@@ -0,0 +1,14 @@
+retro_demo_c_args = [
+  '-DRETRO_GTK_USE_UNSTABLE_API',
+]
+
+executable(
+  'retro-demo',
+  'retro-demo.c',
+  c_args: retro_demo_c_args,
+  dependencies: retro_gtk_deps,
+  link_with: retro_gtk_lib,
+  include_directories: [ confinc, srcinc ],
+  gui_app: true,
+  install: true,
+)
diff --git a/flatpak/org.gnome.Retro.DemoSamplesTest.json b/flatpak/org.gnome.Retro.DemoSamplesTest.json
index 07233ca..599095e 100644
--- a/flatpak/org.gnome.Retro.DemoSamplesTest.json
+++ b/flatpak/org.gnome.Retro.DemoSamplesTest.json
@@ -56,9 +56,8 @@
         },
         {
             "name": "retro-gtk",
-            "config-opts": [
-                "--disable-static"
-            ],
+            "buildsystem": "meson",
+            "builddir": true,
             "sources": [
                 {
                     "type": "git",
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..dc9e154
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,37 @@
+project('retro-gtk','c',
+  version: '0.13.1',
+  meson_version: '>= 0.43.0',
+)
+
+gnome = import('gnome')
+
+libdir = get_option ('libdir')
+libretrodir = join_paths (libdir, 'libretro')
+
+confinc = include_directories('.')
+srcinc = include_directories('retro-gtk')
+
+glib_version = '>= 2.50'
+gtk_version = '>= 3.22'
+
+gio = dependency ('gio-2.0', version: glib_version)
+glib = dependency ('glib-2.0', version: glib_version)
+gmodule = dependency ('gmodule-2.0', version: glib_version)
+gobject = dependency ('gobject-2.0', version: glib_version)
+gtk = dependency ('gtk+-3.0', version: gtk_version)
+libpulse_simple = dependency ('libpulse-simple')
+
+config_h = configuration_data()
+config_h.set_quoted ('RETRO_PLUGIN_PATH', ':'.join ([libretrodir, libdir]))
+
+configure_file(
+  output: 'retro-gtk-config.h',
+  configuration: config_h,
+)
+
+add_project_arguments([
+  '-I' + meson.build_root(),
+], language: 'c')
+
+subdir('retro-gtk')
+subdir('demos')
diff --git a/retro-gtk/meson.build b/retro-gtk/meson.build
new file mode 100644
index 0000000..1840921
--- /dev/null
+++ b/retro-gtk/meson.build
@@ -0,0 +1,154 @@
+api_version = '0.14'
+
+retro_gtk_module = 'retro-gtk-' + api_version
+
+retro_gtk_sources = [
+  'retro-cairo-display.c',
+  'retro-controller.c',
+  'retro-controller-codes.c',
+  'retro-controller-iterator.c',
+  'retro-controller-type.c',
+  'retro-core.c',
+  'retro-core-descriptor.c',
+  'retro-core-view.c',
+  'retro-core-view-controller.c',
+  'retro-environment.c',
+  'retro-game-info.c',
+  'retro-input.c',
+  'retro-input-descriptor.c',
+  'retro-keyboard-key.c',
+  'retro-log.c',
+  'retro-main-loop.c',
+  'retro-memory-type.c',
+  'retro-module.c',
+  'retro-module-iterator.c',
+  'retro-module-query.c',
+  'retro-option.c',
+  'retro-options.c',
+  'retro-pa-player.c',
+  'retro-pixdata.c',
+  'retro-pixel-format.c',
+  'retro-rumble-effect.c',
+  'retro-video-filter.c',
+]
+
+retro_gtk_main_header = 'retro-gtk.h'
+
+retro_gtk_headers = [
+  retro_gtk_main_header,
+  'retro-controller.h',
+  'retro-controller-codes.h',
+  'retro-controller-iterator.h',
+  'retro-controller-type.h',
+  'retro-core-descriptor.h',
+  'retro-core.h',
+  'retro-core-view.h',
+  'retro-input.h',
+  'retro-log.h',
+  'retro-main-loop.h',
+  'retro-memory-type.h',
+  'retro-module-iterator.h',
+  'retro-module-query.h',
+  'retro-pixdata.h',
+  'retro-rumble-effect.h',
+  'retro-video-filter.h',
+]
+
+version_split = meson.project_version().split('.')
+MAJOR_VERSION = version_split[0]
+MINOR_VERSION = version_split[1]
+MICRO_VERSION = version_split[2]
+
+version_conf = configuration_data()
+version_conf.set('VERSION', meson.project_version())
+version_conf.set('MAJOR_VERSION', MAJOR_VERSION)
+version_conf.set('MINOR_VERSION', MINOR_VERSION)
+version_conf.set('MICRO_VERSION', MICRO_VERSION)
+
+configure_file(
+  input: 'retro-gtk-version.h.in',
+  output: 'retro-gtk-version.h',
+  configuration: version_conf,
+  install: true,
+  install_dir: join_paths(get_option('includedir'), 'retro-gtk')
+)
+
+retro_gtk_c_args = [
+  '-DRETRO_GTK_COMPILATION',
+  '-DG_LOG_DOMAIN="Retro"',
+]
+
+retro_gtk_deps = [
+  gio,
+  glib,
+  gmodule,
+  gobject,
+  gtk,
+  libpulse_simple,
+]
+
+retro_gtk_lib = shared_library(
+  retro_gtk_module,
+  retro_gtk_sources,
+  c_args: retro_gtk_c_args,
+  dependencies: retro_gtk_deps,
+  install: true,
+)
+
+retro_gtk_gir_args = [
+   '--quiet',
+  '-DRETRO_GTK_USE_UNSTABLE_API',
+]
+
+retro_gtk_gir_includes = [
+  'Gio-2.0',
+  'GLib-2.0',
+  'GModule-2.0',
+  'GObject-2.0',
+  'Gtk-3.0',
+]
+
+retro_gtk_gir = gnome.generate_gir(
+  retro_gtk_lib,
+  extra_args: retro_gtk_gir_args,
+  export_packages: retro_gtk_module,
+  sources: retro_gtk_headers + retro_gtk_sources,
+  nsversion: api_version,
+  namespace: 'Retro',
+  identifier_prefix: 'Retro',
+  includes: retro_gtk_gir_includes,
+  header: retro_gtk_main_header,
+  install: true,
+  symbol_prefix: 'retro',
+)
+
+retro_gtk_vapi_packages = [
+  'gio-2.0',
+  'glib-2.0',
+  'gmodule-2.0',
+  'gobject-2.0',
+  'gtk+-3.0',
+  # 'libpulse-simple',
+]
+
+gnome.generate_vapi(
+  retro_gtk_module,
+  install: true,
+  packages: retro_gtk_vapi_packages,
+  sources: retro_gtk_gir[0],
+)
+
+install_headers(retro_gtk_headers, subdir: 'retro-gtk')
+
+pkg = import('pkgconfig')
+
+pkg.generate(
+  description: 'A simple GObject game controller library',
+    libraries: retro_gtk_lib,
+         name: 'retro-gtk',
+     filebase: 'retro-gtk-' + api_version,
+      version: meson.project_version(),
+      subdirs: 'retro-gtk',
+     requires: 'glib-2.0',
+  install_dir: join_paths(get_option('libdir'), 'pkgconfig')
+)
diff --git a/retro-gtk/retro-gtk-version.h.in b/retro-gtk/retro-gtk-version.h.in
new file mode 100644
index 0000000..4b46d59
--- /dev/null
+++ b/retro-gtk/retro-gtk-version.h.in
@@ -0,0 +1,81 @@
+// This file is part of retro-gtk. License: GPL-3.0+.
+
+#ifndef RETRO_GTK_VERSION_H
+#define RETRO_GTK_VERSION_H
+
+#if !defined(__RETRO_GTK_INSIDE__) && !defined(RETRO_GTK_COMPILATION)
+# error "Only <retro-gtk.h> can be included directly."
+#endif
+
+/**
+ * SECTION:retro-gtkversion
+ * @short_description: retro-gtk version checking
+ *
+ * retro-gtk provides macros to check the version of the library
+ * at compile-time
+ */
+
+/**
+ * RETRO_GTK_MAJOR_VERSION:
+ *
+ * retro-gtk major version component (e.g. 1 if %RETRO_GTK_VERSION is 1.2.3)
+ */
+#define RETRO_GTK_MAJOR_VERSION (@MAJOR_VERSION@)
+
+/**
+ * RETRO_GTK_MINOR_VERSION:
+ *
+ * retro-gtk minor version component (e.g. 2 if %RETRO_GTK_VERSION is 1.2.3)
+ */
+#define RETRO_GTK_MINOR_VERSION (@MINOR_VERSION@)
+
+/**
+ * RETRO_GTK_MICRO_VERSION:
+ *
+ * retro-gtk micro version component (e.g. 3 if %RETRO_GTK_VERSION is 1.2.3)
+ */
+#define RETRO_GTK_MICRO_VERSION (@MICRO_VERSION@)
+
+/**
+ * RETRO_GTK_VERSION
+ *
+ * retro-gtk version.
+ */
+#define RETRO_GTK_VERSION (@VERSION@)
+
+/**
+ * RETRO_GTK_VERSION_S:
+ *
+ * retro-gtk version, encoded as a string, useful for printing and
+ * concatenation.
+ */
+#define RETRO_GTK_VERSION_S "@VERSION@"
+
+#define RETRO_GTK_ENCODE_VERSION(major,minor,micro) \
+        ((major) << 24 | (minor) << 16 | (micro) << 8)
+
+/**
+ * RETRO_GTK_VERSION_HEX:
+ *
+ * retro-gtk version, encoded as an hexadecimal number, useful for
+ * integer comparisons.
+ */
+#define RETRO_GTK_VERSION_HEX \
+        (RETRO_GTK_ENCODE_VERSION (RETRO_GTK_MAJOR_VERSION, RETRO_GTK_MINOR_VERSION, 
RETRO_GTK_MICRO_VERSION))
+
+/**
+ * RETRO_GTK_CHECK_VERSION:
+ * @major: required major version
+ * @minor: required minor version
+ * @micro: required micro version
+ *
+ * Compile-time version checking. Evaluates to %TRUE if the version
+ * of retro-gtk is greater than the required one.
+ */
+#define RETRO_GTK_CHECK_VERSION(major,minor,micro)   \
+        (RETRO_GTK_MAJOR_VERSION > (major) || \
+         (RETRO_GTK_MAJOR_VERSION == (major) && RETRO_GTK_MINOR_VERSION > (minor)) || \
+         (RETRO_GTK_MAJOR_VERSION == (major) && RETRO_GTK_MINOR_VERSION == (minor) && \
+          RETRO_GTK_MICRO_VERSION >= (micro)))
+
+#endif /* RETRO_GTK_VERSION_H */
diff --git a/retro-gtk/retro-gtk.h b/retro-gtk/retro-gtk.h
index 8ac0437..78ee742 100644
--- a/retro-gtk/retro-gtk.h
+++ b/retro-gtk/retro-gtk.h
@@ -15,6 +15,7 @@
 #include "retro-core.h"
 #include "retro-core-descriptor.h"
 #include "retro-core-view.h"
+#include "retro-gtk-version.h"
 #include "retro-input.h"
 #include "retro-log.h"
 #include "retro-main-loop.h"
diff --git a/retro-gtk/retro-module-query.c b/retro-gtk/retro-module-query.c
index d98cec4..097389c 100644
--- a/retro-gtk/retro-module-query.c
+++ b/retro-gtk/retro-module-query.c
@@ -2,6 +2,8 @@
 
 #include "retro-module-query.h"
 
+#include "../retro-gtk-config.h"
+
 struct _RetroModuleQuery
 {
   GObject parent_instance;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]