109 lines
2.4 KiB
Bash
Executable File
109 lines
2.4 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
if [ -z "$SORTIX_PORTS_DIR" ]; then
|
|
SORTIX_PORTS_DIR="$(dirname -- "$0")/../ports"
|
|
fi
|
|
|
|
# Load the ports sets.
|
|
. "$(dirname -- "$0")/ports.conf"
|
|
|
|
get_all_packages() {(
|
|
for package in $(ls "$SORTIX_PORTS_DIR"); do
|
|
if [ -f "$SORTIX_PORTS_DIR/$package/$package.port" ]; then
|
|
echo $package
|
|
fi
|
|
done
|
|
)}
|
|
|
|
get_package_dependencies_raw() {(
|
|
if [ -f "$SORTIX_PORTS_DIR/$1/$1.port" ]; then
|
|
tix-vars -d '' "$SORTIX_PORTS_DIR/$1/$1.port" BUILD_LIBRARIES
|
|
elif [ "$1" = "all" ]; then
|
|
get_all_packages
|
|
else
|
|
for set in $sets; do
|
|
if [ $set = $1 ]; then
|
|
echo $(eval echo \$set_$set)
|
|
fi
|
|
done
|
|
fi
|
|
)}
|
|
|
|
# TODO: This algorithm scales extremely poorly.
|
|
get_package_dependencies_recursive() {(
|
|
for dependency in $(get_package_dependencies_raw $1); do
|
|
want=false
|
|
if [ "$2" = "!!" ]; then
|
|
want=true
|
|
else
|
|
case "$dependency" in
|
|
*"?") ;;
|
|
*) want=true ;;
|
|
esac
|
|
fi
|
|
if $want; then
|
|
dependency=$(echo "$dependency" | tr -d '?')
|
|
# Optional dependencies might not exist yet.
|
|
if [ -f "$SORTIX_PORTS_DIR/$dependency/$dependency.port" ]; then
|
|
echo "$dependency"
|
|
get_package_dependencies_recursive "$dependency" "$2"
|
|
fi
|
|
fi
|
|
done
|
|
)}
|
|
|
|
list_dependencies() {(
|
|
package="$1"
|
|
for dependency in $(get_package_dependencies_raw "$package"); do
|
|
if [ "$dependency" != "${dependency%\?}" ]; then
|
|
dependency="${dependency%\?}"
|
|
for candidate in $PACKAGES; do
|
|
if [ "$candidate" = "$dependency" ]; then
|
|
echo "$dependency"
|
|
break
|
|
fi
|
|
done
|
|
else
|
|
echo "$dependency"
|
|
fi
|
|
done
|
|
)}
|
|
|
|
list_package() {(
|
|
package="$1"
|
|
# Fast path for listing all packages.
|
|
if [ "$package" = "all!" -o "$package" = "all!!" ]; then
|
|
get_all_packages
|
|
exit
|
|
fi
|
|
recursion=$(echo "$package" | grep -Eo '!*$')
|
|
package=$(echo "$package" | grep -Eo '^[^!]*')
|
|
# TODO: Better way of detecting if a port is a set.
|
|
if [ -f "$SORTIX_PORTS_DIR/$package/$package.port" ]; then
|
|
echo "$package"
|
|
fi
|
|
if [ -n "$recursion" ]; then
|
|
get_package_dependencies_recursive "$package" "$recursion"
|
|
fi
|
|
)}
|
|
|
|
if [ "$1" = "--dependencies" ]; then
|
|
shift
|
|
PACKAGES=$("$0" PACKAGES)
|
|
for package; do
|
|
list_dependencies "$package"
|
|
done | sort -u
|
|
exit
|
|
fi
|
|
|
|
for package; do
|
|
if [ "$package" = PACKAGES ]; then
|
|
for package in ${PACKAGES-all!}; do
|
|
list_package "$package"
|
|
done
|
|
else
|
|
list_package "$1"
|
|
fi
|
|
done | sort -u
|