diff options
author | joerg <joerg@pkgsrc.org> | 2012-07-02 14:53:13 +0000 |
---|---|---|
committer | joerg <joerg@pkgsrc.org> | 2012-07-02 14:53:13 +0000 |
commit | 39d9751ada6b81d4f729a82bb4246c402f8bfe70 (patch) | |
tree | cad8f1ca0d3c9a924ccc10d652e494fa1bbfba2e /mk | |
parent | 9c46e4a786a2d4266fb14f6b9a324d34a68d7ac1 (diff) | |
download | pkgsrc-39d9751ada6b81d4f729a82bb4246c402f8bfe70.tar.gz |
Expand the list of full dependencies, so that the shared library check
can work without further calls for indirect full dependencies.
Diffstat (limited to 'mk')
-rw-r--r-- | mk/check/check-shlibs.mk | 4 | ||||
-rw-r--r-- | mk/pkgformat/pkg/depends.mk | 17 | ||||
-rw-r--r-- | mk/pkgformat/pkg/reduce-resolved-depends.awk | 121 |
3 files changed, 138 insertions, 4 deletions
diff --git a/mk/check/check-shlibs.mk b/mk/check/check-shlibs.mk index 0cb6138d2aa..6916202a0fc 100644 --- a/mk/check/check-shlibs.mk +++ b/mk/check/check-shlibs.mk @@ -1,4 +1,4 @@ -# $NetBSD: check-shlibs.mk,v 1.20 2012/05/29 21:53:55 joerg Exp $ +# $NetBSD: check-shlibs.mk,v 1.21 2012/07/02 14:53:13 joerg Exp $ # # This file verifies that all libraries used by the package can be found # at run-time. @@ -44,7 +44,7 @@ CHECK_SHLIBS_ELF_ENV= PLATFORM_RPATH=${_OPSYS_SYSTEM_RPATH:Q} CHECK_SHLIBS_ELF_ENV+= READELF=${TOOLS_PATH.readelf:Q} CHECK_SHLIBS_ELF_ENV+= CROSS_DESTDIR=${_CROSS_DESTDIR:Q} CHECK_SHLIBS_ELF_ENV+= PKG_INFO_CMD=${PKG_INFO:Q} -CHECK_SHLIBS_ELF_ENV+= DEPENDS_FILE=${_RDEPENDS_FILE:Q} +CHECK_SHLIBS_ELF_ENV+= DEPENDS_FILE=${_RRDEPENDS_FILE:Q} . if ${_USE_DESTDIR} != "no" CHECK_SHLIBS_ELF_ENV+= DESTDIR=${DESTDIR:Q} . endif diff --git a/mk/pkgformat/pkg/depends.mk b/mk/pkgformat/pkg/depends.mk index 9893c5ccf27..d5ebf1174ed 100644 --- a/mk/pkgformat/pkg/depends.mk +++ b/mk/pkgformat/pkg/depends.mk @@ -1,4 +1,4 @@ -# $NetBSD: depends.mk,v 1.1 2011/10/15 00:23:09 reed Exp $ +# $NetBSD: depends.mk,v 1.2 2012/07/02 14:53:13 joerg Exp $ # This command prints out the dependency patterns for all full (run-time) # dependencies of the package. @@ -21,9 +21,14 @@ # # "pkg" is the match for "pattern" used to fulfill the dependency. # +# ${_RRDEPENDS_FILE} is like ${_RPDENDS_FILE}, but all build dependencies +# are dropped, if they are dependencies of one of the full dependencies. +# _DEPENDS_FILE= ${WRKDIR}/.depends _RDEPENDS_FILE= ${WRKDIR}/.rdepends +_RRDEPENDS_FILE=${WRKDIR}/.rrdepends + _FULL_DEPENDS_CMD= \ ${AWK} '$$1 == "full" { print $$3; }' < ${_RDEPENDS_FILE} @@ -32,6 +37,11 @@ _REDUCE_DEPENDS_CMD= ${PKGSRC_SETENV} CAT=${CAT:Q} \ PWD_CMD=${PWD_CMD:Q} TEST=${TEST:Q} \ ${AWK} -f ${PKGSRCDIR}/mk/pkgformat/pkg/reduce-depends.awk +_REDUCE_RESOLVED_DEPENDS_CMD=${PKGSRC_SETENV} CAT=${CAT:Q} \ + PKG_INFO=${PKG_INFO_CMD:Q} \ + ${AWK} -f ${PKGSRCDIR}/mk/pkgformat/pkg/reduce-resolved-depends.awk \ + < ${_RDEPENDS_FILE} + _pkgformat-show-depends: .PHONY @case ${VARNAME:Q}"" in \ BUILD_DEPENDS) ${_REDUCE_DEPENDS_CMD} ${BUILD_DEPENDS:Q} ;; \ @@ -114,6 +124,9 @@ ${_DEPENDS_FILE}: ${_RDEPENDS_FILE}: ${_DEPENDS_FILE} ${RUN} ${_RESOLVE_DEPENDS_CMD} > ${.TARGET} +${_RRDEPENDS_FILE}: ${_RDEPENDS_FILE} + ${RUN} ${_REDUCE_RESOLVED_DEPENDS_CMD} > ${.TARGET} + # _pkgformat-install-dependencies: # Installs any missing dependencies. # @@ -129,7 +142,7 @@ _pkgformat-install-dependencies: .PHONY ${_DEPENDS_FILE} # _pkgformat-post-install-dependencies: # Targets after installing all dependencies. # -_pkgformat-post-install-dependencies: .PHONY ${_RDEPENDS_FILE} +_pkgformat-post-install-dependencies: .PHONY ${_RDEPENDS_FILE} ${_RRDEPENDS_FILE} ###################################################################### ### pkg_install-depends (PUBLIC, pkgsrc/mk/depends/depends.mk) diff --git a/mk/pkgformat/pkg/reduce-resolved-depends.awk b/mk/pkgformat/pkg/reduce-resolved-depends.awk new file mode 100644 index 00000000000..0e60a09344f --- /dev/null +++ b/mk/pkgformat/pkg/reduce-resolved-depends.awk @@ -0,0 +1,121 @@ +#!/usr/bin/awk -f +# +# $NetBSD: reduce-resolved-depends.awk,v 1.1 2012/07/02 14:53:13 joerg Exp $ +# +# Copyright (c) 2012 The NetBSD Foundation, Inc. +# All rights reserved. +# +# This code is derived from software contributed to The NetBSD Foundation +# by Joerg Sonnenberger. +# +# 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. +# +# 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. +# + +###################################################################### +# +# NAME +# reduce-resolved-depends.awk -- drop redundant build dependencies +# +# SYNOPSIS +# reduce-resolved-depends.awk +# +# DESCRIPTION +# reduce-resolved-depends.awk removes build dependencies from the +# dependency list on stdin, if they provided as dependency of +# one of the full dependencies in the list. +# +# ENVIRONMENT +# CAT +# PKG_INFO +# +###################################################################### + +BEGIN { + CAT = ENVIRON["CAT"] ? ENVIRON["CAT"] : "cat" + PKG_INFO = ENVIRON["PKG_INFO"] ? ENVIRON["PKG_INFO"] : "pkg_info" + + PROGNAME = "reduce-resolved-depends.awk" + ERRCAT = CAT " 1>&2" + + while (getline == 1) { + if (NF != 3) { + print "ERROR: [" PROGNAME "] invalid dependency line " $0 | ERRCAT + exit 1 + } + if ($1 != "full" && $1 != "build" && $1 != "bootstrap") { + print "ERROR: [" PROGNAME "] invalid dependency line " $0 | ERRCAT + exit 1 + } + type[NR] = $1 + pattern[NR] = $2 + pkg[NR] = $3 + } + lines = NR + 1 + + # Register all full dependencies first. + # Keep track of the first line for each of them to skip duplicates later. + for (i = 0; i < lines; ++i) { + if (type[i] == "full" && checked_full[pkg[i]] != 1) { + checked_full[pkg[i]] = 1 + checked_build[pkg[i]] = 1 + checked_bootstrap[pkg[i]] = 1 + print_line[i] = 1 + } + } + + for (i = 0; i < lines; ++i) { + if (type[i] == "bootstrap" && checked_bootstrap[pkg[i]] != 1) { + checked_bootstrap[pkg[i]] = 1 + found = 0 + cmd = PKG_INFO " -qr " pkg[i] + while (cmd | getline dpkg) { + if (checked_full[dpkg] == 1) + found = 1 + } + close(cmd) + if (found == 0) + print_line[i] = 1 + } + } + + for (i = 0; i < lines; ++i) { + if (type[i] == "build" && checked_build[pkg[i]] != 1) { + checked_build[pkg[i]] = 1 + if (checked_bootstrap[pkg[i]] == 1) + continue + found = 0 + cmd = PKG_INFO " -qr " pkg[i] + while (cmd | getline dpkg) { + if (checked_full[dpkg] == 1) + found = 1 + } + close(cmd) + if (found == 0) + print_line[i] = 1 + } + } + + for (i = 0; i < lines; ++i) { + if (print_line[i] == 1) + printf("%s\t%s\t%s\n", type[i], pattern[i], pkg[i]) + } +} |