]> Dogcows Code - chaz/tar/commitdiff
build: new configure option --enable-gcc-warnings
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 19 Dec 2012 04:36:22 +0000 (20:36 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 19 Dec 2012 04:37:03 +0000 (20:37 -0800)
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.

16 files changed:
.gitignore
NEWS
bootstrap.conf
configure.ac
gnu/Makefile.am [new file with mode: 0644]
gnulib.modules
lib/Makefile.am
lib/attr-xattr.in.h
src/Makefile.am
src/buffer.c
src/common.h
src/system.c
src/tar.c
src/xattrs.c
src/xattrs.h
src/xheader.c

index 1abb25e5aa9ed0357b2c4168de59822ec2dc5711..d9bb48bc660843cc4dcdd22620aeadeed9ce821f 100644 (file)
@@ -16,14 +16,16 @@ Makefile
 Makefile.in
 aclocal.m4
 autom4te.cache
 Makefile.in
 aclocal.m4
 autom4te.cache
-build-aux
 build-aux/
 config.h
 config.h.in
 config.log
 config.status
 configure
 build-aux/
 config.h
 config.h.in
 config.log
 config.status
 configure
-gnu
+gnu/.gitignore
+gnu/charset.alias
+gnu/*.h
+gnu/*/
 gnulib
 libtool
 m4
 gnulib
 libtool
 m4
diff --git a/NEWS b/NEWS
index 749bb3bf916233ccfa7c2193a1f340d9e1be6cbf..25a175e0349666b108a43eacd43b38a99afd1bae 100644 (file)
--- 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 <bug-tar@gnu.org>
 
 \f
 Please send GNU tar bug reports to <bug-tar@gnu.org>
 
 \f
@@ -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.
 
 (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
 
 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.
 
 you to selectively control for which files to store (or extract) the
 extended attributes.
 
+* New configure option --enable-gcc-warnings, intended for debugging.
+
 \f
 version 1.26 - Sergey Poznyakoff, 2011-03-12
 
 \f
 version 1.26 - Sergey Poznyakoff, 2011-03-12
 
index e0bca025cb8c85e2be7d0eb09e26e74d1864f3ec..2935693e1ac592fc5b30a4ccb0acd0e9e0fe96a7 100644 (file)
@@ -19,7 +19,6 @@
 
 source_base=gnu
 gnulib_name=libgnu
 
 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.
 
 # We don't need these modules, even though gnulib-tool mistakenly
 # includes them because of gettext dependencies.
index 8225031c0bd4cfb766f8394845748a34aea43400..35edb08afc81d30a26fac4631921c41f9e376e23 100644 (file)
@@ -113,6 +113,86 @@ gl_INIT
 # paxutils modules
 tar_PAXUTILS
 
 # 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])
 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 (file)
index 0000000..299bb0e
--- /dev/null
@@ -0,0 +1,3 @@
+# Make the subset of Gnulib that GNU tar needs.
+include gnulib.mk
+AM_CFLAGS += $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS)
index a3e0f25961ced6e8ecdaa5bf414b9b41430d8ebd..b1f0c888de4bfdf2e8ed8d6701939674044daefb 100644 (file)
@@ -34,6 +34,7 @@ inttypes
 lchown
 linkat
 localcharset
 lchown
 linkat
 localcharset
+manywarnings
 mkdtemp
 mkfifoat
 modechange
 mkdtemp
 mkfifoat
 modechange
index a484fcd1d182d4182692bfa927404db30f0f93b2..08e7fd7998445dc4c0ff4c79dda356cc00ed8c6f 100644 (file)
@@ -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
 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 = \
 
 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 $@-t $@ && \
         cp $(srcdir)/attr-xattr.in.h attr/xattr.h
        $(AM_V_at)$(MKDIR_P) attr
        $(AM_V_GEN)rm -f $@-t $@ && \
         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
index b5796fe2255650acc6fda489844cfe7ec344bcb0..3890b5e40e52e75b6235fdcda65a6aa99ead43d8 100644 (file)
@@ -17,6 +17,9 @@
 #ifndef TAR_ATTR_XATTR_H
 #define TAR_ATTR_XATTR_H
 #include <errno.h>
 #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
 
 /* 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
 { errno = ENOTSUP; return -1; }
 
 #endif
-
index ce9b3691758ea98aae042bd4ac635fd092911233..52222b6f8ee5602569f805bea547dae2dd386caa 100644 (file)
@@ -46,6 +46,7 @@ tar_SOURCES = \
  xattrs.c
 
 AM_CPPFLAGS = -I$(top_srcdir)/gnu -I../ -I../gnu -I$(top_srcdir)/lib -I../lib
  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)
 
 
 LDADD = ../lib/libtar.a ../gnu/libgnu.a $(LIBINTL) $(LIBICONV)
 
index 7638bb1fce71c3e0ffc14b48480b6c5692e9a965..422798ed32f696bece6e3799ce42caac9525a6ea 100644 (file)
@@ -289,8 +289,8 @@ struct zip_program
 };
 
 static struct zip_magic const magic[] = {
 };
 
 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" },
   { ct_compress, 2, "\037\235" },
   { ct_gzip,     2, "\037\213" },
   { ct_bzip2,    3, "BZh" },
index a78e50f72f9d8d841a9730d025ea4e0e72b3d60d..eba3bb49010e89d74c85982643319060623eec3f 100644 (file)
@@ -781,7 +781,8 @@ void sys_exec_checkpoint_script (const char *script_name,
                                 int checkpoint_number);
 
 /* Module compare.c */
                                 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);
 
 /* Module sparse.c */
 bool sparse_member_p (struct tar_stat_info *st);
