Use eval to simplify passing those to submakes.
Note that the preferred separator is ',', not ':'.
(Because ':' can't be used unambiguously in *_DEPENDS, whereas ',' can)
NetBSD did this a while ago, this is a natural idea. It just took me
some time to figure out how to do that in a MULTI_PACKAGE context,
while maintaining compatibility with existing stuff.
* pull every dependency under the same rule, using specialized fragments.
* re-check after the dependency is expanded, unless earlyexit is true.
* explicitly recognize /nonexistent as a specific way to have always
triggered dependencies, use it to handle DEPENDS in a uniform way.
* parse dependencies fully. Note that we know have a pkg variable that will
be used.
Thanks to naddy@ for useful tweaks.
This is probably not quite perfect yet, stuff may break. Other stuff that
remain to be done:
- handle library dependencies better, so that lib.10 will match only
lib.10.x and not lib.100.
- handle default FLAVORS correctly. This involves not
passing FLAVOR='', but rearranging ${MAKE} ${_DEPEND_THRU} to remove
FLAVOR from the environment and from MAKEFLAGS (yucky).
The cleaner fix would be to create the package to stdout under SUDO
and redirect it, but that junk (pkg_create) is actively fighting that.
God, I've got to rewrite it and retire that crap.
it's so seldom used now).
Remove a few targets that are not really needed (mirror-distfiles, use
mirror-maker instead).
More changes to fake to come, once they've been properly tested.
this is stupid (BATCH is only there to skip IS_INTERACTIVE ports).
Make PATCH_CHECK_ONLY a Yes/No switch.
Let it be a slightly better no-op, e.g., skip creating the cookies
in checkpatch operation.
Use some weird code to allow backward compatibility.
Rely on distfiles suffixes and a case statement (with matching variable
EXTRACT_CASES) to allow distinct extraction rules for multiple distfiles.
incompatibility with NetBSD).
This patch rearranges code so that PKGPATH is maintained
- when recursing into subdirs,
- when computing dependencies.
So that this reduces the number of `pwd` calls overall.
Should be especially noticeable for mirror-maker.
WRKPKG should seldom be changed, unless it conflicts with the port's
actual naming conventions (default is ${WRKBUILD}/pkg).
Substitute stuff in INSTALL/DEINSTALL script as well.
The only drawback is that those LOOK like shell variables, but are actually
simple sed substitution.
Preconise a style such as
prefix=${PREFIX}
(then use ${prefix}) to avoid confusion.
invocations. This works around a bug in autoconf-generated scripts that
is present up to autoconf 2.13.
In recursive configure, INSTALL is re-set from ac_given_INSTALL, to handle
relative paths correctly. However, sometimes ac_given_INSTALL hasn't been
set yet, and we end up with a `BSD compatible INSTALL' of ../
- the PLIST, MESSAGE, DESCR variables refer to the sources.
- files are generated under ${WRKBUILD}, always.
- SUBST_VARS refer to the variables being substituted. ARCH,
HOMEPAGE, PREFIX are always substituted.
Use $\{VAR} to escape substitution.
Plus ${FLAVORS} -> -flavor1-flavor2 for PLIST.
- the %%FRAG%% and %%!FRAG%% notations are always used for PLIST.
- SED_PLIST can be augmented if needed.
Plus some compatibility kludges with the current situation.
use _DEPEND_THRU uniformously.
Note that this actually needs something very similar to what is used
in bsd.port.subdir.mk to work.
In particular `default' FLAVORs not being empty is probably a bad idea,
and won't work uniformously.
The right way to set a default flavor is probably to:
- not have empty as a valid flavor.
- do things in two steps:
FLAVOR?=default
.if empty(FLAVOR)
FLAVOR:=default
.endif
so that flavor always gets set correctly.
This is somewhat orthogonal to FLAVORS.
Principle: one port may build several packages in one go.
For instance, egcs will build all compilers, and package stuff as
base, C++, Fortran, etc.
This simplifies some japanese ports greatly, e.g., one Canna port that
builds libs/server/app packages.
How to use:
just set
MULTI_PACKAGES=-ext1 -ext2...
in the Makefile.
Then make package will invoke itself recursively with SUBPACKAGE set to
-ext1, -ext2.
The SUBPACKAGE will fetch package info as PLIST-ext1, COMMENT-ext1,
DESCR-ext1, etc.
The port Makefile itself can test the value of SUBPACKAGE if things differ.
Some problems:
- there still is a main package (with PLIST, DESCR, etc), and it's built
last, so you can't add RUN_DEPENDS=main_package to subpackages, you have
to encode them explicitly in the PLIST for now.
- other ports can't depend on subpackages yet. This is usually not a
problem, it's just a question of choosing the `right' main package (e.g.,
for Canna, it will be canna-lib).
- PLIST.sed recognize @FLAVOR@, which is extended to the current flavor,
so that a subpackage may depend on the corresponding main package in
explicit ways.
describe is also invoked recursively, so that all subpackages appear in
the INDEX.
ports tree to be shared by hosts of different types. Note: you
may want to do something like this to move any existing packages:
cd /usr/ports/packages
mkdir .tmp
mv * .tmp
mv .tmp sparc
patch approved by espie@
- test for NO_SHARED before reading PFRAG.shared
- pipe several sed together, otherwise keyword recognition won't work
in fragments.
- put PFRAG.shared replacement at front, so that further flavor will
use it.
- various typos...
if a port sets FAKE=Yes, this means it can be `pre'-installed elsewhere,
with DESTDIR set to WRKINST (=work/fake-${ARCH} by default).
the infrastructure takes care of pre-install/do-install/post-install targets,
assuming those install stuff under PREFIX.
To help ports to cope with DESTDIR, you can set FAKE_FLAGS and FAKE_TARGET
(used for the fake installation).
Ports with FAKE=Yes are the way to go: they can be packaged directly without
a real installation, and the installation proceeds from the package, thus
forcing porters to check the package.
- don't record mtree in packages by default,
- don't run mtree on /usr/local or /usr/X11R6 by default,
- only use MTREE_FILE for plist.
- choose mtree based on PREFIX, since this is what matters.
May be different from where source lives.
And from where build happens.
NO_WRKSUBDIR=Yes is equivalent to WRKDIST=${WRKDIR}, and not
particularly smaller, deprecated it.
Remove CLEANDISTORIG, use patch -b instead.
Note that DISTORIG ends in .orig to let rm *.orig still work...
More submakes die.
Remove NO_WRKDIR `feature'
Fix `make clean' to do the right thing even if WRKOBJDIR is not defined
at that point.
It's doubtful package-noinstall is useful, but I left it in for now, with
slightly altered semantics.
- put .if defined(XXX) && !defined(YYY) on the same line: less indentation,
more readability.
- set found to true/false directly (builtin).
ALWAYS check that a dependency directory does exist and is a directory.
Catch up typos more quickly, since they will be evident *even if the
dependency is already satisfied*.
Make this only a warning, not a hard error, as we still want to cater
to users with a partially checked out tree...
This is done in a tricky way, so as not to disturb the usual sequence
of targets. Namely, you still have
fetch, extract, patch, configure, build, install, package,
but patch does invoke a subtarget distpatch when needed,
and you can
fetch, extract, distpatch, patch, configure, build, install, package
for the same results.
Mostly useful for porters: provide an intermediate point to work on
patches, and make it easy to override distpatch/OpenBSD patches separately.
This trims down the number of sub-makes the port system runs quite a bit,
and makes some other fun stuff possible.
THIS KILLS THE pre-*/post-* SCRIPT STUFF
The functionality is unneeded, as it can be done with normal
pre-*/post-* targets, but it must be kept in mind when porting
Free/NetBSD ports.
some ftp servers give weird dates, like Dec 14 1909...
and then make gets confused, as make 2.6 is broken with respect to negative
dates.
So we touch the file whenever make gets confused and it already exists.
This avoids fetching & re-fetching files with negative dates, while keeping
timestamps for correct files...
So, we indent each test/loop level two spaces to let the structure
of bsd.port.mk be more visible.
Large indentations show that something blatantly unobvious/obfuscated is
going on.
Design decision made after consulting with brad@.
We agree it's much clearer that way.
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.