Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F133213843
D2897.id6428.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
11 KB
Referenced Files
None
Subscribers
None
D2897.id6428.diff
View Options
Index: Mk/Scripts/do-depends.sh
===================================================================
--- /dev/null
+++ Mk/Scripts/do-depends.sh
@@ -0,0 +1,176 @@
+#!/bin/sh
+# $FreeBSD$
+#
+# MAINTAINER: portmgr@FreeBSD.org
+
+set -e
+
+. ${SCRIPTSDIR}/functions.sh
+
+envfault=
+for i in RAWDEPENDS DEPTYPE DEPENDS_TARGET DEPENDS_PRECLEAN DEPENDS_CLEAN \
+ DEPENDS_ARGS USE_PACKAGE_DEPENDS_ONLY USE_PACKAGE_DEPENDS_ONLY \
+ PKG_ADD PKG_INFO WRKDIR PKGNAME STRICT_DEPENDS LOCALBASE \
+ LIB_DIRS SH SCRIPTSDIR PORTSDIR
+do
+ if ! (eval ": \${${i}?}" ) >/dev/null; then
+ envfault="${envfault}${envfault:+" "}${i}"
+ fi
+done
+if [ -n "${envfault}" ]; then
+ echo "Environment variable ${envfault} undefined. Aborting." \
+ | fmt >&2
+ exit 1
+fi
+
+set -u
+
+install_depends()
+{
+ origin=$1
+ target=$2
+ depends_args=$3
+ if [ -z "${USE_PACKAGE_DEPENDS}" -a -z "${USE_PACKAGE_DEPENDS_ONLY}" ]; then
+ make -C ${origin} -DINSTALLS_DEPENDS ${target} ${depends_args}
+ return 0
+ fi
+
+ read pkgfile <<- EOF
+ $(make -C ${origin} -VPKGFILE)
+ EOF
+ read pkgbase <<- EOF
+ $(make -C ${origin} -VPKGBASE)
+ EOF
+ if [ -r "${pkgfile}" -a "${target}" = "${DEPENDS_TARGET}" ]; then
+ echo "===> Installing existing package ${pkgfile}"
+ if [ "${pkgbase}" = "pkg" ]; then
+ [ -d ${WRKDIR} ] || mkdir -p ${WRKDIR}
+ tar xf ${pkgfile} -C ${WRKDIR} -s ",/.*/,,g" "*/pkg-static"
+ ${WRKDIR}/pkg-static add ${pkgfile}
+ rm -f ${WRKDIR}/pkg-static
+ else
+ ${PKG_ADD} -A ${pkgfile}
+ fi
+ elif [ -n "${USE_PACKAGE_DEPENDS_ONLY}" -a "${target}" = "${DEPENDS_TARGET}" ]; then
+ echo "===> ${PKGNAME} depends on package: ${pkgfile} - not found" >&2
+ echo "===> USE_PACKAGE_DEPENDS_ONLY set - not building missing dependency from source" >&2
+ exit 1
+ else
+ make -C ${origin} -DINSTALLS_DEPENDS ${target} ${depends_args}
+ fi
+}
+
+find_package()
+{
+ if ${PKG_INFO} "$1" >/dev/null 2>&1; then
+ echo "===> ${PKGNAME} depends on package: $1 - found"
+ return 0
+ fi
+ echo "===> ${PKGNAME} depends on file: $1 - not found"
+ return 1
+}
+
+find_file()
+{
+ if [ -e "$1" ]; then
+ echo "===> ${PKGNAME} depends on file: $1 - found"
+ return 0
+ fi
+ echo "===> ${PKGNAME} depends on file: $1 - not found"
+ return 1
+}
+
+find_file_path()
+{
+ if which -s $1 ; then
+ echo "===> ${PKGNAME} depends on executable: $1 - found"
+ return 0
+ fi
+ echo "===> ${PKGNAME} depends on executable: $1 - not found"
+ return 1
+}
+
+find_lib()
+{
+ echo -n "===> ${PKGNAME} depends on shared library: $1"
+ libfile=$(env -i LIB_DIRS="${LIB_DIRS}" LOCALBASE="${LOCALBASE}" ${SH} ${SCRIPTSDIR}/find-lib.sh $1)
+ if [ -z "${libfile}" ]; then
+ echo " - not found"
+ return 1
+ fi
+ echo " - found (${libfile})"
+}
+
+anynotfound=0
+for _line in ${RAWDEPENDS} ; do
+ myifs=${IFS}
+ IFS=:
+ set -- ${_line}
+ IFS=${myifs}
+ if [ $# -lt 2 -o $# -gt 3 ]; then
+ echo "Error: bad dependency syntax in ${DEPTYPE}" >&2
+ echo "expecting: pattern:origin[:target]" >&2
+ echo "got: ${_line}" >&2
+ exit 1
+ fi
+ pattern=$1
+ origin=$2
+ last=${3:-}
+
+ if [ -z "${pattern}" ]; then
+ echo "Error: there is an empty port dependency in ${DEPTYPE}" >&2
+ exit 1
+ fi
+
+ if [ -z "${origin}" ]; then
+ echo "Error: a dependency has an empty origin in ${DEPTYPE}" >&2
+ exit 1
+ fi
+
+ case "${origin}" in
+ /*) ;;
+ *) origin="${PORTSDIR}/${origin}" ;;
+ esac
+ if [ ! -f "${origin}/Makefile" ]; then
+ echo "Error a dependency refers to a non existing origin: ${origin} in ${DEPTYPE}" >&2
+ exit 1
+ fi
+
+ depends_args="${DEPENDS_ARGS}"
+ target=${DEPENDS_TARGET}
+ if [ -n "${last}" ]; then
+ target=${last}
+ if [ -n "${DEPENDS_PRECLEAN}" ]; then
+ target="clean ${target}"
+ depends_args="NOCLEANDEPENDS=yes"
+ fi
+ if [ -n "${DEPENDS_CLEAN}" ]; then
+ target="${target} clean"
+ depends_args="NOCLEANDEPENDS=yes"
+ fi
+ fi
+
+ case ${pattern} in
+ *\>*|*\<*|*=*) fct=find_package ;;
+ lib*.so*) fct=find_lib ;;
+ /nonexistent) fct=false ;;
+ /*) fct=find_file ;;
+ *) fct=find_file_path ;;
+ esac
+ if ${fct} "${pattern}" ; then
+ continue
+ fi
+ [ ${pattern} = "/nonexistent" ] || anynotfound=1
+
+ # Now actually install the dependencies
+ install_depends "${origin}" "${target}" "${depends_args}"
+ # Recheck if the installed dependency validates the pattern
+ ${fct} "${pattern}"
+ echo "===> Returning to build of ${PKGNAME}"
+done
+
+if [ -n "${STRICT_DEPENDS}" -a ${anynotfound} -eq 1 ]; then \
+ echo "===> STRICT_DEPENDS set - Not installing missing dependencies."
+ echo " This means a dependency is wrong since it was not satisfied in the ${DEPTYPE} phase."
+ exit 1
+fi
Index: Mk/bsd.port.mk
===================================================================
--- Mk/bsd.port.mk
+++ Mk/bsd.port.mk
@@ -4320,177 +4320,32 @@
.if !target(depends)
depends: pkg-depends extract-depends patch-depends lib-depends fetch-depends build-depends run-depends
-.if defined(ALWAYS_BUILD_DEPENDS)
-_DEPEND_ALWAYS= 1
-.else
-_DEPEND_ALWAYS= 0
-.endif
-
-_INSTALL_DEPENDS= \
- if [ -n "${USE_PACKAGE_DEPENDS}" -o -n "${USE_PACKAGE_DEPENDS_ONLY}" ]; then \
- subpkgfile=`(cd $$dir; ${MAKE} $$depends_args -V PKGFILE)`; \
- subpkgname=$${subpkgfile%-*} ; \
- subpkgname=$${subpkgname\#\#*/} ; \
- if [ -r "$${subpkgfile}" -a "$$target" = "${DEPENDS_TARGET}" ]; then \
- ${ECHO_MSG} "===> Installing existing package $${subpkgfile}"; \
- if [ $${subpkgname} = "pkg" ]; then \
- [ -d ${WRKDIR} ] || ${MKDIR} ${WRKDIR} ; \
- ${TAR} xf $${subpkgfile} -C ${WRKDIR} -s ",/.*/,,g" "*/pkg-static" ; \
- ${WRKDIR}/pkg-static add $${subpkgfile}; \
- ${RM} -f ${WRKDIR}/pkg-static; \
- else \
- ${PKG_ADD} -A $${subpkgfile}; \
- fi; \
- elif [ -n "${USE_PACKAGE_DEPENDS_ONLY}" -a "$${target}" = "${DEPENDS_TARGET}" ]; then \
- ${ECHO_MSG} "===> ${PKGNAME} depends on package: $${subpkgfile} - not found"; \
- ${ECHO_MSG} "===> USE_PACKAGE_DEPENDS_ONLY set - not building missing dependency from source"; \
- exit 1; \
- else \
- (cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) ; \
- fi; \
- elif [ -z "${STRICT_DEPENDS}" ]; then \
- (cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) ; \
- fi; \
- ${ECHO_MSG} "===> Returning to build of ${PKGNAME}";
-
-.for deptype in PKG EXTRACT PATCH FETCH BUILD RUN
+.for deptype in PKG EXTRACT PATCH FETCH BUILD LIB RUN
${deptype:tl}-depends:
-.if defined(${deptype}_DEPENDS)
-.if !defined(NO_DEPENDS)
- @set -e ; anynotfound=0; for i in `${ECHO_CMD} "${${deptype}_DEPENDS}"`; do \
- prog=$${i%%:*}; \
- if [ -z "$$prog" ]; then \
- ${ECHO_MSG} "Error: there is an empty port dependency in ${deptype}_DEPENDS."; \
- break; \
- fi; \
- dir=`${ECHO_CMD} $$i | ${SED} -e 's/[^:]*://'`; \
- if ${EXPR} "$$dir" : '.*:' > /dev/null; then \
- target=$${dir##*:}; \
- dir=$${dir%%:*}; \
- if [ X${DEPENDS_PRECLEAN} != "X" ]; then \
- target="clean $$target"; \
- depends_args="$$depends_args NOCLEANDEPENDS=yes"; \
- fi; \
- if [ X${DEPENDS_CLEAN} != "X" ]; then \
- target="$$target clean"; \
- depends_args="$$depends_args NOCLEANDEPENDS=yes"; \
- fi; \
- else \
- target="${DEPENDS_TARGET}"; \
- depends_args="${DEPENDS_ARGS}"; \
- fi; \
- if ${EXPR} "$$prog" : \\/ >/dev/null; then \
- if [ -e "$$prog" ]; then \
- if [ "$$prog" = "${NONEXISTENT}" ]; then \
- ${ECHO_MSG} "Error: ${NONEXISTENT} exists. Please remove it, and restart the build."; \
- ${FALSE}; \
- else \
- ${ECHO_MSG} "===> ${PKGNAME} depends on file: $$prog - found"; \
- if [ ${_DEPEND_ALWAYS} = 1 ]; then \
- ${ECHO_MSG} " (but building it anyway)"; \
- notfound=1; \
- else \
- notfound=0; \
- fi; \
- fi; \
- else \
- ${ECHO_MSG} "===> ${PKGNAME} depends on file: $$prog - not found"; \
- notfound=1; \
- fi; \
- else \
- case $${prog} in \
- *\>*|*\<*|*=*) pkg=yes;; \
- *) pkg="";; \
- esac; \
- if [ "$$pkg" != "" ]; then \
- if ${PKG_INFO} "$$prog" > /dev/null 2>&1 ; then \
- ${ECHO_MSG} "===> ${PKGNAME} depends on package: $$prog - found"; \
- if [ ${_DEPEND_ALWAYS} = 1 ]; then \
- ${ECHO_MSG} " (but building it anyway)"; \
- notfound=1; \
- else \
- notfound=0; \
- fi; \
- else \
- ${ECHO_MSG} "===> ${PKGNAME} depends on package: $$prog - not found"; \
- notfound=1; \
- fi; \
- if [ $$notfound != 0 ]; then \
- inverse_dep=`${ECHO_CMD} $$prog | ${SED} \
- -e 's/<=/=gt=/; s/</=ge=/; s/>=/=lt=/; s/>/=le=/' \
- -e 's/=gt=/>/; s/=ge=/>=/; s/=lt=/</; s/=le=/<=/'`; \
- pkg_info=`${PKG_INFO} -E "$$inverse_dep" 2>/dev/null || ${TRUE}`; \
- if [ "$$pkg_info" != "" ]; then \
- ${ECHO_MSG} "===> Found $$pkg_info, but you need to upgrade to $$prog."; \
- exit 1; \
- fi; \
- fi; \
- elif ${WHICH} "$$prog" > /dev/null 2>&1 ; then \
- ${ECHO_MSG} "===> ${PKGNAME} depends on executable: $$prog - found"; \
- if [ ${_DEPEND_ALWAYS} = 1 ]; then \
- ${ECHO_MSG} " (but building it anyway)"; \
- notfound=1; \
- else \
- notfound=0; \
- fi; \
- else \
- ${ECHO_MSG} "===> ${PKGNAME} depends on executable: $$prog - not found"; \
- notfound=1; \
- fi; \
- fi; \
- if [ $$notfound != 0 ]; then \
- if [ "$$prog" != "${NONEXISTENT}" ]; then \
- anynotfound=1; \
- fi; \
- ${ECHO_MSG} "===> Verifying $$target for $$prog in $$dir"; \
- if [ ! -d "$$dir" ]; then \
- ${ECHO_MSG} " => No directory for $$prog. Skipping.."; \
- else \
- ${_INSTALL_DEPENDS} \
- fi; \
- fi; \
- done; \
- if [ -n "${STRICT_DEPENDS}" -a $${anynotfound} -eq 1 ]; then \
- ${ECHO_MSG} "===> STRICT_DEPENDS set - Not installing missing dependencies."; \
- ${ECHO_MSG} " This means a dependency is wrong since it was not satisfied in the ${deptype:tl}-depends phase."; \
- exit 1; \
- fi
-.endif
-.else
- @${DO_NADA}
+.if defined(${deptype}_DEPENDS) && !defined(NO_DEPENDS)
+ @${SETENV} \
+ RAWDEPENDS="${${deptype}_DEPENDS}" \
+ DEPTYPE="${deptype}_DEPENDS" \
+ DEPENDS_TARGET="${DEPENDS_TARGET}" \
+ DEPENDS_PRECLEAN="${DEPENDS_PRECLEAN}" \
+ DEPENDS_CLEAN="${DEPENDS_CLEAN}" \
+ DEPENDS_ARGS="${DEPENDS_ARGS}" \
+ USE_PACKAGE_DEPENDS="${USE_PACKAGE_DEPENDS}" \
+ USE_PACKAGE_DEPENDS_ONLY="${USE_PACKAGE_DEPENDS_ONLY}" \
+ PKG_ADD="${PKG_ADD}" \
+ PKG_INFO="${PKG_INFO}" \
+ WRKDIR="${WRKDIR}" \
+ PKGNAME="${PKGNAME}" \
+ STRICT_DEPENDS="${STRICT_DEPENDS}" \
+ LOCALBASE="${LOCALBASE}" \
+ LIB_DIRS="${LIB_DIRS}" \
+ SH="${SH}" \
+ SCRIPTSDIR="${SCRIPTSDIR}" \
+ PORTSDIR="${PORTSDIR}" \
+ ${SH} ${SCRIPTSDIR}/do-depends.sh
.endif
.endfor
-lib-depends:
-.if defined(LIB_DEPENDS) && !defined(NO_DEPENDS)
- @set -e ; \
- anynotfound=0; for i in ${LIB_DEPENDS}; do \
- lib=$${i%%:*} ; \
- dir=$${i#*:} ; \
- target="${DEPENDS_TARGET}"; \
- depends_args="${DEPENDS_ARGS}"; \
- ${ECHO_MSG} -n "===> ${PKGNAME} depends on shared library: $${lib}" ; \
- libfile=`${SETENV} LIB_DIRS="${LIB_DIRS}" LOCALBASE="${LOCALBASE}" ${SH} ${SCRIPTSDIR}/find-lib.sh $${lib}` ; \
- if [ -z "$${libfile}" ]; then \
- anynotfound=1; \
- ${ECHO_MSG} " - not found"; \
- ${ECHO_MSG} "===> Verifying for $$lib in $$dir"; \
- if [ ! -d "$$dir" ] ; then \
- ${ECHO_MSG} " => No directory for $$lib. Skipping.."; \
- else \
- ${_INSTALL_DEPENDS} \
- fi ; \
- else \
- ${ECHO_MSG} " - found ($${libfile})"; \
- fi ; \
- done; \
- if [ -n "${STRICT_DEPENDS}" -a $${anynotfound} -eq 1 ]; then \
- ${ECHO_MSG} "===> STRICT_DEPENDS set - Not installing missing dependencies."; \
- ${ECHO_MSG} " This means a dependency is wrong since it was not satisfied in the lib-depends phase."; \
- exit 1; \
- fi
-.endif
-
.endif
# Dependency lists: both build and runtime, recursive. Print out directory names.
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Oct 25, 1:06 AM (1 h, 3 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24152291
Default Alt Text
D2897.id6428.diff (11 KB)
Attached To
Mode
D2897: Rework ports dependency
Attached
Detach File
Event Timeline
Log In to Comment