aboutsummaryrefslogtreecommitdiff
path: root/Mk
diff options
context:
space:
mode:
authorBryan Drewery <bdrewery@FreeBSD.org>2015-01-08 04:04:55 +0000
committerBryan Drewery <bdrewery@FreeBSD.org>2015-01-08 04:04:55 +0000
commitde0b44a025050711d6689b50bd18b890f55743a2 (patch)
treec75ccca50d52b99ce0eb7d847c1087fec0851046 /Mk
parent50c51ed0aff82d166610d4267f763e9fd198cde3 (diff)
downloadports-de0b44a025050711d6689b50bd18b890f55743a2.tar.gz
ports-de0b44a025050711d6689b50bd18b890f55743a2.zip
Notes
Diffstat (limited to 'Mk')
-rw-r--r--Mk/Scripts/check-stagedir.sh153
-rw-r--r--Mk/Scripts/functions.sh141
2 files changed, 156 insertions, 138 deletions
diff --git a/Mk/Scripts/check-stagedir.sh b/Mk/Scripts/check-stagedir.sh
index 3b26d5ec8d39..b4a7903ad93b 100644
--- a/Mk/Scripts/check-stagedir.sh
+++ b/Mk/Scripts/check-stagedir.sh
@@ -14,143 +14,7 @@
set -e
export LC_ALL=C
-#### EXPAND TMPPLIST TO ABSOLUTE PATHS, SPLITTING FILES AND DIRS TO
-# Use file descriptors 1 and 3 so that the while loop can write
-# files to the pipe and dirs to a separate file.
-parse_plist() {
- local cwd cwd_save commented_cwd comment line newcwd parse_comments
-
- parse_comments="${1:-1}"
-
- echo "===> Parsing plist"
- cwd=${PREFIX}
- cwd_save=
- commented_cwd=
- while read line; do
- # Handle deactivated OPTIONS. Treat "@comment file" as being in
- # the plist so it does not show up as an orphan. PLIST_SUB uses
- # a @comment to deactive files. XXX: It would be better to
- # make all ports use @ignore instead of @comment.
- comment=
- if [ ${parse_comments} -eq 1 -a -z "${line%%@comment *}" ]; then
- line="${line##*@comment }"
- # Remove @comment so it can be parsed as a file,
- # but later prepend it again to create a list of
- # all files commented and uncommented.
- comment="@comment "
- # Only consider comment @cwd for commented lines
- if [ -n "${commented_cwd}" ]; then
- [ -z "${cwd_save}" ] && cwd_save=${cwd}
- cwd=${commented_cwd}
- fi
- else
- # On first uncommented line, forget about commented
- # @cwd
- if [ -n "${cwd_save}" ]; then
- cwd=${cwd_save}
- cwd_save=
- commented_cwd=
- fi
- fi
-
- # Strip (owner,group,perm) from keywords
- line="$(printf %s "$line" \
- | sed -Ee 's/^@\([^)]*\)[[:space:]]+//' \
- -e 's/^(@[[:alpha:]]+)\([^)]*\)[[:space:]]+/\1 /')"
- case $line in
- @dir*|'@unexec rmdir'*|'@unexec /bin/rmdir'*)
- line="$(printf %s "$line" \
- | sed -Ee 's/\|\|.*//;s|[[:space:]]+[0-9]*[[:space:]]*>[&]?[[:space:]]*[^[:space:]]+||g' \
- -e "/^@unexec[[:space:]]+(\/bin\/)?rmdir( -p)?/s|([^%])%D([^%])|\1${cwd}\2|g" \
- -e '/^@unexec[[:space:]]+(\/bin\/)?rmdir( -p)?/s|"(.*)"[[:space:]]*|\1|g' \
- -e 's/@unexec[[:space:]]+(\/bin\/)?rmdir( -p)?[[:space:]]+//' \
- -e 's/@dir(rm|rmtry)?[[:space:]]+//' \
- -e 's/[[:space:]]+$//')"
- case "$line" in
- /*) echo >&3 "${comment}${line%/}" ;;
- *) echo >&3 "${comment}${cwd}/${line%/}" ;;
- esac
- ;;
- # Handle [file] Keywords
- @info\ *|@shell\ *)
- set -- $line
- shift
- case "$@" in
- /*) echo "${comment}$@" ;;
- *) echo "${comment}${cwd}/$@" ;;
- esac
- ;;
- @sample\ *)
- set -- $line
- shift
- # Ignore the actual file if it is in stagedir
- case "$@" in
- /*)
- echo "@comment ${@%.sample}"
- echo "${comment}$@"
- ;;
- *)
- echo "@comment ${cwd}/${@%.sample}"
- echo "${comment}${cwd}/$@"
- ;;
- esac
- ;;
- # Handle [dir] Keywords
- @fc\ *|@fcfontsdir\ *|@fontsdir\ *)
- set -- $line
- shift
- case "$@" in
- /*)
- echo >&3 "${comment}$@"
- ;;
- *)
- echo >&3 "${comment}${cwd}/$@"
- ;;
- esac
- ;;
-
- # order matters here - we must check @cwd first because
- # otherwise the @cwd* would also match it first, shadowing the
- # @cwd) line.
- @cwd|@cd)
- # Don't actually reset cwd for commented @cwd
- if [ -n "${comment}" ]; then
- commented_cwd=${PREFIX}
- else
- cwd=${PREFIX}
- fi
- ;;
- @cwd*|@cd*)
- set -- $line
- newcwd=$2
- # Don't set cwd=/ as it causes // in plist and
- # won't match later.
- [ "${newcwd}" = "/" ] && newcwd=
- # Don't actually reset cwd for commented @cwd
- if [ -n "${comment}" ]; then
- commented_cwd=${newcwd}
- else
- cwd=${newcwd}
- fi
- unset newcwd
- ;;
- @*) ;;
- /*) echo "${comment}${line}" ;;
- *) echo "${comment}${cwd}/${line}" ;;
- esac
- done < ${TMPPLIST} 3>${WRKDIR}/.plist-dirs-unsorted \
- >${WRKDIR}/.plist-files-unsorted
- unset TMPPLIST
- # Create the -no-comments files and trim out @comment from the plists.
- # This is used for various tests later.
- sed -e '/^@comment/d' ${WRKDIR}/.plist-dirs-unsorted \
- >${WRKDIR}/.plist-dirs-unsorted-no-comments
- sed -i '' -e 's/^@comment //' ${WRKDIR}/.plist-dirs-unsorted
- sed -e '/^@comment/d' ${WRKDIR}/.plist-files-unsorted | sort \
- >${WRKDIR}/.plist-files-no-comments
- sed -e 's/^@comment //' ${WRKDIR}/.plist-files-unsorted | sort \
- >${WRKDIR}/.plist-files
-}
+. ${SCRIPTSDIR}/functions.sh
# lists an mtree file's contents, prefixed to dir.
listmtree() { # mtreefile prefix
@@ -378,7 +242,20 @@ fi
set -u
if [ $makeplist = 0 ] ; then
- parse_plist
+ echo "===> Parsing plist"
+ parse_plist "${PREFIX}" 1 < ${TMPPLIST} \
+ 3>${WRKDIR}/.plist-dirs-unsorted \
+ >${WRKDIR}/.plist-files-unsorted
+ unset TMPPLIST
+ # Create the -no-comments files and trim out @comment from the plists.
+ # This is used for various tests later.
+ sed -e '/^@comment/d' ${WRKDIR}/.plist-dirs-unsorted \
+ >${WRKDIR}/.plist-dirs-unsorted-no-comments
+ sed -i '' -e 's/^@comment //' ${WRKDIR}/.plist-dirs-unsorted
+ sed -e '/^@comment/d' ${WRKDIR}/.plist-files-unsorted | sort \
+ >${WRKDIR}/.plist-files-no-comments
+ sed -e 's/^@comment //' ${WRKDIR}/.plist-files-unsorted | sort \
+ >${WRKDIR}/.plist-files
else
# generate plist - pretend the plist had been empty
: >${WRKDIR}/.plist-dirs-unsorted
diff --git a/Mk/Scripts/functions.sh b/Mk/Scripts/functions.sh
new file mode 100644
index 000000000000..1633fbfe4d51
--- /dev/null
+++ b/Mk/Scripts/functions.sh
@@ -0,0 +1,141 @@
+#!/bin/sh
+# $FreeBSD$
+# This file for common functions used for port scripts.
+#
+# MAINTAINER: portmgr@FreeBSD.org
+
+# Expand TMPPLIST to absolute paths, splitting files and dirs into separate
+# descriptors.
+# Input:
+# fd:0 - plist to parse
+# Required params:
+# PREFIX
+# parse_comments: Whether to parse and include commented files.
+# Output:
+# fd:1 - list of files
+# fd:2 - stderr
+# fd:3 - list of directories
+parse_plist() {
+ local cwd cwd_save commented_cwd comment line newcwd parse_comments \
+ PREFIX
+
+ PREFIX="${1}"
+ parse_comments="${2:-1}"
+
+ cwd=${PREFIX}
+ cwd_save=
+ commented_cwd=
+ while read line; do
+ # Handle deactivated OPTIONS. Treat "@comment file" as being in
+ # the plist so it does not show up as an orphan. PLIST_SUB uses
+ # a @comment to deactive files. XXX: It would be better to
+ # make all ports use @ignore instead of @comment.
+ if [ ${parse_comments} -eq 1 -a -z "${line%%@comment *}" ]; then
+ line="${line##*@comment }"
+ # Remove @comment so it can be parsed as a file,
+ # but later prepend it again to create a list of
+ # all files commented and uncommented.
+ comment="@comment "
+ # Only consider comment @cwd for commented lines
+ if [ -n "${commented_cwd}" ]; then
+ [ -z "${cwd_save}" ] && cwd_save=${cwd}
+ cwd=${commented_cwd}
+ fi
+ else
+ comment=
+ # On first uncommented line, forget about commented
+ # @cwd
+ if [ -n "${cwd_save}" ]; then
+ cwd=${cwd_save}
+ cwd_save=
+ commented_cwd=
+ fi
+ fi
+
+ # Strip (owner,group,perm) from keywords
+ line="$(printf %s "$line" \
+ | sed -Ee 's/^@\([^)]*\)[[:space:]]+//' \
+ -e 's/^(@[[:alpha:]]+)\([^)]*\)[[:space:]]+/\1 /')"
+ case $line in
+ @dir*|'@unexec rmdir'*|'@unexec /bin/rmdir'*)
+ line="$(printf %s "$line" \
+ | sed -Ee 's/\|\|.*//;s|[[:space:]]+[0-9]*[[:space:]]*>[&]?[[:space:]]*[^[:space:]]+||g' \
+ -e "/^@unexec[[:space:]]+(\/bin\/)?rmdir( -p)?/s|([^%])%D([^%])|\1${cwd}\2|g" \
+ -e '/^@unexec[[:space:]]+(\/bin\/)?rmdir( -p)?/s|"(.*)"[[:space:]]*|\1|g' \
+ -e 's/@unexec[[:space:]]+(\/bin\/)?rmdir( -p)?[[:space:]]+//' \
+ -e 's/@dir(rm|rmtry)?[[:space:]]+//' \
+ -e 's/[[:space:]]+$//')"
+ case "$line" in
+ /*) echo >&3 "${comment}${line%/}" ;;
+ *) echo >&3 "${comment}${cwd}/${line%/}" ;;
+ esac
+ ;;
+ # Handle [file] Keywords
+ @info\ *|@shell\ *)
+ set -- $line
+ shift
+ case "$@" in
+ /*) echo "${comment}$@" ;;
+ *) echo "${comment}${cwd}/$@" ;;
+ esac
+ ;;
+ @sample\ *)
+ set -- $line
+ shift
+ # Ignore the actual file if it is in stagedir
+ case "$@" in
+ /*)
+ echo "@comment ${@%.sample}"
+ echo "${comment}$@"
+ ;;
+ *)
+ echo "@comment ${cwd}/${@%.sample}"
+ echo "${comment}${cwd}/$@"
+ ;;
+ esac
+ ;;
+ # Handle [dir] Keywords
+ @fc\ *|@fcfontsdir\ *|@fontsdir\ *)
+ set -- $line
+ shift
+ case "$@" in
+ /*)
+ echo >&3 "${comment}$@"
+ ;;
+ *)
+ echo >&3 "${comment}${cwd}/$@"
+ ;;
+ esac
+ ;;
+
+ # order matters here - we must check @cwd first because
+ # otherwise the @cwd* would also match it first, shadowing the
+ # @cwd) line.
+ @cwd|@cd)
+ # Don't actually reset cwd for commented @cwd
+ if [ -n "${comment}" ]; then
+ commented_cwd=${PREFIX}
+ else
+ cwd=${PREFIX}
+ fi
+ ;;
+ @cwd*|@cd*)
+ set -- $line
+ newcwd=$2
+ # Don't set cwd=/ as it causes // in plist and
+ # won't match later.
+ [ "${newcwd}" = "/" ] && newcwd=
+ # Don't actually reset cwd for commented @cwd
+ if [ -n "${comment}" ]; then
+ commented_cwd=${newcwd}
+ else
+ cwd=${newcwd}
+ fi
+ unset newcwd
+ ;;
+ @*) ;;
+ /*) echo "${comment}${line}" ;;
+ *) echo "${comment}${cwd}/${line}" ;;
+ esac
+ done
+}