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.
It's a fair attempt at trying to match actual changed files
with the patchdir, and invent new patch file names.
There are a few things it doesn't do yet, such as dealing with
patch files with multiple patches, or dealing with context diffs.
Just watch out when you use it for the first time on a port, verify
you don't lose or duplicate patches.
I've been using this to update large ports recently, and it seemed too
good not to give it to other porters.
Approved by turan@
if a new directory was found, it is always marked for @dirrm.
But, if the directory is empty, nothing pertaining to it is recorded in
the PLIST... and thanks to pkg_*, we can't record directories in the PLIST.
So, just add an @exec mkdir -p right in front of the @dirrm, up to
the port maintainer to decide whether the @exec mkdir/@dirrm pair is
justified or not (for the port at hand).
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.
# DISTONLY: May distribute the distfile only.
# NOMODIFY: May not distribute ports that are modified in any way,
# i.e, the package may not have any patches applied to it.
# Precompiled packages are fine as long as they do not
# change the original port.
Add new variables (WRKDIST, WRKSRC, HOMEPAGE), remove old stuff such as
PATCH_SITES.
Be very explicit in explaining about stuff that hardly ever works.
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.