# $Id: Makefile,v 1.20 1996/05/28 13:58:30 skip Exp $
#
#### Compiler settings for different systems

DIR_irix = irix
CC_irix = cc
CPLUSPLUS_irix = CC
FLAGS_irix_KERNEL = -DKERNEL -non_shared -coff -Wx,-G 0 -Wc,-pic0 -r -d -c -Wc,-jalr -fullwarn -I`pwd`/../irix #-DSKIP_ALLOCDEBUG
FLAGS_irix_USER = -fullwarn -I`pwd`/../skipd -I`pwd`/../irix
FLAGS_irix_CERT = -g -fullwarn
LIBS_irix_USER = -lnsl

DIR_irixmp = irix
CC_irixmp = cc
CPLUSPLUS_irixmp = CC
FLAGS_irixmp_KERNEL = -DKERNEL -DMP -D_MP_NETLOCKS -non_shared -coff -Wx,-G 0 -Wc,-pic0 -r -d -c -Wc,-jalr -fullwarn -I`pwd`/../irix #-DSKIP_ALLOCDEBUG
FLAGS_irixmp_USER = -fullwarn -I`pwd`/../skipd -I`pwd`/../irix
FLAGS_irixmp_CERT = -g -fullwarn
LIBS_irixmp_USER = -lnsl

DIR_next = next
CC_next = cc
CPLUSPLUS_next = cc		# is this correct? -mh
FLAGS_next_KERNEL = -DKERNEL -DMACH -D_POSIX_SOURCE -Wall -I`pwd`/../next
FLAGS_next_USER = -Wall -D_POSIX_SOURCE -I`pwd`/../skipd -I`pwd`/../next
FLAGS_next_CERT = $(FLAGS_NEXT_USER)
LIBS_next_USER =

DIR_netbsd = netbsd
CC_netbsd = cc
CPLUSPLUS_netbsd = g++
FLAGS_netbsd_KERNEL = -DKERNEL -Wall -I/sys -I/sys/arch -I`pwd`/../netbsd #-DSKIP_ALLOCDEBUG
FLAGS_netbsd_USER = -Wall -I`pwd`/../skipd -I`pwd`/../netbsd
FLAGS_netbsd_CERT = -g -Wall
LIBS_netbsd_USER =

DIR_solaris = solaris
CC_solaris = gcc
CPLUSPLUS_solaris = g++
FLAGS_solaris_KERNEL = -DKERNEL -Wall -mv8 -pipe -I`pwd`/../solaris
FLAGS_solaris_USER = -Wall -DSOLARIS2 -mv8 -pipe -I`pwd`/../skipd -I`pwd`/../solaris
FLAGS_solaris_CERT = $(FLAGS_solaris_USER)
LIBS_solaris_USER = -lsocket -lnsl

DIR_linux = linux
CC_linux = gcc
CPLUSPLUS_linux = g++
FLAGS_linux_KERNEL = -fomit-frame-pointer -fno-strength-reduce -O2 -DKERNEL -D__KERNEL__ -DMODULE -Wall -pipe -I`pwd`/../linux -I/usr/src/linux/include
FLAGS_linux_USER = -g -O2 -Wall -pipe -I/usr/include -I`pwd`/../skipd -I`pwd`/../linux -I/usr/src/linux/include
FLAGS_linux_CERT = $(FLAGS_linux_USER)
LIBS_linux_USER =

#if you are forced to use the SUN compiler
#DIR_solaris = solaris
#CC_solaris = cc
#CPLUSPLUS_solaris = CC
#FLAGS_solaris_KERNEL = -D__svr4__ -DKERNEL -I`pwd`/../solaris
#FLAGS_solaris_USER = -D__svr4__ -I`pwd`/../skipd -I`pwd`/../solaris
#FLAGS_solaris_CERT = $(FLAGS_solaris_USER)
#LIBS_solaris_USER = -lsocket -lnsl

#### RCS settings

COFLAGS = -q -M
RCSCLEAN = rcsclean

#### Rules

autoconfig:	configure
	@$(MAKE) `./configure system`

.PHONY:	autoconfig

.PHONY: unknown
unknown:
	@echo "Could not determine system, please specify..."
	@$(MAKE) usage

