Page MenuHomeFreeBSD

D2897.id6428.diff
No OneTemporary

D2897.id6428.diff

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

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)

Event Timeline