Skip to content
Snippets Groups Projects
cook.sh 6.8 KiB
Newer Older
Jeremy Soller's avatar
Jeremy Soller committed
#!/usr/bin/env bash
set -e
Jeremy Soller's avatar
Jeremy Soller committed

# Variables to be overriden by recipes
function usage {
    echo "cook.sh $1 <op>" >&2
    echo "  dist" >&2
    echo "  distclean" >&2
    echo "  build" >&2
    echo "  clean" >&2
    echo "  fetch" >&2
    echo "  unfetch" >&2
Jeremy Soller's avatar
Jeremy Soller committed
    echo "  prepare" >&2
    echo "  unprepare" >&2
    echo "  publish" >&2
    echo "  unpublish" >&2
    echo "  stage" >&2
    echo "  unstage" >&2
    echo "  tar" >&2
    echo "  untar" >&2
    echo "  update" >&2
    echo "  version" >&2
}

Jeremy Soller's avatar
Jeremy Soller committed
function op {
    if [ ! "$COOK_QUIET" = "1" ]
    then
        echo -e "\033[01;38;5;215mcook - $1 $2\033[0m" >&2
    fi

Jeremy Soller's avatar
Jeremy Soller committed
    case "$2" in
Jeremy Soller's avatar
Jeremy Soller committed
            op $1 prepare
            op $1 update
            op $1 build
            op $1 stage
            op $1 tar
            ;;
        distclean)
            op $1 untar
            op $1 unstage
Jeremy Soller's avatar
Jeremy Soller committed
            op $1 unprepare
Jeremy Soller's avatar
Jeremy Soller committed
        fetch)
Jeremy Soller's avatar
Jeremy Soller committed
            if [ -n "$TAR" ]
Jeremy Soller's avatar
Jeremy Soller committed
            then
Jeremy Soller's avatar
Jeremy Soller committed
                if [ ! -f source.tar ]
Jeremy Soller's avatar
Jeremy Soller committed
                    wget "$TAR" -O source.tar
                fi

                if [ ! -d source ]
                then
                    mkdir source
                    tar xvf source.tar -C source --strip-components 1
Jeremy Soller's avatar
Jeremy Soller committed
            elif [ -n "$GIT" ]
            then
                if [ ! -d source ]
                    if [ -n "$BRANCH" ]
                    then
                        git clone --recursive "$GIT" -b "$BRANCH" source
                    else
                        git clone --recursive "$GIT" source
                    fi
Jeremy Soller's avatar
Jeremy Soller committed
                pushd source > /dev/null
                git pull
                git submodule sync
                git submodule update --init --recursive
                popd > /dev/null
Jeremy Soller's avatar
Jeremy Soller committed
            fi
Jeremy Soller's avatar
Jeremy Soller committed
            ;;
        unfetch)
Jeremy Soller's avatar
Jeremy Soller committed
            rm -rfv source
Jeremy Soller's avatar
Jeremy Soller committed
            if [ -n "$TAR" ]
Jeremy Soller's avatar
Jeremy Soller committed
                rm -f source.tar
Jeremy Soller's avatar
Jeremy Soller committed
            ;;
Jeremy Soller's avatar
Jeremy Soller committed
        prepare)
            rm -rf build
            cp -r source build
            ;;
        unprepare)
            rm -rf build
            ;;
            pushd build > /dev/null
            if [ "$(type -t recipe_version)" = "function" ]
Jeremy Soller's avatar
Jeremy Soller committed
                recipe_version
                if [ "$?" -ne "0" ]
                then
                    skip="1"
                fi
                cargo config package.version | tr -d '"'
            fi
            popd > /dev/null
            ;;
        gitversion)
            if [ -d build/.git ]
            then
                echo "$(op $1 version)-$(git -C build rev-parse --short HEAD)"
            else
                op $1 version
            fi
            ;;
Jeremy Soller's avatar
Jeremy Soller committed
        update)
            pushd build > /dev/null
            skip="0"
            if [ "$(type -t recipe_update)" = "function" ]
            then
Jeremy Soller's avatar
Jeremy Soller committed
                recipe_update
                if [ "$?" -ne "0" ]
                then
                    skip="1"
                fi
            fi
            if [ "$skip" -eq "0" ]
            then
                xargo update
            fi
Jeremy Soller's avatar
Jeremy Soller committed
            popd > /dev/null
            ;;
        build)
            pushd build > /dev/null
            skip="0"
            if [ "$(type -t recipe_build)" = "function" ]
            then
