pkgsrc-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: libcroco and xz
On Fri, Jun 15, 2012 at 02:17:38PM +0900, OBATA Akio wrote:
> On Fri, 15 Jun 2012 13:24:02 +0900, OBATA Akio <obache%netbsd.org@localhost>
> wrote:
>
> >I see...
> >
> >using *.xz archive, so marked as build depend on archive/xz,
> >but check-shlib claims using shlibs from build depends.
> >It's false alarm.
>
> and proposed patch to fix it.
> please review...
Better patch is attached. This adds one pkg_info call per dependency,
independent of the number of files. I'm contemplating de-deplicating
.depends as well, but that can be done after the branch.
Joerg
Index: mk/check/check-shlibs.mk
==================================================================
--- mk/check/check-shlibs.mk
+++ mk/check/check-shlibs.mk
@@ -42,11 +42,11 @@
CHECK_SHLIBS_ELF= ${PKGSRCDIR}/mk/check/check-shlibs-elf.awk
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
CHECK_SHLIBS_ELF_ENV+= WRKDIR=${WRKDIR:Q}
Index: mk/pkgformat/pkg/depends.mk
==================================================================
--- mk/pkgformat/pkg/depends.mk
+++ mk/pkgformat/pkg/depends.mk
@@ -19,20 +19,30 @@
#
# <depends_type> <pattern> <pkg>
#
# "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}
_REDUCE_DEPENDS_CMD= ${PKGSRC_SETENV} CAT=${CAT:Q}
\
PKG_ADMIN=${PKG_ADMIN_CMD: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} ;; \
DEPENDS|*) ${_REDUCE_DEPENDS_CMD} ${DEPENDS:Q} ;; \
@@ -112,10 +122,13 @@
${RUN} ${_LIST_DEPENDS_CMD} > ${.TARGET}
${_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.
#
_pkgformat-install-dependencies: .PHONY ${_DEPENDS_FILE}
${RUN} \
@@ -127,11 +140,11 @@
done
# _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)
######################################################################
### pkg_install-depends is a public target to install or update
ADDED mk/pkgformat/pkg/reduce-resolved-depends.awk
Index: mk/pkgformat/pkg/reduce-resolved-depends.awk
==================================================================
--- mk/pkgformat/pkg/reduce-resolved-depends.awk
+++ mk/pkgformat/pkg/reduce-resolved-depends.awk
@@ -0,0 +1,121 @@
+#!/usr/bin/awk -f
+#
+# $NetBSD: reduce-depends.awk,v 1.1 2011/10/15 00:23:09 reed 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])
+ }
+}
Home |
Main Index |
Thread Index |
Old Index