one, via "make replace OLDNAME=oldpkgname".
Enhance replace-names to use OLDNAME if present. Move replace-names
target before replace-tarup, and change replace-tarup to use the
computed oldname. Make deinstall respect OLDNAME.
Tested on netbsd-current with standard make replace and with OLDNAME.
tar up, instead of PKGBASE.
This enables modifying that file to have a package that isn't
automatically found be the replace target, e.g., "echo libglade2-2.6.2
> work/.replace_oldname" after make replace fails to find a package to
tar up when doing make replace in libglade.
dependency (bootstrap, build, full) is printed.
When building a package that pulls in the basic tools as dependencies,
it is good to know whether these are build or full dependencies, so the
additional information is useful.
- check-perms.mk was not DESTDIR aware, prefix files before passing it
to the directory extraction
- PKG_FILELIST_CMD was calling pkg_info, which is fine for normal
installation, but fails of course for DESTDIR. Just drop the @ lines
from ${_DEPENDS_PLIST} and use that.
- To make he former work, ensure that _flavor-generate-metadata is part
of _INSTALL_ALL_TARGETS. It was normally a dependency of
_flavor-register, but that is skipped for DESTDIR.
- Remove ${_DEPENDS_PLIST} when running install-clean.
instead only remove the files generated by _flavor-generate-metadata.
This should preserve the +INSTALL and +DEINSTALL scripts (which are
created during the "build" phase") across a "make update" or a "make
deinstall".
than in work/.pkgdb, so as not to lose them in install-clean.
Because of this, put them back explicitly.
(Fixes 'make replace loses +REQUIRED_BY', and also the unreported
'make replace loses +INSTALLED_INFO'.)
contains files that are generated during the "install" phase. This
should fix the problem where PLIST modifications were ignored if the
PLIST was modified between a "make deinstall" and a "make reinstall".
been replaced which might have had an ABI change. In practice, a
package is considered to maybe have had an ABI change if the version
changes. Introduce a new tag unsafe_depends_strict, which is
unconditionally set on depending packages whenever make replace is
done.
This will cut down considerably on the amount of rebuilding required
with pkg_rolling-replace, while still guaranteing that packages are
rebuilt if there was an ABI change in a dependency.
+INSTALLED_INFO is present, to avoid complaint from pkg_admin (see
pkg/36741). Separate tag removal into a separate target, and use
STEP_MSG and _PKG_DEBUG properly.
fixing up the required-by file. The invariant on unsafe_depends (on
which pkg_rolling-replace depends) is once again maintained, but now
cleanly, rather than assuming that all tags are cleared.
(proposed on tech-pkg with no objections, and concurrence from tnn@)
before replacing it, and restore it when the new package is installed.
This saves any state information that should be carried over to the
new package, e.g. automatic=yes.
XXX Still need to do the same when "un-replacing".
- USE_CROSS_COMPILATION activates it, CROSS_DESTDIR specifies root of
the target filesystem
- derive _CROSS_DESTDIR from CROSS_DESTDIR or MAKEOBJDIR
- buildlink3.mk prefixes the files to symlink with _CROSS_DESTDIR
- compiler/gcc.mk knows about the target prefix (e.g. i386--netbsdelf)
- PKG_DBDIR is prefixed with _CROSS_DESTDIR
- package-install and bin-install are not called with su
- install and strip are redirected to the tool version
- links for the target specific ar, as, ld, nm, objdump, ranlib and
strip are added
- compiler wrapper detect if linking is requested or not
- special command sinks for CPP and CC/CXX add the cross-compile magic:
- modify include dirs to get the target /usr/include
- modify linker dirs and runpath to use target /usr/lib at link time,
but keep correct rpath entries
Supported-by: Google SoC 2007
Basic tests by he@ on Sparc. Review from jlam@.
appropriately again based on the value of _BOOTSTRAP_VERBOSE. This
code was lost in revision 1.27.
This should again suppress the output during "mirror-distfiles" in the
case where the bootstrap dependency is already installed.
because /bin/sh on Solaris doesn't understand this syntax and bmake
uses this ancient shell.
bmake should really be built with /bin/ksh or /usr/xpg4/bin/sh as the
default shell.
lock, which I think is what was originally intended.
* Avoid creating ${WRKDIR}/.depends when running the bootstrap-depends
target, which is run as part of running the fetch target. We still
create the .depends file later when we need it.
XXX Note that there are still problems when locking occurs because locks
XXX are created in ${WRKDIR}, so running "bootstrap-depends" as a source
XXX for "fetch" will still cause the work directory to be created and
XXX populated with files. This probably needs to be solved by using a
XXX different location for the lockfile, e.g. ${TMPDIR}, for the
XXX bootstrap-depends step.
+BUILD_INFO we must ensure that we only test valid lines from PLIST and
not lines like "@unexec /bin/rmdir..." where "/bin/rmdir" is not a part
of the resulting package.
To achieve this, a stripped version of PLIST, called _PLIST_NOKEYWORDS,
is introduced.
depends.mk. The quoting of arrays passed down is almost impossible
to get right. For example, PKG_BUILD_OPTION.* variables can contain
multiple space separated entries but have to be quoted twice.
The original commit exposed two separate issues:
- too many variables are passed down via MAKEFLAGS, including the above
mentioned PKG_BUILD_OPTIONs.
- x11/gtk2 used an invalid variable name that can't be assigned
correctly via make command line.
This is supposed to fix PR 36387.
So ensure that we don't pollute the environment at all and push down
the arguments for install-dependencies via the command line.
Thanks to seb@ for the problem report and test.
trace the dependency information. This is computed and stored in
.depends directly now before anything else is done. The output is locked
and the locking is supposed to work before the bootstrap-depends are
installed.
Add a new hook for flavors after all dependencies are added and before
the depends-cookie is created. Use this to compute which package is used
to fulfill each dependency and store it in .rdepends. Adjust
register-dependencies and some other places to use this information
directly instead of recomputing it all the time.
The code to list all dependencies and to recursively install missing
ones is moved to a separate shell script. This makes it easier to
understand what is going on and extend them later.
Change the calling of pkg_create to prepend the dependencies directly to
the passed-in PLIST and not via -P and -T. This is in preperation of
changing the way they are stored in the packages.
Discussed with, recieved minor disagreement about install-dependencies,
but otherwise OKed by jlam.
This means that all build dependencies are recorded in the package as
well, making it much easier to decide whether a dependency changed the
package should be rebuild in a bulk build.
This would have also been useful for users wanting to switch to modular
Xorg to decide what used x11-links.
OK agc@
manual page says that ${.TARGET} is removed automatically if make is
interrupted, but it is _not_ removed if a command fails. This case may
happen after an incomplete CVS update (I forgot the -d option). When
running "make depends" for the first time, an error message is printed.
When running it for the second time, an empty .depends file existed, so
the build continued.
This is especially critical for dependency patterns like
p5-perl-headers-6.5{,nb*}, which just occured on IRIX.
By the way, in "set -e" mode, assertions for non-empty variables can be
written much easier.
are identical. For DESTDIR builds, the package is not installed to
PREFIX as part of the build, so package-install does exactly that after
package is done. Change bin-install to call package-install.
Packages may set PKG_DESTDIR_SUPPORT to either "destdir" or
"user-destdir" to flag support for this, following the same
rules as PKG_INSTALLATION_TYPES (e.g. define before first include
of bsd.prefs.mk).
The user activates it via USE_DESTDIR. When set to "yes",
packages with "user-destdir" are handled as "destdir".
The installation of the package will not go to ${LOCALBASE},
but a subdirectory of ${WRKDIR} instead. pre/post install scripts are
not run and the package is not registered either. A binary package
can be created instead to be installed normally with pkg_add.
For "user-destdir" packages, everything is run as normal user and
ownership is supposed to be correctled by pkg_create later. Since
the current pkg_install code uses pax and it doesn't allow overwriting
owners, this does not work yet.
For "destdir" packages, installation, packaging and cleaning is run as
root.
This commit does not change the handling of DEPENDS_TARGET or
bin-install to allow recursive usage.
errors. Now "make depends" stops on dependency directories that don't
exist.
The dependencies are first extracted into two temporary files and then
combined with cat(1) because otherwise "make depends" passes silently on
errors when it is called for the second time. Somehow ${.TARGET} didn't
get removed.
since it is user settable and most of the time set by the user.
X11BASE follows the same reasons. For staged installations, we don't
want to register the package directly, so there's no need to prefix
PKG_DBDIR either.
packages that use a sub-directory for prefix, like
/usr/pkg/qt3/.
(I have been using this for a couple years but recently
merged my patch over to new flavor mk file.)
Okayed by jlam on tech-pkg.
show-all-depends-dirs
show-all-depends-dirs-excl
Replace them with calls to pkgsrc/mk/scripts/depends-depth-first.awk
which does the same thing but without the extra overhead of invoking
a recursive make.
environment ${PKGSRC_MAKE_ENV} is also passed along. Create a
convenience variable RECURSIVE_MAKE that does exactly this and that
can be used in place of MAKE when invoking make recursively.
Use RECURSIVE_MAKE everywhere in pkgsrc/mk that we invoke make
recursively.
and those that are defined by the infrastructure (_BUILD_DEFS). This
allows the build-defs-message target to be moved to the end of
bsd.pkg.mk. Now it prints the correct result even in unprivileged
builds, which had been wrong due to the order in which the files have
been included. For example, ${UNPRIVILEGED_USER} was displayed as (not
defined) although its value was defined, which could be checked with
"bmake show-var".
Tested with one package that _does_ define BUILD_DEFS and with one that
doesn't. The behavior stays the same.
stages, and that installs dependencies listed in BOOTSTRAP_DEPENDS.
The bootstrap-depends step works just like the normal depends step
and honors the value of DEPENDS_TARGET. It's now possible to add
dependencies solely to facilitate fetching the distfiles, e.g.
BOOTSTRAP_DEPENDS+= curl-[0-9]*:../../www/curl
* Teach the tools framework about ":bootstrap" as a tools modifier
which indicates the tool should be added as a dependency via
BOOTSTRAP_DEPENDS.
* Add "digest" to the tools framework.
* Use USE_TOOLS+=digest:bootstrap to force pkgsrc to install digest
before anything else. Get rid of unused "uptodate-digest" target
and related digest version-checking code.
* Finish the refactoring work: split checksum-related code out of
bsd.pkg.mk and into pkgsrc/mk/checksum and replace the "checksum"
target command list with a script that does all the real work.
* Make DIGEST_ALGORITHMS and PATCH_DIGEST_ALGORITHM into private
variables by prepending them with an underscore. Also, rename
_PATCH_DIGEST_ALGORITHM to _PATCH_DIGEST_ALGORITHMS and adjust the
makepatchsum target to allow that variable to contain a list of
algorithms, all of which are used when creating the patch checksums
for ${DISTINFO_FILE}.
of the logic from fetch/fetch.mk into flavor/pkg/check.mk, so that
check-vulnerable can be used as a source target.
Make check-vulnerable a source target for every phase of the build
workflow, which ensures that it is always run if the user starts a
new phase from the command line.
Fix the cookie-generation targets so that they don't append, only
overwrite to the cookie file. This works around potential problems
due to recursive makes.
Move the cookie checks so that they surround the corresponding phase
target. The presence of the cookie should now inform the make process
to avoid doing any processing of phases that occur before the phase
corresponding to the cookie.
to install dependencies looked roughly like this:
${CAT} ${_DEPENDS_FILE} |
while read type pattern dir; do
cd $$dir && ${MAKE} install
done
In the code above, tghe recursive make invoked to install each dependency
does a just-in-time su to acquire root privileges for the installation,
but the su tries to get terminal settings for standard input (from
the pipe) using tcgetattr(), which fails and subsequently causes su
to exit with a puzzling "conversation failure" error. Rewrite the
loop to look (roughly) like this:
set -- `${CAT} ${_DEPENDS_FILE}`
while test $# -gt 0; do
type=$1; pattern=$2; dir=$3; shift 3
cd $$dir && ${MAKE} install
done
Note that this is potentially bad for shells with very low limits on
the maximum command line length, but at least this preserves file
descriptor 1 to reference the controlling tty unless the user does
something weird with input redirection when invoking make.
creation fails, so remove instances where temporary files were created
then moved to the final target filename, and just directly create the
target. This is just for brevity/clarity, and saves a few tool calls.
are generated for a target and output them all at once at the conclusion
of the target's invocation. The implementation is in bsd.pkg.error.mk,
which defines a macro target "error-check" that will print out any
non-empty warning and error files in ${WARNING_DIR} and ${ERROR_DIR}
and exit appropriately if there were errors.
Convert some targets that were just long sequences of ${ERROR_MSG} or
${WARNING_MSG} within a single shell statement to use the new delayed
error output via error-check.
Modify the compiler "fail" wrappers for C++ and Fortran to be less
verbose during invocation. Instead collect the warnings and only
print them at the end of the completed phase, e.g. after "configure"
and/or "build" completes.