#!/bin/sh set -e # Paths dir_build="$PWD/build" dir_source="$PWD/source" dir_install="$PWD/install" show_help() { echo "This astronaut will help you build some satellites. Just describe what he's got to do in a satellite file. Usage: $0 [-s ] [-b ] [-i ] -s Set source directory -b Set build directory [WARNING: Will be deleted before build] -i Set install directory" } # Gather info while getopts "h?s:b:i:" opt; do case "$opt" in h|\?) show_help exit 0 ;; s) dir_source="$(realpath "$OPTARG")" ;; b) dir_build="$(realpath "$OPTARG")" ;; i) dir_install="$(realpath "$OPTARG")" ;; esac done shift $((OPTIND-1)) [ "$1" = "--" ] && shift if [ ! "$1" ]; then show_help exit 1 fi satellite="$(realpath "$1")" # Tools for the astronaut msg() { echo "=> $@" } mksum() { echo $(md5sum "$@" 2> /dev/null | cut -d' ' -f1) } download() { local name="$(basename "$1")" local path="$dir_source/$name" local checksum="" if [ "$2" -a -f "$path" ]; then checksum="$(mksum "$path")" fi if [ ! -f "$path" -o "$checksum" != "$2" ]; then msg "Downloading $name" if [ "$3" ]; then local cmd="$(echo "$2" | sed -e 's@{dst}@'"$path"'@g' -e 's@{source}@'"$1"'@g')" $cmd else curl -#L -o "$path" "$1" fi checksum="$(mksum "$path")" if [ "$2" -a "$checksum" != "$2" ]; then msg "Houston, we have a problem: Checksum failed." msg "Checksum: $checksum" exit 1 fi fi } extract() { msg "Extracting $1" if [ "$2" ]; then local cmd="$(echo "$2" | sed -e 's@{src}@'"$dir_source/$1"'@g')" $cmd else tar xf "$dir_source/$1" fi } dlextract() { download "$1" "$2" extract "$(basename "$1")" } extrafile() { cp "$(dirname "$satellite")/$1" "$dir_build/$1" } # Create the satellite rm -rf "$dir_build" mkdir -p "$dir_source" mkdir -p "$dir_build" mkdir -p "$dir_install" cd "$dir_build" . "$satellite"