build: new configure option --enable-gcc-warnings

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.
This commit is contained in:
Paul Eggert
2012-12-18 20:36:22 -08:00
parent 8c0146d2c9
commit cbc51277aa
16 changed files with 124 additions and 37 deletions

6
.gitignore vendored
View File

@@ -16,14 +16,16 @@ Makefile
Makefile.in Makefile.in
aclocal.m4 aclocal.m4
autom4te.cache autom4te.cache
build-aux
build-aux/ build-aux/
config.h config.h
config.h.in config.h.in
config.log config.log
config.status config.status
configure configure
gnu gnu/.gitignore
gnu/charset.alias
gnu/*.h
gnu/*/
gnulib gnulib
libtool libtool
m4 m4

8
NEWS
View File

@@ -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 <bug-tar@gnu.org> Please send GNU tar bug reports to <bug-tar@gnu.org>
@@ -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 (with an accent grave character and an apostrophe). This tracks
recent changes to the GNU coding standards. 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 The --owner and --group options now accept operands of the form
NAME:NUM, so that you can specify both symbolic name and numeric ID 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 you to selectively control for which files to store (or extract) the
extended attributes. extended attributes.
* New configure option --enable-gcc-warnings, intended for debugging.
version 1.26 - Sergey Poznyakoff, 2011-03-12 version 1.26 - Sergey Poznyakoff, 2011-03-12

View File

@@ -19,7 +19,6 @@
source_base=gnu source_base=gnu
gnulib_name=libgnu gnulib_name=libgnu
gnulib_mk=Makefile.am
# We don't need these modules, even though gnulib-tool mistakenly # We don't need these modules, even though gnulib-tool mistakenly
# includes them because of gettext dependencies. # includes them because of gettext dependencies.

View File

@@ -113,6 +113,86 @@ gl_INIT
# paxutils modules # paxutils modules
tar_PAXUTILS 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 TAR_HEADERS_ATTR_XATTR_H
AC_CHECK_FUNCS_ONCE([fchmod fchown fsync lstat mkfifo readlink symlink]) AC_CHECK_FUNCS_ONCE([fchmod fchown fsync lstat mkfifo readlink symlink])

3
gnu/Makefile.am Normal file
View File

@@ -0,0 +1,3 @@
# Make the subset of Gnulib that GNU tar needs.
include gnulib.mk
AM_CFLAGS += $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS)

View File

@@ -34,6 +34,7 @@ inttypes
lchown lchown
linkat linkat
localcharset localcharset
manywarnings
mkdtemp mkdtemp
mkfifoat mkfifoat
modechange modechange

View File

@@ -27,6 +27,7 @@ rmt-command.h : Makefile
BUILT_SOURCES = rmt-command.h BUILT_SOURCES = rmt-command.h
CLEANFILES = rmt-command.h rmt-command.h-t CLEANFILES = rmt-command.h rmt-command.h-t
AM_CPPFLAGS = -I$(top_srcdir)/gnu -I../ -I../gnu 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 noinst_HEADERS = system.h system-ioctl.h rmt.h paxlib.h stdopen.h xattr-at.h
libtar_a_SOURCES = \ 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_at)$(MKDIR_P) attr
$(AM_V_GEN)rm -f $@-t $@ && \ $(AM_V_GEN)rm -f $@-t $@ && \
cp $(srcdir)/attr-xattr.in.h attr/xattr.h cp $(srcdir)/attr-xattr.in.h attr/xattr.h
MOSTLYCLEANFILES = attr/xattr.h attr/xattr.h
endif endif
MOSTLYCLEANFILES = attr/xattr.h
EXTRA_DIST = attr-xattr.in.h EXTRA_DIST = attr-xattr.in.h

View File

@@ -17,6 +17,9 @@
#ifndef TAR_ATTR_XATTR_H #ifndef TAR_ATTR_XATTR_H
#define TAR_ATTR_XATTR_H #define TAR_ATTR_XATTR_H
#include <errno.h> #include <errno.h>
#ifndef ENOATTR
# define ENOATTR ENODATA /* No such attribute */
#endif
/* setting */ /* setting */
static inline int setxattr (const char *path, const char *name, const void 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; } { errno = ENOTSUP; return -1; }
#endif #endif

View File

@@ -46,6 +46,7 @@ tar_SOURCES = \
xattrs.c xattrs.c
AM_CPPFLAGS = -I$(top_srcdir)/gnu -I../ -I../gnu -I$(top_srcdir)/lib -I../lib 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) LDADD = ../lib/libtar.a ../gnu/libgnu.a $(LIBINTL) $(LIBICONV)

View File

