.EXPORT_ALL_VARIABLES:

CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
	  else if [ -x /bin/bash ]; then echo /bin/bash; \
	  else echo sh; fi ; fi)
TOPDIR	:= $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)

HPATH   	= $(TOPDIR)/include
RPATH		= $(TOPDIR)/ksrc/include

HOSTCC  	= gcc -I$(HPATH)
HOSTCFLAGS	=

CROSS_COMPILE 	=

AS	=$(CROSS_COMPILE)as
LD	=$(CROSS_COMPILE)ld
CC	=$(CROSS_COMPILE)gcc -D__KERNEL__ -I$(HPATH) -I$(RPATH)
CPP	=$(CC) -E
AR	=$(CROSS_COMPILE)ar
NM	=$(CROSS_COMPILE)nm
STRIP	=$(CROSS_COMPILE)strip
MAKE	=make
GENKSYMS=/sbin/genksyms
AWK	=gawk


#
# standard CFLAGS
#

CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strength-reduce
CFLAGS += -DCPU=586

ifdef CONFIG_CPP
CFLAGS := $(CFLAGS) -x c++
endif

# Include the make variables (CC, etc...)
SUBDIRS		=fs net lib

.S.s:
	$(CC) -D__ASSEMBLY__ -traditional -E -o $*.s $<
.S.o:
	$(CC) -D__ASSEMBLY__ -traditional -c -o $*.o $<

ifeq ($(wildcard .config),)
  FOOBAR := $(shell cat ksrc/.config dotconfig > .config); 
endif
include .config

all:	.depdone modules

.depdone:
	$(MAKE) dep
	touch .depdone

clean::
	rm -f .depdone

linuxsubdirs: dummy
	set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i; done

fs: dummy
	$(MAKE) linuxsubdirs SUBDIRS=fs

lib: dummy
	$(MAKE) linuxsubdirs SUBDIRS=lib

net: dummy
	$(MAKE) linuxsubdirs SUBDIRS=net

MODFLAGS = -DMODULE
ifdef CONFIG_MODULES
ifdef CONFIG_MODVERSIONS
MODFLAGS += -DMODVERSIONS -include $(HPATH)/linux/modversions.h
endif

modules: include/linux/version.h
	@set -e; \
	for i in $(SUBDIRS); \
	do $(MAKE) -C $$i CFLAGS="$(CFLAGS) $(MODFLAGS)" MAKING_MODULES=1 modules; \
	done

modules_install:
	@( \
	MODLIB=/lib/modules/`$(TOP)tools/getkversion/getkversion`; \
	cd modules; \
	MODULES=""; \
	inst_mod() { These="`cat $$1`"; MODULES="$$MODULES $$These"; \
		mkdir -p $$MODLIB/$$2; cp -p $$These $$MODLIB/$$2; \
		echo Installing modules under $$MODLIB/$$2; \
	}; \
	\
	if [ -f BLOCK_MODULES ]; then inst_mod BLOCK_MODULES block; fi; \
	if [ -f NET_MODULES   ]; then inst_mod NET_MODULES   net;   fi; \
	if [ -f IPV4_MODULES  ]; then inst_mod IPV4_MODULES  ipv4;  fi; \
	if [ -f SCSI_MODULES  ]; then inst_mod SCSI_MODULES  scsi;  fi; \
	if [ -f FS_MODULES    ]; then inst_mod FS_MODULES    fs;    fi; \
	if [ -f CDROM_MODULES ]; then inst_mod CDROM_MODULES cdrom; fi; \
	if [ -f MISC_MODULES  ]; then inst_mod MISC_MODULES  misc;  fi; \
	\
	ls *.o > .allmods; \
	echo $$MODULES | tr ' ' '\n' | sort | comm -23 .allmods - > .misc; \
	if [ -s .misc ]; then inst_mod .misc misc; fi; \
	rm -f .misc .allmods; \
	)

# modules disabled....

else
modules modules_install: dummy
	@echo
	@echo "The present kernel configuration has modules disabled."
	@echo "Type 'make config' and enable loadable module support."
	@echo "Then build a kernel with module support enabled."
	@echo
	@exit 1
endif

distclean clean::
	rm -f core `find . -name '*.[oas]' ! -regex '.*lxdialog/.*' -print`
	rm -f core `find . -type f -name 'core' -print`
	rm -f .depend `find . -name .depend`
	rm -f .hdepend
	rm -f LOG

distclean::
	rm -f core `find . \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
                -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
                -o -name '.*.rej' -o -name '.SUMS' -o -size 0 \) -print` TAGS

dep-files:
	for i in $(SUBDIRS); do $(MAKE) -C $$i fastdep; done

MODVERFILE :=

ifdef CONFIG_MODVERSIONS
MODVERFILE := $(TOPDIR)/include/linux/modversions.h
endif

depend dep: dep-files $(MODVERFILE)

ifdef CONFIGURATION
..$(CONFIGURATION):
	@echo
	@echo "You have a bad or nonexistent" .$(CONFIGURATION) ": running 'make" $(CONFIGURATION)"'"
	@echo
	$(MAKE) $(CONFIGURATION)
	@echo
	@echo "Successful. Try re-making (ignore the error that follows)"
	@echo
	exit 1

#dummy: ..$(CONFIGURATION)
dummy:

else

dummy:

endif

# We need VERSION.PATCHLEVEL.SUBLEVEL for the genksyms rules...
FOOBAR	:= $(shell head -3 ksrc/Makefile > .kversion)
include .kversion

clean::
	rm -f .kversion

include Rules.make


install:: modules_install

installman postscript::
	@echo "Kernel Makefile doesn't support rule $@ yet."

#
# This generates dependencies for the .h files.
#

.hdepend: dummy
	rm -f $@
	$(AWK) -f scripts/depend.awk `find $(HPATH) -name \*.h ! -name modversions.h -print` > .$@
	mv .$@ $@
