SHELL=/bin/bash

# Comment/uncomment the following line to disable/enable debugging
DEBUG = y

# Allow specific variables to be exported to submakes.
export LIBRARY JPEGLIB TIFFLIBS LIBTIFF

include includes.mk

VER_SERIES=$(shell uname -r | cut -f1-2 -d.)
VER_MINOR=$(shell uname -r | cut -f3 -d.)

CC=gcc

DEBFLAGS = -O2  -Wno-format-zero-length -Wno-deprecated-declarations -Wno-write-strings

ALL_CFLAGS += $(DEBFLAGS) $(DO_MLOCK) $(BUILDOPTIONS)
ALL_CFLAGS += -I.
LDFLAGS += -L. 
LDLIBS += -lpdv -lpthread -lm -ldl 

VPATH := camsel

EXTRATARGS = blinkdva

$(LIBOBJS) : ALL_CFLAGS += -D_REENTRANT

PCILOADOBJS = \
	pciload_spi.o \
		pciload_4013e.o\
		pciload_4013xla.o\
		pciload_4028xla.o\
		pciload_fn.o\
		pciload_main.o

PDVLIB = libpdv.so 
STATICPDVLIB = libpdv.a 

#Change this to use the dynamic .so library

LIBRARY=$(STATICPDVLIB)

# Let users add CFLAGS by specifying it on make command line
ALL_CFLAGS += -fPIC $(CFLAGS)

ALL_TARGS = $(LIBRARY) $(PDVLIB) $(TARGETS) pciload clink_tester pciediag

all: $(ALL_TARGS)

#
# included opensource tiff library tiff-4.0.3
#
LIBTIFF=libtiff.a
TIFFDIR=tiff-4.0.3
TIFFSRC=$(TIFFDIR)/libtiff
TIFFLIBDIR=$(TIFFDIR)/libtiff/.libs
TIFFLIBS=$(TIFFLIBDIR)/libtiff.a $(TIFFLIBDIR)/libtiff.so
TIFFMAKE=$(TIFFDIR)/Makefile
AM_DIR=$(shell automake --print-libdir)

$(TIFFDIR):
	unzip -o $(TIFFDIR).zip

$(TIFFLIBS): $(TIFFDIR) $(TIFF) $(TIFFMAKE)
	make -C $(TIFFDIR)

$(LIBTIFF): $(TIFFLIBS)
	cp -a $(TIFFLIBDIR)/libtiff.so* .

ifneq ($(strip $(AM_DIR)),)
CFG_GUESS=$(AM_DIR)/config.guess
CFG_SUB=$(AM_DIR)/config.sub
$(TIFFMAKE):
	cd $(TIFFDIR) ; mv config/config.guess config.guess.bak ; ln -s $(CFG_GUESS) config/config.guess ; mv config/config.sub config.sub.bak ; ln -s $(CFG_SUB) config/config.sub ; ./configure --disable-jbig --disable-jpeg --disable-lzma --disable-pixarlog --disable-zlib
else
$(TIFFMAKE):
	cd $(TIFFDIR) ; ./configure --disable-jbig --disable-jpeg --disable-lzma --disable-pixarlog --disable-zlib
endif
#
# included opensource jpeg library jpeg-6b 
#
JPEGDIR=jpeg-6b
JPEGLIB=libjpeg.a

$(JPEGLIB):
	make -C $(JPEGDIR) $(JPEGLIB)
	cp $(JPEGDIR)/$(JPEGLIB) .

#
# these sources depend additionally on the tiff library 
#
gen_tiffs send_tiffs simple_clsend: LDFLAGS += -ltiff -L$(TIFFLIBDIR) -Wl,-rpath=$(TIFFLIBDIR)
gen_tiffs send_tiffs simple_clsend: LDLIBS += -ltiff
gen_tiffs send_tiffs simple_clsend: CFLAGS += -I$(TIFFSRC)
gen_tiffs send_tiffs simple_clsend: $(TIFFLIBS)

# Conditionally add vlviewer make.
-include vlviewer.mk

