?RCS: $Id: d_gethname.U 78389 2004-11-30 00:17:17Z manus $
?RCS:
?RCS: Copyright (c) 1991-1993, Raphael Manfredi
?RCS: 
?RCS: You may redistribute only under the terms of the Artistic Licence,
?RCS: as specified in the README file that comes with the distribution.
?RCS: You may reuse parts of this distribution only within the terms of
?RCS: that same Artistic Licence; a copy of which may be found at the root
?RCS: of the source tree for dist 3.0.
?RCS:
?RCS: $Log$
?RCS: Revision 1.1  2004/11/30 00:17:18  manus
?RCS: Initial revision
?RCS:
?RCS: Revision 3.0.1.1  1994/10/29  16:13:00  ram
?RCS: patch36: call ./xenix explicitely instead of relying on PATH
?RCS:
?RCS: Revision 3.0  1993/08/18  12:06:11  ram
?RCS: Baseline for dist 3.0 netwide release.
?RCS:
?MAKE:d_gethname d_uname d_phostname aphostname: phostname cat \
	myhostname package d_portable Loc libc echo n c +i_whoami +usrinc \
	Myread Guess Oldconfig Csym
?MAKE:	-pick add $@ %<
?S:d_gethname:
?S:	This variable conditionally defines the HAS_GETHOSTNAME symbol, which
?S:	indicates to the C program that the gethostname() routine may be
?S:	used to derive the host name.
?S:.
?S:d_uname:
?S:	This variable conditionally defines the HAS_UNAME symbol, which
?S:	indicates to the C program that the uname() routine may be
?S:	used to derive the host name.
?S:.
?S:d_phostname:
?S:	This variable conditionally defines the PHOSTNAME symbol, which
?S:	contains the shell command which, when fed to popen(), may be
?S:	used to derive the host name.
?S:.
?S:aphostname:
?S:	Thie variable contains the command which can be used to compute the
?S:	host name. The command is fully qualified by its absolute path, to make
?S:	it safe when used by a process with super-user privileges.
?S:.
?C:HAS_GETHOSTNAME (GETHOSTNAME):
?C:	This symbol, if defined, indicates that the C program may use the
?C:	gethostname() routine to derive the host name.  See also HAS_UNAME
?C:	and PHOSTNAME.
?C:.
?C:HAS_UNAME (UNAME):
?C:	This symbol, if defined, indicates that the C program may use the
?C:	uname() routine to derive the host name.  See also HAS_GETHOSTNAME
?C:	and PHOSTNAME.
?C:.
?C:PHOSTNAME:
?C:	This symbol, if defined, indicates that the C program may use the
?C:	contents of PHOSTNAME as a command to feed to the popen() routine
?C:	to derive the host name.  See also HAS_GETHOSTNAME and HAS_UNAME.
?C:	Note that the command uses a fully qualified path, so that it is safe
?C:	even if used by a process with super-user privileges.
?C:.
?H:#$d_gethname HAS_GETHOSTNAME	/**/
?H:#$d_uname HAS_UNAME		/**/
?H:#$d_phostname PHOSTNAME "$aphostname"	/* How to get the host name */
?H:.
?T:file val call
?LINT:change i_whoami
: see how we will look up host name
echo " "
if false; then
	: dummy stub to allow use of elif
@if HAS_GETHOSTNAME
elif set gethostname val -f d_gethname; eval $csym; $val; then
	echo 'gethostname() found.' >&4
	d_gethname="$define"
	call=gethostname
@end
@if HAS_UNAME
elif set uname val -f d_uname; eval $csym; $val; then
	if ./xenix; then
		$cat <<'EOM'
uname() was found, but you're running xenix, and older versions of xenix
have a broken uname(). If you don't really know whether your xenix is old
enough to have a broken system call, use the default answer.

EOM
		dflt=y
		case "$d_uname" in
		"$define") dflt=n;;
		esac
		rp='Is your uname() broken?'
		. ./myread
		case "$ans" in
		n*) d_uname="$define"; call=uname;;
		esac
	else
		echo 'uname() found.' >&4
		d_uname="$define"
		call=uname
	fi
@end
fi
case "$d_gethname" in
'') d_gethname="$undef";;
esac
case "$d_uname" in
'') d_uname="$undef";;
esac
@if PHOSTNAME || MYHOSTNAME
case "$d_uname$d_gethname" in
*define*)
	dflt=n
	cat <<EOM
 
