tech-pkg 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