#
# top level makefile for W
# (C) 1994,95,96 by Torsten Scherer (TeSche)
# itschere@techfak.uni-bielefeld.de
#

NAME = w1r4pl0

ifeq (.config,$(wildcard .config))
include .config
endif

all: .config
	@date > .started
	@echo ; $(MAKE) -C lib
	@echo ; $(MAKE) -C server
	@echo ; $(MAKE) -C apps
	@echo ; $(MAKE) -C games
#	@echo ; $(MAKE) -C demos
#	@echo ; $(MAKE) -C w2xlib
#	@echo ; $(MAKE) -C toolkit
	@echo
	@echo "make started/finished at:"
	@cat .started ; rm -f .started ; date
	@echo ""

install:
	@echo ; $(MAKE) -C lib install
	@echo ; $(MAKE) -C server install
	@echo ; $(MAKE) -C apps install
	@echo ; $(MAKE) -C games install
	@echo ; $(MAKE) -C fonts install
	@echo ; $(MAKE) -C man install
ifdef LIBDIR
	$(INSTALL) -m 755  wrc $(LIBDIR)
	$(INSTALL) -m 644  wconfig $(LIBDIR)
endif
#	@echo ; $(MAKE) -C demos install
#	@echo ; $(MAKE) -C w2xlib install
#	@echo ; $(MAKE) -C toolkit install
	@echo ""
	@echo ""

# SVGALIB nees wserver to be suid root to access screen and mouse
# and wterm has to be suid root too to be able to write wtmp etc.
set-rights:
	chown root.root $(BINDIR)/wserver $(BINDIR)/wterm
	chmod u+s $(BINDIR)/wserver $(BINDIR)/wterm
	@echo "wserver and wterm are now suid root!"

clean:
	@echo ; $(MAKE) -C lib clean
	@echo ; $(MAKE) -C server clean
	@echo ; $(MAKE) -C apps clean
	@echo ; $(MAKE) -C games clean
	@echo ; $(MAKE) -C demos clean
#	@echo ; $(MAKE) -C w2xlib clean
#	@echo ; $(MAKE) -C toolkit clean
	@$(RM) .started

veryclean:
	@echo ; $(MAKE) -C lib veryclean
	@echo ; $(MAKE) -C server veryclean
	@echo ; $(MAKE) -C apps veryclean
	@echo ; $(MAKE) -C games veryclean
	@echo ; $(MAKE) -C demos veryclean
#	@echo ; $(MAKE) -C w2xlib veryclean
#	@echo ; $(MAKE) -C toolkit veryclean
	@$(RM) .started .config


ifeq (.config,$(wildcard .config))
package: veryclean
	tar -zcvf ../$(NAME).tgz -C ../ $(NAME)/
else
package:
	tar -zcvf ../$(NAME).tgz -C ../ $(NAME)/
endif

#
# some rules to configurate to your setup. it uses 'uname' to
# determine your OS and generate some defines for the subsequent
# makefiles. if you port W to a new platform you must add a new
# section here. you *must* define ADDCFLAGS to something!
#

# MiNT's "uname" seems to always print a \n even with -n
ARCH = $(shell echo -n `uname -s`)

# for linux get also the machine type (Motorola, Intel, Sparc, Alpha...)
ifeq ($(ARCH),Linux)
ARCH = $(shell uname -s)-$(shell uname -m)
endif

# this is my primary target. I always build all graphic drivers. Even if I
# can't run them I want to see if they compile. Also this entry should show
# you what variables exist and what they may eventually mean.

Linux-m68k:
	@echo "ARCH = "$(ARCH) > .config
	@echo "# if you want a shared library, change libW.a below" >> .config
	@echo "# to libW.so, recompile, install and run ldconfig." >> .config
	@echo "WLIB = libW.a" >> .config
	@echo "WTLIB = libWt.a" >> .config
	@echo "RANLIB = ranlib" >> .config
	@echo "AR = ar r" >> .config
	@echo "PACKEDMONO = 1" >> .config
	@echo "PACKEDCOLORMONO = 1" >> .config
	@echo "PACKEDCOLOR = 1" >> .config
	@echo "DIRECT8 = 1" >> .config
	@echo "ADDCFLAGS = -pipe -Wall -O2 -fomit-frame-pointer" >> .config
#	@echo "ADDLDFLAGS =" >> .config
#	@echo "MATHCFLAGS =" >> .config
#	@echo "SERVERADDCFLAGS = -pg" >> .config
#	@echo "SERVERADDLDFLAGS = -pg" >> .config
	@echo "BINDIR = /usr/local/bin" >> .config
	@echo "INCDIR = /usr/local/include" >> .config
#	@echo "MANDIR = /usr/local/man" >> .config
	@echo "LIBDIR = /usr/local/lib" >> .config
	@echo "FONTDIR = /usr/local/lib/wfonts" >> .config

