[comp.sys.apollo] GNU Make on Apollo sr10.2/bsd4.3; lib

Markku.Savela@tel.vtt.fi (Markku Savela) (11/15/90)

--text follows this line--
  I compiled standard GNU Make version 3.58 for Apollo with
libary support. There is some problem though, it looks like
it cannot find whether file.o is already in library or not?
I get the following debug info, even if the file chcoddec.o
is in the library (at least "ar t libODA.a" says so).

 ...
 No implicit rule found for `libODA.a'.
  Considering target file `libODA.a(chcoddec.o)'.
   File `libODA.a(chcoddec.o)' does not exist.
   Looking for an implicit rule for `libODA.a(chcoddec.o)'.
 ...

  Is this some specific Apollo library thing or general GNU
make problem? Whatever it is, is there a fix for this?
--
Markku Savela (savela@tel.vtt.fi), Technical Research Centre of Finland
Telecommunications Laboratory, Otakaari 7 B, SF-02150 ESPOO, Finland

hj412fr@duc220.uni-duisburg.de (Martin Anantharaman) (11/19/90)

I enclose a message I saved some time ago (my apologies to the original
sender for having deleted all addresses!):

	Hello!
	
	    I've had gnu make-3.58 running on my Apollo for a day now, and it's
	really nice.  However, GNU make and Apollo archive files have two
	incompatibilities.
	
	The first problem is that Apollos put a '/' character in the names
	of archived files even if you're in the Apollo BSD4.3 environment
	(as I am).  This can be fixed by adding something to check for an
	Apollo on line 160 of arscan.c.
	
	The other problem may be a general problem for all machines with
	'USG' defined (does this mean sys5? I'm not sure).  The routine
	'ar_name_equal' in arscan.c assumes the length of the archived
	filename to be 15 characters plus a null; this is not true with USG
	true.  As the filename is terminated with a '/' and a space (at least
	on the Apollo), only 14 characters are stored.  On the Apollo these
	14 characters are just the start of the filename (the full filename
	is stored elsewhere), so an object file need not end with '.o' as
	GNU assumes.
	
	The changed version of ar_name_equal in arscan.c thus becomes:
	
	/* Return nonzero iff NAME matches MEM.  If NAME is longer than
	   sizeof (struct ar_hdr.ar_name), MEM may be the truncated version.  */
	
	int
	ar_name_equal (name, mem)
	     char *name, *mem;
	{
	  return (!strncmp (name, mem, 14));
	}
	
	
	
	Goodbye!

Hope that helps!

Martin Anantharaman

FB7, FG7 (Mechanik)		Work:	+49 (203) 379-3336
Universitaet -GH- Duisburg	Home:	+49 (203) 37 65 89
Lotharstr. 1			FAX:	+49 (203) 379-3052
4100 Duisburg 1			E-Mail: hj412fr@duc220.uni-duisburg.de
West Germany