bug-tar
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug-tar] wordsplit on IRIX


From: Rainer M. Canavan
Subject: [Bug-tar] wordsplit on IRIX
Date: Sun, 22 Dec 2013 18:21:29 +0100 (CET)

Hi,

I've stumbled accross 4 issues when building gnu tar 1.27 or 1.27.1 on IRIX that
haven't existed with 1.26. I'm using IRIX 6.5.30, the MIPSPro 7.4.4 compiler and
GNU Make 3.82.

One is that rmt (and probably tar itself) uses libintl_gettext even if no 
libintl is detected.
This is easily worked around by specifying include and library paths so that a 
libintl can
be found and used by configure: 

configure (without parameters) said:

checking for GNU gettext in libintl... no

but the build fails at:

cc -c99  -g   -o rmt rmt.o ../gnu/libgnu.a
[...]
ld32: ERROR   33 : Unresolved text symbol "libintl_gettext" -- 1st referenced 
by ../gnu/libgnu.a(error.o).
        Use linker option -v to see when and which objects, archives and dsos 
are loaded.  
ld32: ERROR   33 : Unresolved text symbol "libintl_dgettext" -- 1st referenced 
by ../gnu/libgnu.a(argp-parse.o).
        Use linker option -v to see when and which objects, archives and dsos 
are loaded.  
ld32: INFO    152: Output file removed because of error.


The next issue is that the generated .Po files are invalid. I'm not sure how 
they're supposed to look, but the complaint is always:

.deps/areadlinkat.Po:2: *** missing separator.  Stop.

All .Po files have 2 lines and look basically like:

acl-errno-valid.o : /usr/include/sys/timespec.h ../config.h 
/usr/include/internal/sgimacros.h /usr/include/stddef.h 
/usr/include/internal/string_core.h /usr/include/sys/bsd_types.h 
/usr/include/sys/select.h /usr/include/sys/errno.h /usr/include/sys/stat.h 
/usr/include/sys/pthread.h ./sys/time.h /usr/include/sys/types.h ./sys/stat.h 
/usr/include/sys/ptimers.h /usr/include/errno.h /usr/include/standards.h 
/usr/include/sgidefs.h ./time.h /usr/include/stdbool.h 
/usr/include/internal/stddef_core.h /usr/include/string.h 
/usr/include/internal/errno_core.h /usr/include/internal/time_core.h ./string.h 
/usr/include/time.h ./acl.h /usr/include/sys/time.h ./errno.h ./sys/types.h 
#:fec
/usr/include/sys/timespec.h ../config.h /usr/include/internal/sgimacros.h 
/usr/include/stddef.h /usr/include/internal/string_core.h 
/usr/include/sys/bsd_types.h /usr/include/sys/select.h /usr/include/sys/errno.h 
/usr/include/sys/stat.h /usr/include/sys/pthread.h ./sys/time.h 
/usr/include/sys/types.h ./sys/stat.h /usr/include/sys/ptimers.h 
/usr/include/errno.h /usr/include/standards.h /usr/include/sgidefs.h ./time.h 
/usr/include/stdbool.h /usr/include/internal/stddef_core.h 
/usr/include/string.h /usr/include/internal/errno_core.h 
/usr/include/internal/time_core.h ./string.h /usr/include/time.h ./acl.h 
/usr/include/sys/time.h ./errno.h ./sys/types.h #:fec :

The last issue is that wordlist uses __attribute__, which as 
far as I know, is a gcc extension. The at the end of this mail fixes this.

