OPENWINHOME=/usr/openwin
DEFAULT_TOOLKIT = xv

# Sun:
# TOOLKITS = olit xv
# Linux:
TOOLKITS = xv

INTERFACE_MODULES = \
	xcursor xfileselect xpath xdialog \
	xkernel xpicture xwindow xmenu xtimer

CLEAN_MODULES = \
	deltaControls deltaFont deltaPicture \
	deltaDialog deltaIOState deltaSystem \
	deltaEventIO deltaIOSystem deltaTimer \
	deltaFileSelect deltaMenu deltaWindow \
	commonDef dialogDef menuDef timerDef \
	windowDef dialogDevice menuDevice timerDevice \
	windowDevice cursorInternal ioState scrollList scrollList sliderBar misc \
	picture xevent xtypes

XV_OBJECT_FILES = \
	xv/cdialog.o \
	xv/cpath.o \
	xv/cfileselect.o \
	xv/cpicture.o \
	xv/ckernel.o \
	xv/ctimer.o \
	xv/cmenu.o \
	xv/cwindow.o

# Link options files
LO_FILES = \
	x.lo \
	$(TOOLKITS:%=%.lo)

LIBRARY_MODULES = \
	libCleanIO \
	$(TOOLKITS:%=libClean%)

# Static and Dynamic Libraries
LIBRARIES = \
	$(LIBRARY_MODULES:%=%.a)
#	$(LIBRARY_MODULES:%=%.so.1.0) \

# Links to versions of shared libraries
# SHARED_LIB_LINKS = 
#	$(LIBRARY_MODULES:%=%.so)

IOLIB_FILES = \
	$(CLEAN_MODULES:%=%.dcl) \
	$(INTERFACE_MODULES:%=%.dcl) \
	$(CLEAN_MODULES:%=%.icl) \
	$(INTERFACE_MODULES:%=%.icl) \
	$(LO_FILES) \
	$(SHARED_LIB_LINKS) \
	$(LIBRARIES) \
	$(XV_OBJECT_FILES)

#
# Install section
#

# INSTALL_IOLIB_DIR = $(CURRENTDIR)
INSTALL_IOLIB_FILES = $(IOLIB_FILES:%=$(INSTALL_IOLIB_DIR)/%)
INSTALL_SHARED_LIB_LINKS = $(SHARED_LIB_LINKS:%=$(INSTALL_IOLIB_DIR)/%)

install: compile $(INSTALL_IOLIB_DIR) $(INSTALL_IOLIB_DIR)/xv $(INSTALL_IOLIB_FILES) \
											$(INSTALL_SHARED_LIB_LINKS)

$(INSTALL_IOLIB_DIR) :
	mkdir -p $@

$(INSTALL_IOLIB_DIR)/xv :
	mkdir -p $@

$(INSTALL_IOLIB_DIR)/% : %
	cp $< $@
	chmod 644 $@


CURRENTDIR = $(MAKECURRENTDIR)$(GMAKECURRENTDIR)
MAKECURRENTDIR : sh=pwd
GMAKECURRENTDIR = ${shell echo `pwd`}

#
# Compile section
#
compile: $(LIBRARIES)

CLEAN_MODULES_O = $(CLEAN_MODULES:%=Clean\ System\ Files/%.o)
CLEAN_MODULES_O_ = $(CLEAN_MODULES:%=%.o)
INTERFACE_MODULES_O = $(INTERFACE_MODULES:%=Clean\ System\ Files/%.o)
INTERFACE_MODULES_O_ = $(INTERFACE_MODULES:%=%.o)

CLEAN_MODULES_ABC = $(CLEAN_MODULES:%=Clean\ System\ Files/%.abc)
INTERFACE_MODULES_ABC = $(INTERFACE_MODULES:%=Clean\ System\ Files/%.abc)

libCleanIO.so.1.0: $(INTERFACE_MODULES_O) $(CLEAN_MODULES_O)
	$(LD) $(LDSHARED) -o $@ $(INTERFACE_MODULES_O) $(CLEAN_MODULES_O)

libCleanIO.a: $(INTERFACE_MODULES_O) $(CLEAN_MODULES_O)
	(cd "Clean System Files" ; $(AR) r ../$@ $(INTERFACE_MODULES_O_) $(CLEAN_MODULES_O_) ; cd ..)
	$(RANLIB) $@

$(TOOLKITS:%=libClean%.a): 
	cd $(@:libClean%.a=%); $(MAKE) ../$@ STATICLIBRARY=../$@ 

$(TOOLKITS:%=libClean%.so.1.0): 
	cd $(@:libClean%.so.1.0=%); $(MAKE) ../$@ DYNAMICLIBRARY=../$@ 

#
# Clean up section
#
cleanup:
	$(RM) $(INTERFACE_MODULES:%=%.icl) $(INTERFACE_MODULES:%=%.dcl) \
			$(INTERFACE_MODULES_ABC) $(INTERFACE_MODULES:%=%.o)
	$(RM) $(CLEAN_MODULES_ABC) $(CLEAN_MODULES_O)
	$(RM) $(LIBRARIES)
	$(RM) $(LO_FILES) $(SHARED_LIB_LINKS)
	for dir in $(TOOLKITS); do cd $$dir; $(MAKE) $@; cd ..; done; exit 0