# Extract version number from headers.
VER = $(shell awk -F\" '/REL/ {print $$2}' $(INCLUDEDIR)/linux/version.h)

MODULE_NAME := pdv
objclean:	
	@echo "Cleaning objects for $(MODULE_NAME)"
	@-rm -f $(ALL_TARGS)
	@-rm -f *.o *~ module/*.o *.a *.so

libobjclean:
	-make -C pdvplus clean
	-make -C dispatch clean
	-make -C edtimage objclean
	-make -C imgfiles objclean

tiffclean:
	-make -C $(TIFFDIR) clean

jpegclean:
	-make -C $(JPEGDIR) clean

ifndef EDTBUILD
clean: objclean tiffclean jpegclean libobjclean
endif

uninstall: objclean tiffclean jpegclean libobjclean unload
	-make -C module uninstall

driver:
	cd module ; $(MAKE) 

load: 
	systemctl start edtinit

unload:
	systemctl stop edtinit

# Check Gap GUI stuff
check_gap_common: $(LIBOBJS) check_gap_lib.o check_gap_common.c $(LIBRARY)
	$(CC) -o $@ $(LDFLAGS) $(LIBOBJS) check_gap_lib.o check_gap_common.c $(LDFLAGS) $(LDLIBS) $(LOGOUT)
	@$(SHOWOUT)

checkgap_gui:
	-cd chkgap_gui ; $(MAKE) CFLAGS=$(EDTFLAGS)
	-ln -s chkgap_gui/checkgap.glade ./
	-ln -s chkgap_gui/checkgap_gui ./


GTK_CFLAGS = `pkg-config --cflags gtk+-2.0`

CAMSEL_OBJS  = camsel_main.o camsel_ui.o camsel_backend.o \
	camsel_extras.o camsel_callbacks.o \
	ConfigDataSet.o camsel_parselib.o parse_info_text.o

$(CAMSEL_OBJS): CFLAGS += -DUNIX -Wall -g $(GTK_CFLAGS)

camera_select: LDFLAGS += `pkg-config --libs gtk+-2.0`
camera_select: $(CAMSEL_OBJS) $(LIBRARY)
	@echo $(CC) -o $@ $(CAMSEL_OBJS) $(LDFLAGS) $(LDFLAGS) $(LDLIBS) $(LOGOUT)
	-@$(CC) -o $@ $(CAMSEL_OBJS) $(LDFLAGS) $(LDFLAGS) $(LDLIBS) $(LOGOUT)
#	@$(SHOWOUT)


$(LIBOBJS) : 


libpdvplus.a:
	-cd pdvplus; $(MAKE)

libedtimage.a:
	-cd edtimage; $(MAKE)

libimgfiles.a:
	-cd imgfiles; $(MAKE)

dispatch libdispatch.so:
	make -C dispatch libdispatch.so

FRC:
	
$(PDVLIB) : $(LIBOBJS)
	@echo $(CC) $(ALL_CFLAGS) -o $(PDVLIB) -shared $(LIBOBJS) $(LOGOUT)
	@$(CC) $(ALL_CFLAGS) -o $(PDVLIB) -shared $(LIBOBJS) $(LOGOUT)
	@$(SHOWOUT)

$(STATICPDVLIB) : $(LIBOBJS)
	@echo $(AR) -ur $(STATICPDVLIB) $(LIBOBJS) $(LOGOUT)
	@$(AR) -ur $(STATICPDVLIB) $(LIBOBJS) $(LOGOUT)
	@$(SHOWOUT)


$((TARGETS)) $(EXTRATARGS) : % : %.o $(LIBRARY)
	@echo $(CC) $(ALL_CFLAGS) -o $@ $< $(LDFLAGS) $(LDLIBS) $(LOGOUT)
	-@$(CC) $(ALL_CFLAGS) -o $@ $< $(LDFLAGS) $(LDLIBS) $(LOGOUT)
	@$(SHOWOUT)

pciload :  $(LIBOBJS) $(PCILOADOBJS) $(LIBRARY)
	@echo $(CC) $(ALL_CFLAGS) -o $@ $(PCILOADOBJS) $(LDFLAGS) $(LDFLAGS) $(LDLIBS) $(LOGOUT)
	@$(CC) $(ALL_CFLAGS) -o $@ $(PCILOADOBJS) $(LDFLAGS) $(LDLIBS) $(LOGOUT)
	@$(SHOWOUT)

clink_tester : clink_tester.o edt_net_msg.o pciload_fn.o $(LIBRARY)
	@echo $(CC) $(ALL_CFLAGS) -o $@ $^ $(LDFLAGS) $(LDFLAGS) $(LDLIBS) $(LOGOUT)
	@$(CC) $(ALL_CFLAGS) -o $@ $^ $(LDFLAGS) $(LDLIBS) $(LOGOUT)
	@$(SHOWOUT)

pciediag : 
	cd pciediag_src; $(MAKE) 

clsim: 
	$(MAKE) -f clsim.mk

%.o : %.c
	@echo $(CC) $(ALL_CFLAGS) -c $< $(LOGOUT)
	@$(CC) $(ALL_CFLAGS) -c $< $(LOGOUT)
	@$(SHOWOUT)