Every now and then someone has a $call() that lies about the hostname
but can't be fixed for political or economic reasons.  If you wish, I can
@if MYHOSTNAME && PHOSTNAME
pretend $call() isn't there and maybe compile in the hostname or
compute it from the '$phostname' command at run-time.
@elsif MYHOSTNAME
pretend $call() isn't there and maybe compile in the hostname.
@elsif PHOSTNAME
pretend $call() isn't there and maybe compute hostname at run-time
thanks to the '$phostname' command.
@elsif WHOAMI
get the hostname from whomai.h (provided you have one).
@else
simply ignore your host name and use someting like "noname" instead.
@end

EOM
	rp="Shall I ignore $call() from now on?"
	. ./myread
	case "$ans" in
	y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
	esac;;
esac
@end
@if PHOSTNAME || aphostname
?X: Compute the full path name for the command
case "$phostname" in
'') aphostname='';;
*) case "$aphostname" in
	/*) ;;
	*) set X $phostname
		shift
		file=$1
		shift
		file=`./loc $file $file $pth`
		aphostname=`echo $file $*`
		;;
	esac
	;;
esac
@end
@if PHOSTNAME && MYHOSTNAME
case "$d_uname$d_gethname" in
*define*) ;;
*)
	case "$phostname" in
	'') ;;
	*)
		$cat <<EOT

There is no gethostname() or uname() on this system.  You have two
possibilities at this point:

1)  You can have your host name ($myhostname) compiled into $package, which
    lets $package start up faster, but makes your binaries non-portable, or
2)  you can have $package use a
	
	popen("$aphostname","r")

    which will start slower but be more portable.

@	if WHOAMI
Option 1 will give you the option of using whoami.h if you have one.
@	end
If you want option 2 but with a different command, you can edit config.sh at
the end of this shell script.

EOT
		case "$d_phostname" in
		"$define") dflt=n;;
		"$undef")  dflt=y;;
		'')
			case "$d_portable" in
			"$define") dflt=n ;;
			*) dflt=y ;;
			esac;;
		esac
		rp="Do you want your host name compiled in?"
		. ./myread
		case "$ans" in
		n*) d_phostname="$define" ;;
		*) aphostname=''; d_phostname="$undef";;
		esac;;
	esac
	case "$aphostname" in
	'')
@	if WHOAMI
		case "$i_whoami" in
		"$define")
			dflt=y
			$cat <<EOM
 
No hostname function--you can either use the whoami.h file, which has this line:

	`grep sysname $usrinc/whoami.h`

or you can have the name we came up with earlier ($myhostname) hardwired in.
EOM
			rp="Use whoami.h to get hostname?"
			. ./myread
			case "$ans" in
			n*) i_whoami="$undef";;
			esac
			;;
		"$undef")
			$cat <<EOM
No hostname function and no whoami.h -- hardwiring "$myhostname".
EOM
			;;
		esac;;
@	else
		echo 'No hostname function -- hardwiring "'$myhostname'".' >&4;;
@	end
	esac;;
esac
@elsif PHOSTNAME
case "$d_uname$d_gethname" in
*define*) ;;
*)
	case "$phostname" in
	'')
@	if WHOAMI
		case "$i_whoami" in
		"$define")
			$cat <<EOM

No hostname function--we'll use the whoami.h file, which has this line:

	`grep sysname $usrinc/whoami.h`

EOM
			;;
		*) echo "There will be no way for $package to get your hostname." >&4;;
		esac;;
@	else
		echo "There will be no way for $package to get your hostname." >&4;;
@	end
	*)
	echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
		;;
	esac;;
esac
@elsif MYHOSTNAME
case "$d_uname$d_gethname" in
*define*) ;;
*)
@	if WHOAMI
	case "$i_whoami" in
	"$define")
		dflt=y
		$cat <<EOM
 
No hostname function--you can either use the whoami.h file, which has this line:

	`grep sysname $usrinc/whoami.h`

or you can have the name we came up with earlier ($myhostname) hardwired in.
EOM
		rp="Use whoami.h to get hostname?"
		. ./myread
		case "$ans" in
		n*) i_whoami="$undef";;
		esac
		;;
	"$undef")
		echo 'No whoami.h--hardwiring "'$myhostname'".' >&4;;
	esac;;
@	else
	echo 'Hardwiring "'$myhostname'".' >&4;;
@	end
esac
@end
case "$d_phostname" in
'') d_phostname="$undef";;
esac