#!/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"
|