Skip to content

Commit

Permalink
Don't use -Wall for external programs
Browse files Browse the repository at this point in the history
For Chimara, Osxcart, and the interpreters, there is no point in
enabling warnings only to disable specific ones later. The external
programs should have warnings enabled in their own repositories instead.

In order to check these compiler flags for different compilers, we use
some AX_ macros from the Autoconf Archive, adding them to the in-tree
m4/ directory.
  • Loading branch information
ptomato committed Oct 18, 2015
1 parent b902c3d commit 31b4188
Show file tree
Hide file tree
Showing 8 changed files with 271 additions and 16 deletions.
15 changes: 15 additions & 0 deletions configure.ac
Expand Up @@ -310,6 +310,21 @@ AC_SUBST(PLUGIN_LIBTOOL_FLAGS)
AC_SUBST(COPYRIGHT_YEAR, [`$DATE +%Y`])
AC_DEFINE_UNQUOTED([COPYRIGHT_YEAR], ["$COPYRIGHT_YEAR"], [Year this program was built.])

# Compiler flags
AX_APPEND_COMPILE_FLAGS([-Wall], [WARNINGFLAGS])
AC_SUBST([WARNINGFLAGS])
AX_APPEND_COMPILE_FLAGS([-Wno-unused-result], [INWEBC_EXTRAFLAGS])
AC_SUBST([INWEBC_EXTRAFLAGS])
AX_APPEND_COMPILE_FLAGS([-Wno-pointer-to-int-cast], [INFORM6_EXTRAFLAGS])
AC_SUBST([INFORM6_EXTRAFLAGS])
AX_APPEND_COMPILE_FLAGS([-Wno-tautological-compare], [CHIMARA_EXTRAFLAGS])
AC_SUBST([CHIMARA_EXTRAFLAGS])
AX_APPEND_COMPILE_FLAGS([-Wno-implicit-function-declaration],
[FROTZ_EXTRAFLAGS])
AC_SUBST([FROTZ_EXTRAFLAGS])
AX_APPEND_COMPILE_FLAGS([-Wno-pointer-sign], [GIT_EXTRAFLAGS])
AC_SUBST([GIT_EXTRAFLAGS])

### OUTPUT #####################################################################

# Output platform-specific definitions to config.h
Expand Down
65 changes: 65 additions & 0 deletions m4/ax_append_compile_flags.m4
@@ -0,0 +1,65 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS])
#
# DESCRIPTION
#
# For every FLAG1, FLAG2 it is checked whether the compiler works with the
# flag. If it does, the flag is added FLAGS-VARIABLE
#
# If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
# CFLAGS) is used. During the check the flag is always added to the
# current language's flags.
#
# If EXTRA-FLAGS is defined, it is added to the current language's default
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
# force the compiler to issue an error when a bad flag is given.
#
# NOTE: This macro depends on the AX_APPEND_FLAG and
# AX_CHECK_COMPILE_FLAG. Please keep this macro in sync with
# AX_APPEND_LINK_FLAGS.
#
# LICENSE
#
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
#
# This program 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 3 of the License, or (at your
# option) any later version.
#
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
# scripts that are the output of Autoconf when processing the Macro. You
# need not follow the terms of the GNU General Public License when using
# or distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the Autoconf
# Macro released by the Autoconf Archive. When you make and distribute a
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.

#serial 4

AC_DEFUN([AX_APPEND_COMPILE_FLAGS],
[AX_REQUIRE_DEFINED([AX_CHECK_COMPILE_FLAG])
AX_REQUIRE_DEFINED([AX_APPEND_FLAG])
for flag in $1; do
AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3])
done
])dnl AX_APPEND_COMPILE_FLAGS
71 changes: 71 additions & 0 deletions m4/ax_append_flag.m4
@@ -0,0 +1,71 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_append_flag.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE])
#
# DESCRIPTION
#
# FLAG is appended to the FLAGS-VARIABLE shell variable, with a space
# added in between.
#
# If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
# CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains
# FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly
# FLAG.
#
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION.
#
# LICENSE
#
# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
#
# This program 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 3 of the License, or (at your
# option) any later version.
#
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
# scripts that are the output of Autoconf when processing the Macro. You
# need not follow the terms of the GNU General Public License when using
# or distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the Autoconf
# Macro released by the Autoconf Archive. When you make and distribute a
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.

#serial 6

