#
# This is the makefile for the CDK library. Uncomment the machine/os
# type which best suits your machine.
#

# Set up some global variables.
CDKLIB	= libcdk.a
CDKSLIB	= libcdk.so.1
VERSION	= 4.6.0

# Set up directory paths.
MANDIR		= ./man
EXAMDIR		= ./examples
RELDIR		= ./cdk$(VERSION)
INST_ROOTDIR	= /home/glover/local
INST_LIBDIR	= $(INST_ROOTDIR)/lib
INST_INCDIR	= $(INST_ROOTDIR)/include
INST_MANDIR	= $(INST_ROOTDIR)/man
INST_SRCDIR	= $(INST_ROOTDIR)/src

# Linux
#CC	= gcc 
#INCPATH = -I/usr/local/include/ncurses -I/usr/local/include
#LIBPATH = -L/usr/local/lib -L. 
#LINKLIB = $(LIBPATH) -lncurses
#SHARED	= -fPIC
#SLINK	= -shared -Wl,-soname,$(CDKSLIB)
#CFLAGS	= $(INCPATH) -g -Wall -DLINUX -DCOLOR -DWINCHBUG

# SUN
#CC	= gcc 
#INCPATH = -I/usr/5include
#LIBPATH = -L/usr/5lib -L/usr/lib
#LINKLIB = $(LIBPATH) -lcurses -ltermcap
#CFLAGS	= $(INCPATH)  -g -DSUN

# SOLARIS
#CC	= cc 
#INCPATH = 
#LIBPATH = -L/usr/ccs/lib
#LINKLIB = $(LIBPATH) -lcurses -ltermcap
#SLINK	= -G
#CFLAGS	= $(INCPATH) -g -DSOLARIS -DNOBZERO -DNOUSLEEP -DNODYNALLOC
#SFLAGS	= -Fpic

# AIX
#CC	= cc 
#INCPATH	=  
#LIBPATH	=  
#LINKLIB	= $(LIBPATH) -lcurses -ltermcap 
#CFLAGS	= $(INCPATH) -g -qlanglvl=ansi -DAIX -DNODYNALLOC

# HP-UX
#CC	= c89
#INCPATH	=  
#LIBPATH	=  
#LINKLIB	= $(LIBPATH) -lcurses
#CFLAGS	= $(INCPATH) -g -Aa -DHPUX -D_HPUX_SOURCE -DNODYNALLOC _DNOCHTYPE

# QNX 4
CC	= cc
INCPATH	=  
LIBPATH	=  
LINKLIB	= $(LIBPATH) -lncurses
CFLAGS	= $(INCPATH) -O -g1 -DNODYNALLOC
RANLIB = touch
  
###############################################################
#          Do Not change anything under this line.            #
###############################################################

# Create the file lists.
CDKHDR		= cdk.h curdefs.h
CDKWIDGETS	= dialog.c draw.c entry.c graph.c fselect.c \
			histogram.c itemlist.c label.c marquee.c \
			matrix.c mentry.c menu.c radio.c \
			scale.c scroll.c selection.c \
			swindow.c template.c viewer.c
CDKSRC		= cdk.c cdkscreen.c binding.c debug.c $(CDKWIDGETS)
CDKOBJS		= $(CDKSRC:.c=.o)
CDKEXAM		= $(CDKWIDGETS:.c=_ex.c) subwindow_ex.c
CDKMAN		= $(CDKWIDGETS:.c=.3x) cdk.3x screen.3x binding.3x display.3x
CDKDOCS		= BUGS EXPANDING INSTALL NOTES README TODO VERSION COPYING

# Create the compile information for the executables.
all: lib

tst: tst.o
	$(CC) $(CFLAGS) -o tst tst.o $(CDKLIB) $(LINKLIB)

stst: tst.o
	$(CC) $(CFLAGS) -o stst tst.o $(CDKSLIB).0 $(LINKLIB)

lib: $(CDKOBJS)
	@ar r $(CDKLIB) $(CDKOBJS)
	$(RANLIB) $(CDKLIB)

# Standard library directive.
cdklib $(CDKLIB):
	@$(MAKE) clean
	$(CC) $(CFLAGS) -c $(CDKSRC)
	@ar r $(CDKLIB) $(CDKOBJS)
	$(RANLIB) $(CDKLIB)

# Shared library directive.
cdkslib $(CDKSLIB):
	@$(MAKE) clean
	$(CC) $(CFLAGS) $(SFLAGS) -c $(CDKSRC)
	$(CC) $(SLINK) -o $(CDKSLIB).0 $(CDKOBJS)

