/**/#
/**/# $Id: Imakefile,v 1.4 1995/08/13 20:49:26 ghudson Exp $
/**/#
/**/# Imakefile for for tcsh 6.03
/**/# Marc Horowitz, MIT SIPB
/**/#

#ifdef DestDir
#undef DestDir
#endif
#ifdef ManSuffix
#undef ManSuffix
#endif

/* All config options go in a separate file. */

#include "imake.config"

/* This is a giant conditional block.  It should be set up right for
platforms which are in here, but it may need to be changed for new
ones.  Please send in your fixes and additions! */

/**** tcsh configuration defines ****/

/* specific platforms */

#ifndef ConfigH
# ifdef UltrixArchitecture
#  define ConfigH ultrix
# endif

# if defined(VaxArchitecture) && !defined(UltrixArchitecture)
#  define ConfigH bsd
# endif

# ifdef NeXTArchitecture
#  define ConfigH mach
# endif

# if defined(NetBSDArchitecture) || defined(FreeBSDArchitecture)
#  define ConfigH bsd4.4
# endif

#ifndef SOLARIS
# if defined(SunArchitecture)
#  if (OSMajorVersion == 3)
#   define ConfigH sos3
#  else /* OSMajorVersion == 4 */
#   if (OSMinorVersion == 0)
#    define ConfigH sos40
#   else /* OSMinorVersion == 1 */
#    if (OSTeenyVersion == 3)
#     define ConfigH sos413
#    else /* OsTeenyVersion in [0,1,2] */
#     define ConfigH sos41
#    endif
#   endif
#  endif
# endif
#else
#define ConfigH sol2ath
#endif

# ifdef HPArchitecture
#  if (OSMajorVersion == 8)
#   define ConfigH hpux8
#  else
#   define ConfigH hpux7
#  endif
# endif

# ifdef CrayArchitecture
#  define ConfigH cray
# endif

# ifdef SGIArchitecture
#  define ConfigH sgi
#  ifdef you_are_using_yp
#   define UseSunLib 
#  endif
# endif

# ifdef IBMArchitecture
#  if (SystemV == YES)
#   define ConfigH aix
#  else
#   define ConfigH bsd
#   define AOSArchitecture
#  endif
# endif

# if defined(MipsBsdArchitecture) || defined(MipsSysvArchitecture)
#  define ConfigH mips
# endif

# ifdef DguxArchitecture
#  define ConfigH dgux
# endif

# ifdef ConvexArchitecture
#  define ConfigH convex
# endif

# ifdef SQNTArchitecture
#  define ConfigH sequent
# endif

# ifdef MacIIArchitecture
#  define ConfigH mac2
# endif

# ifdef MinixArchitecture
/* Maybe conditional on MACH? */
SYSSRCS=mi.termios.c mi.wait.h mi.varargs.h
SYSOBJS=mi.termios.${SUF}
EXTF=ma.setp.c vms.termcap.c
# else
/* Maybe conditional on MACH? */
SYSSRCS=ma.setp.c
SYSOBJS=ma.setp.${SUF}
EXTF=mi.termios.c mi.wait.h vms.termcap.c
# endif
#endif /* !ConfigH */

/* generic os's */

#ifndef ConfigH

#if (SystemV == YES)
#define ConfigH sysv3
#else
/* why this as a default?  Why not? */
#define ConfigH bsd
#endif

#endif /* !ConfigH */

/*
 * Concat3 - concatenates three strings.
 */
#ifndef Concat3
# if defined(__STDC__) && !defined(UnixCpp)
#  define XConcat3(a,b,c) a##b##c
#  define Concat3(a,b,c) XConcat3(a,b,c)
# else
#  define Concat3(a,b,c) a/**/b/**/c
# endif
#endif

#CONFIGH = Concat3(-DCONFIGH=\"config/config.,ConfigH,\")

