allows us to get rid of some NO_DEPENDS tests later, also allows for
RUN_DEPENDS to become indexed on SUBPACKAGE.
LIB_DEPENDS and WANTLIB are going to need more surgery, since they need
to be checked during build and packaging...
consider it to be the main package, and do some equal treatment for each
package.
(to do: add subpackage where needed to WANTLIB, RUN_DEPENDS, LIB_DEPENDS
and act on them accordingly).
Also define _DONE_FILES for _fetch-makefile to avoid blocking if it's
not invoked from a higher level target.
can be used to run targets that may fail without impacting further stuff,
or to collect stats on anything.
For instance
BULK_DO= mkdir -p ${PORTSDIR}/config/${FULLPKGPATH}; \
cp -f ${WRKBUILD}/config.{log,status} ${PORTSDIR}/config/${FULLPKGPATH} || true; \
cd ${PACKAGE_REPOSITORY}/${MACHINE_ARCH}/all && perl ${PORTSDIR}/infrastructure/package/check-modes ${PKGNAMES} || true
- make sure locks happen when they should, including for lib-depends-check.
- make sure various targets set PACKAGING as they should.
- let BULK=Yes be invoked only from make package.
Fix for the BULK_COOKIE and UPDATE_COOKIE issue. They can no longer depend
on PACKAGE_COOKIES, since this needs to get built with PACKAGING set. So
instead, simply remove the cookies when we create a new package succesfully.
By any kind of reasoning, both bulk and update are `reset' when a new
package appears, so this seems to be the right semantics in most cases.
Thanks for wilfried and nikolay for error spotting. Hoping this will be
what's needed, finally.
building a subpackage, and then we definitely want the `current' stuff,
not the stuff that's already installed.
Allows shared libs updates in MULTI_PACKAGES to proceed gracefully without
having to uninstall stuff.
(we do not do this stuff in general, because in other cases, builds are
`staggered', e.g., a port is built against the existing base, not the stuff
in other WRKDIRS)
Add a message to that effect so that users don't get confused.
(specifically, make itself does not change dirs, so if you do ^Z,
you're not where you think you are...)
end up there with PACKAGING not set.
We do not try to `fix it' ourselves, because PACKAGING not set may have
some non obvious issues, like PKG_ARCH or PERMIT_PACKAGE_* not set correctly
at all.
Move BULK_COOKIE for package to the redirector, so that we do not
clean in subpackage cases, but instead wait for all the packages to be built.
Also, introduce FORCE_UPDATE=hard: with signatures, -F installed is
most often not necessary...
package cookie, so that an update will get all subpackages built.
And a fix for an old issue: let make update proceed to update ALL subpackages,
as seems the most natural. Create a subupdate target if one specifically
wants to update a single package (and use it as dependency in the FORCE_UPDATE
case).
cookies, and also insist on running make package, which is necessary to
make sure all MULTI_PACKAGES get built.
Repair make clean=packages: make sure all packages get named using the same
scheme as other multi-packages targets (that way, arch-indep subpackages
get cleaned properly)
into real targets.
- now make package will create missing ftp/cdrom links when PERMIT says so.
- PKG_ARCH=* packages get built into packages/no-arch, and linked from
elsewhere.
Everything gets based off PACKAGE_REPOSITORY, PKGREPOSITORYBASE and friends
get ditched.
All `package' targets go through the same routine: iterate through every
subpackage with PACKAGING set.
This includes describe, lib-depends-check, package, dump-vars, install-all,
which will iterate through subdescribe, sublib-depends-check, subpackage,
subdump-vars, and install.
(names are subject to change).
Much simpler logic, plus hey, you get an install-all target !
Might be some minor breakage, most stuff appear to work just fine...
_MASTER_LOCK, we keep a list of _LOCKS_HELD by one port builder in
an env variable, and we don't relock stuff that's already locked.
This allows us to, e.g., have fake depend on regress without issue
(even though, internally, it's more efficient to use the _internal-*
targets to avoid testing locks).
and leaves you at the ftp prompt in the directory where stuff is fetched
from.
(I find myself using this quite often to figure out which version of stuff
exists, especially for CPAN).
SHARED_LIBS enumerates the libraries like so:
SHARED_LIBS= foo 1.0 \
zop 2.5 \
tag 3.0
This just defines LIBfoo_VERSION=1.0, LIBzop_VERSION=2.5, LIBtag_VERSION=3.0
and adds these to SUBST_VAR, further tweaks must be done, usually at the
MAKE_FLAGS/MAKE_ENV level.
For gnu ports that use automake, the supplementary MODGNU_SHARED_LIBS
variable can be used like this:
MODGNU_SHARED_LIBS= foo '-no-undefined'
and it will define libfoo_la_LD_FLAGS=--version-info 1:0:0 -no-undefined
Some gnu ports have weird variable names for libraries. For instance,
the libORBit-2 is set using libORBit_2.
LIBORbit-2_ALIAS=ORBit_2
will make sure the correct name is used.
much feedback from bernd@
the main directory... since pseudo-flavors are not entered as pkgpath,
this is necessary to ensure the top-level directory gets cleaned up
correctly...
Problem reported by Moritz Grimm.
it makes more sense to have a subdir variable as input, split it
into toset and dir as output, and to unsetenv FLAVOR SUBPACKAGE along
the lines.
End result should be equivalent, but slightly more readable.
no objection from my neighbors either...
for errors (and get rid of _NODEPS since it's not needed any more)
* set check to Failed in *libresolve_fragment, so that we can test
for it and report properly.
guys here have no objection...
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@