#
# Makefile 1.00 Peter Braam <braam@cs.cmu.edu>
#
# Tweaked by Gordon Matzigkeit <gord@fig.org>, 2000-11-24

SHELL = /bin/sh

INSTALL = install -c
INSTALL_PROGRAM = $(INSTALL)
INSTALL_DATA = $(INSTALL) -m 644
INSTALL_SCRIPT = $(INSTALL) -m 755

default: all

######################################################################
# Include config.mk if it exists.
ifneq ($(wildcard config.mk),)
include config.mk

# Try and find the correct modules configuration file
ifneq ($(wildcard /etc/modules.conf),)
CONFMODULES=/etc/modules.conf
else
CONFMODULES=/etc/conf.modules
endif

ifndef CFLAGS
# Don't remove "-O2" or bad things will happen!
KFLAGS = -O2 -g -Wall -Wstrict-prototypes  -pipe
endif

CPPFLAGS = $(PCDEBUG) -D__KERNEL__ -DMODULE --include linux/config.h \
	   -I. -I$(LINUX)/include $(SMPFLAG)
COFLAGS = -kv
ifeq ($(CONFIG_MODVERSIONS),y)
CFLAGS= $(KFLAGS) $(MFLAG)
else 
CFLAGS= $(KFLAGS)
endif

ifneq ($(wildcard ../devel),)
# Invoke developer mode if ../devel exists.
MODNAME := presto-dev
FSNAME := izofs
DEVNAME := izo
DEVMAJOR := 186
else
MODNAME := presto
FSNAME := InterMezzo
DEVNAME := intermezzo
DEVMAJOR := 185
endif

CC :=$(shell if which $(CROSS_COMPILE)kgcc > /dev/null 2>&1; then echo $(CROSS_COMPILE)kgcc; else echo $(CROSS_COMPILE)gcc; fi) 


SRCS= journal.c intermezzo.c vfs.c file.c dir.c methods.c cache.c  super.c journal_ext2.c journal_ext3.c psdev.c upcall.c sysctl.c  inode.c dcache.c

ifdef CONFIG_KREINT
SRCS += kmlrec.c kmlreint.c
endif

# These OBJS variables only need differ where the sources use PRESTO_DEVEL.
OBJS=$(SRCS:%.c=%.o)
devel_sources := $(shell egrep -le 'PRESTO_(DEVEL|FS_NAME|PSDEV_(MAJOR|NAME))' $(SRCS))
OBJS_DEV=$(sort $(patsubst %.c,%-dev.o,$(devel_sources)) \
		$(patsubst %.c,%.o,$(filter-out $(devel_sources),$(SRCS))))

MODULES = $(MODNAME).o


all:		$(CONFIGURATION) kcheck $(MODULES) 	
allconf:	.prereq.ok $(CONFIGURATION) kcheck $(MODULES) 

