copying archives produces ld(1) complaint +FIX

Steven M. Schultz sms at wlv.imsd.contel.com
Tue Oct 24 08:39:15 AEST 1989


Subject: copying archive produces outofdate error
Index:	usr.bin/ranlib.c 2.10BSD

Description:
	Copying an archive causes ld(1) to complain about 
	the archive being out of date.

Repeat-By:
	touch /lib/libc.a
	then compile any program which uses the C library.

Fix:
	Apply this patch to usr.bin/ranlib.c, it implements the
	4.3BSD "-t" option of ranlib.

	Also included is a patch to /usr/src/man/man1/ranlib.1, after
	applying it:
		/usr/man/manroff ranlib.1 >/usr/man/cat1/ranlib.0
		chmod a+r /usr/man/cat1/ranlib.0

*** ranlib.c.old	Wed Mar 11 22:41:22 1987
--- ranlib.c	Mon Oct 23 18:07:10 1989
***************
*** 24,30 ****
--- 24,38 ----
  char **argv;
  {
  	char buf[256];
+ 	register int just_touch = 0;
  
+ 	/* check for the "-t" flag */
+ 	if (argc > 1 && strcmp(argv[1], "-t") == 0) {
+ 		just_touch++;
+ 		argc--;
+ 		argv++;
+ 	}
+ 
  	--argc;
  	while(argc--) {
  		fi = fopen(*++argv,"r");
***************
*** 36,41 ****
--- 44,68 ----
  		fread((char *)&exp, 1, sizeof(MAGIC), fi);	/* get magic no. */
  		if (MAGIC != ARMAG)
  		{	fprintf(stderr, "not archive: %s\n", *argv);
+ 			continue;
+ 		}
+ 		if (just_touch) {
+ 			register int len;
+ 
+ 			fseek(fi, (long) sizeof (exp.a_magic), 0);
+ 			if (fread(buf, sizeof arp.ar_name, 1, fi) != 1) {
+ 				fprintf(stderr, "malformed archive: %s\n",
+ 					*argv);
+ 				continue;
+ 			}
+ 			len = strlen(tempnm);
+ 			if (bcmp(buf, tempnm, len) != 0 ||
+ 				buf[len] != '\0') {
+ 				fprintf(stderr, "no symbol table: %s\n", *argv);
+ 				continue;
+ 			}
+ 			fclose(fi);
+ 			fixdate(*argv);
  			continue;
  		}
  		fseek(fi, 0L, 0);
*** ranlib.1.old	Thu Feb 19 03:39:47 1987
--- ranlib.1	Mon Oct 23 18:24:29 1989
***************
*** 4,10 ****
  ranlib \- convert archives to random libraries
  .SH SYNOPSIS
  .B ranlib
! archive ...
  .SH DESCRIPTION
  .I Ranlib
  converts each
--- 4,12 ----
  ranlib \- convert archives to random libraries
  .SH SYNOPSIS
  .B ranlib
! [
! .B \-t
! ] archive ...
  .SH DESCRIPTION
  .I Ranlib
  converts each
***************
*** 20,25 ****
--- 22,41 ----
  so that sufficient temporary file space must
  be available in the file system containing the
  current directory.
+ .PP
+ If given the
+ .B \-t
+ option,
+ ranlib only "touches" the archives and does not modify them.
+ This is useful after copying an archive
+ or using the
+ .B \-t
+ option of
+ .IR make (1)
+ in order to avoid having
+ .IR ld (1)
+ complain about
+ an \*(lqout of date\*(rq symbol table.
  .SH SEE ALSO
  ar(1), ld(1)
  .SH BUGS



More information about the Comp.bugs.2bsd mailing list