pkgsrc-Changes-HG archive

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

[pkgsrc/trunk]: pkgsrc/mk Move the "dependency reduction" code from buildlink...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/fdecff903308
branches:  trunk
changeset: 481474:fdecff903308
user:      jlam <jlam%pkgsrc.org@localhost>
date:      Tue Oct 05 15:28:50 2004 +0000

description:
Move the "dependency reduction" code from buildlink3 to bsd.pkg.mk so
that all of pkgsrc can benefit from removing redundant dependencies.
The code is encapsulated in a new file reduce-depends.mk which is
included by bsd.pkg.mk after all dependencies have been specified.

diffstat:

 mk/bsd.pkg.mk                   |    6 +-
 mk/buildlink3/bsd.buildlink3.mk |   57 +-----------------
 mk/reduce-depends.mk            |  123 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 130 insertions(+), 56 deletions(-)

diffs (218 lines):

diff -r be512c442832 -r fdecff903308 mk/bsd.pkg.mk
--- a/mk/bsd.pkg.mk     Tue Oct 05 14:23:18 2004 +0000
+++ b/mk/bsd.pkg.mk     Tue Oct 05 15:28:50 2004 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: bsd.pkg.mk,v 1.1508 2004/10/04 20:28:29 jlam Exp $
+#      $NetBSD: bsd.pkg.mk,v 1.1509 2004/10/05 15:28:50 jlam Exp $
 #
 # This file is in the public domain.
 #
@@ -1217,6 +1217,10 @@
 .  endif
 .endif
 
+# Remove some redundant dependencies from the DEPENDS list.
+.include "../../mk/reduce-depends.mk"
+DEPENDS:=      ${REDUCED_DEPENDS}
+
 .if defined(USE_DIRS) && !empty(USE_DIRS) && \
     ${PKG_INSTALLATION_TYPE} == "overwrite"
 .  include "../../mk/dirs.mk"
diff -r be512c442832 -r fdecff903308 mk/buildlink3/bsd.buildlink3.mk
--- a/mk/buildlink3/bsd.buildlink3.mk   Tue Oct 05 14:23:18 2004 +0000
+++ b/mk/buildlink3/bsd.buildlink3.mk   Tue Oct 05 15:28:50 2004 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.buildlink3.mk,v 1.158 2004/10/04 17:57:08 jlam Exp $
+# $NetBSD: bsd.buildlink3.mk,v 1.159 2004/10/05 15:28:50 jlam Exp $
 #
 # Copyright (c) 2004 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -212,60 +212,7 @@
 .  endif
 .  if defined(BUILDLINK_DEPENDS.${_pkg_}) && \
       defined(BUILDLINK_PKGSRCDIR.${_pkg_})