Linux-i386, Linux-i486, Linux-i586:
	@echo "ARCH = Linux-i386" > .config
	@echo "# if you want a shared library, change libW.a below" >> .config
	@echo "# to libW.so, recompile, install and run ldconfig." >> .config
	@echo "WLIB = libW.a" >> .config
	@echo "WTLIB = libWt.a" >> .config
	@echo "AR = ar r" >> .config
	# use direct8 graphics driver as the svgalib driver function
	# aren't quite upto date. Direct8 works fast enough.
	@echo "BMONO = 1" >> .config
	@echo "DIRECT8 = 1" >> .config
#	@echo "MATHCFLAGS =" >> .config
	@echo "ADDCFLAGS = -pipe -Wall -O2 -fomit-frame-pointer" >> .config
	@echo "SERVERADDCFLAGS = -DSVGALIB=SVGALIB" >> .config
#	@echo "SERVERADDLDFLAGS =" >> .config
	@echo "SERVERADDLDLIBS = -lvga" >> .config
	@echo "BINDIR = /usr/local/bin" >> .config
	@echo "INCDIR = /usr/local/include" >> .config
	@echo "MANDIR = /usr/local/man" >> .config
	@echo "LIBDIR = /usr/local/lib" >> .config
	@echo "FONTDIR = /usr/local/lib/wfonts" >> .config

MiNT:
	@echo "ARCH = "$(ARCH) > .config
	@echo "# if your program is too big to be compiled as" >> .config
	@echo "# baselerative, change this to libW.a." >> .config
	@echo "WLIB = blibW.a" >> .config
	@echo "WTLIB = blibWt.a" >> .config
	@echo "PACKEDMONO = 1" >> .config
	@echo "PACKEDCOLORMONO = 1" >> .config
	@echo "PACKEDCOLOR = 1" >> .config
	@echo "ADDCFLAGS = -Wall -O2 -mpcrel -fomit-frame-pointer" >> .config
	@echo "BINDIR = /usr/local/bin" >> .config
#	@echo "INCDIR = /usr/local/include" >> .config
#	@echo "MANDIR = /usr/local/man" >> .config
	@echo "LIBDIR = /usr/local/lib" >> .config
	@echo "FONTDIR = /usr/local/lib/wfonts" >> .config
	@echo "AR = ar rs" >> .config

NetBSD:
	@echo "ARCH = "$(ARCH) > .config
	@echo "WLIB = libW.a" >> .config
	@echo "WTLIB = libWt.a" >> .config
	@echo "DIRECT8 = 1" >> .config
	@echo "ADDCFLAGS = -pipe -Wall -O2 -fomit-frame-pointer -I/sys/arch -DNETBSD_GRF=5 -DGRF_VMODE=1" >> .config
	@echo "BINDIR = /homes/frank/w1r3pl1/apps" >> .config
	@echo "LIBDIR = /homes/frank/w1r3pl1/lib\n" >> .config
	@echo "FONTDIR = /homes/frank/w1r3pl1/fonts" >> .config
	@echo "NETBSD = 1" >> .config
	@echo "RANLIB = ranlib" >> .config
	@echo "AR = ar r" >> .config

#
# Sparc2/SunOS-4: sun4c
# Sparc5/Solaris-2.4: sun4m
# Ultra1/Solaris-2.5.1: sun4u
#
# only works on sun4c so far, so no further discrimination
#

SunOS:
	@echo "ARCH = "$(ARCH) > .config
	@echo "WLIB = libW.a" >> .config
	@echo "WTLIB = libWt.a" >> .config
	@echo "DIRECT8 = 1" >> .config
	@echo "ADDCFLAGS = -pipe -Wall -O3" >> .config
	@echo "BINDIR = /homes/itschere/bin.sun4" >> .config
	@echo "INCDIR = /homes/itschere/include" >> .config
#	@echo "MANDIR = /homes/itschere/man" >> .config
	@echo "LIBDIR = /homes/itschere/lib" >> .config
	@echo "FONTDIR = /homes/itschere/lib/wfonts" >> .config
	@echo "RANLIB = ranlib" >> .config
	@echo "AR = ar r" >> .config

#
# now here are the real rules
#

.config:
	@echo
	@echo "You need to 'make config' first before doing the real compile!"
	@echo
	@false

config: $(ARCH)
	@echo "CC = gcc" >> .config
	@echo "CHMOD = chmod" >> .config
	@echo "CP = cp" >> .config
	@echo "MAKE = make" >> .config
	@echo "RM = rm -f" >> .config
	@echo "INSTALL = install" >> .config
	@echo "LN = ln" >> .config
	@echo "WMAJ = 1" >> .config
	@echo "WMIN = 4" >> .config
	@echo "WPL = 0" >> .config
	@echo
	@echo "You're running a '"$(ARCH)"' system which is supported by W, fine."
	@echo
	@echo "A file '.config' has been created for you in the main directory. This one will"
	@echo "be included by all the other Makefiles to customize to your setup. You're not"
	@echo "encouraged to edit it unless you strongly feel you need to and know what you're"
	@echo "doing!"
	@echo
	@echo "You may now continue to build the binaries by typing 'make'."
	@echo