#
#
# Generate the *.lo files
#
#	delimiter used in the sed patterns, this character may *not*
#	appear in the expansions of $(IOLIB) and $(OPENWINLIB)
DEL = %

OPENWINLIB = $(OPENWINHOME)/lib
IOLIB = $(INSTALL_IOLIB_DIR)

$(INSTALL_IOLIB_DIR)/olit.lo: olit/x.lo.in
	sed -e s\$(DEL)'$$CLEANIOLIB'$(DEL)$(IOLIB)$(DEL)g $? | \
	sed -e s\$(DEL)'$$OPENWINLIB'$(DEL)$(OPENWINLIB)$(DEL)g > $@

$(INSTALL_IOLIB_DIR)/olits.lo: olit/xs.lo.in
	sed -e s\$(DEL)'$$CLEANIOLIB'$(DEL)$(IOLIB)$(DEL)g $? | \
	sed -e s\$(DEL)'$$OPENWINLIB'$(DEL)$(OPENWINLIB)$(DEL)g > $@

$(INSTALL_IOLIB_DIR)/xv.lo: xv/x.lo.in
	sed -e s\$(DEL)'$$CLEANIOLIB'$(DEL)$(IOLIB)$(DEL)g $? | \
	sed -e s\$(DEL)'$$OPENWINLIB'$(DEL)$(OPENWINLIB)$(DEL)g > $@

$(INSTALL_IOLIB_DIR)/xvs.lo: xv/xs.lo.in
	sed -e s\$(DEL)'$$CLEANIOLIB'$(DEL)$(IOLIB)$(DEL)g $? | \
	sed -e s\$(DEL)'$$OPENWINLIB'$(DEL)$(OPENWINLIB)$(DEL)g > $@

$(INSTALL_IOLIB_DIR)/libCleanIO.so: $(INSTALL_IOLIB_DIR)/libCleanIO.so.1.0
	$(RM) $@ ; ln -s $? $@
$(INSTALL_IOLIB_DIR)/libCleanxv.so: $(INSTALL_IOLIB_DIR)/libCleanxv.so.1.0
	$(RM) $@ ; ln -s $? $@
$(INSTALL_IOLIB_DIR)/libCleanolit.so: $(INSTALL_IOLIB_DIR)/libCleanolit.so.1.0
	$(RM) $@ ; ln -s $? $@

$(INSTALL_IOLIB_DIR)/x.lo: $(INSTALL_IOLIB_DIR)/$(DEFAULT_TOOLKIT).lo
	$(RM) $@ ; ln -s $? $@
$(INSTALL_IOLIB_DIR)/xs.lo: $(INSTALL_IOLIB_DIR)/$(DEFAULT_TOOLKIT)s.lo
	$(RM) $@ ; ln -s $? $@

#
# Commands
#

.SUFFIXES: .h .fcl .icl .dcl .abc .o

RANLIB = ranlib
# RANLIB = /bin/true
FCLC = fclc
HTOCLEAN = htoclean
CLM = clm
CLMFLAGS = -nw

# Solaris:
# LDSHARED = -G

.h.dcl:
	$(HTOCLEAN) $<

.h.icl:
	$(HTOCLEAN) $<

.fcl.o:
	$(FCLC) $<
	$(CLM) $(CLMFLAGS) -O $*

.fcl.dcl:
	$(FCLC) $<

.fcl.icl:
	$(FCLC) $<

.icl.abc:
	$(CLM) $(CLMFLAGS) -ABC $*

.icl.o:
	$(CLM) $(CLMFLAGS) -O $*

.abc.o:
	$(CLM) $(CLMFLAGS) -O $*


xcursor.icl : xcursor.h

xcursor.dcl : xcursor.h

Clean\ System\ Files/xcursor.o : xcursor.icl xcursor.dcl
	$(RM) Clean\ System\ Files/xcursor.abc
	$(CLM) -nw -O xcursor

xfileselect.icl : xfileselect.h

xfileselect.dcl : xfileselect.h

Clean\ System\ Files/xfileselect.o : xfileselect.icl xfileselect.dcl
	$(RM) Clean\ System\ Files/xfileselect.abc
	$(CLM) -nw -O xfileselect

xpath.icl : xpath.h

xpath.dcl : xpath.h

Clean\ System\ Files/xpath.o : xpath.icl xpath.dcl
	$(RM) Clean\ System\ Files/xpath.abc
	$(CLM) -nw -O xpath

xdialog.icl : xdialog.h

xdialog.dcl : xdialog.h

Clean\ System\ Files/xdialog.o : xdialog.icl xdialog.dcl
	$(RM) Clean\ System\ Files/xdialog.abc
	$(CLM) -nw -O xdialog

xkernel.icl : xkernel.h

xkernel.dcl : xkernel.h

Clean\ System\ Files/xkernel.o : xkernel.icl xkernel.dcl
	$(RM) Clean\ System\ Files/xkernel.abc
	$(CLM) -nw -O xkernel

