INC=-Iinclude -I.
CFLAGS=-Wall -O2 -g -D_GNU_SOURCE $(RPM_OPT_FLAGS)
LDFLAGS=-s

MODULES_OBJ=obj/list.o obj/md5.o obj/mem.o

all:	haps modules

modules: mainboard.so usb.so keyboard.so pci.so ide.so scsi.so psaux.so	firewire.so floppy.so pcmciacont.so pcmcia.so sbus.so parallel.so serial.so ddc.so partitions.so xfree.so isapnp.so cpu.so

haps: obj/probe.o obj/list.o obj/md5.o obj/lex.yy.o obj/y.tab.o
	$(CC) $(LDFLAGS) -o $@ obj/probe.o obj/list.o obj/md5.o obj/lex.yy.o obj/y.tab.o -lfl -ldl


obj/%.o: src/%.c
	$(CC) $(INC) $(CFLAGS) -c $< -o $@

obj/%.o: modules/%.c
	$(CC) $(INC) $(CFLAGS) -c $< -o $@

## MODULES

cpu.so: obj/cpu.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

mainboard.so: obj/mainboard.o obj/mem.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

psaux.so: obj/psaux.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

usb.so: obj/usb.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

keyboard.so: obj/keyboard.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

ide.so: obj/ide.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

scsi.so: obj/scsi.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

firewire.so: obj/firewire.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

floppy.so: obj/floppy.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

pcmcia.so: obj/pcmcia.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

pcmciacont.so: obj/pcmciacont.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

sbus.so: obj/sbus.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

parallel.so: obj/parallel.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

serial.so: obj/serial.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

partitions.so: obj/partitions.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

isapnp.so: obj/isapnp.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

xfree.so: obj/xfree.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC

ddc.so: obj/ddc.o obj/vbe.o obj/lrmi.o obj/vesamode.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) obj/vbe.o obj/lrmi.o obj/vesamode.o $< -o $@ -fPIC

pci.so: obj/pci.o
	$(CC) $(INC) $(CFLAGS) -shared $(MODULES_OBJ) $< -o $@ -fPIC -lpci

####################
y.tab.c y.tab.h:	src/config.y
	bison -d -y src/config.y

lex.yy.c:	src/config.l y.tab.h
	lex src/config.l

obj/lex.yy.o:	lex.yy.c y.tab.h
	$(CC) $(INC) $(CFLAGS) -c lex.yy.c -g -o $@

obj/y.tab.o:	y.tab.c y.tab.h
	$(CC) $(INC) $(CFLAGS) -c y.tab.c -g -o $@
####################

install: haps modules
	install -d $(DESTDIR)/sbin
	install -d $(DESTDIR)/lib/haps
	install -d $(DESTDIR)/etc/haps
	install -d $(DESTDIR)/etc/rc.d
	cp *.so $(DESTDIR)/lib/haps
	cp haps $(DESTDIR)/sbin
	cp -rf scripts/* $(DESTDIR)/etc/haps
	mv $(DESTDIR)/etc/haps/haps.init $(DESTDIR)/etc/rc.d/rc.haps
	cp bioses $(DESTDIR)/etc/haps
	cat pcitable | sed 's/es137/ens137/g' > $(DESTDIR)/etc/haps/pcitable

clean:
	rm -f scripts/config/*
	rm -f scripts/current/*
	rm -f scripts/bus/*
	rm -f haps *.so
	rm -f obj/*
	rm -f y.tab.c y.tab.h lex.yy.c

dist: clean
	cd .. ; \
	tar -cvf - haps/* | gzip -9 > ~/rpm/SOURCES/haps-`date +%Y%m%d`.tar.gz
