xref: /OpenGrok/opengrok-indexer/src/test/resources/analysis/sh/sample.sh (revision eeb7e5b33d1bcc524fcc9d1d560447b044e286a4)
1*eeb7e5b3SAdam Hornáček#! /bin/ksh -p
2*eeb7e5b3SAdam Hornáček#
3*eeb7e5b3SAdam Hornáček# CDDL HEADER START
4*eeb7e5b3SAdam Hornáček#
5*eeb7e5b3SAdam Hornáček# The contents of this file are subject to the terms of the
6*eeb7e5b3SAdam Hornáček# Common Development and Distribution License (the "License").
7*eeb7e5b3SAdam Hornáček# You may not use this file except in compliance with the License.
8*eeb7e5b3SAdam Hornáček#
9*eeb7e5b3SAdam Hornáček# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*eeb7e5b3SAdam Hornáček# or http://www.opensolaris.org/os/licensing.
11*eeb7e5b3SAdam Hornáček# See the License for the specific language governing permissions
12*eeb7e5b3SAdam Hornáček# and limitations under the License.
13*eeb7e5b3SAdam Hornáček#
14*eeb7e5b3SAdam Hornáček# When distributing Covered Code, include this CDDL HEADER in each
15*eeb7e5b3SAdam Hornáček# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*eeb7e5b3SAdam Hornáček# If applicable, add the following below this CDDL HEADER, with the
17*eeb7e5b3SAdam Hornáček# fields enclosed by brackets "[]" replaced with your own identifying
18*eeb7e5b3SAdam Hornáček# information: Portions Copyright [yyyy] [name of copyright owner]
19*eeb7e5b3SAdam Hornáček#
20*eeb7e5b3SAdam Hornáček# CDDL HEADER END
21*eeb7e5b3SAdam Hornáček#
22*eeb7e5b3SAdam Hornáček#
23*eeb7e5b3SAdam Hornáček# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24*eeb7e5b3SAdam Hornáček# Use is subject to license terms.
25*eeb7e5b3SAdam Hornáček#
26*eeb7e5b3SAdam Hornáček# xref: build and maintain source cross-reference databases.
27*eeb7e5b3SAdam Hornáček#
28*eeb7e5b3SAdam Hornáček
29*eeb7e5b3SAdam HornáčekONBLDDIR=$(dirname $(whence $0))
30*eeb7e5b3SAdam Hornáček
31*eeb7e5b3SAdam HornáčekPROG=`basename $0`
32*eeb7e5b3SAdam HornáčekXREFMK=`dirname $0`/xref.mk
33*eeb7e5b3SAdam HornáčekXRMAKEFILE=Makefile export XRMAKEFILE
34*eeb7e5b3SAdam HornáčekMAKE="dmake -m serial"
35*eeb7e5b3SAdam Hornáček
36*eeb7e5b3SAdam Hornáček#
37*eeb7e5b3SAdam Hornáček# The CSCOPEOPTIONS variable can cause problems if it's set in the environment
38*eeb7e5b3SAdam Hornáček# when using cscope; remove it.
39*eeb7e5b3SAdam Hornáček#
40*eeb7e5b3SAdam Hornáčekunset CSCOPEOPTIONS
41*eeb7e5b3SAdam Hornáček
42*eeb7e5b3SAdam Hornáček#
43*eeb7e5b3SAdam Hornáček# The CDPATH variable causes ksh's `cd' builtin to emit messages to stdout
44*eeb7e5b3SAdam Hornáček# under certain circumstances, which can really screw things up; unset it.
45*eeb7e5b3SAdam Hornáček#
46*eeb7e5b3SAdam Hornáčekunset CDPATH
47*eeb7e5b3SAdam Hornáček
48*eeb7e5b3SAdam Hornáček#
49*eeb7e5b3SAdam Hornáček# Print the provided failure message and exit with an error.
50*eeb7e5b3SAdam Hornáček#
51*eeb7e5b3SAdam Hornáčekfail()
52*eeb7e5b3SAdam Hornáček{
53*eeb7e5b3SAdam Hornáček        echo $PROG: $@ > /dev/stderr
54*eeb7e5b3SAdam Hornáček        exit 1
55*eeb7e5b3SAdam Hornáček}
56*eeb7e5b3SAdam Hornáček
57*eeb7e5b3SAdam Hornáček#
58*eeb7e5b3SAdam Hornáček# Print the provided warning message.
59*eeb7e5b3SAdam Hornáček#
60*eeb7e5b3SAdam Hornáčekwarn()
61*eeb7e5b3SAdam Hornáček{
62*eeb7e5b3SAdam Hornáček        echo $PROG: warning: $@ > /dev/stderr
63*eeb7e5b3SAdam Hornáček}
64*eeb7e5b3SAdam Hornáček
65*eeb7e5b3SAdam Hornáček#
66*eeb7e5b3SAdam Hornáček# Print the provided informational message.
67*eeb7e5b3SAdam Hornáček#
68*eeb7e5b3SAdam Hornáčekinfo()
69*eeb7e5b3SAdam Hornáček{
70*eeb7e5b3SAdam Hornáček        echo $PROG: $@
71*eeb7e5b3SAdam Hornáček}
72*eeb7e5b3SAdam Hornáček
73*eeb7e5b3SAdam Hornáček#
74*eeb7e5b3SAdam Hornáček# Print the provided informational message, and the current value of $SECONDS
75*eeb7e5b3SAdam Hornáček# in a user-friendly format.
76*eeb7e5b3SAdam Hornáček#
77*eeb7e5b3SAdam Hornáčektimeinfo()
78*eeb7e5b3SAdam Hornáček{
79*eeb7e5b3SAdam Hornáček	typeset -Z2 sec
80*eeb7e5b3SAdam Hornáček	typeset -i min seconds
81*eeb7e5b3SAdam Hornáček
82*eeb7e5b3SAdam Hornáček	((seconds = SECONDS))
83*eeb7e5b3SAdam Hornáček	((min = seconds / 60))
84*eeb7e5b3SAdam Hornáček	((sec = seconds % 60))
85*eeb7e5b3SAdam Hornáček
86*eeb7e5b3SAdam Hornáček	info "$1 in ${min}m${sec}s"
87*eeb7e5b3SAdam Hornáček}
88*eeb7e5b3SAdam Hornáček
89*eeb7e5b3SAdam Hornáčekwhich_scm | read SCM_MODE CODEMGR_WS || exit 1
90*eeb7e5b3SAdam Hornáček
91*eeb7e5b3SAdam Hornáčekif [[ $SCM_MODE == "unknown" ]];then
92*eeb7e5b3SAdam Hornáček	print -u2 "Unable to determine SCM type currently in use."
93*eeb7e5b3SAdam Hornáček	exit 1
94*eeb7e5b3SAdam Hornáčekfi
95*eeb7e5b3SAdam Hornáček
96*eeb7e5b3SAdam Hornáčekexport CODEMGR_WS
97*eeb7e5b3SAdam HornáčekSRC=$CODEMGR_WS/usr/src export SRC
98*eeb7e5b3SAdam HornáčekMACH=`uname -p` export MACH
99*eeb7e5b3SAdam Hornáček
100*eeb7e5b3SAdam Hornáček[ -f $XREFMK ] || fail "cannot locate xref.mk"
101*eeb7e5b3SAdam Hornáček
102*eeb7e5b3SAdam Hornáčekclobber=
103*eeb7e5b3SAdam Hornáčeknoflg=
104*eeb7e5b3SAdam Hornáčekxrefs=
105*eeb7e5b3SAdam Hornáček
106*eeb7e5b3SAdam Hornáčekwhile getopts cfm:px: flag; do
107*eeb7e5b3SAdam Hornáček	case $flag in
108*eeb7e5b3SAdam Hornáček	c)
109*eeb7e5b3SAdam Hornáček		clobber=y
110*eeb7e5b3SAdam Hornáček		;;
111*eeb7e5b3SAdam Hornáček	f)
112*eeb7e5b3SAdam Hornáček		noflg=y
113*eeb7e5b3SAdam Hornáček		;;
114*eeb7e5b3SAdam Hornáček	m)
115*eeb7e5b3SAdam Hornáček		XRMAKEFILE=$OPTARG
116*eeb7e5b3SAdam Hornáček		;;
117*eeb7e5b3SAdam Hornáček	p)
118*eeb7e5b3SAdam Hornáček		#
119*eeb7e5b3SAdam Hornáček		# The ENVCPPFLAGS* environment variables contain the include
120*eeb7e5b3SAdam Hornáček		# paths to our proto areas; clear 'em so that they don't end
121*eeb7e5b3SAdam Hornáček		# up in CPPFLAGS, and thus don't end up in XRINCS in xref.mk.
122*eeb7e5b3SAdam Hornáček		#
123*eeb7e5b3SAdam Hornáček		ENVCPPFLAGS1=
124*eeb7e5b3SAdam Hornáček		ENVCPPFLAGS2=
125*eeb7e5b3SAdam Hornáček		ENVCPPFLAGS3=
126*eeb7e5b3SAdam Hornáček		ENVCPPFLAGS4=
127*eeb7e5b3SAdam Hornáček		;;
128*eeb7e5b3SAdam Hornáček 	x)
129*eeb7e5b3SAdam Hornáček		xrefs=$OPTARG
130*eeb7e5b3SAdam Hornáček		;;
131*eeb7e5b3SAdam Hornáček	\?)
132*eeb7e5b3SAdam Hornáček		echo "usage: $PROG [-cfp] [-m <makefile>]"\
133*eeb7e5b3SAdam Hornáček		     "[-x cscope|ctags|etags[,...]] [<subtree> ...]"\
134*eeb7e5b3SAdam Hornáček		      > /dev/stderr
135*eeb7e5b3SAdam Hornáček		exit 1
136*eeb7e5b3SAdam Hornáček		;;
137*eeb7e5b3SAdam Hornáček	esac
138*eeb7e5b3SAdam Hornáčekdone
139*eeb7e5b3SAdam Hornáček
140*eeb7e5b3SAdam Hornáčekshift $((OPTIND - 1))
141*eeb7e5b3SAdam Hornáček
142*eeb7e5b3SAdam Hornáček#
143*eeb7e5b3SAdam Hornáček# Get the list of directories before we reset $@.
144*eeb7e5b3SAdam Hornáček#
145*eeb7e5b3SAdam Hornáčekdirs=$@
146*eeb7e5b3SAdam Hornáček[ -z "$dirs" ] && dirs=.
147*eeb7e5b3SAdam Hornáček
148*eeb7e5b3SAdam Hornáček#
149*eeb7e5b3SAdam Hornáček# Get the canonical path to the workspace.  This allows xref to work
150*eeb7e5b3SAdam Hornáček# even in the presence of lofs(7FS).
151*eeb7e5b3SAdam Hornáček#
152*eeb7e5b3SAdam Hornáčekcd $CODEMGR_WS
153*eeb7e5b3SAdam HornáčekCODEMGR_WS=`/bin/pwd`
154*eeb7e5b3SAdam Hornáčekcd - > /dev/null
155*eeb7e5b3SAdam Hornáček
156*eeb7e5b3SAdam Hornáček#
157*eeb7e5b3SAdam Hornáček# Process the xref format list.  For convenience, support common synonyms
158*eeb7e5b3SAdam Hornáček# for the xref formats.
159*eeb7e5b3SAdam Hornáček#
160*eeb7e5b3SAdam Hornáčekif [ -z "$xrefs" ]; then
161*eeb7e5b3SAdam Hornáček	#
162*eeb7e5b3SAdam Hornáček	# Disable etags if we can't find it.
163*eeb7e5b3SAdam Hornáček	#
164*eeb7e5b3SAdam Hornáček	xrefs="cscope ctags"
165*eeb7e5b3SAdam Hornáček	$MAKE -e -f $XREFMK xref.etags.check 2>/dev/null 1>&2 && \
166*eeb7e5b3SAdam Hornáček	    xrefs="$xrefs etags"
167*eeb7e5b3SAdam Hornáčekelse
168*eeb7e5b3SAdam Hornáček	oldifs=$IFS
169*eeb7e5b3SAdam Hornáček	IFS=,
170*eeb7e5b3SAdam Hornáček	set -- $xrefs
171*eeb7e5b3SAdam Hornáček	IFS=$oldifs
172*eeb7e5b3SAdam Hornáček
173*eeb7e5b3SAdam Hornáček	xrefs=
174*eeb7e5b3SAdam Hornáček	for xref; do
175*eeb7e5b3SAdam Hornáček		case $xref in
176*eeb7e5b3SAdam Hornáček		cscope|cscope.out)
177*eeb7e5b3SAdam Hornáček			xrefs="$xrefs cscope"
178*eeb7e5b3SAdam Hornáček			;;
179*eeb7e5b3SAdam Hornáček		ctags|tags)
180*eeb7e5b3SAdam Hornáček			xrefs="$xrefs ctags"
181*eeb7e5b3SAdam Hornáček			;;
182*eeb7e5b3SAdam Hornáček		etags|TAGS)
183*eeb7e5b3SAdam Hornáček			xrefs="$xrefs etags"
184*eeb7e5b3SAdam Hornáček			;;
185*eeb7e5b3SAdam Hornáček		*)
186*eeb7e5b3SAdam Hornáček			warn "ignoring unknown cross-reference \"$xref\""
187*eeb7e5b3SAdam Hornáček			;;
188*eeb7e5b3SAdam Hornáček 		esac
189*eeb7e5b3SAdam Hornáček 	done
190*eeb7e5b3SAdam Hornáček
191*eeb7e5b3SAdam Hornáček	[ -z "$xrefs" ] && fail "no known cross-reference formats specified"
192*eeb7e5b3SAdam Hornáčekfi
193*eeb7e5b3SAdam Hornáček
194*eeb7e5b3SAdam Hornáček#
195*eeb7e5b3SAdam Hornáček# Process the requested list of directories.
196*eeb7e5b3SAdam Hornáček#
197*eeb7e5b3SAdam Hornáčekfor dir in $dirs; do
198*eeb7e5b3SAdam Hornáček	if [ ! -d $dir ]; then
199*eeb7e5b3SAdam Hornáček		warn "directory \"$dir\" does not exist; skipping"
200*eeb7e5b3SAdam Hornáček		continue
201*eeb7e5b3SAdam Hornáček	fi
202*eeb7e5b3SAdam Hornáček
203*eeb7e5b3SAdam Hornáček	#
204*eeb7e5b3SAdam Hornáček	# NOTE: we cannot use $PWD because it will mislead in the presence
205*eeb7e5b3SAdam Hornáček	# of lofs(7FS).
206*eeb7e5b3SAdam Hornáček	#
207*eeb7e5b3SAdam Hornáček	cd $dir || fail "cannot change to directory $dir"
208*eeb7e5b3SAdam Hornáček	pwd=`/bin/pwd`
209*eeb7e5b3SAdam Hornáček	reldir=${pwd##${CODEMGR_WS}/}
210*eeb7e5b3SAdam Hornáček	if [ "$reldir" = "$pwd" ]; then
211*eeb7e5b3SAdam Hornáček		warn "directory \"$pwd\" is not beneath \$CODEMGR_WS; skipping"
212*eeb7e5b3SAdam Hornáček		cd - > /dev/null
213*eeb7e5b3SAdam Hornáček		continue
214*eeb7e5b3SAdam Hornáček	fi
215*eeb7e5b3SAdam Hornáček
216*eeb7e5b3SAdam Hornáček	#
217*eeb7e5b3SAdam Hornáček	# If we're building cross-references, then run `xref.clean' first
218*eeb7e5b3SAdam Hornáček	# to purge any crud that may be lying around from previous aborted runs.
219*eeb7e5b3SAdam Hornáček	#
220*eeb7e5b3SAdam Hornáček	if [ -z "$clobber" ]; then
221*eeb7e5b3SAdam Hornáček		$MAKE -e -f $XREFMK xref.clean > /dev/null
222*eeb7e5b3SAdam Hornáček	fi
223*eeb7e5b3SAdam Hornáček
224*eeb7e5b3SAdam Hornáček	#
225*eeb7e5b3SAdam Hornáček	# Find flg-related source files, if requested.
226*eeb7e5b3SAdam Hornáček	#
227*eeb7e5b3SAdam Hornáček	if [ -z "$noflg" -a -z "$clobber" ]; then
228*eeb7e5b3SAdam Hornáček		SECONDS=0
229*eeb7e5b3SAdam Hornáček    		info "$reldir: finding flg-related source files"
230*eeb7e5b3SAdam Hornáček		$MAKE -e -f $XREFMK xref.flg > /dev/null
231*eeb7e5b3SAdam Hornáček		if [ $? -ne 0 ]; then
232*eeb7e5b3SAdam Hornáček			warn "$reldir: unable to find flg-related source files"
233*eeb7e5b3SAdam Hornáček		else
234*eeb7e5b3SAdam Hornáček			nfiles=`wc -l < xref.flg`
235*eeb7e5b3SAdam Hornáček			if [ "$nfiles" -eq 1 ]; then
236*eeb7e5b3SAdam Hornáček				msg="found 1 flg-related source file"
237*eeb7e5b3SAdam Hornáček			else
238*eeb7e5b3SAdam Hornáček				msg="found $nfiles flg-related source files"
239*eeb7e5b3SAdam Hornáček			fi
240*eeb7e5b3SAdam Hornáček			timeinfo "$reldir: $msg"
241*eeb7e5b3SAdam Hornáček		fi
242*eeb7e5b3SAdam Hornáček	fi
243*eeb7e5b3SAdam Hornáček
244*eeb7e5b3SAdam Hornáček	#
245*eeb7e5b3SAdam Hornáček	# Build or clobber all of the requested cross-references.
246*eeb7e5b3SAdam Hornáček	#
247*eeb7e5b3SAdam Hornáček	for xref in $xrefs; do
248*eeb7e5b3SAdam Hornáček		if [ -n "$clobber" ]; then
249*eeb7e5b3SAdam Hornáček			info "$reldir: clobbering $xref cross-reference"
250*eeb7e5b3SAdam Hornáček			$MAKE -e -f $XREFMK xref.${xref}.clobber > /dev/null ||
251*eeb7e5b3SAdam Hornáček 			    warn "$reldir: cannot clobber $xref cross-reference"
252*eeb7e5b3SAdam Hornáček			continue
253*eeb7e5b3SAdam Hornáček		fi
254*eeb7e5b3SAdam Hornáček
255*eeb7e5b3SAdam Hornáček		SECONDS=0
256*eeb7e5b3SAdam Hornáček		info "$reldir: building $xref cross-reference"
257*eeb7e5b3SAdam Hornáček		$MAKE -e -f $XREFMK xref.${xref} > /dev/null ||
258*eeb7e5b3SAdam Hornáček		    fail "$reldir: cannot build $xref cross-reference"
259*eeb7e5b3SAdam Hornáček		timeinfo "$reldir: built $xref cross-reference"
260*eeb7e5b3SAdam Hornáček 	done
261*eeb7e5b3SAdam Hornáček
262*eeb7e5b3SAdam Hornáček	$MAKE -e -f $XREFMK xref.clean > /dev/null ||
263*eeb7e5b3SAdam Hornáček	    warn "$reldir: cannot clean up temporary files"
264*eeb7e5b3SAdam Hornáček	cd - > /dev/null
265*eeb7e5b3SAdam Hornáčekdone
266*eeb7e5b3SAdam Hornáčekexit 0
267*eeb7e5b3SAdam Hornáček
268*eeb7e5b3SAdam Hornáčektypeset -i vint
269*eeb7e5b3SAdam Hornáčekvint=0xFFEF
270*eeb7e5b3SAdam Hornáčekecho 'http://example.com'
271*eeb7e5b3SAdam Hornáčektypeset +l -i vint2
272