xref: /freebsd/contrib/ncurses/misc/makellib (revision e18651243efbc1fe285af34e4937fd697612f1c7)
10e3d5408SPeter Wemm#!/bin/sh
20e3d5408SPeter Wemm##############################################################################
3*e1865124SBaptiste Daroussin# Copyright 2020 Thomas E. Dickey                                            #
4*e1865124SBaptiste Daroussin# Copyright 1998,2000 Free Software Foundation, Inc.                         #
50e3d5408SPeter Wemm#                                                                            #
60e3d5408SPeter Wemm# Permission is hereby granted, free of charge, to any person obtaining a    #
70e3d5408SPeter Wemm# copy of this software and associated documentation files (the "Software"), #
80e3d5408SPeter Wemm# to deal in the Software without restriction, including without limitation  #
90e3d5408SPeter Wemm# the rights to use, copy, modify, merge, publish, distribute, distribute    #
100e3d5408SPeter Wemm# with modifications, sublicense, and/or sell copies of the Software, and to #
110e3d5408SPeter Wemm# permit persons to whom the Software is furnished to do so, subject to the  #
120e3d5408SPeter Wemm# following conditions:                                                      #
130e3d5408SPeter Wemm#                                                                            #
140e3d5408SPeter Wemm# The above copyright notice and this permission notice shall be included in #
150e3d5408SPeter Wemm# all copies or substantial portions of the Software.                        #
160e3d5408SPeter Wemm#                                                                            #
170e3d5408SPeter Wemm# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
180e3d5408SPeter Wemm# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
190e3d5408SPeter Wemm# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
200e3d5408SPeter Wemm# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
210e3d5408SPeter Wemm# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
220e3d5408SPeter Wemm# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
230e3d5408SPeter Wemm# DEALINGS IN THE SOFTWARE.                                                  #
240e3d5408SPeter Wemm#                                                                            #
250e3d5408SPeter Wemm# Except as contained in this notice, the name(s) of the above copyright     #
260e3d5408SPeter Wemm# holders shall not be used in advertising or otherwise to promote the sale, #
270e3d5408SPeter Wemm# use or other dealings in this Software without prior written               #
280e3d5408SPeter Wemm# authorization.                                                             #
290e3d5408SPeter Wemm##############################################################################
300e3d5408SPeter Wemm#
317a69bbfbSPeter Wemm# Author: Thomas E. Dickey 1996,1997,2000
320e3d5408SPeter Wemm#
33*e1865124SBaptiste Daroussin# $Id: makellib,v 1.9 2020/02/02 23:34:34 tom Exp $
340e3d5408SPeter Wemm# System-dependent wrapper for 'lint' that creates a lint-library via the
350e3d5408SPeter Wemm# following method (XXX is the name of the library):
360e3d5408SPeter Wemm#	a.  If the file llib-lXXX doesn't exist, create it using the make-rule
370e3d5408SPeter Wemm#	b.  Process llib-lXXX with the system's lint utility, making
380e3d5408SPeter Wemm#	    llib-lXXX.ln
390e3d5408SPeter Wemm#	c.  Install llib-lXXX.ln in the lib directory.
400e3d5408SPeter Wemm#
410e3d5408SPeter Wemm# Using the intermediate file llib-lXXX bypasses a weakness of lint (passing
420e3d5408SPeter Wemm# through warning messages from the original source-files).
430e3d5408SPeter Wemm#
440e3d5408SPeter Wemm# There are two drawbacks to this approach:
450e3d5408SPeter Wemm#	a.  On a few systems, you'll have to manually-edit the llib-lXXX file
460e3d5408SPeter Wemm#	    to get a usable lint-library (not all C-preprocessors work well).
470e3d5408SPeter Wemm#	b.  The system's lint utility won't recognize -lXXX as a lint-library
480e3d5408SPeter Wemm#	    (Use tdlint as a wrapper; it's designed for this).
490e3d5408SPeter Wemm#
500e3d5408SPeter Wemm# Parameters:
510e3d5408SPeter Wemm#	$1 = library name
520e3d5408SPeter Wemm#	$* = C-preprocessor options
530e3d5408SPeter Wemm#
540e3d5408SPeter WemmARCH=`uname -s`
550e3d5408SPeter Wemmif test "x$ARCH" = "xSunOS" ; then
560e3d5408SPeter Wemm	case `uname -r` in
570e3d5408SPeter Wemm	5.*)	ARCH=Solaris
580e3d5408SPeter Wemm		;;
590e3d5408SPeter Wemm	esac
600e3d5408SPeter Wemmfi
610e3d5408SPeter Wemm#
620e3d5408SPeter WemmDST="$HOME/lib/$ARCH/lint"
630e3d5408SPeter WemmOPT=""
640e3d5408SPeter WemmLLIB=""
650e3d5408SPeter Wemmllib=""
660e3d5408SPeter Wemm#
670e3d5408SPeter Wemmwhile test $# != 0
680e3d5408SPeter Wemmdo
690e3d5408SPeter Wemm	case $1 in
700e3d5408SPeter Wemm	-L*)
710e3d5408SPeter Wemm		DST="$DST `echo $1|sed -e 's/^-L//'`"
720e3d5408SPeter Wemm		;;
730e3d5408SPeter Wemm	-*)
740e3d5408SPeter Wemm		OPT="$OPT $1"
750e3d5408SPeter Wemm		;;
760e3d5408SPeter Wemm	*)
770e3d5408SPeter Wemm		if test -z "$LLIB"
780e3d5408SPeter Wemm		then
790e3d5408SPeter Wemm			LLIB=$1
800e3d5408SPeter Wemm		else
810e3d5408SPeter Wemm			llib=llib-l$1
820e3d5408SPeter Wemm		fi
830e3d5408SPeter Wemm		;;
840e3d5408SPeter Wemm	esac
850e3d5408SPeter Wemm	shift
860e3d5408SPeter Wemmdone
870e3d5408SPeter Wemm
880e3d5408SPeter Wemmif test -z "$LLIB"
890e3d5408SPeter Wemmthen
900e3d5408SPeter Wemm	echo '? no library name specified'
910e3d5408SPeter Wemm	exit 1
920e3d5408SPeter Wemmelif test -z "$llib"
930e3d5408SPeter Wemmthen
940e3d5408SPeter Wemm	llib="llib-l$LLIB"
950e3d5408SPeter Wemmfi
960e3d5408SPeter Wemm
970e3d5408SPeter Wemmif test ! -f $llib ; then
980e3d5408SPeter Wemm	if ( make $llib )
990e3d5408SPeter Wemm	then
1000e3d5408SPeter Wemm		:
1010e3d5408SPeter Wemm	else
1020e3d5408SPeter Wemm		exit 1
1030e3d5408SPeter Wemm	fi
1040e3d5408SPeter Wemmfi
1050e3d5408SPeter Wemm
1060e3d5408SPeter Wemmrm -f $llib.ln $llib.c
1070e3d5408SPeter WemmTARGET=$LLIB
1080e3d5408SPeter Wemm
1090e3d5408SPeter Wemmcase "$ARCH" in
1100e3d5408SPeter WemmAIX)
1110e3d5408SPeter Wemm	CREATE="-uvxo$LLIB -Nn4000"
1120e3d5408SPeter Wemm	TARGET=$llib.c
1130e3d5408SPeter Wemm	ln $llib $TARGET
1140e3d5408SPeter Wemm	;;
1150e3d5408SPeter WemmSolaris)
1160e3d5408SPeter Wemm	CREATE="-C$llib"
1170e3d5408SPeter Wemm	TARGET=$llib.c
1180e3d5408SPeter Wemm	ln $llib $TARGET
1190e3d5408SPeter Wemm	;;
1207a69bbfbSPeter WemmFreeBSD)
1217a69bbfbSPeter Wemm	CREATE="-g -z -C$LLIB"
1227a69bbfbSPeter Wemm	TARGET=$llib.c
1237a69bbfbSPeter Wemm	ln $llib $TARGET
1247a69bbfbSPeter Wemm	;;
1250e3d5408SPeter WemmCLIX)
1260e3d5408SPeter Wemm	CREATE="-DLINTLIBRARY -vxo$LLIB"
1270e3d5408SPeter Wemm	TARGET=$llib.c
1280e3d5408SPeter Wemm	ln $llib $TARGET
1290e3d5408SPeter Wemm	;;
1300e3d5408SPeter WemmIRIX*)
1310e3d5408SPeter Wemm	CREATE="-DLINTLIBRARY -vxyo$LLIB"
1320e3d5408SPeter Wemm	TARGET=$llib.c
1330e3d5408SPeter Wemm	ln $llib $TARGET
1340e3d5408SPeter Wemm	;;
1350e3d5408SPeter WemmUNIX_SV)
1360e3d5408SPeter Wemm	CREATE="-DLINTLIBRARY -vxyo$LLIB"
1370e3d5408SPeter Wemm	TARGET=$llib.c
1380e3d5408SPeter Wemm	ln $llib $TARGET
1390e3d5408SPeter Wemm	;;
1400e3d5408SPeter Wemm*)
1410e3d5408SPeter Wemm	echo "Sorry.  I do not know how to build a lint-library for $ARCH"
1420e3d5408SPeter Wemm	exit 1
1430e3d5408SPeter Wemmesac
1440e3d5408SPeter Wemm
1450e3d5408SPeter Wemmecho OPT    "$OPT"
1460e3d5408SPeter Wemmecho TARGET "$TARGET"
1470e3d5408SPeter Wemmecho LIBNAME "$llib"
1480e3d5408SPeter Wemmif ( lint $CREATE $OPT $TARGET )
1490e3d5408SPeter Wemmthen
1500e3d5408SPeter Wemm	if test -f $llib.ln
1510e3d5408SPeter Wemm	then
1520e3d5408SPeter Wemm		for p in $HOME/lib $HOME/lib/$ARCH $HOME/lib/$ARCH/lint
1530e3d5408SPeter Wemm		do
1540e3d5408SPeter Wemm			if test ! -d $p
1550e3d5408SPeter Wemm			then
1560e3d5408SPeter Wemm				mkdir $p
1570e3d5408SPeter Wemm			fi
1580e3d5408SPeter Wemm		done
1590e3d5408SPeter Wemm		for p in $DST
1600e3d5408SPeter Wemm		do
1610e3d5408SPeter Wemm			cp $llib.ln $p/
1620e3d5408SPeter Wemm		done
1630e3d5408SPeter Wemm		rm -f $llib.ln
1640e3d5408SPeter Wemm	fi
1650e3d5408SPeter Wemmfi
1660e3d5408SPeter Wemmif test "x$TARGET" = "x$llib.c" ; then
1670e3d5408SPeter Wemm	rm -f $TARGET
1680e3d5408SPeter Wemmfi
169