Plays some make trickery to get all details correct.
Numerous benefits:
- make automatically handles badly fetched files,
- possible extension to special-case *each* file fetch,
- can be easily parallelized.
Similar rules for fetch-list soon coming.
Also simplify CDROM handling while we're at it, no need for 10 knobs
when one suffices.
`main' targets (checksum, fetch, extract...) are always defined.
This removes the possibility of erroneously overriding them.
Dependency fix:
- move the NO_xxx test to the _xxx_COOKIE target, so that each cookie
is built at exactly one point in the Makefile.
- separate phony targets from the real thing:
`top' dummy targets (e.g., build) depend on the corresponding cookie,
cookies depend on each others and each cookie does trigger the real targett
(unless NO_xxx) before creating the cookie.
This does repair parallel makes, which were completely broken.
Might induce problems into odd-balls ports, but I couldn't get anyone to
comment on this patch after a week on ports@ and tech@.
Maybe, if something breaks, I'll finally get some comments...
The problem with .USE macros is that they should be constant...
If they do depend on the target being made, they will invariably use
.if make(TARGET) tests. But this is a bad idea, as then `TARGET' can't
be used as a true dependency, since it's not being made then...
So instead, one would have to remember to fork another make TARGET to
ensure the .USE macro is executed correctly... This is slow, and
error-prone.
make has been passing around its flags in MAKEFLAGS since
at least 1996... so passing them explicitly around means we
duplicate them.
This avoids the make -k -k -k -k -k -k -k -k -k syndrome
that turans@ has noticed
already swamp us with information.
- perform the same optimization for README.html, namely don't invoke
depends-list and package-depends if they're known not to be needed.
target, shortcuts can't be taken.
This involves moving those default target around so that they appear AFTER
describe.
Note that these tests mean ANYTHING adding to *_DEPENDS *MUST* come before
the targets that test these for bsd.port.mk to work...
The `pname hack' already catered to some of that (only computing the
package name if dependencies exist)
This removes the hack and simply optimize dependency computation out of
existence if it's not needed.
Improves make index time by >15%.