Subject: Re: Ignoring sub-sub-sub version bumps?
To: Peter Seebach <>
From: Greg Troxel <>
List: tech-pkg
Date: 08/15/2006 20:26:38

You may be interested in pkg_rolling-replace, which does 'make
replace' on things in tsorted dependency order, so you aren't left
with the 'failed make update means I have no packages' problem.
Instead you have the "some things don't work if there really was an
ABI change".

That said, I have always felt that pkgsrc is too aggressive about
requiring the latest, but it seems vastly better about that in the
last months to a year.   I have USE_ABI_DEPENDS=no set, though.

To get pkg_rolling-replace:

cd /usr/pkgsrc && \
cvs -d co -d acert pkgsrc-acert && \
cd acert/pkg_rolling-replace && \
sudo make package clean

I plan to move this to real pkgsrc when it's finished. (Right now,
others at BBN can commit to the pkgsrc-acert repo, which is like

Here's the man page.


     pkg_rolling-replace -- rebuild or update packages using 'make replace' in
     tsorted order

     pkg_rolling-replace [-hnuvx] [-x pkgs]

     pkg_rolling-replace runs 'make replace' on packages that have been marked
     with the
      'unsafe_depends=YES' flag or the 'rebuild=YES' flag, optionally replac-
     ing any outdated packages (as reported by pkg_chk(8)) as well.

     Whenever 'make replace' is run on a package, all installed packages that
     depend on it are marked with the 'unsafe_depends=YES' flag, which indi-
     cates that they may no longer be ABI-compatible with the replaced pack-
     age.  Running pkg_rolling-replace with no arguments will restore such
     packages to a safe state by building a dependency graph, running tsort(1)
     on it, and running 'make replace' in the resulting topological order.
     The dependency graph and topological sort are re-calculated after each
     packages to be marked unsafe.

     The user can mark additional packages to be rebuilt by setting the
      'rebuild=YES' flag on them using the command
           % pkg_admin set rebuild=YES <pkg>

     If the -u option is given, pkg_rolling-replace will use to check for
     packages for which the version in pkgsrc is different than the installed
     version, and run 'make replace' on those packages as well (tsorting them
     along with the unsafe/rebuild packages).  (Usually this results in pack-
     ages being upgraded to newer versions, assuming the pkgsrc tree is more
     recent than the currently installed packages.)

     -h        Brief help.

     -n        Display actions that would be taken, but don't actually run
               'make replace' or change any flags on installed packages.  This
               option attempts to calculate the new packages that would be
               marked unsafe after each 'make replace'.

     -u        Use to check for outdated packages, and replace those too.

     -v        Verbose output.

     -x pkgs   Exclude the comma-separated list of packages from the update
               check when -u is given (does not exclude unsafe or rebuild-
               requested packages).

     pkg_rolling-replace uses the following environment variables.

           Base of pkgsrc tree.  Defaults to /usr/pkgsrc

           pkgsrc database directory.  If not set in environment then read
           from Defaults to /var/db/pkg

     Nick Goffee <, with initial idea and many suggestions
     Greg Troxel <>.

     pkg_rolling-replace does not run fully automatically when any significant
     number of packages need to be replaced.

NetBSD 3.0                      August 7, 2006                      NetBSD 3.0

Content-Type: application/pgp-signature

Version: GnuPG v1.4.5 (NetBSD)