#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Push a directory to a target, both sides have the same name (i.e. explorers)
# or
# Pull a directory from a target, both sides have the same name (i.e. explorers)
#

# exit on any error
#set -e

version=$(git describe)

# Manpage and HTML
A2XM="a2x -f manpage --no-xmllint -a encoding=UTF-8"
A2XH="a2x -f xhtml --no-xmllint -a encoding=UTF-8"

# Developer webbase
WEBDIR=$HOME/niconetz
WEBBASE=$WEBDIR/software/cdist
WEBMAN=$WEBBASE/man/$version
WEBPAGE=${WEBBASE}.mdwn

# Documentation
MANDIR=docs/man
MAN1DSTDIR=${MANDIR}/man1
MAN7DSTDIR=${MANDIR}/man7
SPEECHESDIR=docs/speeches

case "$1" in
    man)
        set -e
        "$0" mangen
        "$0" mantype
        "$0" manbuild
    ;;

    manbuild)
        trap abort INT
        abort() {
            kill 0
        }
        for section in 1 7; do
            for src in ${MANDIR}/man${section}/*.text; do
                manpage="${src%.text}.$section"
                if [ ! -f "$manpage" -o "$manpage" -ot "$src" ]; then
                    echo "Compiling man page for $src"
                    $A2XM "$src"
                fi
                htmlpage="${src%.text}.html"
                if [ ! -f "$htmlpage" -o "$htmlpage" -ot "$src" ]; then
                    echo "Compiling html page for $src"
                    $A2XH "$src"
                fi
            done
        done
    ;;

    mantype)
        for mansrc in conf/type/*/man.text; do
            dst="$(echo $mansrc | sed -e 's;conf/;cdist-;'  -e 's;/;;' -e 's;/man;;' -e 's;^;docs/man/man7/;')"
            ln -sf "../../../$mansrc" "$dst"
        done
    ;;

    mangen)
        ${MANDIR}/cdist-reference.text.sh
    ;;

    release)
          ./docs/dev/releasechecklist
    ;;

    pypi)
        #$0 very-clean
        #$0 man
        $0 version-dist
        $0 sdist
        $0 version-dynamic
    ;;
    sdist)
        python3 setup.py sdist
    ;;

    speeches)
        cd "$SPEECHESDIR"
        for speech in *tex; do
            pdflatex "$speech"
            pdflatex "$speech"
            pdflatex "$speech"
        done
    ;;
        
    webmain)
        cp README ${WEBPAGE}
        cd ${WEBDIR} && git commit -m "cdist main update" ${WEBPAGE}
        cd ${WEBDIR} && make pub
    ;;

    web)
        cp README ${WEBPAGE}
        rm -rf ${WEBMAN}
        mkdir -p ${WEBMAN}/man1 ${WEBMAN}/man7

        # old stuff
        # rm -rf ${WEBDIR}/${WEBBASE}/speeches && mkdir ${WEBDIR}/${WEBBASE}/speeches
        # cp ${SPEECHESDIR}/*.pdf ${WEBDIR}/${WEBBASE}/speeches
        # git describe > ${WEBDIR}/${WEBBASE}/man/VERSION

        cp ${MAN1DSTDIR}/*.html ${MAN1DSTDIR}/*.css ${WEBMAN}/man1 
        cp ${MAN7DSTDIR}/*.html ${MAN7DSTDIR}/*.css ${WEBMAN}/man7
        
        cd ${WEBDIR} && git add ${WEBBASE}
        cd ${WEBDIR} && git commit -m "cdist update" ${WEBBASE} ${WEBPAGE}
        cd ${WEBDIR} && make pub

        # Fix ikiwiki, which does not like symlinks for pseudo security
        ssh tee.schottelius.org \
          "cd /home/services/www/nico/www.nico.schottelius.org/www/software/cdist/man &&
                rm -f latest && ln -sf "$version" latest"
    ;;

     p|pu|pub)
          for remote in "" github sf ethz; do
                echo "Pushing to $remote"
                git push --mirror $remote
          done
    ;;

    clean)
        rm -f ${MAN7DSTDIR}/cdist-reference.text
        find "${MANDIR}" -mindepth 2 -type l \
            -o -name "*.1" \
            -o -name "*.7" \
            -o -name "*.html" \
            -o -name "*.xml" \
        | xargs rm -f

        find * -name __pycache__  | xargs rm -rf

        rm -f MANIFEST
    ;;
    very-clean)
        $0 clean
        rm -rf cache/
    ;;

    test)
        shift # skip t

        if [ $# -lt 1 ]; then
            python3 -m cdist.test
        else
            python3 -m unittest "$@"
        fi
    ;;

    version)
        echo "VERSION=\"$version\"" > cdist/version.py
    ;;

    *)
        echo ''
        echo 'Welcome to cdist!'
        echo ''
        echo 'Here are the possible targets:'
        echo ''
        echo '    clean: Remove build stuff'
        echo '    man: Build manpages (requires Asciidoc)'
        echo '    test: Run tests'
        echo ''
        echo ''
        echo "Unknown target, \"$1\"" >&2
        exit 1
    ;;

esac