subdirectories of pkgsrc/mk. Move the following files around for
locality:
pkgsrc/mk/scripts/extract -> pkgsrc/mk/extract/extract
pkgsrc/mk/bsd.sites.mk -> pkgsrc/mk/fetch/sites.mk
Also get rid of the recursive make for the "fetch" and "extract"
targets. This basically merges the "fetch" and "extract" phases into
the "patch" phase.
There is still much more work to do to simplify the fetch code, but
this is a good start.
${BMAKE} show-subdir-var VARNAME=SUBDIR
instead of just grepping through the makefiles. This seems
to be a litle more robust. Suggested by Joerg Sonnenberger.
- Added "set -u" at the top of the file to prevent spelling errors.
- Renamed UNZIP to UNZIP_CMD, since that is used by the rest of pkgsrc.
- Found a singleton use of $extract_options and replaced it with
${EXTRACT_OPTS_LHA}.
- Took the default assignment for TMPDIR out of the block. All other
entries are tools.
- Removed unnecessary variables.
- Make sure that distfile can always be resolved, even if the current
working directory is changed.
- Provide default values for all EXTRACT_OPTS_* variables, as close as
possible to the point where they are used.
- Replaced all "$@" with ${1+"$@"} to avoid errors when no parameters are
given.
- Made the removal of the temporary file for .tar extraction more robust.
stack in the reverse order that show-depends-pkgpaths outputs them.
This makes the top element of the stack the first child dependency
that was marked as "pushed". This change orders the default "postfix"
output of this script in such a way that for any package listed in
the output, there is no earlier package that depends on it.
In other words, you can take the default output and install from first
to last and never need to install any dependencies, because any
dependencies are guaranteed to have already been installed earlier.
current working directory by default if it can't figure out what type
of archive it is. This handles the most common case of overriding
EXTRACT_CMD in package Makefiles, which is to copy a C file or a Perl
script over to the work directory.
Also, modify the script to allow the file format to be specified on
the command line via a -f option, which will force the extract script
to interpret the archive as the specified a format. This covers the
case where there is a distfile with an unusual file extension that is
actually in well-known format, and we would like to just tell the
extract script which format this is.
package directories specified in DEPENDS lines begin with "../..". The
new standalone script pkgsrc/mk/scripts/pkg_path will canonicalize them
into package paths relative to ${PKGSRCDIR}.
used by the "make show-depends-pkgpaths" process to short-circuit some
of the rather lengthy computations that are spread throughout bsd.pkg.mk
and files included by bsd.pkg.mk. This causes the script to speed up
noticeably.
Also, rename the _DEPENDS_DEPTH_FIRST_CMD variable to _DEPENDS_WALK_CMD
for brevity and to allow for other implementations in the future.
the code that performs the dependency graph traversal (in depth-first
fashion). This script has a hook that allows executing a shell command
line upon visiting a dependency's package directory in either prefix
or postfix order, and may be used to simplify the code in bsd.pkg.mk
that iterates over dependencies.
This awk script requires the target "show-depends-pkgpaths", which is
defined in a new Makefile pkgsrc/mk/bsd.utils.mk. This file should
accumulate "utility" targets that current exist in bsd.pkg.mk, i.e.,
"helper" targets for various actions.
- Renamed DEBUG to debug_flag, as it is not modifiable via the environment.
- Removed trailing white-space from the --help output.
- Removed the clean_and_exit function, as it had been practically unused.
- Replaced some "if"s with "case"s to avoid line noise.
created in a temp directory, issue a warning if we fail to install
it in the package directory. If the error happens on the top
level (master) cache file, then error out. For a subdirectory,
issue a warning and drop that directory from the master cache.
As data for a given binary package is loaded, increment a count
stored with PKGPATH as the index. Then use a psuedo-multidimensional
array with PKGPATH and the # as the index. This allows for much
faster lookups and scales linearly with the number of packages.
The old way scaled as the product of the number of pkgsrc entries
and the total number of binary packages. Not a pretty value.
This makes the actual README.html generation part run about 3x faster.
Approach suggested by soda.
some of the older packages on ftp.netbsd.org. For example,
pkg_info -B ftp://ftp.netbsd.org/pub/NetBSD/packages/1.5.2/vax/All/cascade-1.4.tgz
will give
OPSYS= NetBSD
instead of
OPSYS=NetBSD
due to a directory permissions error, then error out.
- when the master cache has just been newly created, don't also report
that the master cache is up to date.
Both were suggested by Christian Hattemer.
- completely redo the code which decides on the machine architecture,
operating system, and operating system version for the binary packages.
The old way just used to directory names to take a guess. The new
way creates a cache file containing meta-data for all the binary packages
in each "All" directory. This cache file is consulted when generating
the lists of available binary packages. The meta-data is obtained with
pkg_info so it should always be correct even if you do something silly
like mix OS_VERSION or MACHINE_ARCH packages up in the same directory.
Among the benefits are: works when PACKAGES is not $PKGSRC/packages,
works with a more or less arbitrary subdirectory structure, works
when there are subdirectories for multiple operating systems.
This portion of the fix should address PR25390.
The cache files are only updated when the contents of an "All" directory
changes or if the cache file format changes. There is some room for
improving the updating of the cache files, but its not too bad the way
it is.
- fix up some of the awk code so that generadme.awk works with Solaris
nawk as well as NetBSD's nawk and gawk (for pre-2.0 systems).
- remove some "if ! foo" shell constructs to increase portability.
- be more consistent with what variables get passed to mkreadme from
make and which ones are determined automatically. Mostly this meant
moving stuff into mkreadme to make it easier to run it standalone.
We no longer require that LIBTOOL_LA_FILES be defined in the package
Makefile, and the libtool archives should once again be listed in the
PLIST.
* Add a new yes/no variable "LIBTOOLIZE_PLIST" to control whether to
have bsd.pkg.mk automatically expand *.la files in PLISTs into the
true library names represented by the libtool archives.
* Rename the "transform-la" script to "print-la-libnames" which more
correctly reflects its function.
Many thanks to Todd Vierling for the original implementation and for
his contructive comments on how to improve the changes in this commit.
all of the .a, .la, .so, and .so.* files in the PLIST. This will
autogenerate the PLIST entries based on the informaion in the .la file.
This include print-PLIST support; if LIBTOOL_LA_FILES contains an
installed .la, its entries will be elided from the output PLIST template.
no listed homepage. Thanks to Grant Beattie for noting this and providing a
patch which I changed slightly.
- fix a bug which put extra stuff in the categories field. Thanks to Grant
for noting this.
several orders of magnitude and 'make index' now takes 30 minutes or so
instead of several days on my test machine. The approach now is to take
one pass through every package and extract some key information including
the explicitly listed dependencies. After the data is extracted, the
dependencies are flattened in one step which avoids the extremely
inefficient recursive make that was previously used.
- fix a bug in which caused only packages listed as DEPENDS to show
up in the 'packages needed to build' section. Now the BUILD_DEPENDS
are also shown. Thanks to Christian Hattemer for noting this.
- fix a bug which caused error messages claiming that category and top
level README.html files could not be created even though they were
created. This bug only showed up if an old README.html file did not
exist. As part of this, clean up and unify the code which handles
comparing the new README.html file to a possibly pre-existing one and
only copying it over if there is a change.
can be used anytime one needs to extract the complete dependency information
for a package for example, when creating a README.html file for the pkg.
The approach used by mkdatabase requires exactly one make call per package
which makes it scale well to packages with large dependency trees that have
many paths to the leaves.