#ifdef TcshPath
TCSHPATH = Concat3(-D_PATH_TCSHELL=\",TcshPath,\")
#else
TCSHPATH =
#endif

/**** libraries ****/

#if (SystemV == NO) || defined(HPArchitecture) || defined(SQNTArchitecture) || \
	defined(MacIIArchitecture) || defined(UseLibTermcap)
LIBTERMCAP = -ltermcap
#else
LIBTERMCAP =
#endif

#if defined(SQNTArchitecture)
LIBSQNT=-lseq
#endif

/* This may not be good enough - I don't have access to enough systems
to really test it. */
#if (SystemV == YES) || defined(UseLibCurses) && !defined(HPArchitecture)
LIBCURSES = -lcurses
#else
LIBCURSES =
#endif

#if defined(UseLibNet)
LIBNET = -lnet
#else
LIBNET =
#endif

#if defined(UseLibSocket)
LIBSOCKET = -lsocket
#else
LIBSOCKET =
#endif

#if defined(SGIArchitecture) || defined(_IBMR2) || \
	(!defined(RtArchitecture) && defined(AIXArchitecture)) || \
	defined(UseLibBSD)
LIBBSD = -lbsd
#else
LIBBSD = 
#endif

#if (defined(SGIArchitecture) && \
     (OSMajorVersion == 3) && (OSMinorVersion == 3)) || \
	defined(UseLibC_S)
LIBC_S = -lc_s
#else
LIBC_S =
#endif

#if defined(UseLibSun)
LIBSUN = -lsun
#else
LIBSUN =
#endif

#if defined(UseLibCposix)
LIBCPOSIX = -lcposix
#else
LIBCPOSIX =
#endif

#if defined(UseLibInet)
LIBINET = -linet
#else
LIBINET =
#endif

#if defined(UseLibDir)
LIBDIRECT = -ldir
#else
LIBDIRECT = 
#endif

#if defined(UseLibX)
LIBX = -lx
#else
LIBX =
#endif

#if defined(UseLibIntl)
LIBINTL = -lintl
#else
LIBINTL =
#endif

#if defined(MacIIArchitecture) || defined(UseLibPosix)
LIBPOSIX = -lposix
#else
LIBPOSIX =
#endif

#if defined(ATTArchitecture) || defined(UseLibDirent)
LIBDIRECTENT = -ldirent
#else
LIBDIRECTENT =
#endif

#if defined(NetBSDArchitecture) || defined(UseLibCrpyt)
LIBCRYPT = -lcrypt
#else
LIBCRYPT =
#endif

# The order here is significant.  Although nothing uses all of these, 
# some platforms which use more than one do care about the order.

SYSLIBS = $(LIBPOSIX) $(LIBDIRECTENT) $(LIBTERMCAP) $(LIBCURSES) \
	$(LIBNET) $(LIBINTL) $(LIBSOCKET) $(LIBSUN) $(LIBBSD) $(LIBCPOSIX) \
	$(LIBINET) $(LIBDIRECT) $(LIBX) $(LIBC_S) $(LIBSQNT) $(LIBCRYPT)

/* Past here, nothing should need to be changed to compile on a different
platform, unless you have a really weird architecture. */

#ifdef MyCC
CC = MyCC
#else
# if HasGcc || HasGCC
#  ifdef HasGcc2
#ifdef SOLARIS
CC = gcc -traditional -B/usr/gcc/lib/ -I/usr/gcc/include
#else
CC = gcc 
#endif
#  else
CC = gcc -fcombine-regs -finline-functions -fstrength-reduce
#  endif
# else
CC = cc
# endif
#endif

#ifdef HESIOD
HESLIB = -L/usr/athena/lib -lhesiod
/* it seems to me that the -I shouldn't be necessary, but there seems
to be a bug in the Imake stuff, so here it is. */
HESDEF = -DHESIOD -I/usr/athena/include
#else
HESLIB =
HESDEF =
#endif

/* This is encore specific, but I don't know what encore's #define is,
and it shouldn't hurt to have it here, so here it is */
PARALLEL=12				# Make the multi-max run fast.

