#!/bin/sh #$Id$ #Copyright (c) 2012-2020 Pierre Pronchery #This file is part of DeforaOS Devel scripts # #Redistribution and use in source and binary forms, with or without #modification, are permitted provided that the following conditions #are met: #1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. #2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # #THIS SOFTWARE IS PROVIDED BY THE EDGEBSD PROJECT AND CONTRIBUTORS #``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED #TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR #PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS #BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR #CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF #SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS #INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN #CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) #ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE #POSSIBILITY OF SUCH DAMAGE. #environment umask 022 #variables #executables CONFIGURE="configure" CVS="cvs -q" DATE="date" FIND="find" GIT="git" INSTALL="install -m 0644" MAIL="mail" MAKE="make" MKDIR="mkdir -m 0755 -p" MKTEMP="mktemp" RM="rm -f" TOUCH="touch" #settings DATE_TODAY=$($DATE '+%Y%m%d') DESTDIR="/var/www" DEVNULL="/dev/null" EMAIL="webmaster@defora.org" HOMEPAGE="https://www.defora.org" PREFIX="/usr/local" PROGNAME="deforaos-document" ROOT= SRC= SYSCONFDIR="$PREFIX/etc" #load local settings [ -f "$SYSCONFDIR/DeforaOS/$PROGNAME.conf" ] && . "$SYSCONFDIR/DeforaOS/$PROGNAME.conf" [ -f "$HOME/.config/DeforaOS/$PROGNAME.conf" ] && . "$HOME/.config/DeforaOS/$PROGNAME.conf" #functions #deforaos_document_cvs _deforaos_document_cvs() { [ -n "$SRC" ] || SRC="$ROOT/$CVSMODULE" #configure cvs if necessary $MKDIR -- "$HOME" || exit 2 if [ ! -f "$HOME/.cvspass" ]; then $TOUCH "$HOME/.cvspass" || exit 2 fi #checkout tree if necessary if [ ! -d "$SRC" ]; then $MKDIR -- "$ROOT" || exit 2 echo "" echo "Checking out CVS module $CVSMODULE:" (cd "$ROOT" && $CVS "-d$CVSROOT" co "$CVSMODULE") > "$DEVNULL" \ || exit 2 fi #update tree echo "" echo "Updating CVS module $CVSMODULE:" (cd "$SRC" && $CVS update -dPA) > "$DEVNULL" || exit 2 #document tree echo "" echo "Documenting CVS module $CVSMODULE:" #manual pages echo "" echo " * manual pages" (cd "$SRC/Data/Documentation/DeforaOS Manual Pages" && $MAKE && $MKDIR -- "$DESTDIR/htdocs/doc/manual" && $FIND "doc/manual" -name "*.html" \ -exec $INSTALL {} "$DESTDIR/htdocs/{}" \;) > "$DEVNULL" echo " $HOMEPAGE/doc/manual (manual pages)" #generic documentation echo "" echo " * generic documentation" $FIND "$SRC/System" "$SRC/Apps" -name "doc" | while read path; do [ -x "$path/docbook.sh" -o -x "$path/gtkdoc.sh" ] || continue (cd "$path" && $MAKE DESTDIR="$DESTDIR" PREFIX="/" install) \ > "$DEVNULL" done echo " $HOMEPAGE/doc/gtk-doc/html (API documentation)" echo " $HOMEPAGE/doc/html (generic documentation)" } #deforaos_document_git _deforaos_document_git() { SRC="DeforaOS.git" #checkout tree if necessary if [ ! -d "$ROOT/$SRC" ]; then $MKDIR -- "$ROOT" || exit 2 echo "" echo "Checking out Git repository $SRC:" $GIT clone "$GITROOT" "$ROOT/$SRC" > "$DEVNULL" || exit 2 fi #update tree echo "" echo "Updating Git repository $SRC:" (cd "$ROOT/$SRC" && $GIT checkout -f && $GIT pull) > "$DEVNULL" \ || exit 2 #re-generate makefiles echo "" echo "Re-generating the Makefiles:" $CONFIGURE "$ROOT/$SRC/System/src" "$ROOT/$SRC/Apps" \ "$ROOT/$SRC/Library" || exit 2 #update the sub-repositories echo "" echo "Updating the sub-repositories:" $FIND "$ROOT/$SRC" -name script.sh | while read script; do parent="${script%%/script.sh}" #XXX read project.conf instead for i in "$parent/"*; do [ -f "$i/Makefile" ] || continue (cd "$i" && $MAKE download) > "$DEVNULL" done done #document tree echo "" echo "Documenting Git repository $SRC:" #manual pages echo "" echo " * manual pages" path="$ROOT/$SRC/Library/Documentation/src/DeforaOS Manual Pages" path="$path/DeforaOS-Manual-Pages-git" (cd "$path" && $MAKE && $MKDIR -- "$DESTDIR/htdocs/doc/manual" && $FIND "doc/manual" -name "*.html" \ -exec $INSTALL {} "$DESTDIR/htdocs/{}" \;) > "$DEVNULL" echo " $HOMEPAGE/doc/manual (manual pages)" #generic documentation echo "" echo " * generic documentation" $FIND "$ROOT/$SRC/System" "$ROOT/$SRC/Apps" -name "doc" | while read path; do [ -x "$path/docbook.sh" -o -x "$path/gtkdoc.sh" ] || continue (cd "$path" && $MAKE DESTDIR="$DESTDIR" PREFIX="/" install) \ > "$DEVNULL" done echo " $HOMEPAGE/doc/gtk-doc/html (API documentation)" echo " $HOMEPAGE/doc/html (generic documentation)" } #usage _usage() { echo "Usage: $PROGNAME [-C | -G]" 1>&2 echo " $PROGNAME -m [-C | -G]" 1>&2 return 1 } #main delete=0 email=0 #parse options document=_deforaos_document_cvs scm="CVS" while getopts "CGO:m" name; do case "$name" in C) document=_deforaos_document_cvs scm="CVS" ;; G) document=_deforaos_document_git scm="Git" ;; O) export "${OPTARG%%=*}"="${OPTARG#*=}" ;; m) email=1 ;; *) _usage exit $? ;; esac done shift $((OPTIND - 1)) if [ $# -ne 0 ]; then _usage exit $? fi #CVS CVSMODULE="DeforaOS" [ -n "$CVSROOT" ] || CVSROOT=":pserver:anonymous@anoncvs.defora.org:/home/cvs" #Git [ -n "$GITROOT" ] || GITROOT="https://git.defora.org/git/DeforaOS.git" if [ -z "$ROOT" ]; then ROOT=$($MKTEMP -d -p "$HOME" "temp.XXXXXX") delete=1 fi [ -n "$ROOT" ] || exit 2 if [ $email -eq 1 ]; then $document 2>&1 | $MAIL -s "Daily $scm documentation: $DATE_TODAY" "$EMAIL" else $document fi [ $delete -eq 1 ] && $RM -r "$ROOT"