[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-tar] [PATCH 2/2] build: new configure option --enable-gcc-warnings
From: |
Paul Eggert |
Subject: |
[Bug-tar] [PATCH 2/2] build: new configure option --enable-gcc-warnings |
Date: |
Tue, 18 Dec 2012 20:44:49 -0800 |
User-agent: |
Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/17.0 Thunderbird/17.0 |
This has a similar meaning as in other GNU applications
such as coreutils and Emacs.
* NEWS: Document it.
* .gitignore: Remove redundant build-aux.
Remove gnu, since gnu/Makefile.am is now in git.
Add gnu/.gitignore, gnu/charset.alias, gnu/*.h, gnu/*/ to cover
autogenerated files.
* bootstrap.conf (gnulib_mk): Remove.
* configure.ac: Add support for --enable-gcc-warnings,
taken from coreutils and simplified.
* gnu/Makefile.am: New file. Formerly this was autogenerated,
but the autogenerated file has been renamed to gnulib.mk,
its usual name when bootstrapping from gnulib.
This way, AM_CFLAGS can incorporate warning options.
* gnulib.modules: Add manywarnings.
* lib/Makefile.am, src/Makefile.am (AM_CFLAGS): New macro,
incorporating warning options.
* lib/attr-xattr.in.h (ENOATTR): New macro, if not already defined.
* src/buffer.c (magic): Don't rely on incomplete initializers.
* src/common.h (report_difference): Add printf format attribute.
* src/system.c (sys_exec_command, sys_exec_info_script)
(sys_exec_checkpoint_script):
* src/tar.c (update_argv):
Add casts to char * to pacify GCC warnings about using string
literals in a char * context.
* src/xattrs.c, src/xattrs.h (xattrs_clear_setup):
Declare parameters as (void), not ().
* src/xheader.c (xheader_format_name): Initialize pptr to null,
to pacify GCC. Remove unnecessary test of nptr versus null.
---
.gitignore | 6 ++--
NEWS | 8 +++---
bootstrap.conf | 1 -
configure.ac | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++
gnu/Makefile.am | 3 ++
gnulib.modules | 1 +
lib/Makefile.am | 5 ++--
lib/attr-xattr.in.h | 4 ++-
src/Makefile.am | 1 +
src/buffer.c | 4 +--
src/common.h | 3 +-
src/system.c | 12 ++++----
src/tar.c | 4 +--
src/xattrs.c | 14 +++++-----
src/xattrs.h | 2 +-
src/xheader.c | 13 ++++-----
16 files changed, 124 insertions(+), 37 deletions(-)
create mode 100644 gnu/Makefile.am
diff --git a/.gitignore b/.gitignore
index 1abb25e..d9bb48b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,14 +16,16 @@ Makefile
Makefile.in
aclocal.m4
autom4te.cache
-build-aux
build-aux/
config.h
config.h.in
config.log
config.status
configure
-gnu
+gnu/.gitignore
+gnu/charset.alias
+gnu/*.h
+gnu/*/
gnulib
libtool
m4
diff --git a/NEWS b/NEWS
index 749bb3b..25a175e 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-GNU tar NEWS - User visible changes. 2012-11-19
+GNU tar NEWS - User visible changes. 2012-12-18
Please send GNU tar bug reports to <address@hidden>
@@ -11,9 +11,7 @@ adjusted to quote 'like this' (with apostrophes) instead of
`like this'
(with an accent grave character and an apostrophe). This tracks
recent changes to the GNU coding standards.
-* New features
-
-** --owner and --group names and numbers
+* --owner and --group names and numbers
The --owner and --group options now accept operands of the form
NAME:NUM, so that you can specify both symbolic name and numeric ID
@@ -45,6 +43,8 @@ Additionally, the options --xattrs-include and
--xattrs-exclude allow
you to selectively control for which files to store (or extract) the
extended attributes.
+* New configure option --enable-gcc-warnings, intended for debugging.
+
version 1.26 - Sergey Poznyakoff, 2011-03-12
diff --git a/bootstrap.conf b/bootstrap.conf
index e0bca02..2935693 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -19,7 +19,6 @@
source_base=gnu
gnulib_name=libgnu
-gnulib_mk=Makefile.am
# We don't need these modules, even though gnulib-tool mistakenly
# includes them because of gettext dependencies.
diff --git a/configure.ac b/configure.ac
index 8225031..35edb08 100644
--- a/configure.ac
+++ b/configure.ac
@@ -113,6 +113,86 @@ gl_INIT
# paxutils modules
tar_PAXUTILS
+AC_ARG_ENABLE([gcc-warnings],
+ [AS_HELP_STRING([--enable-gcc-warnings],
+ [turn on many GCC warnings (for developers; best with GNU make)])],
+ [case $enableval in
+ yes|no) ;;
+ *) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
+ esac
+ gl_gcc_warnings=$enableval],
+ [if test -d "$srcdir"/.git; then
+ gl_gcc_warnings=yes
+ else
+ gl_gcc_warnings=no
+ fi]
+)
+
+if test "$gl_gcc_warnings" = yes; then
+ gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
+ AC_SUBST([WERROR_CFLAGS])
+
+ nw=
+ # This, $nw, is the list of warnings we disable.
+ nw="$nw -Wformat-nonliteral" # warnings in Fedora 17 stdio.h
+ nw="$nw -Wvla" # warnings in gettext.h
+ nw="$nw -Wswitch-default" # Too many warnings for now
+ nw="$nw -Wunsafe-loop-optimizations" # It's OK to omit unsafe optimizations.
+ nw="$nw -Winline" # It's OK to not inline.
+ nw="$nw -Wstrict-overflow" # It's OK to optimize strictly.
+ nw="$nw -Wsuggest-attribute=pure" # Too many warnings for now.
+
+ gl_MANYWARN_ALL_GCC([ws])
+ gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
+ for w in $ws; do
+ gl_WARN_ADD([$w])
+ done
+ gl_WARN_ADD([-Wno-sign-compare]) # Too many warnings for now
+ gl_WARN_ADD([-Wno-type-limits]) # It's OK to optimize based on types.
+ gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now
+ gl_WARN_ADD([-Wno-format-nonliteral])
+
+ gl_WARN_ADD([-fdiagnostics-show-option])
+ gl_WARN_ADD([-funit-at-a-time])
+
+ AC_SUBST([WARN_CFLAGS])
+
+ AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
+ AH_VERBATIM([FORTIFY_SOURCE],
+ [/* Enable compile-time and run-time bounds-checking, and some warnings,
+ without upsetting glibc 2.15+. */
+ #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
+ # define _FORTIFY_SOURCE 2
+ #endif
+ ])
+ AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
+
+ # Use a slightly smaller set of warning options for lib/.
+ # Remove the following and save the result in GNULIB_WARN_CFLAGS.
+ nw=
+ nw="$nw -Wmissing-prototypes"
+ nw="$nw -Wunused-macros"
+ #
+ # These are for argp.
+ nw="$nw -Wmissing-field-initializers"
+ nw="$nw -Wshadow"
+ #
+ gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw])
+
+ # This is also for argp.
+ gl_WARN_ADD([-Wno-missing-field-initializers], [GNULIB_WARN_CFLAGS])
+
+ AC_SUBST([GNULIB_WARN_CFLAGS])
+
+ # For gnulib-tests, the set is slightly smaller still.
+ nw=
+ # It's not worth being this picky about test programs.
+ nw="$nw -Wsuggest-attribute=const"
+ gl_MANYWARN_COMPLEMENT([GNULIB_TEST_WARN_CFLAGS],
+ [$GNULIB_WARN_CFLAGS], [$nw])
+ AC_SUBST([GNULIB_TEST_WARN_CFLAGS])
+fi
+
TAR_HEADERS_ATTR_XATTR_H
AC_CHECK_FUNCS_ONCE([fchmod fchown fsync lstat mkfifo readlink symlink])
diff --git a/gnu/Makefile.am b/gnu/Makefile.am
new file mode 100644
index 0000000..299bb0e
--- /dev/null
+++ b/gnu/Makefile.am
@@ -0,0 +1,3 @@
+# Make the subset of Gnulib that GNU tar needs.
+include gnulib.mk
+AM_CFLAGS += $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS)
diff --git a/gnulib.modules b/gnulib.modules
index a3e0f25..b1f0c88 100644
--- a/gnulib.modules
+++ b/gnulib.modules
@@ -34,6 +34,7 @@ inttypes
lchown
linkat
localcharset
+manywarnings
mkdtemp
mkfifoat
modechange
diff --git a/lib/Makefile.am b/lib/Makefile.am
index a484fcd..08e7fd7 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -27,6 +27,7 @@ rmt-command.h : Makefile
BUILT_SOURCES = rmt-command.h
CLEANFILES = rmt-command.h rmt-command.h-t
AM_CPPFLAGS = -I$(top_srcdir)/gnu -I../ -I../gnu
+AM_CFLAGS = $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS)
noinst_HEADERS = system.h system-ioctl.h rmt.h paxlib.h stdopen.h xattr-at.h
libtar_a_SOURCES = \
@@ -44,8 +45,8 @@ attr/xattr.h: attr-xattr.in.h $(top_builddir)/config.status
$(AM_V_at)$(MKDIR_P) attr
$(AM_V_GEN)rm -f address@hidden $@ && \
cp $(srcdir)/attr-xattr.in.h attr/xattr.h
-
-MOSTLYCLEANFILES = attr/xattr.h attr/xattr.h
endif
+MOSTLYCLEANFILES = attr/xattr.h
+
EXTRA_DIST = attr-xattr.in.h
diff --git a/lib/attr-xattr.in.h b/lib/attr-xattr.in.h
index b5796fe..3890b5e 100644
--- a/lib/attr-xattr.in.h
+++ b/lib/attr-xattr.in.h
@@ -17,6 +17,9 @@
#ifndef TAR_ATTR_XATTR_H
#define TAR_ATTR_XATTR_H
#include <errno.h>
+#ifndef ENOATTR
+# define ENOATTR ENODATA /* No such attribute */
+#endif
/* setting */
static inline int setxattr (const char *path, const char *name, const void
@@ -55,4 +58,3 @@ static inline ssize_t flistxattr (int filedes, char *list,
size_t size)
{ errno = ENOTSUP; return -1; }
#endif
-
diff --git a/src/Makefile.am b/src/Makefile.am
index ce9b369..52222b6 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -46,6 +46,7 @@ tar_SOURCES = \
xattrs.c
AM_CPPFLAGS = -I$(top_srcdir)/gnu -I../ -I../gnu -I$(top_srcdir)/lib -I../lib
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
LDADD = ../lib/libtar.a ../gnu/libgnu.a $(LIBINTL) $(LIBICONV)
diff --git a/src/buffer.c b/src/buffer.c
index 7638bb1..422798e 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -289,8 +289,8 @@ struct zip_program
};
static struct zip_magic const magic[] = {
- { ct_none, },
- { ct_tar },
+ { ct_none, 0, 0 },
+ { ct_tar, 0, 0 },
{ ct_compress, 2, "\037\235" },
{ ct_gzip, 2, "\037\213" },
{ ct_bzip2, 3, "BZh" },
diff --git a/src/common.h b/src/common.h
index a78e50f..eba3bb4 100644
--- a/src/common.h
+++ b/src/common.h
@@ -781,7 +781,8 @@ void sys_exec_checkpoint_script (const char *script_name,
int checkpoint_number);
/* Module compare.c */
-void report_difference (struct tar_stat_info *st, const char *message, ...);
+void report_difference (struct tar_stat_info *st, const char *message, ...)
+ __attribute__ ((format (printf, 2, 3)));
/* Module sparse.c */
bool sparse_member_p (struct tar_stat_info *st);
diff --git a/src/system.c b/src/system.c
index ba4ac2d..e985462 100644
--- a/src/system.c
+++ b/src/system.c
@@ -722,8 +722,8 @@ sys_exec_command (char *file_name, int typechar, struct
tar_stat_info *st)
stat_to_env (file_name, typechar, st);
- argv[0] = "/bin/sh";
- argv[1] = "-c";
+ argv[0] = (char *) "/bin/sh";
+ argv[1] = (char *) "-c";
argv[2] = to_command_option;
argv[3] = NULL;
@@ -837,8 +837,8 @@ sys_exec_info_script (const char **archive_name, int volume_number)
xclose (p[PREAD]);
- argv[0] = "/bin/sh";
- argv[1] = "-c";
+ argv[0] = (char *) "/bin/sh";
+ argv[1] = (char *) "-c";
argv[2] = (char *) info_script_option;
argv[3] = NULL;
@@ -885,8 +885,8 @@ sys_exec_checkpoint_script (const char *script_name,
setenv ("TAR_FORMAT",
archive_format_string (current_format == DEFAULT_FORMAT ?
archive_format : current_format), 1);
- argv[0] = "/bin/sh";
- argv[1] = "-c";
+ argv[0] = (char *) "/bin/sh";
+ argv[1] = (char *) "-c";
argv[2] = (char *) script_name;
argv[3] = NULL;
diff --git a/src/tar.c b/src/tar.c
index e8813de..cbb6c68 100644
--- a/src/tar.c
+++ b/src/tar.c
@@ -1287,7 +1287,7 @@ update_argv (const char *filename, struct argp_state
*state)
for (i = state->next, p = start; *p; p += strlen (p) + 1, i++)
{
if (term == 0 && p[0] == '-')
- state->argv[i++] = "--add-file";
+ state->argv[i++] = (char *) "--add-file";
state->argv[i] = p;
}
}
@@ -2013,7 +2013,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
case OLD_ARCHIVE_OPTION:
set_archive_format ("v7");
break;
-
+
case OVERWRITE_DIR_OPTION:
old_files_option = DEFAULT_OLD_FILES;
break;
diff --git a/src/xattrs.c b/src/xattrs.c
index 5a4bf72..2ddd1af 100644
--- a/src/xattrs.c
+++ b/src/xattrs.c
@@ -137,7 +137,7 @@ static char *
skip_to_ext_fields (char *ptr)
{
/* skip tag name (user/group/default/mask) */
- ptr += strcspn (ptr, ":,\n");
+ ptr += strcspn (ptr, ":,\n");
if (*ptr != ':')
return ptr;
@@ -192,7 +192,7 @@ static void
xattrs__acls_set (struct tar_stat_info const *st,
char const *file_name, int type,
char *ptr, size_t len, bool def)
-{
+{
acl_t acl;
if (ptr)
@@ -229,7 +229,7 @@ static void
xattrs__acls_get_a (int parentfd, const char *file_name,
struct tar_stat_info *st,
char **ret_ptr, size_t * ret_len)
-{
+{
char *val = NULL;
ssize_t len;
acl_t acl;
@@ -261,7 +261,7 @@ static void
xattrs__acls_get_d (int parentfd, char const *file_name,
struct tar_stat_info *st,
char **ret_ptr, size_t * ret_len)
-{
+{
char *val = NULL;
ssize_t len;
acl_t acl;
@@ -407,7 +407,7 @@ clear_mask_map (struct xattrs_mask_map *mask_map)
}
void
-xattrs_clear_setup ()
+xattrs_clear_setup (void)
{
clear_mask_map (&xattrs_setup.incl);
clear_mask_map (&xattrs_setup.excl);
@@ -614,7 +614,7 @@ static bool
xattrs_masked_out (const char *kw, bool archiving)
{
return xattrs_kw_included (kw, archiving) ?
- xattrs_kw_excluded (kw, archiving) : true;
+ xattrs_kw_excluded (kw, archiving) : true;
}
void
@@ -720,7 +720,7 @@ xattrs_print (struct tar_stat_info const *st)
if (xattrs_option && st->xattr_map_size)
{
int i;
-
+
for (i = 0; i < st->xattr_map_size; ++i)
{
char *keyword = st->xattr_map[i].xkey + strlen ("SCHILY.xattr.");
diff --git a/src/xattrs.h b/src/xattrs.h
index bfef466..139cbfb 100644
--- a/src/xattrs.h
+++ b/src/xattrs.h
@@ -28,7 +28,7 @@
extern void xattrs_mask_add (const char *mask, bool incl);
/* clear helping structures when tar finishes */
-extern void xattrs_clear_setup ();
+extern void xattrs_clear_setup (void);
extern void xattrs_acls_get (int parentfd, char const *file_name,
struct tar_stat_info *st, int fd, int xisfile);
diff --git a/src/xheader.c b/src/xheader.c
index 50fd3e7..291d995 100644
--- a/src/xheader.c
+++ b/src/xheader.c
@@ -262,7 +262,7 @@ xheader_format_name (struct tar_stat_info *st, const char
*fmt, size_t n)
char *dir = NULL;
char *base = NULL;
char pidbuf[UINTMAX_STRSIZE_BOUND];
- char const *pptr;
+ char const *pptr = NULL;
char nbuf[UINTMAX_STRSIZE_BOUND];
char const *nptr = NULL;
@@ -335,13 +335,10 @@ xheader_format_name (struct tar_stat_info *st, const char *fmt, size_t n)
break;
case 'n':
- if (nptr)
- {
- q = stpcpy (q, nptr);
- p += 2;
- break;
- }
- /* else fall through */
+ q = stpcpy (q, nptr);
+ p += 2;
+ break;
+
default:
*q++ = *p++;
--
1.7.11.7
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Bug-tar] [PATCH 2/2] build: new configure option --enable-gcc-warnings,
Paul Eggert <=