#!/bin/sh
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc.                          #
#                                                                            #
# Permission is hereby granted, free of charge, to any person obtaining a    #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation  #
# the rights to use, copy, modify, merge, publish, distribute, distribute    #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the  #
# following conditions:                                                      #
#                                                                            #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software.                        #
#                                                                            #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
# DEALINGS IN THE SOFTWARE.                                                  #
#                                                                            #
# Except as contained in this notice, the name(s) of the above copyright     #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written               #
# authorization.                                                             #
##############################################################################
#
# Author: Thomas E. Dickey <dickey@clark.net> 1996
#
# $Id: tdlint,v 1.5 2000/10/28 20:53:36 tom Exp $
#
# Lint-script that allows user's own lint libraries, in addition to the ones
# installed in the system.
#
OPT=""
DIRS=""
LIBS=""
FILES=""
ARCH=`uname -s`
if test -z "$ARCH" ; then
	echo '? uname not found'
	exit 1
else
	case $ARCH in
	AIX)	set - $* -Nn4000
		;;
	IRIX)	set - $* -n -lc
		;;
	FreeBSD) set - $* -g -p -u -v -z
		;;
	SunOS)
		case `uname -r` in
		5.*)	ARCH=Solaris
			set - $* -n -lc
			;;
		esac
		;;
	esac
fi
# LIBDIR=$HOME/lib/$ARCH/lint ;export LIBDIR
for p in $HOME/lib/$ARCH/lint /usr/lib/lint /usr/lib
do
	if [ -d $p ]
	then
		DIRS="$DIRS $p"
	fi
done
#
while [ $# != 0 ]
do
	case $1 in
	-D*\"*)	;;
	-L*)
		DIRS="`echo $1|sed -e 's/^-L//'` $DIRS"
		;;
	-l*)
		lib="llib-l`echo $1 | sed -e 's/^-l//'`.ln"
		found=no
		for p in $DIRS
		do
			echo -n testing $p/$lib
			if [ -f $p/$lib ]
			then
				LIBS="$LIBS $p/$lib"
				echo " (ok)"
				found=yes
				break
			fi
			echo
		done
		if [ $found = no ]
		then
			echo "ignored library $1"
		fi
		;;
	-n)	if [ -z "$OPT" ]
		then
			OPT="-I."
		fi
		OPT="$OPT $1"
		;;
	-*)	OPT="$OPT $1"
		;;
	*)
		FILES="$FILES $1"
		;;
	esac
	shift
done
#
eval lint $OPT $FILES $LIBS
