over 256 characters, so we create an extra file for each wantlib, and
depend on it. That way the full _DEPlibs_COOKIE is regenerated (and retested)
each time WANTLIB changes.
Now, resolve-lib can take a big list of libraries with full paths,
and it can solve a big list of spec at once.
Basically, we move most of the parsing of spec paths into resolve-lib.
Since print-package-signature does build a full list of libs, let's solve
it all at once, instead of invoking a costly perl script repeatedly.
Add some caching possibilities for out-of-date. Specifically:
- store libraries for each package under the directory _PORT_LIBS_CACHE
- use the dependency cache _DEPENDS_FILE to avoid recreating dependency
chains, add a new file _DEPENDS_CACHE that will accumulate all dependencies,
and extract these with a simple script extract-dependencies.
Use echo to build libraries lists instead of ls, that's a bit simpler...
Some more clean-up will happen: it's probably simpler to parse libspecs
at once, extract the libraries needed and go fetch the corresponding libraries
just once.
Add internal NODEPS to turn off computing dependencies.
Write code similar to _print-package-args that is strictly ports based,
and hence really walks the wantlibs, and needs the pkg_create stuff
to get at the real ports contents.
Recode print-package-signature to refer to the ports tree contents
exclusively (pkg_info -S for the package).
Thx bernd@ for trying that out.
This should make for a slow, but accurate, out-of-date printer.
the FULLPKGPATH, thus providing changes to packing-lists which shouldn't
happen, and making update more difficult.
Accordingly, bump all pkgnames with PSEUDO_FLAVORS, and provide an
update @pkgpath for the bug for most of them (left out the ones with 3
or 4 pseudo flavors for space constraints...)
- plist repository under PLIST_DB (optional).
- print-package-signatures shows what's used for signatures.
- make fetch shows full url you can copy/paste, simpler to look for typos
that way.
distinfo.
This allows ftp to skip files which return 404 error files and other
such nonsense...
(note that if you want to really grab a file with the wrong size, you
can just say CHECKSUM_FILE=/dev/null)
with input from by xsa, sturm, ian..
- separate UPDATE_COOKIES_DIR, unless set to empty.
Makes for easier management.
- FORCE_UPDATE variable, that makes certain packages are updated when
a dependency is run, and that forces the replacement of packages that are
already there. Still uses the update cookie, so that this update occurs
just once unless you wipe out yur UPDATE_COOKIES_DIR (which justifies putting
update cookies in a separate directory).
what it should.
Use the exact same rules for checking LIB_DEPENDS that will later be used
to build the package itself, e.g., add the pkg dependency check.
The new version uses the pkg_* infrastructure to read existing plists
and produced new plists.
Lots and lots of improvements:
- copy most stuff over from original lists correctly. For instance,
attach @exec/@unexec/@sample to other files and copy them in the right
location.
- generic post-treatment of @commnent, using stringize(), so that most
things can be commented out and will stay commented out.
- parse all packing-lists using relevant PREFIXes. Grab PFRAG.xx if %xx%
is seen.
- walk through all of fake, and distpatch files according to PREFIXes
if nothing else works.
- identifies man, libraries, info, handling symlink correctly.
to say port works only with shared libraries.
Mostly useful for `update-plist' which will recurse differently if
LIB_DEPENDS are only BUILD_DEPENDS or if they becomes RUN_DEPENDS.
okay pvalchev@
If LOCK_CMD, UNLOCK_CMD and LOCK_DIR are defined, those are used to
perform `big-lock' style locking on top-level targets, such as
extract, patch, build.
The internals of the ports tree do not use any finer grained locking.
Those top-level targets now redirect to _internal-targets, without
any behavioral change.
Any dependency computation will recurse to another directory, and
invoke a top-level target, thus triggering the locking of the dependency.
All locking is done using FULLPKGNAME, except for fetch with uses
the DISTFILES names for independent files.
If no locking is desired, the top-level targets simply redirect to
the _internal-targets. The cost is close to zero: make just needs to
handle an extra ~20 phony targets.
Much testing and approval by brad@, naddy@, pval@, fries@ and other
people. Thanks to niklas@ for some useful discussion.
the front of bsd.port.mk.
This allows Makefile.inc and modules to use them more easily, and also
cleans up things slightly.
Also kill .include ${PORTSDIR}/../Makefile.inc (???)
bsd.port.mk and bsd.port.subdir.mk. Make sure flavors are properly
separated.
Change the way bsd.port.subdir.mk works, slightly: always set full directories.
- SKIPDIR with full paths will work.
- all dirs are displayed as full package specs.
Generate complete html files.
original idea from jsyn@, discussed and first tests at c2k3
Warning!
- this commit is different from all patches sent around, please remove
them before updating
- due to a few bugs in systrace this is currently not ready for the casual
porter and several ports will fail to build, you've been warned
The idea of this patch is to help a porter when developing a new port.
With systrace the configure, build and fake stages are not allowed to
open network connections or write outside some well defined directories.
This way misbehaving programs will be noticed due to logfile entries in
/var/log/messages and the port can be fixed. There is generally no need
for endusers to use this, as the checksum ensures that ports in the
future will behave the same as they did when porting. :)
To activate systrace'd port building, set USE_SYSTRACE=Yes (e.g. in
/etc/mk.conf)
tested by some people, ok espie@
NO_DESCRIBE, NO_PACKAGE, FETCH_BEFORE_ARGS, FETCH_AFTER_ARGS, NO_WARNINGS
(is this used ?), VARNAME, FORCE_PACKAGE.
Make CKSUMFILES invisible from users.
Make sure repackage and reinstall go through normal clean targets.
Kill pre-clean, pre-distclean, pre-repackage.
Don't allow customization of distclean.
clashed with multiple names into MAINTAINER (separated with comma), now
that it is part of SUBST_VARS. '|' should be safer wrt all other
variables there; ok espie
tree / release in sync, and strictly managing it generates a lot
of useless effort.
Note that the support for NEED_VERSION is now gone, however ports
will get that line stripped from their Makefile as time progresses
with updates, gradually; there is no emergent need for it.
ok espie and others
inside a subdirectory of the working directory, instead of elsewhere.
Allows packages BULK=Yes to work correctly, and increase reproducibility
of builds.
tested by naddy@ through several incarnations.
Ports that use patch/configure/build dependencies must be adjusted for this.
Pleasingly enough, the adjusted version is often simpler.
The change uses an internal _MASTER variable to recall the list of ports
built during dependencies, for less confusion.
RUN_DEPENDS) to create a more accurate list of @dirrm.
Minor negative side-effect: up-to-date dependent packages must be present
for this to work. Not a problem, since this is only used by maintainers.
This improves the quality of generated plists for large packages with lots
of dependencies by a large amount (e.g., kde)
reviewed by pval@
LIB_DEPENDS are no longer part of ALWAYS_DEPEND for the new-depends code,
but use their own code.
The code does scan the list of libraries for dependent packages, and insert
corresponding @libdepend lines into the resulting package. There are a few
important consequences:
- no libdepend lines are inserted if only a static library is found. So
RUN_DEPENDS are now needed to supplement LIB_DEPENDS if a package requires
another package for something that isn't a library.
- dependency checking for installed stuff can go one step further, since
we have the major/minor number of the libraries used for the build.
At the moment, pkg resolve dependencies does nothing smart with the
inserted libdepends, but it will (soon). In fact, for most libdepends, if
the major/minor scheme are correct, no check on the installed pkgspec ought
to be necessary... which is why the `default pkgspec to check' is pkg-* for
libraries.
- resolving recursive run dependencies need to go one step further: a
RUN_DEPENDS pkg may have some LIB_DEPENDS, and the RUN_DEPENDS pkg will be
needed to explicitly write the required information into the resulting
package... Hence the necessity of being able to tune the list of libraries
to ask the uninstalled package (and to make sure the uninstalled package
is built).
This is only preliminary work. Currently, this doesn't yield any real
benefits to the old approach, as a few semantic details need to be
sharpened out. Also, there are now quite a few old targets that are a
complete mess and will need to be cleaned up/removed entirely.
Thanks to naddy@ for testing various preliminary versions of this patch
and helping me iron bugs out.
no longer relies on ldconfig, but rather on the path stored inside
LIB_DEPENDS. Introduce a lib_resolve_fragment that can be used to
resolve the libraries from a given list (e.g., listlibs).
To be used in the next patch.
Note that this check is currently more or less equivalent to the old
check, apart from the fact that:
- libs can't trust packages,
- lib-depends always resort to non-shared libraries, even on shared
architectures, if the shared check doesn't work.
individual port, introduce a new variable for bsd.port.mk, VMEM_WARNING.
By setting this variable to `Yes', the user is given a warning about the
virtual memory requirements just before the pre-build stage.
o Also give some examples for different shells for what to do about
it, and mention login.conf(5). bash, for example, has a confusing
-v flag to ulimit.
o Document this in bsd.port.mk.5
espie@ ok
Useful for modules support: now specific modules can require later
versions of bsd.port.mk.
Of course, ports using modules may need an update to 1.486 to use
this feature.
The chroot is needed to avoid having ldd pick up dependent libraries
that come from a package variant and are actually not needed as
dependencies.
Scan /usr, /usr/X11R6 for system libraries, and WRKINST for packaged
libraries.
Some testsuites use HOME to test their getenv function. Which seems
to be reasonable. But we definitely don't want to allow HOME into
MAKE_ENV by default.
the maintainer made a mistake, and turn everything to No.
Record it as _BAD_LICENSING for describe purpose.
Yep, having this as ERRORS is obnoxious.
Then, we can rely on PERMIT_* always being defined.
Rewrite ftp-packages/cdrom-packages to use more current rules. Fixes
naddy's issue of ignoring IGNORE. Use a .for loop, since those rules
are basically identical.
No longer use them to try and record port logging, as we have a much better
script to do that.
`Enhance' bulk-packages to do ftp-packages/cdrom-packages linking as well,
so that one single sweep of the tree should be enough for everything.
(to deal with a common shared Cygnus configure)
Move MODGNU_configure definition to gnu.port.mk. Should have done that on
creation.
Typo in brad's hack (to be superseded shortly anyways)
This can speed up some iterations, as a dependency won't be checked more
than once. This also allows for make extract NO_DEPENDS=Yes, then later
to have the dependencies pulled in at configure stage (even though this
might not work all the time, as some dependencies may be needed earlier
but then you'll certainly notice).
- allow for several libraries, separated by commas.
- try to heed dependency most closely. Notably, make sure the spec
stops at a sensible place. This may break some ill-formed dependencies.
Turns out this can be done based on target, directly, instead of
relying on /nonexistent.
One step closer to turning TRUST_PACKAGES=Yes on by default...
This is work-in-progress. Supplemental hooks will be added when they
become necessary.
The goal is to permit separate subsystems to tweak the package building
process slightly. This should help e.g., python or qt2, for instance.
Documentation will come when it's tested more thoroughly...
work-* is too long, because we want to include the PKGNAME in the dir name
(so that PKGNAME changes are less likely to work with old work directories)
Change the way clean works, so that you can say
make clean='dist depends packages' and have it do what you think it should
do.
Common fragment to _create_wrkobjdir.
Put some info into PACKAGING (name of subpackage being built)
Since those are mostly infrastructure-side, making SUBPACKAGE transparent
only adds to the confusion, so don't interpolate SUBPACKAGE into
FULLPKGNAME, hiding it into _FULLPKGNAME, but rather let FULLPKGNAME
tag the main package, and use FULLPKGNAME-foo for subpackage -foo.
This will simplify some other stuff...
- define _FULLPKGNAME* and _PKGFILE*. Use _PKGFILE* as package cookie
instead of package_done.
- use ${PKG_DBDIR}/${_FULLPKGNAME${SUBPACKAGE}/+CONTENTS as install cookie.
- BIN_PACKAGES variable. If set to yes, remove coupling between
PACKAGE_COOKIE and dependencies, so that binary packages exist
independently of working directories.
- mark packages as precious.
- change all refs to PKGFILE to _PKGFILE${SUBPACKAGE}.
- add bulk-packages target.
Note that BIN_PACKAGES and TRUST_PACKAGES are off by default.
This interface is likely to change. The name bulk-packages will probably
change as well.
We will probably get rid of the old PKGFILE/FULLPKGNAME (taking SUBPACKAGE
into account) and use the new PKGFILE/FULLPKGNAME
PKGFILE-foo/FULLPKGNAME-foo instead (with explicit subpackage information).
This is less confusing and simpler.
- back substitute VAR_SUBST (hence swap ARCH/MACHINE_ARCH)
- pass PKGDIR to make-plist.
- don't create PLIST-auto/PFRAG.shared-auto. Move originals around, and
create new ones directly (guard against accidentally deleting old ones).
Todo: add regexp to dispatch stuff to fragments automatically, based on
MULTI_PACKAGES.
Allow for MACHINE_ARCH specific files or patches, if no such files
for ARCH found.
Put compiled packages in MACHINE_ARCH directory, instead of ARCH.
All of this to improve support for compound architectures, mainly
m68k-based architectures at this time.
While there, mention mvme88k does not have shared libraries, to be
sure this isn't forgotten when mvme88k gets back in shape.
ok'ed by espie@
- allow Makefile to distinguish packaging steps, since SUBPACKAGE can now
be set for various reasons.
- EXTRA_LIBDIRS for architectures without shared libraries.
- let USE_MOTIF be sensible: any, openmotif, lesstif.
any triggers a lesstif flavor.
- show=name as a shortcut.
- package-dir-depends to check that packages are okay.
- error message for non-existent dirs.
- save subdir into package, that's what is useful, since the name is
already there.
- check that SUBPACKAGE is a member of MULTI_PACKAGES.
Make make SUBDIR=misc/fileutils,-ls work without error.
Use it where we can, including WRKOBJDIR `real' names.
NOTE: if you are using WRKOBJDIR, *all* flavored builds directories
will change names, from work-no_x11 to work,no_x11
dir-depends: list of SUBDIRS this port depends on (with flavors, subpackages),
to use with tsort.
build-depends-list, run-depends-list: list of pkgspec:dir needed for this
port, no recursion. To use for INDEX.
- move FLAVOR_EXT up so that WRK* are correct when they're needed for
dependencies.
- build a list of _PACKAGE_COOKIES, one for each subpackage.
- let package go through an indirection:
package: ${_PACKAGE_COOKIES}
_PACKAGE_COOKIE_${SUB}:
SUBPACKAGE=${SUB} ${MAKE} _package
so that all packages are `flat', and subpackages can depend on each other
freely.
don't work, as they propagate down subdirs.
Use `FLAVOR=a make' (sh) or `env FLAVOR=a make' (csh) instead.
Error out with a useful error message if old usage is encountered.
always define _ALWAYS_DEP, _BUILD_DEP, _RUN_DEP and test for emptiness
instead of definedness, so that the code is still optimized away when
dependency lists are defined, but empty.