135 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
#!/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=code.google.com/p/go.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/go ]; then
 | 
						|
		error "couldn't find go comment 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/go
 | 
						|
	$go get -d -tags appengine $GODOC
 | 
						|
	mkdir -p $APPDIR/$GODOC
 | 
						|
	cp $(find $($go list -f '{{.Dir}}' $GODOC) -type f -depth 1) $APPDIR/$GODOC/
 | 
						|
}
 | 
						|
 | 
						|
makeAppYaml() {
 | 
						|
	echo "*** make $APPDIR/app.yaml"
 | 
						|
	cat > $APPDIR/app.yaml <<EOF
 | 
						|
application: godoc
 | 
						|
version: 1
 | 
						|
runtime: go
 | 
						|
api_version: go1
 | 
						|
 | 
						|
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 $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 "$@"
 | 
						|
set -e
 | 
						|
mkdir $APPDIR
 | 
						|
fetchGodoc
 | 
						|
makeAppYaml
 | 
						|
makeZipfile
 | 
						|
makeIndexfile
 | 
						|
splitIndexfile
 | 
						|
makeConfigfile
 | 
						|
 | 
						|
echo "*** setup complete"
 |