XCOMM
XCOMM $Id$
XCOMM
XCOMM Imakefile for tcsh 6.08
XCOMM Marc Horowitz, MIT SIPB
XCOMM

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

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

#include "imake.config"

#ifndef HasGcc
# define HasGcc 0
#endif

#ifndef HasGcc2
# define HasGcc2 0
#endif

/* 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

# ifdef UxpArchitecture
#  define ConfigH sysv4
# endif

# ifdef LinuxArchitecture
#  define ConfigH linux
# endif

# ifdef AlphaArchitecture
#  ifndef LinuxArchitecture
#    define ConfigH decosf1
#  endif
#  if !HasGcc
#   define MyCflags -std1 -Olimit 2000
#  else
#   define NoCombineRegs
#  endif
# endif

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

# ifdef NeXTArchitecture
#  define ConfigH mach
# endif

# if defined(SunArchitecture)
#  if (OSMajorVersion == 3)
#   define ConfigH sunos35
#  else
#   if (OSMajorVersion == 4)
#    if (OSMinorVersion == 0)
#     define ConfigH sunos40
#    else /* OSMinorVersion == 1 */
#     if (OSTeenyVersion == 3)
#      define ConfigH sunos413
#     else /* OsTeenyVersion in [0,1,2] */
#      define ConfigH sunos41
#     endif
#    endif
#    define NoCombineRegs
#   else /* OSMajorVersion == 5 */
#    if (OSMinorVersion < 3)
#     if (OSMinorVersion < 2)
#      define ConfigH sol2
#     else
#      define ConfigH sol22
#     endif
#    else
#     if (OSMinorVersion < 4)
#      define ConfigH sol23
#     else
#      if (OSMinorVersion < 6)
#       define ConfigH sol24
#      else
#       define ConfigH sol26
#      endif
#     endif
#    endif
#    define NoCombineRegs
#   endif
#  endif
# endif

# ifdef HPArchitecture
/* For some stupid reason makedepend on HP requires this */
DEPENDFLAGS = -o.o
#  if (OSMajorVersion >= 8)
#   define ConfigH hpux8
#  else
#   define ConfigH hpux7
#  endif
# endif

# ifdef CrayArchitecture
#  define ConfigH cray
# endif

# ifdef SGIArchitecture
#   define ConfigH irix
#   define UseLibBSD
#  if (OSMajorVersion < 5)
#   ifdef you_are_using_yp
#    define UseSunLib 
#   endif
#   if !HasGCC
#    define MyStdc -D__STDC__
#    if SGICompilerMajorVersion < 4
CCOPTIONS=-float	# We don't want -cckr and -prototypes
#    endif
#   endif
#  endif
#  if (OSMajorVersion == 6)
#   if (OSMinorVersion >= 2)
#    undef UseLibBSD
#    define ConfigH irix62
#   endif
#  endif
# endif

# ifdef IBMArchitecture
#  undef UseLibBSD
#  if (SystemV == YES)
#   define ConfigH aix
#   if OSMajorVersion < 3 
#    if OSMinorVersion < 2
#     define UseLibBSD
#    endif
#   endif
#  else
#   define ConfigH bsd
#   define AOSArchitecture
#  endif
# endif


#ifdef AOSArchitecture
#define MyStdc -U__STDC__
#endif

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

# ifdef DguxArchitecture
#  define ConfigH dgux
# endif

# ifdef ConvexArchitecture
#  define ConfigH convex
# endif

# if defined(SQNTArchitecture) || defined(SequentArchitecture)
#  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 mi.varargs.h vms.termcap.c
# endif

# ifdef i386Isc
#  if IscVersion != 202
#   define ConfigH isc
#   define UseLibCposix
#  else
#   define ConfigH isc202
#  endif
# endif /* i386Isc */

# ifdef OpenBSDArchitecture
#  define ConfigH bsd4.4
# endif /* OpenBsdArchitecture */

# ifdef NetBSDArchitecture
#  define ConfigH bsd4.4
# endif /* NetBsdArchitecture */

# ifdef FreeBSDArchitecture
#  define ConfigH bsd4.4
# endif /* FreeBsdArchitecture */

# ifdef i386SVR4Architecture
#  define ConfigH sysv4
#  ifdef DELL
#   define NoCombineRegs
#  endif
# 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 */

/**** libraries ****/

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

