| #!/usr/bin/env bash | |
| # Copyright 2011 The Go Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style | |
| # license that can be found in the LICENSE file. | |
| # This script creates the .zip, index, and configuration files for running | |
| # godoc on app-engine. | |
| # | |
| # If an argument is provided it is assumed to be the app-engine godoc directory. | |
| # Without an argument, $APPDIR is used instead. If GOROOT is not set, the | |
| # current working directory is assumed to be $GOROOT. Various sanity checks | |
| # prevent accidents. | |
| # | |
| # The script creates a .zip file representing the $GOROOT file system | |
| # and computes the correspondig search index files. These files are then | |
| # copied to $APPDIR. A corresponding godoc configuration file is created | |
| # in $APPDIR/appconfig.go. | |
| ZIPFILE=godoc.zip | |
| INDEXFILE=godoc.index | |
| SPLITFILES=index.split. | |
| CONFIGFILE=godoc/appconfig.go | |
| error() { | |
| echo "error: $1" | |
| exit 2 | |
| } | |
| getArgs() { | |
| if [ -z $GOROOT ]; then | |
| GOROOT=$(pwd) | |
| echo "GOROOT not set, using cwd instead" | |
| fi | |
| if [ -z $APPDIR ]; then | |
| if [ $# == 0 ]; then | |
| error "APPDIR not set, and no argument provided" | |
| fi | |
| APPDIR=$1 | |
| echo "APPDIR not set, using argument instead" | |
| fi | |
| # safety checks | |
| if [ ! -d $GOROOT ]; then | |
| error "$GOROOT is not a directory" | |
| fi | |
| if [ ! -x $GOROOT/src/cmd/godoc/godoc ]; then | |
| error "$GOROOT/src/cmd/godoc/godoc does not exist or is not executable" | |
| fi | |
| if [ ! -d $APPDIR ]; then | |
| error "$APPDIR is not a directory" | |
| fi | |
| if [ ! -e $APPDIR/app.yaml ]; then | |
| error "$APPDIR is not an app-engine directory; missing file app.yaml" | |
| fi | |
| if [ ! -d $APPDIR/godoc ]; then | |
| error "$APPDIR is missing directory godoc" | |
| fi | |
| # reporting | |
| echo "GOROOT = $GOROOT" | |
| echo "APPDIR = $APPDIR" | |
| } | |
| cleanup() { | |
| echo "*** cleanup $APPDIR" | |
| rm $APPDIR/$ZIPFILE | |
| rm $APPDIR/$INDEXFILE | |
| rm $APPDIR/$SPLITFILES* | |
| rm $APPDIR/$CONFIGFILE | |
| } | |
| makeZipfile() { | |
| echo "*** make $APPDIR/$ZIPFILE" | |
| zip -q -r $APPDIR/$ZIPFILE $GOROOT -i \*.go -i \*.html -i \*.css -i \*.js -i \*.txt -i \*.c -i \*.h -i \*.s -i \*.png -i \*.jpg -i \*.sh -i \*.ico | |
| } | |
| makeIndexfile() { | |
| echo "*** make $APPDIR/$INDEXFILE" | |
| OUT=/tmp/godoc.out | |
| $GOROOT/src/cmd/godoc/godoc -write_index -index_files=$APPDIR/$INDEXFILE -zip=$APPDIR/$ZIPFILE 2> $OUT | |
| if [ $? != 0 ]; then | |
| error "$GOROOT/src/cmd/godoc/godoc failed - see $OUT for details" | |
| fi | |
| } | |
| splitIndexfile() { | |
| echo "*** split $APPDIR/$INDEXFILE" | |
| split -b8m $APPDIR/$INDEXFILE $APPDIR/$SPLITFILES | |
| } | |
| makeConfigfile() { | |
| echo "*** make $APPDIR/$CONFIGFILE" | |
| cat > $APPDIR/$CONFIGFILE <<EOF | |
| package main | |
| // GENERATED FILE - DO NOT MODIFY BY HAND. | |
| // (generated by $GOROOT/src/cmd/godoc/setup-godoc-app.bash) | |
| const ( | |
| // .zip filename | |
| zipFilename = "$ZIPFILE" | |
| // goroot directory in .zip file | |
| zipGoroot = "$GOROOT" | |
| // glob pattern describing search index files | |
| // (if empty, the index is built at run-time) | |
| indexFilenames = "$SPLITFILES*" | |
| ) | |
| EOF | |
| } | |
| getArgs "$@" | |
| cleanup | |
| makeZipfile | |
| makeIndexfile | |
| splitIndexfile | |
| makeConfigfile | |
| echo "*** setup complete" |