[json-glib] Add various compiler and linker flags to the Meson build



commit 67ee227fdde5dd5799aa40d41a47f4cbf9b347ce
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Mon Mar 13 12:49:53 2017 +0000

    Add various compiler and linker flags to the Meson build
    
    We want more warnings to be printed out when build json-glib.
    
    We also want to take advantage of linker flags like z,relro and z,now,
    as well as -Bsymbolic-functions.

 json-glib/meson.build |   19 +++++++++++--
 meson.build           |   72 ++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 87 insertions(+), 4 deletions(-)
---
diff --git a/json-glib/meson.build b/json-glib/meson.build
index 41bbb74..13b7467 100644
--- a/json-glib/meson.build
+++ b/json-glib/meson.build
@@ -55,19 +55,32 @@ version_h = configure_file(input: 'json-version.h.in',
 
 install_headers(source_h, subdir: install_header_subdir)
 
-localedir = join_paths(get_option('prefix'), get_option('localedir'))
 json_c_args = [
   '-DJSON_COMPILATION',
   '-DG_LOG_DOMAIN="Json"',
-  '-DJSON_LOCALEDIR="@0@"'.format(localedir)
+  '-DJSON_LOCALEDIR="@0@"'.format(json_localedir)
 ]
+
+common_ldflags = []
+
+if host_system == 'linux'
+  common_ldflags = [ '-Wl,-Bsymbolic', '-Wl,-z,relro', '-Wl,-z,now', ]
+endif
+
+# Maintain compatibility with autotools
+if host_system == 'darwin'
+  common_ldflags += [ '-compatibility_version=1', '-current_version=1.0', ]
+endif
+
+
 json_lib = library('json-glib-1.0',
                    source_c,
                    version: libversion,
                    soversion: soversion,
                    include_directories: root_dir,
                    dependencies: [ gio_dep, gobject_dep, ],
-                   c_args: json_c_args + extra_args,
+                   c_args: json_c_args + common_cflags + extra_args,
+                   link_args: common_ldflags,
                    install: true)
 
 pkgg = import('pkgconfig')
diff --git a/meson.build b/meson.build
index d1ec730..333af60 100644
--- a/meson.build
+++ b/meson.build
@@ -35,6 +35,7 @@ libversion = '@0@.@1@.@2@'.format(soversion, current, revision)
 json_includedir = join_paths(get_option('prefix'), get_option('includedir'))
 json_datadir = join_paths(get_option('prefix'), get_option('datadir'))
 json_mandir = join_paths(get_option('prefix'), get_option('mandir'))
+json_localedir = join_paths(get_option('prefix'), get_option('localedir'))
 
 # Dependencies
 glib_req_version = '>= 2.37.6'
@@ -43,6 +44,7 @@ gio_dep = dependency('gio-2.0', version: glib_req_version)
 
 # Configurations
 cc = meson.get_compiler('c')
+host_system = host_machine.system()
 extra_args = []
 
 cdata = configuration_data()
@@ -57,8 +59,76 @@ foreach h: check_headers
 endforeach
 cdata.set_quoted('GETTEXT_PACKAGE', 'json-glib-1.0')
 
+if cc.get_id() == 'msvc'
+  # Compiler options taken from msvc_recommended_pragmas.h
+  # in GLib, based on _Win32_Programming_ by Rector and Newcomer
+  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_cflags = []
+foreach cflag: test_cflags
+  if cc.has_argument(cflag)
+    common_cflags += [ cflag ]
+  endif
+endforeach
+
 if get_option('default_library') != 'static'
-  if host_machine.system() == 'windows'
+  if host_system == 'windows'
     cdata.set('DLL_EXPORT', true)
     if cc.get_id() == 'msvc'
       cdata.set('_JSON_EXTERN', '__declspec(dllexport) extern')


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