#if defined(SQNTArchitecture) || defined(SequentArchitecture)
LIBSQNT=-lsocket -linet -lnsl -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(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 (HasLibCrypt == YES)
LIBCRYPT = -lcrypt
#else
LIBCRYPT =
#endif

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

#if defined(ATTArchitecture) || defined(UseLibDirent)
LIBDIRECTENT = -ldirent
#else
LIBDIRECTENT =
#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
#  if HasGcc2
CC = gcc 
#  else
#   ifdef NoCombineRegs
CC = gcc -finline-functions -fstrength-reduce
#   else
CC = gcc -fcombine-regs -finline-functions -fstrength-reduce
#   endif
#  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

#ifdef AFS
#ifndef AFSDIR
AFSDIR = /usr/afsws
#endif
#ifdef AFS33
#define AFS33LIB -laudit
#else
#define AFS33LIB
#endif
/* Auxilliary libs needed for AFS */
/* Both HPUX and Solaris need the BSD libraries.  We need -lc before
 * the bsd library to avoid using any more of it than is necessary.
 */
#if defined(HPArchitecture)
#define AFSAUXLIB -lc -lBSD
/* This is probably a kludge, but so is imake. */
#else
#if defined(SunArchitecture) && (OSMajorVersion == 5)
#define AFSAUXLIB -lsocket -lnsl -lc -lucb
#else
#define AFSAUXLIB
#endif
#endif /* AFSAUXLIB */
AFSLIB = -L$(AFSDIR)/lib -L$(AFSDIR)/lib/afs -lkauth -lprot -lubik\
	 -lauth -lrxkad -lsys -ldes -lrx -llwp -lcom_err\
	 $(AFSDIR)/lib/afs/util.a AFS33LIB AFSAUXLIB
AFSDEF = -DAFS -I$(AFSDIR)/include
#else
AFSLIB =
AFSDEF =
#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

#ifndef ManSuffix
#define ManSuffix 1
#endif
MANSUFFIX = ManSuffix

#ifdef TcshPath
PATH_TCSHELL = TcshPath
TCSHPATH = -D_PATH_TCSHELL='"$(PATH_TCSHELL)"'
#else
TCSHPATH =
#endif

#ifdef DestBin
TCSH_BINDIR = DestBin
#else
TCSH_BINDIR = $(TCSHTOP)/bin
#endif
#ifdef DestMan
TCSH_MANDIR = DestMan
#else
TCSH_MANDIR = $(TCSHTOP)/man/man$(MANSUFFIX)
#endif

LOCALLIBS =

#ifndef MyCflags
#define MyCflags
#endif

#ifndef MyDefines
#define MyDefines
#endif

#ifndef MyIncludes
#define MyIncludes
#endif

#ifndef MyStdc
#define MyStdc
#endif

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


#ifdef HostType
HOSTTYPE=HostType
HTDEF = -DHOSTTYPE='"$(HOSTTYPE)"'
#else
HTDEF =
#endif

DEFINES = $(TCSHPATH) $(HESDEF) $(AFSDEF) $(HTDEF) MyDefines MyCflags MyStdc
INCLUDES = -I. MyIncludes
#ifdef MyLibs
LDLIBS = MyLibs
#endif

SUF = o
VERSION = 6.08

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 tw.color.c
TWOBJS=	tw.help.${SUF} tw.init.${SUF} tw.parse.${SUF} tw.spell.${SUF} \
	tw.comp.${SUF} tw.color.${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.defs.${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.std 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 \
	snames.h host.defs gethost.c tcsh.man2html Makefile.in configure.in \
	Makefile.win32
CONFSRCS=config/[a-z]*


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

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

AllTarget(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) ${DEFINES} -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: config_f.h
	cp config/ConfigH config.h

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

tar.Z:
	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 cf - nls/Makefile nls/?*/set?* | (cd tcsh-${VERSION}; tar xpf -)
	tar cvf - tcsh-${VERSION} | compress > tcsh-${VERSION}.tar.Z
	rm -rf tcsh-${VERSION}

tar.gz:
	rm -f tcsh-${VERSION}.tar.gz
	rm -rf tcsh-${VERSION} 
	mkdir tcsh-${VERSION} tcsh-${VERSION}/config
	cp ${ALLSRCS} tcsh-${VERSION}
	cp ${CONFSRCS} tcsh-${VERSION}/config
	tar cf - nls/Makefile nls/?*/set?* | (cd tcsh-${VERSION}; tar xpf -)
	tar cvf - tcsh-${VERSION} | gzip > tcsh-${VERSION}.tar.gz
	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
	tar cf - nls/Makefile nls/?*/set?* | (cd tcsh-${VERSION}; tar xpf -)
	MAKESHAR -v -n tcsh-${VERSION} tcsh-${VERSION} \
		 tcsh-${VERSION}/?* tcsh-${VERSION}/config/?* \
		 tcsh-${VERSION}/?*/set?*
	rm -rf tcsh-${VERSION}

catalogs:
	@(cd nls; make catalogs)
	
world:
	$(MAKE) clean ; $(MAKE) depend ; $(MAKE) tcsh ; $(MAKE) install

clean::
	rm -f ed.defns.h sh.err.h tc.const.h config.h tc.defs.*
	rm -f tcsh.*.m tcsh.*.cat

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

tc.defs.${SUF}:	tc.defs.c sh.h

tc.defs.c:	gethost host.defs
	@rm -f $@
	@echo "/* Do not edit this file, make creates it */" > $@
	./gethost host.defs >> $@

ALIB=$(HESLIB) $(AFSLIB) $(SYSLIBS)
AINC=ed.defns.h sh.err.h tc.const.h sh.h

NormalProgramTarget(tcsh, $(OBJS), $(AINC), $(LOCALLIBS), $(ALIB))
NormalProgramTarget(gethost, gethost.${SUF}, $(AINC), $(LOCALLIBS), $(ALIB))

InstallProgram(tcsh,$(TCSH_BINDIR))
InstallManPage(tcsh,$(TCSH_MANDIR))
DependTarget()
