PROGS	= 	tdump device_handler \
		ibm_vpd_render \
		pci_vpd_cap_grab \
		pci_lookup \
		adapter_pci_map

DATAS	= 	scsivpd.conf pci.ids ide_mf.map

GEN	= 	proc_pci_class.c lsvpd_lib_dir.h

INSTALL = 	/usr/bin/install -c
INSTALL_PROG =	$(INSTALL) -m 755
INSTALL_DATA =	$(INSTALL) -m 644

# -I$$PWD is so compiles of files in src/test/ will find includes in src/.
# Would like to do the strict-aliasing stuff, but some of my old compilers
# don't support it.
#CFLAGS 	=	-g -O -fstrict-aliasing -Wstrict-aliasing=2 -Wall -Wuninitialized -I$$PWD
CFLAGS 	=	-g -O -Wall -Wuninitialized -I$$PWD

# libsysfs and libsgutils are statically linked, but libc is dynamic.
LDLIBS	=	-Xlinker -Bstatic -lsysfs -lsgutils -Xlinker -Bdynamic

all:		$(PROGS)

util.o:		util.c util.h

growbuf.o:	growbuf.c growbuf.h

vpd.o:		vpd.c growbuf.h

tdump:		tdump.o util.o

tdump.o:	tdump.c util.h

######################################################################

lsvpd.o:		lsvpd.c lsvpd.h \
			lsvpd_lib_dir.h init.h util.h

lsvpd_lib_dir.o:	lsvpd_lib_dir.c lsvpd_lib_dir.h \
			init.h

lsvpd_lib_dir.h:	lsvpd_lib_dir.h.in
	        	sed -e "s%@libdir@%$(libdir)%g" $< > $@

sysfs.o:		sysfs.c sysfs.h \
			init.h

proc_scsi.o:		proc_scsi.c proc_scsi.h \
			init.h

######################################################################

device.o:		device.c device.h \
			init.h \
			util.h vpd.h

device_sysfs.o:		device_sysfs.c device.h \
			device_scsi.h device_ide.h \
			sysfs.h \
			init.h lsvpd.h util.h vpd.h

device_ide.o:		device_ide.c device_ide.h \
			device.h

device_scsi.o:		device_scsi.c device_scsi.h \
			device.h \
			lsvpd.h init.h

device_ide_proc.o:	device_ide_proc.c \
			device_ide.h device.h \
			lsvpd.h util.h vpd.h \
			lsvpd_lib_dir.h init.h

device_scsi_sg.o:	device_scsi_sg.c \
			device.h device_scsi.h \
			lsvpd.h util.h vpd.h \
			lsvpd_lib_dir.h init.h

device_scsi_sg_map.o:	device_scsi_sg_map.c \
			device.h device_scsi.h \
			lsvpd.h util.h vpd.h \
			lsvpd_lib_dir.h init.h

# The order here is *very* important because init() functions are
# called in link order.
DEVICE_MODULES	=	sysfs.o proc_scsi.o \
			device.o \
			device_ide.o device_scsi.o \
			device_ide_proc.o \
			device_scsi_sg_map.o \
			device_sysfs.o \
			device_scsi_sg.o

UTIL_MODULES	=	util.o lsvpd.o lsvpd_lib_dir.o vpd.o growbuf.o

device_handler:		device_handler.o \
			$(DEVICE_MODULES) \
			$(UTIL_MODULES)

device_handler.o:	device_handler.c \
			util.h vpd.h device.h init.h

######################################################################

ibm_vpd_render:		ibm_vpd_render.o pci_vpd_parse.o util.o growbuf.o vpd.o
ibm_vpd_render.o:	ibm_vpd_render.c pci_vpd_parse.h util.h growbuf.h vpd.h

pci_vpd_cap_grab:	pci_vpd_cap_grab.o pci_vpd_gen_grab.o util.o growbuf.o
pci_vpd_cap_grab.o:	pci_vpd_cap_grab.c pci_vpd_gen_grab.h util.h growbuf.h
pci_vpd_gen_grab.o:	pci_vpd_gen_grab.c pci_vpd_gen_grab.h util.h

pci_vpd_parse.o:	pci_vpd_parse.c pci_vpd_parse.h growbuf.h util.h vpd.h

pci_lookup:		pci_lookup.o util.o
pci_lookup.o:		pci_lookup.c util.h

adapter_pci_map:	adapter_pci_map.o \
			pci_ide.o pci_scsi.o pci_ethernet.o \
			proc_pci.o proc_pci_class.o \
			util.o

adapter_pci_map.o:	adapter_pci_map.c adapter_pci.h \
			pci_ide.h pci_scsi.h pci_ethernet.h \
			proc_pci.h util.h

pci_ethernet.o:		pci_ethernet.c pci_ethernet.h adapter_pci.h util.h
pci_scsi.o:		pci_scsi.c pci_scsi.h adapter_pci.h util.h
pci_ide.o:		pci_ide.c pci_ide.h adapter_pci.h util.h

proc_pci.o:		proc_pci.c proc_pci.h util.h
proc_pci_class.c:	pci.ids make_proc_pci_class
			./make_proc_pci_class < $< > $@

######################################################################

install:	all
	@ for f in $(PROGS) ; do \
		$(INSTALL_PROG) $$f $(DESTDIR)$(libdir) ;\
	done
	@ for f in $(DATAS) ; do \
		$(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ;\
	done

######################################################################

TEST_PROGS	=	test/test_growbuf test/test_growbuf.out \
			test/test_vpd

test_progs:		$(TEST_PROGS)

test/test_growbuf:	test/test_growbuf.o growbuf.o

test/test_vpd:		test/test_vpd.o \
			vpd.o util.o growbuf.o

test_runs:		test_run_growbuf

test_run_growbuf:	test/test_growbuf
			test/test_growbuf < test/test_growbuf.c > test/test_growbuf.out
			diff -u test/test_growbuf.c test/test_growbuf.out

######################################################################

clean:
	rm -f $(PROGS) $(GEN) *.o $(TEST_PROGS) test/*.o *~
