Rationalise compiler warning setup.
authorCarl Hetherington <cth@carlh.net>
Sun, 26 Jul 2020 00:29:24 +0000 (02:29 +0200)
committerCarl Hetherington <cth@carlh.net>
Sun, 26 Jul 2020 19:30:59 +0000 (21:30 +0200)
cscript
src/lib/warnings.h [new file with mode: 0644]
wscript

diff --git a/cscript b/cscript
index 052aa6c7c645b654109daf6b1138a45933630ecd..7f262bf81f8a8ed88f1964ef9468bea37a72d879 100644 (file)
--- a/cscript
+++ b/cscript
@@ -392,7 +392,7 @@ def dependencies(target, options):
 option_defaults = { "gui": True, "variant": None }
 
 def configure_options(target, options):
-    opt = ''
+    opt = ' --warnings-are-errors'
 
     if not (target.platform == 'linux' and target.distro == 'ubuntu' and target.version == '18.04'):
         # Currently we only build tests on Ubuntu 18.04
diff --git a/src/lib/warnings.h b/src/lib/warnings.h
new file mode 100644 (file)
index 0000000..e225c03
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+    Copyright (C) 2020 Carl Hetherington <cth@carlh.net>
+
+    This file is part of DCP-o-matic.
+
+    DCP-o-matic is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    DCP-o-matic is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#define DCPOMATIC_DISABLE_WARNINGS \
+  _Pragma("GCC diagnostic push") \
+  _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
+
+#define DCPOMATIC_ENABLE_WARNINGS \
+  _Pragma("GCC diagnostic pop")
diff --git a/wscript b/wscript
index 72db83e2cc638ada4377d2f7dd6b62001518cdbf..4fba8fb570204b53c2e1fd6634248a830789df31 100644 (file)
--- a/wscript
+++ b/wscript
@@ -75,6 +75,7 @@ def options(opt):
     opt.add_option('--variant',           help='build variant (swaroop-studio, swaroop-theater)', choices=['swaroop-studio', 'swaroop-theater'])
     opt.add_option('--use-lld',           action='store_true', default=False, help='use lld linker')
     opt.add_option('--enable-disk',       action='store_true', default=False, help='build dcpomatic2_disk tool; requires Boost process, lwext4 and nanomsg libraries')
+    opt.add_option('--warnings-are-errors', action='store_true', default=False, help='build with -Werror')
 
 def configure(conf):
     conf.load('compiler_cxx')
@@ -106,16 +107,17 @@ def configure(conf):
                                        '-Wall',
                                        '-Wextra',
                                        '-Wwrite-strings',
-                                       '-Wsign-conversion',
-                                       # Remove auto_ptr warnings from libxml++-2.6
-                                       '-Wno-deprecated-declarations',
+                                       # I tried and failed to ignore these with _Pragma
+                                       '-Wno-cast-function-type',
                                        '-Wno-ignored-qualifiers',
-                                       '-Wno-parentheses',
                                        '-D_FILE_OFFSET_BITS=64'])
 
     if conf.options.force_cpp11:
         conf.env.append_value('CXXFLAGS', ['-std=c++11', '-DBOOST_NO_CXX11_SCOPED_ENUMS'])
 
+    if conf.options.warnings_are_errors:
+        conf.env.append_value('CXXFLAGS', '-Werror')
+
     if conf.env['CXX_NAME'] == 'gcc':
         gcc = conf.env['CC_VERSION']
         if int(gcc[0]) >= 4 and int(gcc[1]) > 1:
@@ -325,7 +327,7 @@ def configure(conf):
         conf.check_cc(fragment="""
                                #include <libssh/libssh.h>\n
                                int main () {\n
-                               ssh_session s = ssh_new ();\n
+                               ssh_new ();\n
                                return 0;\n
                                }
                                """,
@@ -550,7 +552,7 @@ def configure(conf):
                 deps.append('boost_filesystem%s' % boost_lib_suffix)
             conf.check_cxx(fragment="""
                                 #include <boost/process.hpp>\n
-                                int main() { boost::process::child* c = new boost::process::child("foo"); }\n
+                                int main() { new boost::process::child("foo"); }\n
                                 """,
                            msg='Checking for boost process library',
                            lib=deps,