AC_DEFUN([AX_APPEND_FLAG],
[dnl
AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF
AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])])
AS_VAR_SET_IF(FLAGS,[
AS_CASE([" AS_VAR_GET(FLAGS) "],
[*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])],
[
AS_VAR_APPEND(FLAGS,[" $1"])
AC_RUN_LOG([: FLAGS="$FLAGS"])
])
],
[
AS_VAR_SET(FLAGS,[$1])
AC_RUN_LOG([: FLAGS="$FLAGS"])
])
AS_VAR_POPDEF([FLAGS])dnl
])dnl AX_APPEND_FLAG
74 changes: 74 additions & 0 deletions m4/ax_check_compile_flag.m4
@@ -0,0 +1,74 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
#
# DESCRIPTION
#
# Check whether the given FLAG works with the current language's compiler
# or gives an error. (Warnings, however, are ignored)
#
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
# success/failure.
#
# If EXTRA-FLAGS is defined, it is added to the current language's default
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
# force the compiler to issue an error when a bad flag is given.
#
# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
#
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
#
# LICENSE
#
# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
#
# This program 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 3 of the License, or (at your
# option) any later version.
#
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
# scripts that are the output of Autoconf when processing the Macro. You
# need not follow the terms of the GNU General Public License when using
# or distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the Autoconf
# Macro released by the Autoconf Archive. When you make and distribute a
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.

#serial 4

AC_DEFUN([AX_CHECK_COMPILE_FLAG],
[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
[AS_VAR_SET(CACHEVAR,[yes])],
[AS_VAR_SET(CACHEVAR,[no])])
_AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
AS_VAR_IF(CACHEVAR,yes,
[m4_default([$2], :)],
[m4_default([$3], :)])
AS_VAR_POPDEF([CACHEVAR])dnl
])dnl AX_CHECK_COMPILE_FLAGS
37 changes: 37 additions & 0 deletions m4/ax_require_defined.m4
@@ -0,0 +1,37 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_require_defined.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_REQUIRE_DEFINED(MACRO)
#
# DESCRIPTION
#
# AX_REQUIRE_DEFINED is a simple helper for making sure other macros have
# been defined and thus are available for use. This avoids random issues
# where a macro isn't expanded. Instead the configure script emits a
# non-fatal:
#
# ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found
#
# It's like AC_REQUIRE except it doesn't expand the required macro.
#
# Here's an example:
#
# AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG])
#
# LICENSE
#
# Copyright (c) 2014 Mike Frysinger <vapier@gentoo.org>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.

#serial 1

AC_DEFUN([AX_REQUIRE_DEFINED], [dnl
m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])])
])dnl AX_REQUIRE_DEFINED
19 changes: 6 additions & 13 deletions src/Makefile.am
@@ -1,7 +1,5 @@
SUBDIRS = inwebc cBlorb inform6 ni

AM_CFLAGS = -Wall

# We build libinform7gui.a to link to the regular binary
# as well as the test binary
noinst_LIBRARIES = libosxcart.a libchimara.a libinform7gui.a
Expand Down Expand Up @@ -37,7 +35,7 @@ libosxcart_a_CPPFLAGS = \
-DG_LOG_DOMAIN=\"Osxcart\" \
-DLOCALEDIR=\""$(datadir)/locale"\" \
-I$(srcdir)/osxcart
libosxcart_a_CFLAGS = @OSXCART_CFLAGS@ $(AM_CFLAGS)
libosxcart_a_CFLAGS = @OSXCART_CFLAGS@

pluginpath = $(pkglibdir)

Expand Down Expand Up @@ -106,7 +104,7 @@ libchimara_a_CPPFLAGS = \
-DPLUGINDIR=\""$(pluginpath)"\" \
-DPLUGINSOURCEDIR=\""$(abs_builddir)/../interpreters"\" \
-I$(srcdir)/chimara
libchimara_a_CFLAGS = @CHIMARA_CFLAGS@ $(AM_CFLAGS)
libchimara_a_CFLAGS = @CHIMARA_CFLAGS@ $(CHIMARA_EXTRAFLAGS)

BUILT_SOURCES = chimara-marshallers.c chimara-marshallers.h
chimara-marshallers.c: chimara/libchimara/chimara-marshallers.txt
Expand Down Expand Up @@ -146,9 +144,7 @@ frotz_la_CPPFLAGS = \
-I$(srcdir)/chimara/interpreters/frotz \
-I$(srcdir)/chimara/libchimara \
-I$(srcdir)/chimara
frotz_la_CFLAGS = $(AM_CFLAGS) -Wno-pointer-sign -Wno-unused-variable \
-Wno-implicit-function-declaration -Wno-unused-but-set-variable \
-Wno-unused-value
frotz_la_CFLAGS = $(FROTZ_EXTRAFLAGS)
frotz_la_LDFLAGS = -module $(PLUGIN_LIBTOOL_FLAGS)

