From: cliff@cs.cornell.edu (Cliff Krumvieda)
Subject: tar-1.11 build problems, with patches
Organization: GNUs Not Usenet
Distribution: gnu
Date: Thu, 10 Sep 1992 08:17:04 GMT

Howdy:

I had several (easily fixable) problems while building tar-1.11 for
our departmental workstations (sparcs running SunOS 4.1.1, HP's
running HP-UX 7.00, and RS6000's running AIX 3.2---I had problems on
the HP's and RS6000's only).  Hopefully, these can be fixed before
tar-1.12 is released:

======================================================================
1.  The HP-UX header file "/usr/include/pwd.h" references the type
"FILE *" and therefore "stdio.h" must be loaded before "pwd.h".  This
caused problems during compilation of "names.c":

% diff -c names.c-dist names.c
*** names.c-dist        Tue Jul 16 01:45:05 1991
--- names.c     Thu Sep 10 10:21:20 1992
***************
*** 30,35 ****
--- 30,36 ----
  
  #ifndef NONAMES
  /* Whole module goes away if NONAMES defined.  Otherwise... */
+ #include <stdio.h>
  #include <pwd.h>
  #include <grp.h>
======================================================================
2.  Autoconf doesn't define "USG" for AIX compilations, but AIX shares
the System V timezone definitions.  The compilation of getdate.c
barfed on the RS6000's:

% diff -c getdate.y-dist getdate.y
*** getdate.y-dist      Tue Sep  1 17:57:48 1992
--- getdate.y   Thu Sep 10 11:50:44 1992
***************
*** 850,856 ****
  #ifdef __386BSD__
            ftz.timezone = 0;
  #else /* neither sgi nor 386BSD */
! #ifdef USG
            extern time_t timezone;
  
            ftz.timezone = (int) timezone / 60;
--- 850,856 ----
  #ifdef __386BSD__
            ftz.timezone = 0;
  #else /* neither sgi nor 386BSD */
! #if defined(USG) || defined(_AIX)
            extern time_t timezone;
  
            ftz.timezone = (int) timezone / 60;
======================================================================
3.  The AIX header file "/usr/include/stdlib.h" defines the following
prototype for getopt:

   extern int getopt(int, char *[], char *);

This conflicts with the prototype in "getopt.h":

   extern int getopt (int argc, char *const *argv, const char *shortopts);

(because of the "const"'s).  Without the following fix, tar.c won't
compile on the RS6000's:

% diff -c getopt.h-dist getopt.h
*** getopt.h-dist       Tue Aug 18 17:33:49 1992
--- getopt.h    Thu Sep 10 10:39:48 1992
***************
*** 94,100 ****
--- 94,102 ----
  };
  
  #if __STDC__
+ #ifndef _AIX
  extern int getopt (int argc, char *const *argv, const char *shortopts);
+ #endif
  extern int getopt_long (int argc, char *const *argv, const char *shortopts,
                        const struct option *longopts, int *longind);
  extern int getopt_long_only (int argc, char *const *argv,
======================================================================
4.  AIX uses "_etext" instead of "etext" as the first address above
program text.  Without the following fix, malloc.c won't compile on
the RS6000's:

% diff -c malloc.c-dist malloc.c
*** malloc.c-dist       Wed Sep  9 03:26:28 1992
--- malloc.c    Thu Sep 10 11:56:34 1992
***************
*** 189,194 ****
--- 189,198 ----
  
  extern char *start_of_data ();
  
+ #ifdef _AIX
+ #define etext _etext
+ #endif
+ 
  #ifdef BSD
  #ifndef DATA_SEG_BITS
  #define start_of_data() &etext
======================================================================

Thanks for updating GNU tar.  I hope these fixes help.

							--Cliff

Newsgroups: gnu.utils.bug