index ba4ac2d391faf25966ecff4905cebc8344231add..e985462dbb9360c323d497118a408c86aae8ab76 100644 (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[1] = "-c";
+  argv[0] = (char *) "/bin/sh";
+  argv[1] = (char *) "-c";
   argv[2] = to_command_option;
   argv[3] = NULL;
 
   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]);
 
 
   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;
 
   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);
   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;
 
   argv[2] = (char *) script_name;
   argv[3] = NULL;
 
index e8813de63f6e6595e76903eca283f819e5a2fef5..cbb6c68439c2d06d2c42b34cead3107275f1f9ae 100644 (file)
--- 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] == '-')
   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;
     }
 }
       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 OLD_ARCHIVE_OPTION:
       set_archive_format ("v7");
       break;
-      
+
     case OVERWRITE_DIR_OPTION:
       old_files_option = DEFAULT_OLD_FILES;
       break;
     case OVERWRITE_DIR_OPTION:
       old_files_option = DEFAULT_OLD_FILES;
       break;
index 5a4bf7215b7ca97f78fcba0e0d8dbdf267f23aa0..2ddd1af95065c2614fc77e7620ea9717763f0aae 100644 (file)
@@ -137,7 +137,7 @@ static char *
 skip_to_ext_fields (char *ptr)
 {
   /* skip tag name (user/group/default/mask) */
 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;
 
   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)
 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)
   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)
 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;
   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)
 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;
   char *val = NULL;
   ssize_t len;
   acl_t acl;
@@ -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.excl);
 {
   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_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
 }
 
 void
@@ -720,7 +720,7 @@ xattrs_print (struct tar_stat_info const *st)
   if (xattrs_option && st->xattr_map_size)
     {
       int i;
   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.");
       for (i = 0; i < st->xattr_map_size; ++i)
         {
           char *keyword = st->xattr_map[i].xkey + strlen ("SCHILY.xattr.");
index bfef46685cf2a648aaecbfce47093fee7b1b6499..139cbfbf7a35a1b3b0446dfd74a253dd3b03ddaf 100644 (file)
@@ -28,7 +28,7 @@
 extern void xattrs_mask_add (const char *mask, bool incl);
 
 /* clear helping structures when tar finishes */
 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);
 
 extern void xattrs_acls_get (int parentfd, char const *file_name,
                              struct tar_stat_info *st, int fd, int xisfile);
index 50fd3e754dbd8bca19964d7eecf5be6c3dc2aa7c..291d9950dd3737325326ce73af26cfc7004267aa 100644 (file)
@@ -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 *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;
 
   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':
              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++;
 
            default:
              *q++ = *p++;
This page took 0.042528 seconds and 4 git commands to generate.