Jeremy Soller's avatar
Jeremy Soller committed
                recipe_build
                if [ "$?" -ne "0" ]
                then
                    skip="1"
                fi
                cp -r "$ROOT/Xargo.toml" .
                xargo build --target "$TARGET" --release $CARGOFLAGS
            fi
Jeremy Soller's avatar
Jeremy Soller committed
            popd > /dev/null
            ;;
        test)
            pushd build > /dev/null
            skip="0"
            if [ "$(type -t recipe_test)" = "function" ]
            then
Jeremy Soller's avatar
Jeremy Soller committed
                recipe_test
                if [ "$?" -ne "0" ]
                then
                    skip="1"
                fi
                cp -r "$ROOT/Xargo.toml" .
                xargo test --no-run --target "$TARGET" --release $CARGOFLAGS
            fi
            popd > /dev/null
            ;;
Jeremy Soller's avatar
Jeremy Soller committed
        clean)
            pushd build > /dev/null
            skip="0"
            if [ "$(type -t recipe_clean)" = "function" ]
            then
Jeremy Soller's avatar
Jeremy Soller committed
                recipe_clean
                if [ "$?" -ne "0" ]
                then
                    skip="1"
                fi
            fi
            if [ "$skip" -eq "0" ]
            then
                xargo clean
            fi
Jeremy Soller's avatar
Jeremy Soller committed
            popd > /dev/null
            ;;
        stage)
Jeremy Soller's avatar
Jeremy Soller committed
            mkdir -p stage
Jeremy Soller's avatar
Jeremy Soller committed
            pushd build > /dev/null
Jeremy Soller's avatar
Jeremy Soller committed
            if [ "$(type -t recipe_stage)" = "function" ]
            then
Jeremy Soller's avatar
Jeremy Soller committed
                recipe_stage ../stage
                if [ "$?" -ne "0" ]
                then
                    skip="1"
                fi
                #TODO xargo install --root "../stage" $CARGOFLAGS
                bins="$(find target/$TARGET/release/ -maxdepth 1 -type f ! -name '*.*')"
                if [ -n "$bins" ]
                then
                    for bin in $bins
                    do
                        strip -v "../stage/$BINDIR/$(basename $bin)"
Jeremy Soller's avatar
Jeremy Soller committed
            fi
Jeremy Soller's avatar
Jeremy Soller committed
            popd > /dev/null
            ;;
        unstage)
Jeremy Soller's avatar
Jeremy Soller committed
            rm -rfv stage
Jeremy Soller's avatar
Jeremy Soller committed
            ;;
        tar)
            echo "name = \"$1\"" > "stage.toml"
            echo "version = \"$(op $1 version)\"" >> "stage.toml"
            echo "target = \"$TARGET\"" >> "stage.toml"
            mkdir -p stage/pkg
            cp -v stage.toml "stage/pkg/$1.toml"
Jeremy Soller's avatar
Jeremy Soller committed
            CC=cc cargo run --release --manifest-path "$ROOT/pkgutils/Cargo.toml" --bin pkg -- create stage
Jeremy Soller's avatar
Jeremy Soller committed
            ;;
        untar)
            rm -rfv stage.tar stage.sig stage.toml
Jeremy Soller's avatar
Jeremy Soller committed
            ;;
        publish)
            mkdir -p "$REPO"
            cp -v stage.tar "$REPO/$1.tar"
            cp -v stage.sig "$REPO/$1.sig"
            cp -v stage.toml "$REPO/$1.toml"
Jeremy Soller's avatar
Jeremy Soller committed
            ;;
        unpublish)
            rm -rfv "$REPO/$1.tar" "$REPO/$1.sig" "$REPO/$1.toml"
            usage $1
Jeremy Soller's avatar
Jeremy Soller committed
if [ -n "$1" ]
then
    if [ -d "$ROOT/recipes/$1" ]
Jeremy Soller's avatar
Jeremy Soller committed
    then
        cd "$ROOT/recipes/$1"
Jeremy Soller's avatar
Jeremy Soller committed
        source recipe.sh
        for arg in "${@:2}"
        do
Jeremy Soller's avatar
Jeremy Soller committed
            op "$1" "$arg"
Jeremy Soller's avatar
Jeremy Soller committed
    else
        echo "cook.sh: recipe '$1' not found" >&2
Jeremy Soller's avatar
Jeremy Soller committed
    fi
else
    usage "{package}"
Jeremy Soller's avatar
Jeremy Soller committed
fi