#ifndef TcshTop
#define TcshTop /usr/local
#endif

TCSHTOP = TcshTop
MANSUFFIX = 1
#ifndef ManSuffix
#define ManSuffix $(MANSUFFIX)
#endif
#ifdef DestBin
BINDIR = DestBin
#else
BINDIR = $(TCSHTOP)/bin
#endif
#ifdef DestMan
MANDIR = DestMan
#else
MANDIR = $(TCSHTOP)/man/man$(MANSUFFIX)
#endif

#ifndef MyCflags
#define MyCflags
#endif

#ifndef MyDefines
#define MyDefines
#endif

#ifndef MyIncludes
#define MyIncludes
#endif

#ifndef MyLibs
#define MyLibs
#endif

#ifdef CDebugFlags
CDEBUGFLAGS = CDebugFlags
#else
# ifdef HasGcc2
CDEBUGFLAGS = -O2
# else
CDEBUGFLAGS = -O
# endif
#endif

#ifdef AOSArchitecture
#define UStdc -U__STDC__
#else
#define UStdc
#endif

#ifdef HostType
HTDEF = Concat3(-DHOSTTYPE=\",HostType,\")
#else
HTDEF =
#endif

DEFINES = $(TCSHPATH) $(HESDEF) $(HTDEF) MyDefines MyCflags UStdc
INCLUDES = -I. MyIncludes
LDLIBS = MyLibs

SUF = o
VERSION = 6.03

SHSRCS=	sh.c sh.dir.c sh.dol.c sh.err.c sh.exec.c sh.char.c \
	sh.exp.c sh.file.c sh.func.c sh.glob.c sh.hist.c sh.init.c \
	sh.lex.c sh.misc.c sh.parse.c sh.print.c sh.proc.c sh.sem.c \
	sh.set.c sh.time.c sh.char.h sh.dir.h sh.proc.h sh.h \
	sh.decls.h glob.c glob.h ${SYSSRCS}
SHOBJS=	sh.${SUF} sh.dir.${SUF} sh.dol.${SUF} sh.err.${SUF} sh.exec.${SUF} \
	sh.char.${SUF} sh.exp.${SUF} sh.func.${SUF} sh.glob.${SUF} \
	sh.hist.${SUF} sh.init.${SUF} sh.lex.${SUF} sh.misc.${SUF} \
	sh.parse.${SUF} sh.print.${SUF} sh.proc.${SUF} sh.sem.${SUF} \
	sh.set.${SUF} sh.time.${SUF} glob.${SUF} ${SYSOBJS}

TWSRCS= tw.decls.h tw.h tw.help.c tw.init.c tw.parse.c tw.spell.c \
	tw.comp.c
TWOBJS=	tw.help.${SUF} tw.init.${SUF} tw.parse.${SUF} tw.spell.${SUF} \
	tw.comp.${SUF}

EDSRCS= ed.chared.c ed.decls.h ed.defns.c ed.h ed.init.c ed.inputl.c \
	ed.refresh.c ed.screen.c ed.xmap.c ed.term.c ed.term.h
EDOBJS=	ed.chared.${SUF} ed.refresh.${SUF} ed.screen.${SUF} ed.init.${SUF} \
	ed.inputl.${SUF} ed.defns.${SUF} ed.xmap.${SUF} ed.term.${SUF}

TCSRCS= tc.alloc.c tc.bind.c tc.const.c tc.decls.h tc.disc.c \
	tc.func.c tc.os.c tc.os.h tc.printf.c tc.prompt.c \
	tc.sched.c tc.sig.c tc.sig.h tc.str.c sh.types.h tc.vers.c tc.wait.h \
	tc.who.c tc.h
TCOBJS=	tc.alloc.${SUF} tc.bind.${SUF} tc.const.${SUF} tc.disc.${SUF} \
	tc.func.${SUF} tc.os.${SUF} tc.printf.${SUF} \
	tc.prompt.${SUF} tc.sched.${SUF} tc.sig.${SUF} tc.str.${SUF} \
	tc.vers.${SUF} tc.who.${SUF} 

MISCF = Makefile Fixes MAKEDIFFS MAKESHAR NewThings README FAQ \
	WishList config_f.h eight-bit.me glob.3 patchlevel.h \
	pathnames.h tcsh.man Ported src.desc Imakefile imake.config \
	README.imake complete.tcsh vmsreadme.txt Makefile.vms termcap.vms
CONFSRCS=config/config.*


SRCS = $(SHSRCS) $(TWSRCS) $(EDSRCS) $(TCSRCS)
OBJS = $(SHOBJS) $(TWOBJS) $(EDOBJS) $(TCOBJS)

ALLSRCS= $(MISCF) $(SRCS) $(EXTF)

all:: tcsh

ed.defns.h: config.h ed.defns.c
	@rm -f $@
	@echo '/* Do not edit this file, make creates it. */' > $@
	@echo '#ifndef _h_ed_defns' >> $@
	@echo '#define _h_ed_defns' >> $@
	egrep '[FV]_' ed.defns.c | egrep '^#define' >> $@
	@echo '#endif /* _h_ed_defns */' >> $@

sh.err.h: config.h sh.err.c
	@rm -f $@
	@echo '/* Do not edit this file, make creates it. */' > $@
	@echo '#ifndef _h_sh_err' >> $@
	@echo '#define _h_sh_err' >> $@
	egrep 'ERR_' sh.err.c | egrep '^#define' >> $@
	@echo '#endif /* _h_sh_err */' >> $@

tc.const.h: config.h tc.const.c
	@rm -f $@
	@echo '/* Do not edit this file, make creates it. */' > $@
	@echo '#ifndef _h_tc_const' >> $@
	@echo '#define _h_tc_const' >> $@
	${CC} -E $(INCLUDES) ${DFLAGS} -D_h_tc_const tc.const.c | \
	    grep 'Char STR' | \
	    sed -e 's/Char \([a-zA-Z0-9_]*\)\(.*\)/extern Char \1[];/' | \
	    sort >> $@
	@echo '#endif /* _h_tc_const */' >> $@

config.h:
	@cp config/config.ConfigH config.h

$(OBJS): sh.err.h tc.const.h ed.defns.h

tar:
	rm -f tcsh-${VERSION}.tar.Z
	rm -rf tcsh-${VERSION} 
	mkdir tcsh-${VERSION} tcsh-${VERSION}/config
	cp ${ALLSRCS} tcsh-${VERSION}
	cp ${CONFSRCS} tcsh-${VERSION}/config
	tar cvf - tcsh-${VERSION} | compress > tcsh-${VERSION}.tar.Z
	rm -rf tcsh-${VERSION}

shar:
	rm -f tcsh-*.shar
	rm -rf tcsh-${VERSION} 
	mkdir tcsh-${VERSION} tcsh-${VERSION}/config
	cp ${ALLSRCS} tcsh-${VERSION}
	cp ${CONFSRCS} tcsh-${VERSION}/config
	MAKESHAR -v -n tcsh-${VERSION} tcsh-${VERSION} \
		 tcsh-${VERSION}/?* tcsh-${VERSION}/config/?*
	rm -rf tcsh-${VERSION}

world:
	make clean ; make depend ; make tcsh ; make install

clean::
	rm -f ed.defns.h sh.err.h tc.const.h config.h

depend:: config.h ed.defns.h sh.err.h tc.const.h $(SRCS)

NormalProgramTarget(tcsh, $(OBJS), ed.defns.h sh.err.h tc.const.h, \
			/*LOCALLIBS*/, $(HESLIB) $(SYSLIBS))

InstallProgram(tcsh, $(BINDIR));
InstallNonExec(tcsh.man, $(MANDIR)/tcsh.1);
DependTarget()
