]> 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
-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 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
@@ -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.
+
 \f
 version 1.26 - Sergey Poznyakoff, 2011-03-12
 
index e0bca025cb8c85e2be7d0eb09e26e74d1864f3ec..2935693e1ac592fc5b30a4ccb0acd0e9e0fe96a7 100644 (file)
@@ -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.
index 8225031c0bd4cfb766f8394845748a34aea43400..35edb08afc81d30a26fac4631921c41f9e376e23 100644 (file)
@@ -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 (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
+manywarnings
 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
+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 $@-t $@ && \
         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
index b5796fe2255650acc6fda489844cfe7ec344bcb0..3890b5e40e52e75b6235fdcda65a6aa99ead43d8 100644 (file)
@@ -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
-
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
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
 
 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[] = {
-  { 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" },
index a78e50f72f9d8d841a9730d025ea4e0e72b3d60d..eba3bb49010e89d74c85982643319060623eec3f 100644 (file)
@@ -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);
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);
 
-  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;
 
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] == '-')
-       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;
index 5a4bf7215b7ca97f78fcba0e0d8dbdf267f23aa0..2ddd1af95065c2614fc77e7620ea9717763f0aae 100644 (file)
@@ -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.");
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_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);
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 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++;
This page took 0.035477 seconds and 4 git commands to generate.