wsh/
wsh/binsrc/
wsh/docs/help/
wsh/docs/old/
wsh/etc/
wsh/src/util/
#include	<sys/types.h>
#include	<stdio.h>
#include	<sys/stat.h>
#include	<signal.h>

/*#define DEBUG		/* Provides extra debugging info */

int exists(file)
char *file;
{
	struct stat statbuf;

	if ( stat(file, &statbuf) == 0 )
		return(1);
	else
		return(0);
}


main()
{
	int irix=0;
	char cflags[BUFSIZ], ldflags[BUFSIZ];
	char line[BUFSIZ];
	FILE *makefile;

	if ( exists("Makefile") )
	{
		fprintf(stderr, "Makefile already exists.  Continue?  [y/n] ");
		fgets(line, BUFSIZ-1, stdin);
		if ( line[0] == 'y' )
			printf("Continuing...\n");
		else
		{
			printf("Configuration aborted. Exiting.\n");
			exit(0);
		}
	}

	if ( (makefile=fopen("Makefile", "w")) == NULL )
	{
		perror("Can't create Makefile");
		printf("Configuration aborted. Exiting.\n");
		exit(2);
	}

#ifdef DEBUG
	sprintf(cflags, " -g -DDEBUG");
#else
	sprintf(cflags, " -O");
#endif

	if ( grep("/usr/include/unistd.h", "_getpty") )
	{
		strcat(cflags, " -DIRIX");
		irix=1;
	}
	if ( grep("/usr/include/utmp.h", "ut_host") ) 
		strcat(cflags, " -DHAVE_UTHOST");
	if ( exists("/usr/include/arpa/telnet.h") )
		strcat(cflags, " -DHAVE_ARPA_TELNET");
	if ( exists("/usr/include/termio.h") )
		strcat(cflags, " -DHAVE_TERMIO_H");
	if ( exists("/usr/include/sys/bsdtty.h") )
		strcat(cflags, " -DHAVE_BSDTTY_H");
	/* Check for ioctl compatibility.  (FreeBSD) */
	if ( exists("/usr/include/sys/ioctl_compat.h") )
		strcat(cflags, " -DNEED_COMPAT_H");
	if ( exists("/usr/include/sys/inet.h") )
		strcat(cflags, " -DNEED_INET_H");
	if ( exists("/usr/include/sys/select.h") )
		strcat(cflags, " -DNEED_SELECT_H");
	else
	{
#ifdef SIGTSTP
		if ( ! irix )
			strcat(cflags, " -DSHORT_IAC");
#else
		/* AIX uses 255 instead of -1 for IAC */ ;
#endif
	}

	if ( exists("/usr/lib/libnet.a") )
		strcat(ldflags, " -lnet");
	if ( exists("/usr/lib/libnsl_s.a") )
		strcat(ldflags, " -lnsl_s");

	/* Solaris 2.1 */
	if ( exists("/usr/lib/libsocket.a") )
	{
		strcat(ldflags, " -lsocket");
		strcat(cflags, " -DSHORT_IAC -DSOLARIS");
	}
	if ( exists("/usr/lib/libnsl.a") )
		strcat(ldflags, " -lnsl");
	if ( exists("/usr/lib/libsun.a") )
		strcat(ldflags, " -lsun");  /* IRIX needs this for getpw*() */
	if ( exists("/usr/lib/libshadow.a") ) {
		printf("You may need to define NEEDSHADOW in login.h\n");
		strcat(ldflags, " -lshadow");
	}

	fprintf(makefile,"# This Makefile has been generated from the Configure script.\n# Shareware copyright 1993, by Sam Lantinga\n\n");
	fprintf(makefile, "\nCFLAGS = %s\nLIBS = %s\n\n", cflags, ldflags);
	fprintf(makefile,"#\n# Internet stream version (TCP protocol).\n#\n\n");
#ifdef SIGTSTP
	fprintf(makefile, "STUFF = tcpserv\n\n");
#else
	fprintf(makefile, "STUFF = tcpserv\n\n");
#endif

	fprintf(makefile, "tcp:\t$(STUFF)\n\n");
	fprintf(makefile, "bgtcli.o tcpserv.o telnet.o: tcp.h\n\n");
	fprintf(makefile, "bgtcli: bgtcli.o tty.o telnet.o\n\t$(CC) -o $@ bgtcli.o tty.o telnet.o $(LIBS)\n\n");

#ifdef SIGTSTP
	fprintf(makefile, 
"connect: connect.o tty.o\n\t$(CC) -o $@ connect.o tty.o\n\n");
#endif
	fprintf(makefile, "tcpserv: tcpserv.o sync-rw.o tty.o telnet.o login.o\n\t$(CC) -o $@ tcpserv.o sync-rw.o tty.o telnet.o login.o $(LIBS)\n\n");

	fprintf(makefile, 
"daemonize: daemonize.o tty.o\n\t$(CC) -o $@ daemonize.o tty.o\n\n");
	
	fprintf(makefile, "#\n# Misc. stuff\n#\n\n");
	fprintf(makefile, 
		"hostinfo:\thostinfo.o\n\t$(CC) -o $@ hostinfo.o $(LIBS)\n");

	fprintf(makefile, "\nclean:\n\t-rm -f tmp* *.o \n\t-rm -f core $(STUFF) hostinfo Makefile\n\n");
	fprintf(makefile, "backup: tcpserv bgtcli connect\n\tmv $(STUFF) ${HOME}/shprogs/; make clean; cd ..; tar -cf tcp-s.tar tcp-s\n");

	fclose(makefile);
	exit(0);
}


/* Yeesh.  I have to write a word grep function.... */

int grep(file, word)
char *file;
char *word;
{
	FILE *fp;
	char *wptr, *ptr, buffer[BUFSIZ];

	if ( (fp=fopen(file, "r")) == NULL )
		return(0);
	ptr=word;

	while ( fgets(buffer, BUFSIZ-1, fp) != NULL )
	{
		for ( wptr=buffer; *wptr; ++wptr)
		{
			if ( *wptr == *ptr )
			{
				++ptr;
				if ( *ptr == '\0' )
				{
					(void) fclose(fp);
					return(1);
				}
			}
			else
				ptr=word;
		}
	}
	(void) fclose(fp);
	return(0);
}