# Install the library and realted files.
install:
	@$(MAKE) instman
	@$(MAKE) instsrc
	@$(MAKE) instlib
	@echo "Installation done.";

# Install the manual pages.
instman:
	@if [ ! -d $(INST_MANDIR) ] ; then \
	   echo "The man directory $(INST_MANDIR) does not exist. Exiting..."; \
	   exit; \
	fi;
	@if [ ! -d $(INST_MANDIR)/man3x ]; then \
	   echo "Making directory $(INST_MANDIR)/man3x ... "; \
	   mkdir $(INST_MANDIR)/man3x ; \
	fi;
	@echo "Installing manual pages...";
	@(cd $(MANDIR); for i in $(CDKMAN); do \
	   echo "	$(INST_MANDIR)/man3x/cdk_$$i"; \
	   rm -f $(INST_MANDIR)/man3x/cdk_$$i; \
	   cp $$i $(INST_MANDIR)/man3x/cdk_$$i; \
	done)

# Install the source and release documents.
instsrc:
	@if [ ! -d $(INST_SRCDIR) ]; then \
	   echo "The source directory $(INST_SRCDIR) does not exist. Exiting..."; \
	   exit; \
	fi;
	@if [ ! -d $(INST_SRCDIR)/cdk ]; then \
	   echo "Making directory $(INST_SRCDIR)/cdk ... "; \
	   mkdir $(INST_SRCDIR)/cdk; \
	fi;
	@echo "Installing source example files...";
	@(cd $(EXAMDIR); for i in $(CDKEXAM); do \
	   echo "	$(INST_SRCDIR)/cdk/$$i" ; \
	   rm -f $(INST_SRCDIR)/cdk/$$i; \
	   cp $$i $(INST_SRCDIR)/cdk/$$i; \
	done)
	@echo "Installing release documents...";
	@for i in $(CDKDOCS) ; do \
	   echo "	$(INST_SRCDIR)/cdk/$$i"; \
	   rm -f $(INST_SRCDIR)/cdk/$$i; \
	   cp $$i $(INST_SRCDIR)/cdk/$$i; \
	done

# Install the libraries and header files.
instlib:
	@if [ -f $(CDKLIB) ] ; then \
	   echo "Cdk library installed to $(INST_LIBDIR)/$(CDKLIB)"; \
	   echo "Installing file $(INST_LIBDIR)/$(CDKLIB)"; \
	   cp $(CDKLIB) $(INST_LIBDIR)/$(CDKLIB); \
	fi
	@if [ -f $(CDKSLIB) ] ; then \
	   echo "Cdk shared library installed to $(INST_LIBDIR)/$(CDKLIB)"; \
	   echo "Installing file $(INST_LIBDIR)/$(CDKSLIB).0"; \
	   cp $(CDKSLIB).0 $(INST_LIBDIR)/$(CDKSLIB).0; \
	fi
	@echo "Installing file $(INST_INCDIR)/cdk.h";
	@rm -f $(INST_INCDIR)/cdk.h
	@cp cdk.h $(INST_INCDIR)
	@echo "Installing file $(INST_INCDIR)/curdefs.h";
	@rm -f $(INST_INCDIR)/curdefs.h
	@cp curdefs.h $(INST_INCDIR)

clean:
	rm -f *.o core tst stst $(CDKLIB) $(CDKSLIB).0

update:
	@co $(CDKSRC) $(CDKHDR) $(CDKDOCS)
	@(cd examples; co $(CDKEXAM))
	@(cd man; co $(CDKMAN))

release:
	@$(MAKE) update
	@rm -rf $(RELDIR) $(RELDIR).tgz
	@mkdir $(RELDIR)
	@mkdir $(RELDIR)/examples
	@mkdir $(RELDIR)/man
	@for i in $(CDKSRC) $(CDKDOCS) $(CDKHDR); do \
	   cp $$i $(RELDIR); \
	done
	@for i in $(CDKMAN); do \
	   cp $(MANDIR)/$$i $(RELDIR)/man ; \
	done
	@for i in $(CDKEXAM); do \
	   cp $(EXAMDIR)/$$i $(RELDIR)/examples ; \
	done
	@cp Makefile $(RELDIR)
	@tar cvfz $(RELDIR).tgz $(RELDIR)
	@rm -rf $(RELDIR)