gmake[4]: Entering directory `/usr/people/canavan/src/tar/tar-1.27/lib'
  CC       wordsplit.o
cc-1065 c99: ERROR File = ./wordsplit.h, Line = 37
  A semicolon is expected at this point.
                     __attribute__ ((__format__ (__printf__, 1, 2)));
                     ^
cc-1065 c99: ERROR File = ./wordsplit.h, Line = 39
  A semicolon is expected at this point.
                     __attribute__ ((__format__ (__printf__, 1, 2)));
                     ^
cc-1079 c99: ERROR File = wordsplit.c, Line = 64
  A type specifier is expected.
  static void __attribute__ ((__format__ (__printf__, 1, 2)))
                             ^
cc-1137 c99: ERROR File = wordsplit.c, Line = 64
  Unnamed prototyped parameters not allowed when body is present.
  static void __attribute__ ((__format__ (__printf__, 1, 2)))
              ^
cc-1129 c99: ERROR File = wordsplit.c, Line = 65
  A left brace ("{") is expected at this point.
  _wsplt_error (const char *fmt, ...)
  ^
cc-1020 c99: ERROR File = wordsplit.c, Line = 69
  The identifier "fmt" is undefined.
    va_start (ap, fmt);
    ^
Additionally, I get the same failures in the testsuite as reported 
for Solaris 10 in the thread "testsuite: 63 85 failed", but instead
of segfaults, I get the two "permission denied"  errors shown below.


regrads,


rainer

063/testsuite.log
--- /dev/null   2013-12-22 17:59:19.000000000 +0100
+++ 
/usr/people/canavan/src/tar/tar-1.27.1/tests/testsuite.dir/at-groups/63/stderr  
    2013-12-22 17:59:19.544009230 +0100
@@ -0,0 +1,2 @@
+tar: unable to record current working directory: Permission denied
+cmp: extract/f: No such file or directory
./extrac09.at:27: exit code was 2, expected 0
63. extrac09.at:24: 63. no need to save dir with unreadable . and .. 
(extrac09.at:24): FAILED (extrac09.at:27)

085/testsuite.log
--- -   2013-12-22 18:00:21.092479000 +0100
+++ 
/usr/people/canavan/src/tar/tar-1.27.1/tests/testsuite.dir/at-groups/85/stderr  
    2013-12-22 18:00:21.086106117 +0100
@@ -1,2 +1,3 @@
-tar: a: Directory is new
+tar: .: Cannot getcwd: Permission denied
+tar: Error is not recoverable: exiting now
 
--- -   2013-12-22 18:00:21.099059000 +0100
+++ 
/usr/people/canavan/src/tar/tar-1.27.1/tests/testsuite.dir/at-groups/85/stdout  
    2013-12-22 18:00:21.093834208 +0100
@@ -1,3 +1 @@
-a/
-a/file
 
./listed03.at:27: exit code was 2, expected 0



diff -ur ./lib/wordsplit.c ../../tar-1.27.1/lib/wordsplit.c
--- ./lib/wordsplit.c   Thu Mar 14 21:18:10 CET 2013
+++ ../../tar-1.27.1/lib/wordsplit.c    Sun Dec 22 16:22:23 CET 2013
@@ -61,7 +61,10 @@
   abort ();
 }
 
-static void __attribute__ ((__format__ (__printf__, 1, 2)))
+static void 
+#ifdef __GNUC__
+__attribute__ ((__format__ (__printf__, 1, 2)))
+#endif
 _wsplt_error (const char *fmt, ...)
 {
   va_list ap;
diff -ur ./lib/wordsplit.h ../../tar-1.27//lib/wordsplit.h
--- ./lib/wordsplit.h   Thu Mar 14 21:18:10 CET 2013
+++ ../../tar-1.27//lib/wordsplit.h     Sun Dec 22 16:19:25 CET 2013
@@ -34,9 +34,15 @@
   const char *ws_escape;
   void (*ws_alloc_die) (struct wordsplit * wsp);
   void (*ws_error) (const char *, ...)
-                   __attribute__ ((__format__ (__printf__, 1, 2)));
+#ifdef __GNUC__
+                   __attribute__ ((__format__ (__printf__, 1, 2)))
+#endif
+;
   void (*ws_debug) (const char *, ...)
-                   __attribute__ ((__format__ (__printf__, 1, 2)));
+#ifdef __GNUC__
+                   __attribute__ ((__format__ (__printf__, 1, 2)))
+#endif
+;
 
   const char **ws_env;
   const char *(*ws_getvar) (const char *, size_t, void *);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]