Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/freebsd/poudriere.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'test-ports/ports-dep-args/Mk/Scripts/do-depends.sh')
-rw-r--r--test-ports/ports-dep-args/Mk/Scripts/do-depends.sh188
1 files changed, 188 insertions, 0 deletions
diff --git a/test-ports/ports-dep-args/Mk/Scripts/do-depends.sh b/test-ports/ports-dep-args/Mk/Scripts/do-depends.sh
new file mode 100644
index 00000000..70f760e2
--- /dev/null
+++ b/test-ports/ports-dep-args/Mk/Scripts/do-depends.sh
@@ -0,0 +1,188 @@
+#!/bin/sh
+# $FreeBSD: head/Mk/Scripts/do-depends.sh 425026 2016-10-31 20:54:50Z bdrewery $
+#
+# MAINTAINER: portmgr@FreeBSD.org
+
+set -e
+
+. ${dp_SCRIPTSDIR}/functions.sh
+
+validate_env dp_RAWDEPENDS dp_DEPTYPE dp_DEPENDS_TARGET dp_DEPENDS_PRECLEAN \
+ dp_DEPENDS_CLEAN dp_DEPENDS_ARGS dp_USE_PACKAGE_DEPENDS \
+ dp_USE_PACKAGE_DEPENDS_ONLY dp_PKG_ADD dp_PKG_INFO dp_WRKDIR \
+ dp_PKGNAME dp_STRICT_DEPENDS dp_LOCALBASE dp_LIB_DIRS dp_SH \
+ dp_SCRIPTSDIR PORTSDIR dp_MAKE
+
+[ -n "${DEBUG_MK_SCRIPTS}" -o -n "${DEBUG_MK_SCRIPTS_DO_DEPENDS}" ] && set -x
+
+set -u
+
+install_depends()
+{
+ origin=$1
+ target=$2
+ depends_args=$3
+ if [ -z "${dp_USE_PACKAGE_DEPENDS}" -a -z "${dp_USE_PACKAGE_DEPENDS_ONLY}" ]; then
+ ${dp_MAKE} -C ${origin} -DINSTALLS_DEPENDS ${target} ${depends_args}
+ return 0
+ fi
+
+ port_var_fetch "${origin}" "${depends_args}" \
+ PKGFILE pkgfile \
+ PKGBASE pkgbase
+
+ if [ -r "${pkgfile}" -a "${target}" = "${dp_DEPENDS_TARGET}" ]; then
+ echo "===> Installing existing package ${pkgfile}"
+ if [ "${pkgbase}" = "pkg" ]; then
+ [ -d ${dp_WRKDIR} ] || mkdir -p ${dp_WRKDIR}
+ tar xf ${pkgfile} -C ${dp_WRKDIR} -s ",/.*/,,g" "*/pkg-static"
+ ${dp_WRKDIR}/pkg-static add ${pkgfile}
+ rm -f ${dp_WRKDIR}/pkg-static
+ else
+ ${dp_PKG_ADD} -A ${pkgfile}
+ fi
+ elif [ -n "${dp_USE_PACKAGE_DEPENDS_ONLY}" -a "${target}" = "${dp_DEPENDS_TARGET}" ]; then
+ echo "===> ${dp_PKGNAME} depends on package: ${pkgfile} - not found" >&2
+ echo "===> USE_PACKAGE_DEPENDS_ONLY set - not building missing dependency from source" >&2
+ exit 1
+ else
+ ${dp_MAKE} -C ${origin} -DINSTALLS_DEPENDS ${target} ${depends_args}
+ fi
+}
+
+find_package()
+{
+ if ${dp_PKG_INFO} "$1" >/dev/null 2>&1; then
+ echo "===> ${dp_PKGNAME} depends on package: $1 - found"
+ return 0
+ fi
+ echo "===> ${dp_PKGNAME} depends on package: $1 - not found"
+ return 1
+}
+
+find_file()
+{
+ if [ -e "$1" ]; then
+ echo "===> ${dp_PKGNAME} depends on file: $1 - found"
+ return 0
+ fi
+ echo "===> ${dp_PKGNAME} depends on file: $1 - not found"
+ return 1
+}
+
+find_file_path()
+{
+ if which -s $1 ; then
+ echo "===> ${dp_PKGNAME} depends on executable: $1 - found"
+ return 0
+ fi
+ echo "===> ${dp_PKGNAME} depends on executable: $1 - not found"
+ return 1
+}
+
+find_lib()
+{
+ echo -n "===> ${dp_PKGNAME} depends on shared library: $1"
+ libfile=$(env -i PATH="${PATH}" LIB_DIRS="${dp_LIB_DIRS}" LOCALBASE="${dp_LOCALBASE}" ${dp_SH} ${dp_SCRIPTSDIR}/find-lib.sh $1)
+ if [ -z "${libfile}" ]; then
+ echo " - not found"
+ return 1
+ fi
+ echo " - found (${libfile})"
+}
+
+anynotfound=0
+err=0
+for _line in ${dp_RAWDEPENDS} ; do
+ myifs=${IFS}
+ IFS=:
+ set -- ${_line}
+ IFS=${myifs}
+ if [ $# -lt 2 -o $# -gt 3 ]; then
+ echo "Error: bad dependency syntax in ${dp_DEPTYPE}" >&2
+ echo "expecting: pattern:origin[:target]" >&2
+ echo "got: ${_line}" >&2
+ err=1
+ continue
+ fi
+ pattern=$1
+ origin=$2
+ last=${3:-}
+
+ if [ -z "${pattern}" ]; then
+ echo "Error: there is an empty port dependency in ${dp_DEPTYPE}" >&2
+ err=1
+ continue
+ fi
+
+ if [ -z "${origin}" ]; then
+ echo "Error: a dependency has an empty origin in ${dp_DEPTYPE}" >&2
+ err=1
+ continue
+ fi
+
+ case "${origin}" in
+ /*) ;;
+ *) origin="${PORTSDIR}/${origin}" ;;
+ esac
+
+ depends_args="${dp_DEPENDS_ARGS}"
+ target=${dp_DEPENDS_TARGET}
+ if [ -n "${last}" ]; then
+ target=${last}
+ if [ -n "${dp_DEPENDS_PRECLEAN}" ]; then
+ target="clean ${target}"
+ depends_args="${depends_args:+${depends_args} }NOCLEANDEPENDS=yes"
+ fi
+ if [ -n "${dp_DEPENDS_CLEAN}" ]; then
+ target="${target} clean"
+ depends_args="${depends_args:+${depends_args} }NOCLEANDEPENDS=yes"
+ fi
+ fi
+
+ case ${dp_DEPTYPE} in
+ LIB_DEPENDS)
+ case ${pattern} in
+ lib*.so*) fct=find_lib ;;
+ *)
+ echo "Error: pattern ${pattern} in LIB_DEPENDS is not valid"
+ err=1
+ continue
+ ;;
+ esac ;;
+ *)
+ case ${pattern} in
+ *\>*|*\<*|*=*) fct=find_package ;;
+ /nonexistent) fct=false ;;
+ /*) fct=find_file ;;
+ *) fct=find_file_path ;;
+ esac ;;
+ esac
+ if ${fct} "${pattern}" ; then
+ continue
+ fi
+ [ ${pattern} = "/nonexistent" ] || anynotfound=1
+
+ if [ ! -f "${origin}/Makefile" ]; then
+ echo "Error a dependency refers to a non existing origin: ${origin} in ${dp_DEPTYPE}" >&2
+ err=1
+ continue
+ fi
+
+ # Now actually install the dependencies
+ install_depends "${origin}" "${target}" "${depends_args}"
+ # Recheck if the installed dependency validates the pattern except for /nonexistent
+ [ "${fct}" = "false" ] || ${fct} "${pattern}"
+ echo "===> Returning to build of ${dp_PKGNAME}"
+done
+
+if [ $err -eq 1 ]; then
+ echo "Errors with dependencies."
+ exit 1
+fi
+
+if [ -n "${dp_STRICT_DEPENDS}" -a ${anynotfound} -eq 1 ]; then \
+ echo "===> dp_STRICT_DEPENDS set - Not installing missing dependencies."
+ echo " This means a dependency is wrong since it was not satisfied in the ${dp_DEPTYPE} phase."
+ exit 1
+fi