frotzdocdir = $(datadir)/doc/$(PACKAGE)/frotz
Expand Down Expand Up @@ -180,8 +176,6 @@ glulxe_la_SOURCES = \
chimara/interpreters/glulxe/unixstrt.c \
chimara/interpreters/glulxe/vm.c
glulxe_la_CPPFLAGS = -I$(top_srcdir)/src/chimara/libchimara -DOS_UNIX
glulxe_la_CFLAGS = $(AM_CFLAGS) -Wall -Wmissing-prototypes -Wstrict-prototypes \
-Wno-unused -Wno-strict-aliasing -Wno-maybe-uninitialized
glulxe_la_LDFLAGS = -module $(PLUGIN_LIBTOOL_FLAGS)

glulxedocdir = $(datadir)/doc/$(PACKAGE)/glulxe
Expand Down Expand Up @@ -222,8 +216,7 @@ git_la_SOURCES = \
chimara/interpreters/git/terp.c \
chimara/interpreters/git/accel.c
git_la_CPPFLAGS = -I$(top_srcdir)/src/chimara/libchimara
git_la_CFLAGS = -DCHIMARA_EXTENSIONS -DUSE_INLINE $(AM_CFLAGS) \
-Wno-pointer-sign -Wno-unused-but-set-variable -Wno-strict-aliasing
git_la_CFLAGS = -DCHIMARA_EXTENSIONS -DUSE_INLINE $(GIT_EXTRAFLAGS)
git_la_LDFLAGS = -module $(PLUGIN_LIBTOOL_FLAGS)

gitdocdir = $(datadir)/doc/$(PACKAGE)/git
Expand Down Expand Up @@ -269,12 +262,12 @@ libinform7gui_a_CPPFLAGS = \
-DPACKAGE_LIBEXEC_DIR=\""$(pkglibexecdir)"\" \
-I$(srcdir)/osxcart \
-I$(srcdir)/chimara
libinform7gui_a_CFLAGS = @INFORM7_CFLAGS@ $(AM_CFLAGS)
libinform7gui_a_CFLAGS = @INFORM7_CFLAGS@ $(WARNINGFLAGS)

bin_PROGRAMS = gnome-inform7
gnome_inform7_SOURCES = main.c
gnome_inform7_CPPFLAGS = -DPACKAGE_LOCALE_DIR=\""$(datadir)/locale"\"
gnome_inform7_CFLAGS = @INFORM7_CFLAGS@ $(AM_CFLAGS)
gnome_inform7_CFLAGS = @INFORM7_CFLAGS@ $(WARNINGFLAGS)
gnome_inform7_LDADD = @INFORM7_LIBS@ @OSXCART_LIBS@ @CHIMARA_LIBS@ \
$(INTLLIBS) \
libosxcart.a \
Expand Down
2 changes: 1 addition & 1 deletion src/inform6/Makefile.am
Expand Up @@ -3,7 +3,7 @@ inform6_SOURCES = \
arrays.c asm.c bpatch.c chars.c directs.c errors.c expressc.c expressp.c \
files.c header.h inform.c lexer.c linker.c memory.c objects.c states.c \
symbols.c syntax.c tables.c text.c veneer.c verbs.c
inform6_CFLAGS = -ansi -DLINUX -Wno-pointer-to-int-cast
inform6_CFLAGS = -ansi -DLINUX $(INFORM6_EXTRAFLAGS)

inform6docdir = $(datadir)/doc/$(PACKAGE)/inform6
dist_inform6doc_DATA = readme.txt licence.txt DebugFileFormat.txt \
Expand Down
4 changes: 2 additions & 2 deletions src/inwebc/Makefile.am
@@ -1,3 +1,5 @@
AM_CFLAGS = $(INWEBC_EXTRAFLAGS)

inwebsrc = \
Contents.w \
Preliminaries/Inweb\ vs\ Cweb.w \
Expand Down Expand Up @@ -56,9 +58,7 @@ weave_verbose_0 = @echo " WEAVE " $@;

noinst_PROGRAMS = Tangled/inwebc-bootstrap Tangled/inwebc
Tangled_inwebc_bootstrap_SOURCES = Tangled/inwebc.c
Tangled_inwebc_bootstrap_CFLAGS = -std=c99 $(AM_CFLAGS)
Tangled_inwebc_SOURCES = Tangled/inwebc2.c
Tangled_inwebc_CFLAGS = -std=c99 $(AM_CFLAGS)
BUILT_SOURCES = $(Tangled_inwebc_SOURCES)
WEBDIR = $(srcdir)/..
INWEBC = Tangled/inwebc -at $(WEBDIR)/
Expand Down

0 comments on commit 31b4188

Please sign in to comment.