summaryrefslogtreecommitdiff
path: root/mk/buildlink3
diff options
context:
space:
mode:
authorjlam <jlam@pkgsrc.org>2003-09-08 09:18:15 +0000
committerjlam <jlam@pkgsrc.org>2003-09-08 09:18:15 +0000
commit7c6d632ddca8a4957175b5709b064d763ea6b535 (patch)
tree64b4da03df384003f504ef9f213efa71ef1fa286 /mk/buildlink3
parente6866a7c2c7516d46fcf46d7dd9e7d8470837d07 (diff)
downloadpkgsrc-7c6d632ddca8a4957175b5709b064d763ea6b535.tar.gz
Instead of canonicalizing all ${DEPOTBASE}/* into ${LOCALBASE}, don't
do it for rpath specifications, e.g. -Wl,-R/dir, -Wl,-rpath,/dir, etc. This lets the depot directory for a package, in addition to the usual /usr/pkg/lib, to be added to the rpath of a program or shared library of an "overwrite" package. Now, if the package instance in the default view is forcibly removed, then shared library references will still resolve to the existing shared libraries in the depot directory. In the following example, I've built jpeg as a pkgviews package, and tiff as an "overwrite" package: % ldd /usr/pkg/lib/libtiff.so /usr/pkg/lib/libtiff.so: -ljpeg.62 => /usr/pkg/lib/libjpeg.so.62 -lz.0 => /usr/lib/libz.so.0 -lm.0 => /usr/lib/libm387.so.0 -lm.0 => /usr/lib/libm.so.0 % pkg_delete -f jpeg-6b pkg_delete: package `jpeg-6b' is required by other packages: tiff-3.5.7nb1 % ldd /usr/pkg/lib/libtiff.so /usr/pkg/lib/libtiff.so: -ljpeg.62 => /usr/pkg/packages/jpeg-6b/lib/libjpeg.so.62 -lz.0 => /usr/lib/libz.so.0 -lm.0 => /usr/lib/libm387.so.0 -lm.0 => /usr/lib/libm.so.0 The benefit here is that if the jpeg package is updated and also has a bump in the major number of the shared lib, e.g. libjpeg.so.63.0, then you can remove the old jpeg instance from the default view and add the new jpeg package into the default view, and /usr/pkg/lib/libtiff.so will _still_ resolve its libjpeg.so.62 reference. Welcome to the power of Package Views!
Diffstat (limited to 'mk/buildlink3')
-rw-r--r--mk/buildlink3/bsd.buildlink3.mk72
1 files changed, 43 insertions, 29 deletions
diff --git a/mk/buildlink3/bsd.buildlink3.mk b/mk/buildlink3/bsd.buildlink3.mk
index 426812ce7d5..48de73936b8 100644
--- a/mk/buildlink3/bsd.buildlink3.mk
+++ b/mk/buildlink3/bsd.buildlink3.mk
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.buildlink3.mk,v 1.6 2003/09/08 07:30:07 jlam Exp $
+# $NetBSD: bsd.buildlink3.mk,v 1.7 2003/09/08 09:18:15 jlam Exp $
#
# An example package buildlink3.mk file:
#
@@ -99,6 +99,9 @@ ${_BLNK_DEPMETHOD.${_pkg_}}+= \
# _BLNK_PKG_DBDIR.<pkg> contains all of the package metadata
# files for <pkg>
#
+# _BLNK_PKG_INFO.<pkg> pkg_info(1) with correct dbdir to get
+# information for <pkg>
+#
# BUILDLINK_PKGNAME.<pkg> the name of the package
#
# BUILDLINK_PREFIX.<pkg> contains all of the installed files
@@ -133,24 +136,35 @@ ${_BLNK_DEPMETHOD.${_pkg_}}+= \
#
.for _pkg_ in ${BUILDLINK_PACKAGES} ${_BLNK_X11_LINKS_PACKAGE}
. if !defined(_BLNK_PKG_DBDIR.${_pkg_})
-_BLNK_PKG_DBDIR.${_pkg_}!= \
+_BLNK_PKG_DBDIR.${_pkg_}!= \
dir=`cd ${_PKG_DBDIR}; ${PKG_ADMIN} -s "" lsbest "${BUILDLINK_DEPENDS.${_pkg_}}" || ${TRUE}`; \
case "$$dir" in \
"") dir="not_found" ;; \
+ *) if [ -f $$dir/+DEPOT ]; then \
+ dir=`${HEAD} -1 $$dir/+DEPOT`; \
+ fi ;; \
esac; \
${ECHO} $$dir
. if empty(_BLNK_PKG_DBDIR.${_pkg_}:Mnot_found)
MAKEFLAGS+= _BLNK_PKG_DBDIR.${_pkg_}=${_BLNK_PKG_DBDIR.${_pkg_}}
. endif
. endif
+_BLNK_PKG_INFO.${_pkg_}= \
+ ${PKG_INFO_CMD} -K ${_BLNK_PKG_DBDIR.${_pkg_}:H}
+
BUILDLINK_PKGNAME.${_pkg_}?= ${_BLNK_PKG_DBDIR.${_pkg_}:T}
+. if exists(${_BLNK_PKG_DBDIR.${_pkg_}}/+VIEWS)
+BUILDLINK_IS_DEPOT.${_pkg_}?= yes
+. else
+BUILDLINK_IS_DEPOT.${_pkg_}?= no
+. endif
. if !defined(BUILDLINK_PREFIX.${_pkg_})
-. if ${PKG_INSTALLATION_TYPE} == "pkgviews"
+. if !empty(BUILDLINK_IS_DEPOT.${_pkg_}:M[yY][eE][sS])
BUILDLINK_PREFIX.${_pkg_}?= ${_BLNK_PKG_DBDIR.${_pkg_}}
-. elif ${PKG_INSTALLATION_TYPE} == "overwrite"
+. else
. if empty(_BLNK_PKG_DBDIR.${_pkg_}:Mnot_found)
BUILDLINK_PREFIX.${_pkg_}!= \
- ${PKG_INFO} -qp ${BUILDLINK_PKGNAME.${_pkg_}} | ${SED} -e "s,^[^/]*,,"
+ ${_BLNK_PKG_INFO.${_pkg_}} -qp ${BUILDLINK_PKGNAME.${_pkg_}} | ${SED} -e "s,^[^/]*,,"
. else
BUILDLINK_PREFIX.${_pkg_}?= not_found
. endif
@@ -159,11 +173,6 @@ BUILDLINK_PREFIX.${_pkg_}?= not_found
MAKEFLAGS+= BUILDLINK_PREFIX.${_pkg_}=${BUILDLINK_PREFIX.${_pkg_}}
. endif
. endif
-. if exists(${_BLNK_PKG_DBDIR.${_pkg_}}/+VIEWS)
-BUILDLINK_IS_DEPOT.${_pkg_}?= yes
-. else
-BUILDLINK_IS_DEPOT.${_pkg_}?= no
-. endif
BUILDLINK_IS_BUILTIN.${_pkg_}?= no
BUILDLINK_CPPFLAGS.${_pkg_}?= # empty
BUILDLINK_LDFLAGS.${_pkg_}?= # empty
@@ -343,11 +352,12 @@ buildlink-${_pkg_}-cookie:
${_PKG_SILENT}${_PKG_DEBUG} \
${TOUCH} ${TOUCH_FLAGS} ${_BLNK_COOKIE.${_pkg_}}
-.if !empty(BUILDLINK_IS_DEPOT.${_pkg_}:M[yY][eE][sS])
+.if (${PKG_INSTALLATION_TYPE} == "pkgviews") && \
+ !empty(BUILDLINK_IS_DEPOT.${_pkg_}:M[yY][eE][sS])
BUILDLINK_FILES_CMD.${_pkg_}?= ${TRUE}
.else
BUILDLINK_FILES_CMD.${_pkg_}?= \
- ${PKG_INFO} -f ${BUILDLINK_PKGNAME.${_pkg_}} | \
+ ${_BLNK_PKG_INFO.${_pkg_}} -f ${BUILDLINK_PKGNAME.${_pkg_}} | \
${SED} -n '/File:/s/^[ ]*File:[ ]*//p' | \
${GREP} '\(include.*/\|lib.*/lib[^/]*$$\)' | \
${SED} "s,^,$${pkg_prefix},"
@@ -361,7 +371,7 @@ ${_BLNK_COOKIE.${_pkg_}}:
esac; \
cd ${BUILDLINK_PREFIX.${_pkg_}}; \
pkg_prefix=` \
- ${PKG_INFO} -qp ${BUILDLINK_PKGNAME.${_pkg_}} | \
+ ${_BLNK_PKG_INFO.${_pkg_}} -qp ${BUILDLINK_PKGNAME.${_pkg_}} | \
${SED} -e "s,^[^/]*,," \
-e "s,^${BUILDLINK_PREFIX.${_pkg_}},," \
-e "s,^/,," \
@@ -561,12 +571,14 @@ _BLNK_UNPROTECT= # empty
_BLNK_PROTECT_DIRS+= ${BUILDLINK_DIR}
_BLNK_PROTECT_DIRS+= ${BUILDLINK_X11_DIR}
_BLNK_PROTECT_DIRS+= ${WRKDIR}
-.for _pkg_ in ${BUILDLINK_PACKAGES}
-. if !empty(BUILDLINK_IS_DEPOT.${_pkg_}:M[yY][eE][sS])
+.if ${PKG_INSTALLATION_TYPE} == "pkgviews"
+. for _pkg_ in ${BUILDLINK_PACKAGES}
+. if !empty(BUILDLINK_IS_DEPOT.${_pkg_}:M[yY][eE][sS])
_BLNK_PROTECT_DIRS+= ${BUILDLINK_PREFIX.${_pkg_}}
_BLNK_UNPROTECT_DIRS+= ${BUILDLINK_PREFIX.${_pkg_}}
-. endif
-.endfor
+. endif
+. endfor
+.endif
_BLNK_UNPROTECT_DIRS+= ${WRKDIR}
_BLNK_UNPROTECT_DIRS+= ${BUILDLINK_X11_DIR}
_BLNK_UNPROTECT_DIRS+= ${BUILDLINK_DIR}
@@ -585,14 +597,6 @@ _BLNK_TRANSFORM+= mangle:${_dir_}:${_BLNK_MANGLE_DIR.${_dir_}}
_BLNK_TRANSFORM+= untransform:mangle:${_dir_}:${_BLNK_MANGLE_DIR.${_dir_}}
.endfor
#
-# Change references to ${DEPOTBASE}/<pkg> into ${LOCALBASE} so that
-# "overwrite" packages think headers and libraries for "pkgviews" packages
-# are just found in the default view.
-#
-.if ${PKG_INSTALLATION_TYPE} == "overwrite"
-_BLNK_TRANSFORM+= depot:${DEPOTBASE}:${LOCALBASE}
-.endif
-#
# Change any buildlink directories in runtime library search paths into
# the canonical actual installed paths.
#
@@ -607,6 +611,14 @@ _BLNK_TRANSFORM+= rpath:${_BLNK_MANGLE_DIR.${BUILDLINK_DIR}}:${LOCALBASE}
_BLNK_TRANSFORM+= rpath:${_dir_}:${_BLNK_MANGLE_DIR.${_dir_}}
.endfor
#
+# Change references to ${DEPOTBASE}/<pkg> into ${LOCALBASE} so that
+# "overwrite" packages think headers and libraries for "pkgviews" packages
+# are just found in the default view.
+#
+.if ${PKG_INSTALLATION_TYPE} == "overwrite"
+_BLNK_TRANSFORM+= depot:${DEPOTBASE}:${LOCALBASE}
+.endif
+#
# Convert direct paths to shared libraries into "-Ldir -llib" equivalents.
#
_BLNK_TRANSFORM+= p:${_BLNK_MANGLE_SED_PATTERN:Q}
@@ -1199,11 +1211,13 @@ _BLNK_CACHE_PASSTHRU_GLOB+= -[IL].|-[IL]./*|-[IL]..*|-[IL][!/]*
# Allow the depot directories for packages for which we need to find
# headers and libraries for both -[IL]<dir>.
#
-. for _pkg_ in ${BUILDLINK_PACKAGES}
-. if !empty(BUILDLINK_IS_DEPOT.${_pkg_}:M[yY][eE][sS])
+. if ${PKG_INSTALLATION_TYPE} == "pkgviews"
+. for _pkg_ in ${BUILDLINK_PACKAGES}
+. if !empty(BUILDLINK_IS_DEPOT.${_pkg_}:M[yY][eE][sS])
_BLNK_CACHE_PASSTHRU_GLOB+= -[IL]${BUILDLINK_PREFIX.${_pkg_}}/*
-. endif
-. endfor
+. endif
+. endfor
+. endif
#
# Allow all subdirs of ${_BLNK_ALLOWED_RPATHDIRS} to be in the runtime
# library search path.