Import of pkgsrc-2013Q2

This commit is contained in:
2013-09-26 17:14:40 +02:00
commit 785076ae39
74991 changed files with 4380255 additions and 0 deletions

View File

@@ -0,0 +1,94 @@
.\" $NetBSD: verifypc.1,v 1.1.1.1 2005/10/01 12:56:51 jmmv Exp $
.\"
.\" verifypc - Sanity check package dependencies according to pkg-config
.\" Copyright (c) 2005 Julio M. Merino Vidal <jmmv@NetBSD.org>
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Neither the name of The NetBSD Foundation nor the names of its
.\" contributors may be used to endorse or promote products derived
.\" from this software without specific prior written permission.
.\" 3. Neither the name of author nor the names of its contributors may
.\" be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.Dd October 1, 2005
.Dt VERIFYPC 1
.Os
.Sh NAME
.Nm verifypc
.Nd sanity check package dependencies according to pkg-config
.Sh SYNOPSIS
.Nm
.Sh DESCRIPTION
.Nm
is a tool that sanity checks the dependencies of a package based on the
results of a successful build, assuming the package uses
.Xr pkg-config 1
to detect its dependencies.
It will warn you if the configuration script requests an uninstalled or
unavailable package (not specified as a direct dependency) or if the
requested package does not match the version specification in the
packages' dependencies.
.Pp
.Nm
has to be run within a package directory after that package has
been successfully built.
Usually, a
.Sq make configure
is enough, but it is recommended to run a full build to also catch calls to
.Xr pkg-config 1
in the build phase.
.Pp
In order to do its checks,
.Nm
relies on a log file generated by
.Xr pkg-config 1 ;
this log is stored inside the work directory and is automatically generated
by pkgsrc assuming that your installed
.Xr pkg-config 1
binary is newer than 0.19nb1.
The tool will return an error if the log file does not exist.
.Sh RETURN VALUES
.Nm
exits 0 if all dependencies are correctly satisfied by the package or 1 if
there were any errors.
.Sh ENVIRONMENT
The following environment variables are honored:
.Bl -tag
.It Ev MAKE
Path to the
.Xr make 1
utility used to parse package make files.
Defaults to
.Pa @MAKE@ .
.It Ev VERIFYPC_IGNORE
White-space separated list of pkg-config package names that this tool
will ignore if they were not found.
Useful to shut up warnings for packages that are not yet in pkgsrc, such as
X11 pkg-config files.
Defaults to nothing.
.El
.Sh SEE ALSO
.Xr pkg-config 1
.Sh HISTORY
The
.Nm
utility first appeared in pkgsrc-2005Q4.
.Sh AUTHORS
.An Julio M. Merino Vidal Aq jmmv@NetBSD.org

View File

@@ -0,0 +1,172 @@
#!@SH@
#
# $NetBSD: verifypc.sh,v 1.7 2011/10/26 08:03:35 sbd Exp $
#
# verifypc - Sanity check package dependencies according to pkg-config
# Copyright (c) 2005 Julio M. Merino Vidal <jmmv@NetBSD.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name of author nor the names of its contributors may
# be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
: ${MAKE:=@MAKE@}
: ${VERIFYPC_IGNORE:=}
SORTED_DEPS=
# -------------------------------------------------------------------------
#
# Show an error message on stderr and exit.
#
err() {
echo "verifypc: ${@}" 1>&2
exit 1
}
# -------------------------------------------------------------------------
#
# Show a warning message on stderr.
#
warn() {
echo "verifypc: ${@}" 1>&2
}
# -------------------------------------------------------------------------
#
# Checks if the file passed as an argument belongs to any of our direct
# dependencies.
#
search_file_in_depends() {
local file="${1}"
local dep dir file
for dep in ${SORTED_DEPS}; do
dir=$(echo ${dep} | cut -d : -f 2)
if [ -d ${dir} ] && grep ${file} ${dir}/PLIST* >/dev/null; then
echo ${dep}
return
fi
done
}
# -------------------------------------------------------------------------
#
# Checks if the pkg-config dependency specification is satisfied by
# the 'dep' package dependency.
#
check_match() {
local dep="${1}" pcname="${2}" pcop="${3}" pcver="${4}"
local out pkgdep pkgname ret
if [ ${pcop} != ">" -a ${pcop} != ">=" -a ${pcop} != "-" ]; then
warn "unsupported operator ${pcop} in ${pcname} dependency"
return 1
fi
pkgdep=$(echo ${dep} | cut -d : -f 1 | sed 's|>=|-|;s|>|-|')
pkgname=$(echo ${pkgdep} | sed 's|^\(.*\)-\([0-9].*\)$|\1|')
out=$(pkg_admin pmatch "${pkgname}${pcop}${pcver}" "${pkgdep}" 2>&1)
ret=$?
if [ ${ret} -ne 0 ]; then
warn "${pcname} not correct; '${pcop} ${pcver}' needed"
return 1
elif [ -n "${out}" ]; then
warn "${pcname} pmatch failed; wanted" \
"${pkgname}${pcop}${pcver}, have ${pkgdep}"
return 1
fi
return 0
}
# -------------------------------------------------------------------------
#
# Main program.
#
main() {
local dep error lines log pcname pcop pcver
[ -f Makefile -a -f ../../mk/bsd.pkg.mk ] ||
err "must be run within a package directory"
log=$(${MAKE} show-var VARNAME=_PKG_CONFIG_LOG)
[ -f ${log} ] ||
err "pkg-config log not found; must run '${MAKE} configure' first"
# Construct a list of dependency specifications for the current package.
#
# (The list is no longer actually sorted -- the important part is that
# the loop in search_file_in_depends finds the most restrictive spec
# first, which used to be done by sorting but is now done with
# reduce-depends.)
SORTED_DEPS=$(awk -f ../../mk/pkgformat/pkg/reduce-depends.awk \
"$(${MAKE} show-vars VARNAMES='BUILD_DEPENDS DEPENDS')")
error=0
lines=$(cat ${log} | sort | uniq | tr ' ' '¬')
for l in ${lines}; do
pcname=$(echo ${l} | cut -d '¬' -f 1)
pcop=$(echo ${l} | cut -d '¬' -f 2)
pcver=$(echo ${l} | cut -d '¬' -f 3)
dep=$(search_file_in_depends pkgconfig/${pcname}.pc)
if [ -n "${dep}" -a "${pcop}" != "NOT-FOUND" ]; then
# The package passed to pkg-config is correct, as we have it
# among our dependencies. If we are requiring an specific
# version of it, let's check if it is correct.
if [ ${pcop} != "(any)" ]; then
check_match ${dep} ${pcname} ${pcop} ${pcver}
[ $? -eq 0 ] || error=1
fi
else
# The package passed to pkg-config cannot be found among our
# dependencies or it does not exist; tell the user.
if echo ${VERIFYPC_IGNORE} | \
egrep "^${pcname}$|^${pcname} | ${pcname} | ${pcname}$" \
>/dev/null
then
: # Package explicitly ignored by the user, so shut up.
else
if [ "${pcop}" != "NOT-FOUND" ]; then
warn "${pcname} not a direct dependency"
else
warn "${pcname} not found"
fi
error=1
fi
fi
done
return ${error}
}
main "${@}"