.PHONY: usage
usage:	
	@echo ""
	@echo "make ........................... build ENskip for this system"
	@echo "make irix ...................... build ENskip for Irix 5.3"
	@echo "make irixmp .................... build ENskip for Irix 5.3 MP"
	@echo "make next ...................... build ENskip for NextStep"
	@echo "make netbsd .................... build ENskip for NetBSD"
	@echo "make solaris ................... build ENskip for Solaris >= 2.4"
	@echo "make linux...................... build ENskip for Linux"
	@echo ""
	@echo "make clean ..................... clean the source"
	@echo "make rcsclean .................. clean all unmodified sources"
	@echo "make checkout .................. check out all sources"
	@echo "make dist ...................... build source distribution, no RCS"
	@echo "make fulldist .................. source distribution w/ bn/gmp"
	@echo ""
	@echo "try setenv REVISION '-sStab' or '-r<Rev>' to checkout old stuff"
	@echo ""

.PHONY: irix irixmp next netbsd solaris linux
irix irixmp next netbsd solaris linux::	
	$(MAKE) 'CC=$$(CC_$@)' 'CPLUSPLUS=$$(CPLUSPLUS_$@)' 'FLAGS_cert=$$(FLAGS_$@_CERT)' 'FLAGS_USER=$$(FLAGS_$@_USER)' 'FLAGS_KERNEL=$$(FLAGS_$@_KERNEL)' 'DIR=$$(DIR_$@)' 'LIBS_USER=$$(LIBS_$@_USER)' all

# Java is currently only supported for Solaris
#solaris::
#	-cd sconfig && $(MAKE) CC="$(CC_$@)" CPLUSPLUS="$(CPLUSPLUS_$@)" FLAGS="$(FLAGS_$@_USER)" DIR="$(DIR_$@)" LIBS_USER="$(LIBS_$@_USER)" all

all:	endian
	@#cd include && $(MAKE) checkout
	cd lib && $(MAKE) CC="$(CC)" CPLUSPLUS="$(CPLUSPLUS)" FLAGS_USER="$(FLAGS_USER) `../endian`" FLAGS_KERNEL="$(FLAGS_KERNEL) `../endian`" all
	cd cert && $(MAKE) CC="$(CC)" CPLUSPLUS="$(CPLUSPLUS)" FLAGS="$(FLAGS_cert) `../endian`" LIBS_USER="$(LIBS_USER)" all
	cd skipd && $(MAKE) CC="$(CC)" CPLUSPLUS="$(CPLUSPLUS)" FLAGS="$(FLAGS_USER) `../endian`" LIBS_USER="$(LIBS_USER)" all
	cd $(DIR) && $(MAKE) CC="$(CC)" CPLUSPLUS="$(CPLUSPLUS)" FLAGS="$(FLAGS_KERNEL) `../endian`" all

.PHONY: load unload uninstall boot unboot
load unload uninstall boot unboot:	configure
	@cd `./configure system`; $(MAKE) $@

.PHONY: install
install:	autoconfig configure
	@cd `./configure system`; $(MAKE) $@

.PHONY: depend
depend:	configure
	cd lib; $(MAKE) kernel; `../configure mkdepend` -I../include -I../`../configure system` kernel/*.c 2>/dev/null
	cd lib; $(MAKE) user; `../configure mkdepend` -I../include -I../skipd user/*.c 2>/dev/null
	cd cert; `../configure mkdepend` -I../include -I../`../configure system` *.c 2>/dev/null
	cd skipd; `../configure mkdepend` -I../include -I../`../configure system` *.c 2>/dev/null
	cd `./configure system`; `../configure mkdepend` -I../include -I../`../configure system` *.c 2>/dev/null

.PHONY: clean rcsclean checkout
clean rcsclean checkout::
	cd include && $(MAKE) $@
	cd next && $(MAKE) $@
	cd linux && $(MAKE) $@
	cd netbsd && $(MAKE) $@
	cd solaris && $(MAKE) $@
	cd irix && $(MAKE) $@
	cd lib && $(MAKE) $@
	cd skipd && $(MAKE) $@
	cd cert && $(MAKE) $@
	cd sconfig && $(MAKE) $@

clean::	
	rm -f endian

rcsclean::
	$(RCSCLEAN)

checkout::
	-$(CO) $(COFLAGS) $(REVISION) RCS/* < /dev/null

.PHONY: dist fulldist
dist fulldist:: clean checkout

fulldist::
	cd cert && $(MAKE) mathdist

TAROPTS_fulldist=h
dist fulldist::
	rm -f dist/skip.$@.tar.gz
	cd .. && \
	  find skip \( -name dist -o -name RCS -o -name old -o -name obsolete \) -print > /tmp/skip.exclude && \
	  tar cvfX${TAROPTS_$@} - /tmp/skip.exclude skip | gzip > skip/dist/skip.$@.tar.gz
	rm -f /tmp/skip.exclude