-#
-# BEGIN dependency reduction
-#
-# This next block of code sets _BLNK_DEPENDS.<pkg> to the strictest set of
-# dependencies it can derive from ${BUILDLINK_DEPENDS.<pkg>}.  It only
-# understands dependencies of the form foo>=1.0, and leaves the other
-# dependencies undisturbed.
-#
-# The algorithm takes dependencies of the form foo>=1.0 and converts them
-# to foo-1.0.  It then compares this pkg name against each dependency to
-# see if it satisfies them all.  The key fact is the the strictest
-# dependency, when converted to a pkg name, will satisfy every dependency.
-#
-_BLNK_DEPENDS.${_pkg_}=                # empty
-_BLNK_GE_DEPENDS.${_pkg_}=     ${BUILDLINK_DEPENDS.${_pkg_}:N*\{*:M*>=[0-9]*}
-_BLNK_STRICTEST_DEPENDS.${_pkg_}?=     none
-.    for _depend_ in ${_BLNK_GE_DEPENDS.${_pkg_}}
-.      for _dep2pkg_ in ${_depend_:S/>=/-/}
-.        if ${_BLNK_STRICTEST_DEPENDS.${_pkg_}} == "none"
-_BLNK_PKG_SATISFIES_DEP.${_pkg_}=      YES
-.          for _dep_ in ${_BLNK_GE_DEPENDS.${_pkg_}}
-.            if !empty(_BLNK_PKG_SATISFIES_DEP.${_pkg_}:M[yY][eE][sS])
-_BLNK_PKG_SATISFIES_DEP.${_pkg_}!=     \
-       if ${PKG_ADMIN} pmatch '${_dep_}' ${_dep2pkg_}; then            \
-               ${ECHO} "YES";                                          \
-       else                                                            \
-               ${ECHO} "NO";                                           \
-       fi
-.            endif
-.          endfor
-.          if !empty(_BLNK_PKG_SATISFIES_DEP.${_pkg_}:M[yY][eE][sS])
-_BLNK_STRICTEST_DEPENDS.${_pkg_}=      ${_depend_}
-.          endif
-.        endif
-.      endfor
-.    endfor
-.    if ${_BLNK_STRICTEST_DEPENDS.${_pkg_}} == "none"
-#
-# If the dependencies simply conflict, then pass them on through to the
-# normal dependency handling code.
-#
-_BLNK_DEPENDS.${_pkg_}+=       ${BUILDLINK_DEPENDS.${_pkg_}}
-.    else
-.      for _depend_ in ${BUILDLINK_DEPENDS.${_pkg_}}
-.        if empty(_BLNK_GE_DEPENDS.${_pkg_}:M${_depend_})
-_BLNK_DEPENDS.${_pkg_}+=       ${_depend_}
-.        endif
-.      endfor
-_BLNK_DEPENDS.${_pkg_}+=       ${_BLNK_STRICTEST_DEPENDS.${_pkg_}}
-.    endif
-#
-# END dependency reduction
-#
-.    for _depend_ in ${_BLNK_DEPENDS.${_pkg_}}
+.    for _depend_ in ${BUILDLINK_DEPENDS.${_pkg_}}
 .      if empty(${_BLNK_DEPMETHOD.${_pkg_}}:M${_depend_}\:*)
 ${_BLNK_DEPMETHOD.${_pkg_}}+=  ${_depend_}:${BUILDLINK_PKGSRCDIR.${_pkg_}}
 .      endif
diff -r be512c442832 -r fdecff903308 mk/reduce-depends.mk
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/mk/reduce-depends.mk      Tue Oct 05 15:28:50 2004 +0000
@@ -0,0 +1,123 @@
+# $NetBSD: reduce-depends.mk,v 1.1 2004/10/05 15:28:50 jlam Exp $
+#
+# Copyright (c) 2004 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Johnny C. Lam.
+#
+# 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. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#        This product includes software developed by the NetBSD
+#        Foundation, Inc. and its contributors.
+# 4. 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.
+#
+# 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.
+#
+
+# This Makefile fragment takes the dependencies listed in ${DEPENDS} and
+# creates a smaller set of dependencies in ${REDUCED_DEPENDS} that imply
+# the same dependency relationships as ${DEPENDS}.
+
+# We skip the dependency calculation for some phases since they never
+# use the dependency information.  In these cases, ${REDUCED_DEPENDS}
+# is simply empty.
+#
+_PHASES_SKIP_DEPENDS=  fetch patch tools wrapper configure build test
+.if !empty(_PHASES_SKIP_DEPENDS:M${PKG_PHASE})
+_DEPENDS=      # empty
+.else
+_DEPENDS=      ${DEPENDS}
+.endif
+
+# _DEPENDS_PKGPATHS contains the full physical paths to the pkgsrc
+#      directories for dependencies.
+# _DEPENDS_PKGPATH.<relpkgpath> maps <relpkgpath> to the full physical path.
+# _DEPENDS.<physpkgpath> is a list of the wildcard dependencies associated
+#      with <physpkgpath>.
+#
+_DEPENDS_PKGPATHS=     # empty
+.for _dep_ in ${_DEPENDS}
+.  if !defined(_DEPENDS_PKGPATH.${_dep_:C/^[^:]*://:C/:.*$//})
+_DEPENDS_PKGPATH.${_dep_:C/^[^:]*://:C/:.*$//}!=                       \
+       cd ${_dep_:C/^[^:]*://:C/:.*$//} && ${PWD_CMD}
+.  endif
+_DEPENDS_PKGPATH.${_DEPENDS_PKGPATH.${_dep_:C/^[^:]*://:C/:.*$//}}?=   \
+       ${_dep_:C/^[^:]*://:C/:.*$//}
+_DEPENDS.${_DEPENDS_PKGPATH.${_dep_:C/^[^:]*://:C/:.*$//}}+=           \
+       ${_dep_:C/:.*$//}
+.  if empty(_DEPENDS_PKGPATHS:M${_DEPENDS_PKGPATH.${_dep_:C/^[^:]*://:C/:.*$//}})
+_DEPENDS_PKGPATHS+=    ${_DEPENDS_PKGPATH.${_dep_:C/^[^:]*://:C/:.*$//}}
+.  endif
+.endfor
+
+# This next block of code sets REDUCED_DEPENDS to the strictest set of
+# dependencies it can derive from all of ${_DEPENDS.<path>}.  It only
+# understands dependencies of the form foo>=1.0, and leaves the other
+# dependencies undisturbed.
+#
+# The algorithm takes dependencies of the form foo>=1.0 and converts
+# them to foo-1.0.  It then compares this pkg name against each
+# dependency to see if it satisfies them all.  The key fact is the
+# the strictest dependency, when converted to a pkg name, will satisfy
+# every dependency.
+#
+REDUCED_DEPENDS=       # empty
+.for _path_ in ${_DEPENDS_PKGPATHS}
+_GE_DEPENDS.${_path_}=         ${_DEPENDS.${_path_}:N*\{*:M*>=[0-9]*}
+_STRICTEST_DEPENDS.${_path_}?= none
+.  for _depend_ in ${_GE_DEPENDS.${_path_}}
+.    for _dep2pkg_ in ${_depend_:S/>=/-/}
+.      if ${_STRICTEST_DEPENDS.${_path_}} == "none"
+_SATISFIES_DEPENDS.${_path_}=  YES
+.        for _dep_ in ${_GE_DEPENDS.${_path_}}
+.          if !empty(_SATISFIES_DEPENDS.${_path_}:M[yY][eE][sS])
+_SATISFIES_DEPENDS.${_path_}!=                                         \
+       if ${PKG_ADMIN} pmatch '${_dep_}' ${_dep2pkg_}; then            \
+               ${ECHO} "YES";                                          \
+       else                                                            \
+               ${ECHO} "NO";                                           \
+       fi
+.          endif
+.        endfor
+.        if !empty(_SATISFIES_DEPENDS.${_path_}:M[yY][eE][sS])
+_STRICTEST_DEPENDS.${_path_}=  ${_depend_}
+.        endif
+.      endif
+.    endfor
+.  endfor
+.  if ${_STRICTEST_DEPENDS.${_path_}} == "none"
+#
+# The dependencies simply conflict, so just pass them on through to the
+# normal dependency handling code.
+#
+REDUCED_DEPENDS+=      ${_DEPENDS.${_path_}}:${_DEPENDS_PKGPATH.${_path_}}
+.  else
+.    for _depend_ in ${_DEPENDS.${_path_}}
+.      if empty(_GE_DEPENDS.${_path_}:M${_depend_})
+REDUCED_DEPENDS+=      ${_depend_}:${_DEPENDS_PKGPATH.${_path_}}
+.      endif
+.    endfor
+REDUCED_DEPENDS+=      ${_STRICTEST_DEPENDS.${_path_}}:${_DEPENDS_PKGPATH.${_path_}}
+.  endif
+.endfor



Home | Main Index | Thread Index | Old Index