pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/pkgtools/verifypc Initial import of verifypc, version ...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/4f0736fa84ab
branches:  trunk
changeset: 500038:4f0736fa84ab
user:      jmmv <jmmv%pkgsrc.org@localhost>
date:      Sat Oct 01 12:56:51 2005 +0000

description:
Initial import of verifypc, version 1.0:

verifypc is a tool that sanity checks the dependencies of a package based on
the results of a successful build, assuming the package uses pkg-config to
detect dependencies.

verifypc 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.

diffstat:

 pkgtools/verifypc/DESCR             |    8 +
 pkgtools/verifypc/Makefile          |   37 ++++++++
 pkgtools/verifypc/PLIST             |    3 +
 pkgtools/verifypc/files/verifypc.1  |   94 +++++++++++++++++++++
 pkgtools/verifypc/files/verifypc.sh |  157 ++++++++++++++++++++++++++++++++++++
 5 files changed, 299 insertions(+), 0 deletions(-)

diffs (truncated from 319 to 300 lines):

diff -r bd5294dcc7fc -r 4f0736fa84ab pkgtools/verifypc/DESCR
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/verifypc/DESCR   Sat Oct 01 12:56:51 2005 +0000
@@ -0,0 +1,8 @@
+verifypc is a tool that sanity checks the dependencies of a package based on
+the results of a successful build, assuming the package uses pkg-config to
+detect dependencies.
+
+verifypc 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.
diff -r bd5294dcc7fc -r 4f0736fa84ab pkgtools/verifypc/Makefile
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/verifypc/Makefile        Sat Oct 01 12:56:51 2005 +0000
@@ -0,0 +1,37 @@
+# $NetBSD: Makefile,v 1.1.1.1 2005/10/01 12:56:51 jmmv Exp $
+#
+
+DISTNAME=      verifypc-1.0
+CATEGORIES=    pkgtools
+MASTER_SITES=  # empty
+DISTFILES=     # empty
+
+MAINTAINER=    jmmv%NetBSD.org@localhost
+COMMENT=       Sanity check package dependencies according to pkg-config
+
+PKG_INSTALLATION_TYPES=        overwrite pkgviews
+
+EXTRACT_ONLY=          # empty
+NO_CHECKSUM=           YES
+NO_BUILD=              YES
+WRKSRC=                        ${WRKDIR}
+
+SUBST_CLASSES+=                vars
+SUBST_STAGE.vars=      do-configure
+SUBST_MESSAGE.vars=    "Configuring sources."
+SUBST_FILES.vars=      *
+SUBST_SED.vars=                -e 's|@MAKE@|${MAKE}|g'
+SUBST_SED.vars+=       -e 's|@SH@|${SH}|g'
+
+INSTALLATION_DIRS=     man/man1 bin
+
+do-extract:
+       ${CP} ${FILESDIR}/verifypc.sh ${WRKSRC}
+       ${CP} ${FILESDIR}/verifypc.1 ${WRKSRC}
+
+do-install:
+       ${INSTALL_SCRIPT} ${WRKSRC}/verifypc.sh \
+               ${PREFIX}/bin/verifypc
+       ${INSTALL_MAN} ${WRKSRC}/verifypc.1 ${PREFIX}/man/man1/
+
+.include "../../mk/bsd.pkg.mk"
diff -r bd5294dcc7fc -r 4f0736fa84ab pkgtools/verifypc/PLIST
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/verifypc/PLIST   Sat Oct 01 12:56:51 2005 +0000
@@ -0,0 +1,3 @@
+@comment $NetBSD: PLIST,v 1.1.1.1 2005/10/01 12:56:51 jmmv Exp $
+bin/verifypc
+man/man1/verifypc.1
diff -r bd5294dcc7fc -r 4f0736fa84ab pkgtools/verifypc/files/verifypc.1
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/verifypc/files/verifypc.1        Sat Oct 01 12:56:51 2005 +0000
@@ -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@localhost>
+.\"
+.\" 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@localhost
diff -r bd5294dcc7fc -r 4f0736fa84ab pkgtools/verifypc/files/verifypc.sh
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/verifypc/files/verifypc.sh       Sat Oct 01 12:56:51 2005 +0000
@@ -0,0 +1,157 @@
+#!@SH@
+#
+# $NetBSD: verifypc.sh,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@localhost>
+#
+# 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 pkgdep pkgname
+
+    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} | cut -d - -f 1)
+
+    if ! pkg_admin pmatch "${pkgname}${pcop}${pcver}" "${pkgdep}"; then
+        warn "${pcname} not correct; '${pcop} ${pcver}' needed"
+        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.
+    SORTED_DEPS=$(${MAKE} show-vars VARNAMES="BUILD_DEPENDS DEPENDS" | tr ' ' '
+' | sort -r | uniq)
+
+    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



Home | Main Index | Thread Index | Old Index