gdykes@batcomputer.TN.CORNELL.EDU (Gene Dykes) (02/21/86)
(My apologies if this was seen before - I was told that my previous
posting never got out...)
In BSD4.2 and BSD4.3, I have the following problem:
In the manual for make, there are the following sentences...
Two special forms of a name are recognized. A name like
a(b) means the file named b stored in the archive named a.
...
Now, suppose I have a Makefile that looks like this:
main: main.o /usr/lib/libcurses.a(scroll.o)
cc main.o -lcurses
In other words I want main to depend on the binary scroll.o which is in
the archive /usr/lib/libcurses.a
What I get is the following message:
Make: Don't know how to make /usr/lib/libcurses.a(scroll.o). Stop.
What this means to me is that make may very well RECOGNIZE such a construct
(since it gives a different message if the archive doesn't exist),
but it has no idea what to DO about it. Since the archived binary is much
older than main there should be no reason to remake it.
It seems to me it would be very useful to have makefiles depending on
archived binaries, but this doesn't work. I've been reading this and related
newsgroups for years now and I've never heard anybody else complain about this.
This means either that I am an idiot and don't understand the manual (please
inform me gently), or that this bug has never been found before (hard to
believe), or that nobody cares (harder to believe). Other possibilities
undoubtedly exist.
Thanks for any suggestions or comments.
--
Gene Dykes, 120 Rand Hall, Cornell U., Ithaca, NY 14853 (607)256-4880
{ihnp4,decvax,allegra,vax135}!cornell!batcomputer!gdykesmatt@oddjob.UUCP (Matt Crawford) (02/24/86)
The make syntaxes "a(b)" and "a((b))" don't even come
close to working in the 4.2 make. The following fixes
the former only. In /usr/src/bin/make:
RCS file: RCS/files.c,v
retrieving revision 1.1
diff -c -r1.1 files.c
*** /tmp/,RCSt1003671 Sun Feb 23 20:16:33 1986
--- files.c Sun Feb 23 20:16:21 1986
***************
*** 372,378
static long arflen;
static long arfdate;
! static char arfname[16];
FILE *arfd;
long int arpos, arlen;
--- 372,378 -----
static long arflen;
static long arfdate;
! static char arfname[16]; /* size S/B determined from ar.h */
FILE *arfd;
long int arpos, arlen;
***************
*** 414,420
{
if(objarch)
{
! getobj();
nsym = objhead.a_syms / sizeof(objentry);
for(i = 0; i<nsym ; ++i)
{
--- 414,421 -----
{
if(objarch)
{
! if( !getobj() )
! continue; /* not a .o file (eg: __.SYMDEF) */
nsym = objhead.a_syms / sizeof(objentry);
for(i = 0; i<nsym ; ++i)
{
***************
*** 484,489
getarch()
{
struct ar_hdr arhead;
long atol();
arpos += (arflen + 1) & ~1L; /* round archived file length up to even */
--- 485,491 -----
getarch()
{
struct ar_hdr arhead;
+ char *p;
long atol();
arpos += (arflen + 1) & ~1L; /* round archived file length up to even */
***************
*** 501,506
arfdate = arhead.ar_date;
#endif
strncpy(arfname, arhead.ar_name, sizeof(arhead.ar_name));
return(1);
}
--- 503,511 -----
arfdate = arhead.ar_date;
#endif
strncpy(arfname, arhead.ar_name, sizeof(arhead.ar_name));
+ p = &arfname[sizeof(arhead.ar_name)];
+ while( *--p == ' ' )
+ *p = '\0'; /* trim for eqstr */
return(1);
}
***************
*** 511,517
fread( (char *) &objhead, sizeof(objhead), 1, arfd);
if (N_BADMAG(objhead))
! fatal1("%s is not an object module", arfname);
skip = objhead.a_text + objhead.a_data;
#if defined(vax) || defined(sun)
skip += objhead.a_trsize + objhead.a_drsize;
--- 516,522 -----
fread( (char *) &objhead, sizeof(objhead), 1, arfd);
if (N_BADMAG(objhead))
! return 0;
skip = objhead.a_text + objhead.a_data;
#if defined(vax) || defined(sun)
skip += objhead.a_trsize + objhead.a_drsize;
***************
*** 520,525
skip *= 2;
#endif
fseek(arfd, skip, 1);
}
--- 525,531 -----
skip *= 2;
#endif
fseek(arfd, skip, 1);
+ return 1;
}
***************
*** 528,534
int n;
{
register int i;
! for(i = 0 ; i < n ; ++i)
if(*a++ != *b++)
return(NO);
return(YES);
--- 534,540 -----
int n;
{
register int i;
! for(i = 0 ; i < n && (*a || *b) ; ++i)
if(*a++ != *b++)
return(NO);
return(YES);
_____________________________________________________
Matt University crawford@anl-mcs.arpa
Crawford of Chicago ihnp4!oddjob!matt