PROGS	= 	tdump device_handler \
		ibm_vpd_render \
		pci_vpd_cap_grab \
		pci_lookup \
		pci_ethernet_map pci_scsi_map # pci_ide_map

DATAS	= 	scsihost.conf 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

CFLAGS	=	-g -O -Wall -Wuninitialized
# 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

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

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

device_handler:		device_handler.o sysfs.o device.o \
			device_ide.o device_scsi.o \
			device_ide_proc.o \
			device_scsi_sg.o device_scsi_sg_map.o \
			device_sysfs.o \
			util.o lsvpd.o lsvpd_lib_dir.o vpd.o growbuf.o

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

pci_ethernet_map:	pci_ethernet_map.o \
			pci_ethernet.o proc_pci.o proc_pci_class.o \
			util.o
pci_ethernet_map.o:	pci_ethernet_map.c pci_ethernet.h util.h
pci_ethernet.o:		pci_ethernet.c pci_ethernet.h util.h

pci_scsi_map:		pci_scsi_map.o \
			pci_scsi.o proc_pci.o proc_pci_class.o \
			util.o
pci_scsi_map.o:		pci_scsi_map.c pci_scsi.h util.h
pci_scsi.o:		pci_scsi.c pci_scsi.h util.h

pci_ide_map:		pci_ide_map.o \
			pci_ide.o proc_pci.o proc_pci_class.o \
			util.o
pci_ide_map.o:		pci_ide_map.c pci_ide.h util.h
pci_ide.o:		pci_ide.c pci_ide.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

CFLAGS			= -g -O -Wall -Wuninitialized -I$$PWD

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 *~