install-modules: $(CONFIGURATION) $(MODULES) kcheck
	test -d "$(DESTDIR)$(MODDIR)/fs" || mkdir -p $(DESTDIR)$(MODDIR)/fs
	$(INSTALL_DATA) $(MODULES) $(DESTDIR)$(MODDIR)/fs/
	test -n "$(DESTDIR)" || /sbin/depmod -ae
	test -d "$(DESTDIR)/dev" || mkdir -p $(DESTDIR)/dev
	@for i in 0 1 2 3; do \
	 test -c $(DESTDIR)/dev/$(DEVNAME)$$i && continue; \
	 echo "mknod $(DESTDIR)/dev/$(DEVNAME)$$i c $(DEVMAJOR) $$i"; \
	 mknod $(DESTDIR)/dev/$(DEVNAME)$$i c $(DEVMAJOR) $$i; \
	done; :
	test -d "$(DESTDIR)/etc" || mkdir -p $(DESTDIR)/etc
	@if test -d /etc/modutils; then \
	  test -d "$(DESTDIR)/etc/modutils" || mkdir -p $(DESTDIR)/etc/modutils; \
	  if test ! -f $(DESTDIR)/etc/modutils/$(DEVNAME); then \
	    echo "echo 'alias $(FSNAME) $(MODNAME)' > $(DESTDIR)/etc/modutils/$(DEVNAME)"; \
	    echo 'alias $(FSNAME) $(MODNAME)' > $(DESTDIR)/etc/modutils/$(DEVNAME); \
	    echo "echo 'alias char-major-$(DEVMAJOR) $(MODNAME)' >> $(DESTDIR)/etc/modutils/$(DEVNAME)"; \
	    echo 'alias char-major-$(DEVMAJOR) $(MODNAME)' >> $(DESTDIR)/etc/modutils/$(DEVNAME); \
	  fi; \
	  if test -n "$(DESTDIR)" || grep -q "$(FSNAME) " $(CONFMODULES); then :; \
	  else \
	    echo "update-modules"; \
	    update-modules; \
	  fi; \
	else \
	  if ! grep -q "$(FSNAME) " $(DESTDIR)$(CONFMODULES); then \
		echo "echo 'alias $(FSNAME) $(MODNAME)' >> $(DESTDIR)$(CONFMODULES)"; \
		echo 'alias $(FSNAME) $(MODNAME)' >> $(DESTDIR)$(CONFMODULES); \
	  fi; \
	  if ! grep -q 'char\-major\-$(DEVMAJOR)' $(DESTDIR)$(CONFMODULES); then \
		echo "echo 'alias char-major-$(DEVMAJOR) $(MODNAME)' >> $(DESTDIR)$(CONFMODULES)"; \
		echo 'alias char-major-$(DEVMAJOR) $(MODNAME)' >> $(DESTDIR)$(CONFMODULES); \
	  fi; \
	fi

showvar:
	@echo CFLAGS $(CFLAGS)
	@echo CPPFLAGS $(CPPFLAGS)
	@echo MODDIR $(MODDIR)
	@echo UTS_RELEASE $(UTS_RELEASE)
	@echo SRCS $(SRCS)
	@echo OBJS $(OBJS)
	@echo OBJS_DEV $(OBJS_DEV)

presto.o: $(CONFIGURATION) $(OBJS)
	$(LD) -m "`ld --help | awk '/supported emulations/ {print $$4}'`" -r -o $@ $(OBJS)

presto-dev.o: $(CONFIGURATION) $(OBJS_DEV)
	$(LD) -m "`ld --help | awk '/supported emulations/ {print $$4}'`" -r -o $@ $(OBJS_DEV)

# Stuff to automatically maintain dependency files
.c.o:
	$(CC) -MD $(CFLAGS) $(CPPFLAGS) -c $<
	@mkdir -p .depfiles ; sed -e 's/^$*.o:/$*.o $*-dev.o:/' $*.d > .depfiles/$*.d; rm -f $*.d

%-dev.o: %.c
	$(CC) -MD $(CFLAGS) -DPRESTO_DEVEL=1 $(CPPFLAGS) -c $< -o $@
	@mkdir -p .depfiles ; sed -e 's/^$*.o:/$*.o $*-dev.o:/' $*.d > .depfiles/$*.d; rm -f $*.d

-include $(SRCS:%.c=.depfiles/%.d)

######################################################################
else # ! config.mk
# Make sure we run "make config" if config.mk does not exist.

all allconf  install-modules showvar: config.mk
	$(MAKE) $@

endif # config.mk
######################################################################

# Rules that don't depend on config.mk:
config.mk:
	$(MAKE) config

config .prereq.ok: clean
	./Configure

oldconfig: clean
	./Configure -n

clean: 
	rm -f core core.* *.o *.d .*.o *.s *.a config.*T *~ \
	  .depend .depfiles/*.d

distclean: clean
	rm -f config.out config.h .prereq.ok config.mk \
	  linux/config.h linux/modversions.h

uninstall:

install: install-modules

kcheck:
	@. ./config.out ; \
	if [ "$$CHECK" != "" ] ; then \
	    if [ "`cksum < $$CHECK`" != "$$CKSUM" ] ; then \
		/bin/echo -n "Kernel configuration has changed." ; \
		/bin/echo "  Please re-run 'make config'." ; \
		exit 1 ; \
	    fi ; \
	fi

.PHONY: config clean default oldconfig showvar distclean install \
	install-modules  kcheck init-config uninstall
