|
|
#!/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 a complete godoc app in $APPDIR. # It copies the cmd/godoc and src/go/... sources from GOROOT, # synthesizes an app.yaml file, and creates the .zip, index, and # configuration files. # # 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, "go env" # is consulted to find the $GOROOT. # # 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. GODOC=golang.org/x/tools/cmd/godoc CONFIGFILE=$GODOC/appconfig.go
error() { echo "error: $1" exit 2 }
getArgs() { if [ -z $APPENGINE_SDK ]; then error "APPENGINE_SDK environment variable not set" fi if [ ! -x $APPENGINE_SDK/goapp ]; then error "couldn't find goapp command in $APPENGINE_SDK" fi if [ -z $GOROOT ]; then GOROOT=$(go env GOROOT) echo "GOROOT not set explicitly, using go env value 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 [ -e $APPDIR ]; then error "$APPDIR exists; check and remove it before trying again" fi
# reporting echo "GOROOT = $GOROOT" echo "APPDIR = $APPDIR" }
fetchGodoc() { echo "*** Fetching godoc (if not already in GOPATH)" unset GOBIN go=$APPENGINE_SDK/goapp $go get -d -tags appengine $GODOC mkdir -p $APPDIR/$GODOC cp $(find $($go list -f '{{.Dir}}' $GODOC) -mindepth 1 -maxdepth 1 -type f) $APPDIR/$GODOC/ }
makeAppYaml() { echo "*** make $APPDIR/app.yaml" cat > $APPDIR/app.yaml <<EOF application: godoc version: 1 runtime: go api_version: go1.4beta
handlers: - url: /.* script: _go_app EOF }
makeZipfile() { echo "*** make $APPDIR/$ZIPFILE" zip -q -r $APPDIR/$ZIPFILE $GOROOT/* }
makeIndexfile() { echo "*** make $APPDIR/$INDEXFILE" GOPATH= godoc -write_index -index_files=$APPDIR/$INDEXFILE -zip=$APPDIR/$ZIPFILE }
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 golang.org/x/tools/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 "$@" set -e mkdir $APPDIR fetchGodoc makeAppYaml makeZipfile makeIndexfile splitIndexfile makeConfigfile
echo "*** setup complete"
|