summaryrefslogtreecommitdiff
path: root/usr.bin/make/arch.c
AgeCommit message (Collapse)Author
2000-11-27This patch fixes ArchFindMember so that it handles SVR4 membersMarc Espie
similarly to read_archive. Note we no longer bother seeking back to the start of the header, as only ArchTouch accesses that header, and can do the seek itself. With this, arch handling should be working, more or less. thanks to Todd, Miod, Naddy for reviewing those patches.
2000-11-27This does fix some nasty issues: ar field members are NOT null-terminated.Marc Espie
Hence, read_archive must be very careful to parse stuff correctly: don't use str* when mem* are appropriate, copy numeric fields and ensure they're terminated...
2000-11-27We take of the SVR4 archive handling data structure from our archive,Marc Espie
and put it into a specific structure (it is wasteful to keep lugging SVR4 structures once an archive is parsed). By tweaking read_archive slightly, we can achieve a nicer interface to ArchSVR4Entry. Note a bug in make: ArchFindMember does (currently) not use the SVR4 code, hence some archive members won't be found in non-caching mode...
2000-11-27Factorise duplicated code involved in touching archives.Marc Espie
2000-11-24As it stands now, arch.c does not work.Marc Espie
Its main failing is that ar headers are NOT null terminated. This code is atrocious. This change starts cleaning that up. Replace the list of cached archives with a hash, streamline the logic of ArchMTimeMember, by taking out the actual function that does the reading (read_archive). More fixes to come.
2000-11-24Change the time stamp interface to use an abstract datatype.Marc Espie
Define two possible interfaces: the classic one, and the new one (used where available) that depends on timespec. Better granularity, make is now able to distinguish between files that were built during the same second.
2000-10-13Fix Arch_MemMTime (previous change I did was bogus)Marc Espie
2000-09-14This kills the last old hashing table, in arch.cMarc Espie
Slight optimizations: instead of storing archive members, just keep the modification time, as we don't care for the rest of the archive information. Lazily compute mtime, stash ascii date instead, and convert to mtime when needed (storing an out_of_date value to mark the unconverted values). Archive handling is atrocious and need some clean-up. Thanks to miod@ who took the time to review those patches.
2000-09-14Introduce a few macros to handle timestamps in an abstract way.Marc Espie
Replace the time stamp hash in dir.c with an open hashing structure. In doing so, remove some nasty casts, simplify code a bit: Dir_MTime can return a modification time, since make does not make a distinction between out-of-date and non-existent files.
2000-09-14Replace the old hash used to hold file names within a directory withMarc Espie
open hashing. An interesting optimization is that the open hashing interface is more fine-grained, hence we can compute the correct hash value at the start of Dir_FindFile, and reuse it for each hash structure into which we look (the effect is measurable on large directories along with objdir/VPATH). Remove a few unnecessary Lst_Open/Lst_Close that serve no purpose except obfuscating the code. The interface to dir.h changes slightly, hence tedious includes changes...
2000-09-14Some systematic clean-up.Marc Espie
- UNUSED macro that expands to __attribute__((unused)) for gcc - move rcsid around so that they can be tagged UNUSED. - activate -Wunused. - use UNUSED instead of kludgy junk for function arguments. - add extern to all extern prototypes. - update comments in lst.h. - clean up var.c a little bit, constifying arguments, updating comments...
2000-06-23Once those special variable are taken care of, other Var functions can takeMarc Espie
the GNode's context directly. We rename that special Lst to `SymTable *' in prevision of things to come. Along the line, we lose the special GNodes affected to VAR_CMD, VAR_GLOBAL, VAR_ENV, which become simple Lsts... This is not a problem, except when getting to a context's name for debugging (handled very nicely by offsetof). Again, this is a preparatory patch, which does not gain anything except for cleaning up issues... Reviewed by millert@ and miod@, like the previous patch
2000-06-23Start of variable fixes and speed-ups.Marc Espie
This patch may seem a bit non-sensical at first. It simply introduces some new interface. Specifically, recognizes that some variable names (.TARGET/$@, .OODATE/$?, .ALLSRC/$>, .IMPSRC/$<, .PREFIX/$*, .ARCHIVE/$!, .MEMBER/$%) are `special' (the actual variables which are local to a target, e.g. GNode). Currently, The Varq functions (for Varquick access) are only stubs to the normal functions. This fixes a very important detail before proceeding to turn variable lists into hash tables: if every GNode holds a hash table, initialization times for those will be very costly. But generic GNodes only hold those seven special variables... which can be stored directly into a small array; the only general cases are the environment, the command line and global variables.
2000-06-23Trivial consequences of the previous list changes:Marc Espie
- audit code for Lst_Datum, it's never applied to an empty pointer, so check can be removed -> turn into a macro, - Lst_First, Lst_Last can become macro as well - specialized version of Lst_Succ (Lst_Adv) to use in loops where it cannot fail, - Lst_Open can no longer fail. Trim down corresponding code. Reviewed millert@, miod@
2000-06-17This patch introduces a distinction betweenMarc Espie
Lst_Init (constructor) and Lst_New (allocation + construction) Lst_Destroy (destructor) and Lst_Delete (deallocation + destruction), and uses that to turn most dynamic allocation of lists (Lst pointers) into static structures (LIST). Most of this is mundane, except for allGNs in targ.c, where the code must be checked to verify that Targ_Init is called soon enough. Lst_New is a temporary addition. All lists will soon be static. Reviewed by millert@, like the previous patch.
2000-06-10Clean-up patch: use `void *' instead of old-fashioned ClientData/Address.Marc Espie
2000-03-26Remove idiotic, braindead casts T* -> void*Marc Espie
They serve no purpose, except hiding potential bugs. In particular, remove (ClientData) cast from macro, showing potentially troublesome use of Hashes to store time_t.
2000-02-02Bug-fix: make should behave sensibly when presented with negative times...Marc Espie
- let *_MTime return booleans, as that's what they're used for, the time_t is set as a side effect. - use OUT_OF_DATE for a date starting point, set it at the origin of time.
2000-01-08Finish changing all Var_Parse arguments to size_t. Thanks to millert@Marc Espie
for reminding me.
1999-12-19Rearrange Lst_Find interface to conform better with other functions.Marc Espie
1999-12-18Nothing ever checks ReturnStatus on Lst_Insert, Lst_Append, Lst_AtFront,Marc Espie
Lst_AtEnd, Lst_Concat, Lst_Remove, Lst_Replace. Don't bother returning one.
1999-12-18Lst_DeQueue already checks for empty lists.Marc Espie
1999-12-18NIL, NILGNODE, etc, are only glorified NULL.Marc Espie
Get rid of them. Get rid of list.h, nothing uses it anyway.
1999-12-18make does not use circular lists, get rid of the extra weight.Marc Espie
1999-12-16Var_Subst is actually two distinct functions folded into one:Marc Espie
split the function specific to for.c out, and give them more sensible arguments at the same time. This makes .for loop handling more efficient, as we have some heuristic to evaluate the size of the buffer needed...
1999-12-06Extra parameter no longer needed, ditch.Marc Espie
1999-10-05Efficiency patch from NetBSD:Marc Espie
make spends time freeing data structures right before exiting. So don't bother. Keep the code inside #ifdef, so that it's still there if someone ever wants to use make code inside a library.
1999-06-01Fix some mips -> __mips__ stuff.Per Fogelstrom
1998-12-05Modifications from netbsd:Marc Espie
- don't interfere with MACHINE/MACHINE_ARCH defines for bootstrap - type clean-up, time_t, and printing `unknown' ints - fix TARGET/MEMBER bug in archive rules - memmove... - cleaner Error handler. - reentrant brk_string - .MAKE env variable - preliminary scaffolding for .NOPATH Other improvements: - efree - shellneed streamlined - display Stop in .CURDIR after an error. - document most features and misfeatures. - add a few OpenBSD notes to the tutorial.
1998-07-13Use SEEK_CUR as "whence" in fseek, not 1.Todd C. Miller
1998-07-02Fix a bug where make gets confused by targets beginning with a period (``.'')Todd C. Miller
and tried to do a suffix conversion, following a NULL pointer in the proccess. Also add some sanity checks so we don't blindly assume strchr returns non-NULL.
1997-10-13powerpc ELFPer Fogelstrom
1997-06-17(foo *)NULL -> NULLkstailey
1996-11-30Sync with NetBSD:Todd C. Miller
- Merge in FreeBSD and Lite2 changes. - Fix bug where a non-archive target with a .a suffix would always be considered to be out of date, since it does not have a TOC. - Fix NetBSD PR #2930: declare missing variable.
1996-10-17Do not consider non-existent archives as up-to-date on non-a.out systemsNiklas Hallqvist
1996-09-21Do not look for a.out t.o.c sections in the mips-based portsNiklas Hallqvist
1996-09-02Sync up with NetBSD:briggs
(christos) Fix bug reported by Greg Hudson where leaf (source only) nodes were referenced only by their basename and not by their full pathname. This breaks when .PATH or MAKEOBJDIR are used. There might be Makefiles around that try to work around this bug by prepending ${.CURDIR} to the sources, and they should be found and fixed. Also a lot of the gunk in suff.c that was attempting to work around the same problem could be removed. (christos) - Move -D flags from Makefile to config.h and explain what they do. Add -Wall -Wno-unused to CFLAGS. Add new define SYSVVARSUB to enable SysV style variable substitutions and enable them. - Add SunOS style command substitutions via SUNSHCMD - Fix core dump with '{variable = value' (christos) Fix bug where make will always exit with 0, even when one or more parallel jobs failed. (Only affects parallel make code) (christos) Protect __P from being multiply defined (for systems that already define it) (christos) Add strdup() since ultrix is missing it. From Larry Schwimmer <rosebud@cyclone.Stanford.EDU> (christos) Add estrdup(), a checked version of strdup and use it. (christos) Recognize SVR4 style long filename entries in archives. (thorpej) Tidy up some RCS ids a bit.
1996-07-31RANLIBMAG should not be set on alphas, as make doesn't know ECOFF archivesNiklas Hallqvist
1996-03-27From NetBSD: merge of 960317Niklas Hallqvist
1996-02-22From NetBSD:Niklas Hallqvist
Support SVR4 style archives. Fix pr/1421 (from Matthew Green) and pr/1997 (from Jeff Thieleke). In ParseDoInclude(), make a temporary copy of the current file name while searching for ""-type include files, since the current file name might not be a writeable string.
1995-12-14from christos@netbsd:Theo de Raadt
Minor: - ${.PREFIX} should never contain a full pathname - Fixed gcc -Wall warnings Major: - compatMake is now FALSE. This means that we are now running in full pmake mode: * rules on dependency lines can be executed in parallel and or out of sequence: foo: bar baz can fire the rule for baz before the rule for bar is fired. To enforce bar to be fired before baz, another rule needs to be added. [bar: baz] * adjacent shell commands in a target are now executed by a single invocation of the shell, not one invocation of the shell per line (compatMake can be turned off using the -B flag) - The -j flag now works... I.e. make -j 4 will fork up to four jobs in parallel when it can. The target name is printed before each burst of output caused by the target execution as '--- target ---', when j > 1 - I have changed all the Makefiles so that they work with make -j N, and I have tested the whole netbsd by: 'make -j 4 cleandir; make -j 4 depend; make -j 4; make -j 4 install' - I have not compiled or tested this version of make with -DREMOTE. - Turn compat mode on by default. It gets turned off when the -j without the -B flag is specified. [Thus you can use -j 1 to turn it off]. - Fix malloc -> emalloc as Gordon noted. Updates for POSIX/SVR4 compiling: arch.c: Don't require ranlib stuff. Not everybody has it. dir.c: SunOS-4 != Solaris; change #ifdef sun to #if sun && !__svr4__ job.c, compat.c: Don't use 'union wait', use int and the W*() macros. main.c: Check for uname() == -1; some unames return > 0... util.c, job.c: Add signal() with BSD semantics for svr4, don't use bsd sigmask and friends. from cgd@netbsd: pull in make.h. (PAlloc() now uses emalloc(), which is prototyped in make.h. If the prototype is not in scope on the Alpha, I see lots of "cast to pointer from integer of different size" warnings.)
1995-10-18initial import of NetBSD treeTheo de Raadt