@@ -289,8 +289,8 @@ struct zip_program
}; };
static struct zip_magic const magic[] = { static struct zip_magic const magic[] = {
{ ct_none, }, { ct_none, 0, 0 },
{ ct_tar }, { ct_tar, 0, 0 },
{ ct_compress, 2, "\037\235" }, { ct_compress, 2, "\037\235" },
{ ct_gzip, 2, "\037\213" }, { ct_gzip, 2, "\037\213" },
{ ct_bzip2, 3, "BZh" }, { ct_bzip2, 3, "BZh" },

View File

@@ -781,7 +781,8 @@ void sys_exec_checkpoint_script (const char *script_name,
int checkpoint_number); int checkpoint_number);
/* Module compare.c */ /* 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 */ /* Module sparse.c */
bool sparse_member_p (struct tar_stat_info *st); bool sparse_member_p (struct tar_stat_info *st);

View File

@@ -722,8 +722,8 @@ sys_exec_command (char *file_name, int typechar, struct tar_stat_info *st)
stat_to_env (file_name, typechar, st); stat_to_env (file_name, typechar, st);
argv[0] = "/bin/sh"; argv[0] = (char *) "/bin/sh";
argv[1] = "-c"; argv[1] = (char *) "-c";
argv[2] = to_command_option; argv[2] = to_command_option;
argv[3] = NULL; argv[3] = NULL;
@@ -837,8 +837,8 @@ sys_exec_info_script (const char **archive_name, int volume_number)
xclose (p[PREAD]); xclose (p[PREAD]);
argv[0] = "/bin/sh"; argv[0] = (char *) "/bin/sh";
argv[1] = "-c"; argv[1] = (char *) "-c";
argv[2] = (char *) info_script_option; argv[2] = (char *) info_script_option;
argv[3] = NULL; argv[3] = NULL;
@@ -885,8 +885,8 @@ sys_exec_checkpoint_script (const char *script_name,
setenv ("TAR_FORMAT", setenv ("TAR_FORMAT",
archive_format_string (current_format == DEFAULT_FORMAT ? archive_format_string (current_format == DEFAULT_FORMAT ?
archive_format : current_format), 1); archive_format : current_format), 1);
argv[0] = "/bin/sh"; argv[0] = (char *) "/bin/sh";
argv[1] = "-c"; argv[1] = (char *) "-c";
argv[2] = (char *) script_name; argv[2] = (char *) script_name;
argv[3] = NULL; argv[3] = NULL;

View File

@@ -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++) for (i = state->next, p = start; *p; p += strlen (p) + 1, i++)
{ {
if (term == 0 && p[0] == '-') if (term == 0 && p[0] == '-')
state->argv[i++] = "--add-file"; state->argv[i++] = (char *) "--add-file";
state->argv[i] = p; state->argv[i] = p;
} }
} }

View File

@@ -407,7 +407,7 @@ clear_mask_map (struct xattrs_mask_map *mask_map)
} }
void void
xattrs_clear_setup () xattrs_clear_setup (void)
{ {
clear_mask_map (&xattrs_setup.incl); clear_mask_map (&xattrs_setup.incl);
clear_mask_map (&xattrs_setup.excl); clear_mask_map (&xattrs_setup.excl);

View File

@@ -28,7 +28,7 @@
extern void xattrs_mask_add (const char *mask, bool incl); extern void xattrs_mask_add (const char *mask, bool incl);
/* clear helping structures when tar finishes */ /* 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, extern void xattrs_acls_get (int parentfd, char const *file_name,
struct tar_stat_info *st, int fd, int xisfile); struct tar_stat_info *st, int fd, int xisfile);

View File

@@ -262,7 +262,7 @@ xheader_format_name (struct tar_stat_info *st, const char *fmt, size_t n)
char *dir = NULL; char *dir = NULL;
char *base = NULL; char *base = NULL;
char pidbuf[UINTMAX_STRSIZE_BOUND]; char pidbuf[UINTMAX_STRSIZE_BOUND];
char const *pptr; char const *pptr = NULL;
char nbuf[UINTMAX_STRSIZE_BOUND]; char nbuf[UINTMAX_STRSIZE_BOUND];
char const *nptr = NULL; char const *nptr = NULL;
@@ -335,13 +335,10 @@ xheader_format_name (struct tar_stat_info *st, const char *fmt, size_t n)
break; break;
case 'n': case 'n':
if (nptr)
{
q = stpcpy (q, nptr); q = stpcpy (q, nptr);
p += 2; p += 2;
break; break;
}
/* else fall through */
default: default:
*q++ = *p++; *q++ = *p++;