xpicture.icl : xpicture.h

xpicture.dcl : xpicture.h

Clean\ System\ Files/xpicture.o : xpicture.icl xpicture.dcl
	$(RM) Clean\ System\ Files/xpicture.abc
	$(CLM) -nw -O xpicture

xwindow.icl : xwindow.h

xwindow.dcl : xwindow.h

Clean\ System\ Files/xwindow.o : xwindow.icl xwindow.dcl
	$(RM) Clean\ System\ Files/xwindow.abc
	$(CLM) -nw -O xwindow

xmenu.icl : xmenu.h

xmenu.dcl : xmenu.h

Clean\ System\ Files/xmenu.o : xmenu.icl xmenu.dcl
	$(RM) Clean\ System\ Files/xmenu.abc
	$(CLM) -nw -O xmenu

xtimer.icl : xtimer.h

xtimer.dcl : xtimer.h

Clean\ System\ Files/xtimer.o : xtimer.icl xtimer.dcl
	$(RM) Clean\ System\ Files/xtimer.abc
	$(CLM) -nw -O xtimer

Clean\ System\ Files/deltaControls.o : deltaControls.icl deltaControls.dcl
	$(CLM) -nw -O deltaControls

Clean\ System\ Files/deltaFont.o : deltaFont.icl deltaFont.dcl
	$(CLM) -nw -O deltaFont

Clean\ System\ Files/deltaPicture.o : deltaPicture.icl deltaPicture.dcl
	$(CLM) -nw -O deltaPicture

Clean\ System\ Files/deltaDialog.o : deltaDialog.icl deltaDialog.dcl
	$(CLM) -nw -O deltaDialog

Clean\ System\ Files/deltaIOState.o : deltaIOState.icl deltaIOState.dcl
	$(CLM) -nw -O deltaIOState

Clean\ System\ Files/deltaSystem.o : deltaSystem.icl deltaSystem.dcl
	$(CLM) -nw -O deltaSystem

Clean\ System\ Files/deltaEventIO.o : deltaEventIO.icl deltaEventIO.dcl
	$(CLM) -nw -O deltaEventIO

Clean\ System\ Files/deltaIOSystem.o : deltaIOSystem.icl deltaIOSystem.dcl
	$(CLM) -nw -O deltaIOSystem

Clean\ System\ Files/deltaTimer.o : deltaTimer.icl deltaTimer.dcl
	$(CLM) -nw -O deltaTimer

Clean\ System\ Files/deltaFileSelect.o : deltaFileSelect.icl deltaFileSelect.dcl
	$(CLM) -nw -O deltaFileSelect

Clean\ System\ Files/deltaMenu.o : deltaMenu.icl deltaMenu.dcl
	$(CLM) -nw -O deltaMenu

Clean\ System\ Files/deltaWindow.o : deltaWindow.icl deltaWindow.dcl
	$(CLM) -nw -O deltaWindow

Clean\ System\ Files/commonDef.o : commonDef.icl commonDef.dcl
	$(CLM) -nw -O commonDef

Clean\ System\ Files/dialogDef.o : dialogDef.icl dialogDef.dcl
	$(CLM) -nw -O dialogDef

Clean\ System\ Files/menuDef.o : menuDef.icl menuDef.dcl
	$(CLM) -nw -O menuDef

Clean\ System\ Files/timerDef.o : timerDef.icl timerDef.dcl
	$(CLM) -nw -O timerDef

Clean\ System\ Files/windowDef.o : windowDef.icl windowDef.dcl
	$(CLM) -nw -O windowDef

Clean\ System\ Files/dialogDevice.o : dialogDevice.icl dialogDevice.dcl
	$(CLM) -nw -O dialogDevice

Clean\ System\ Files/menuDevice.o : menuDevice.icl menuDevice.dcl
	$(CLM) -nw -O menuDevice

Clean\ System\ Files/timerDevice.o : timerDevice.icl timerDevice.dcl
	$(CLM) -nw -O timerDevice

Clean\ System\ Files/windowDevice.o : windowDevice.icl windowDevice.dcl
	$(CLM) -nw -O windowDevice

Clean\ System\ Files/cursorInternal.o : cursorInternal.icl cursorInternal.dcl
	$(CLM) -nw -O cursorInternal

Clean\ System\ Files/ioState.o : ioState.icl ioState.dcl
	$(CLM) -nw -O ioState

Clean\ System\ Files/scrollList.o : scrollList.icl scrollList.dcl
	$(CLM) -nw -O scrollList

Clean\ System\ Files/sliderBar.o : sliderBar.icl sliderBar.dcl
	$(CLM) -nw -O sliderBar

Clean\ System\ Files/misc.o : misc.icl misc.dcl
	$(CLM) -nw -O misc

Clean\ System\ Files/picture.o : picture.icl picture.dcl
	$(CLM) -nw -O picture

Clean\ System\ Files/xevent.o : xevent.icl xevent.dcl
	$(CLM) -nw -O xevent

Clean\ System\ Files/xtypes.o : xtypes.icl xtypes.dcl
	$(CLM) -nw -O xtypes
