#!/bin/sh
#
# @(#)mkproject	1.4	97/11/26
#
# Copyright (c) 1997 by Sun Microsystems, Inc.
# All rights reserved.
#
# mkproject - make a Java Workshop project file
#
USAGE='mkproject [-d classdir] [-p classpath] [-s subdirs] [-c compiler-opts]
	[-j java-opts] [-m main-class] files ...'
#
CLASSDIR=classes
CLASSPATH=
SUBDIRS=
JAVACFLAGS=-g
JAVAFLAGS=
MAIN=
while getopts d:p:s:c:j:m: i
do
	case $i in
	d)	CLASSDIR="$OPTARG";;
	p)	CLASSPATH="$OPTARG";;
	s)	SUBDIRS="$OPTARG";;
	c)	JAVACFLAGS="$OPTARG";;
	j)	JAVAFLAGS="$OPTARG";;
	m)	MAIN="$OPTARG";;
	'?')	echo "$USAGE"; exit 2;;
	esac
done
shift `expr $OPTIND - 1`
echo sun.jws.version.2
if [ -n "$MAIN" ]
then
	PACKAGE=`expr $MAIN : '\(.*\)\..*'`
	CLASS=`expr $MAIN : '.*\.\(.*\)'`
	cat <<-EOF
	sun.jws.package=$PACKAGE
	sun.jws.classname=$CLASS
	sun.jws.type=standalone
	EOF
else
	echo sun.jws.type=package
fi
cat <<EOF
sun.jws.useVisual=false
sun.jws.classdir=$CLASSDIR
sun.jws.options=$JAVACFLAGS
EOF
if [ -n "$MAIN" ]
then
	echo "sun.jws.javaArguments=$JAVAFLAGS"
	#
	# Put out the sourcepath, eliminating duplicates and anything
	# that doesn't look like a source directory.
	#
	echo sun.jws.sourcepath=List
	oldIFS=$IFS
	IFS=:
	for i in $CLASSPATH
	do
		echo $i
	done | \
	awk '
	    /\/src\//				{ if (!seen[$1]) {
						    print;
						    seen[$1] = 1;
						  }
						}
	'
	IFS=$oldIFS
	echo EndOfList
fi
#
# Put out the CLASSPATH, eliminating duplicates and anything that looks
# like the JDK or JRE.
#
echo sun.jws.classpath=List
oldIFS=$IFS
IFS=:
for i in $CLASSPATH
do
	echo $i
done | \
awk '
    /^\/.*\/java\/lib\/classes\.zip$/	{ next; }
    /^\/.*\/solaris\/lib\/classes\.zip$/	{ next; }
    /^\/.*\/jre\/lib\/rt\.jar$/		{ next; }
					{ if (!seen[$1]) {
					    print;
					    seen[$1] = 1;
					  }
					}
'
IFS=$oldIFS
echo EndOfList
#
# If any subdirectories, put out references to sub-projects.
#
if [ -n "$SUBDIRS" ]
then
	echo sun.jws.includes=List
	for i in $SUBDIRS
	do
		case $i in
		tests)	;;	# skip
		*/*)	echo $i.prj;;
		*)	echo $i/$i.prj;;
		esac
	done
	echo EndOfList
fi
#
# If any files, list them.
#
if [ $# -gt 0 ]
then
	echo sun.jws.files=List
	for i
	do
		echo $i
	done
	echo EndOfList
elif [ -n "$MAIN" ]
then
	echo sun.jws.files=List
	MAIN_src=`echo "$MAIN" | sed -e 's:\.:/:g'`.java
	oldIFS=$IFS
	IFS=:
	for i in $CLASSPATH
	do
		if [ -f $i/$MAIN_src ]
		then
			echo $i/$MAIN_src
			break
		fi
	done
	IFS=$oldIFS
	echo EndOfList
fi
