_phc()
{
	local cur prev shortOpts longOpts paramOpts
	cur=${COMP_WORDS[COMP_CWORD]}
	prev=${COMP_WORDS[COMP_CWORD-1]}

	shortOpts="-h -V -v -c -d -C -O -e -c"
	longOpts="--help --full-help --version --verbose --compile --pretty-print	\
				 --obfuscate --no-validation --include --generate-c --execute		\
				 --next-line-curlies --no-leading-tab --no-hash-bang					\
				 --no-line-numbers --no-nulls --no-empty-lists --list-passes		\
				 --dont-fail --no-xml-attrs --rt-stats --flow-insensitive			\
				 --object-insensitive --stats"


	# TODO provide context sensitive completion for these options, with an = and no space
	paramOpts=" --run --r-option --define  --c-option --extension --web-app		\
					--with-php --optimize --output --tab  --call-string-length"
	
	passOpts="--read-xml --debug --dump --dump-uppered --dump-dot --dump-xml	\
				 --disable"

	# get the list of passes
	passes=`$1 --list-passes  | grep '^ ' -v | grep -v '^Passes' | awk '{print \$1}'`


	# options completion
#	if [[ "$prev" == -*  ]]; then
#		COMPREPLY=( $( compgen -W "$passes" -- $cur ) )
	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -f -W "$shortOpts $longOpts $paramOpts $passOpts" -- $cur ) )
		return 0
	else
		# complete on php, xml and la files, or directories.
		COMPREPLY=( $( compgen -f -X '!*.@(php|xml|la)' -- $cur)  $( compgen -d  -- $cur))

		# TODO only complete .xml files after --read-xml
		# TODO only complete .la files after --run=
		return 0
	fi
}
# the -o options allow bash to gracefully accept directories, in the expected fashion.
complete -F _phc -o filenames -o dirnames phc
