#
# Installation Makefile for Clean
#
#
#	make (= make install):
#		install the Clean compiler
#
#	make io:
#		install the Clean compiler
#		compile and install the Clean IO library
# 
#	make cleanup:
#		remove all files that can be recreated
#
# This Makefile can be used with both make (Sun) and gmake (GNU make)
#

#
# START site dependent make variables
#

#
# By default the Clean compiler is installed in the current
# directory. You can change the following variables to install
# it elsewhere. 
#

INSTALL_DIR = $(CURRENTDIR)

INSTALL_BIN_DIR = $(INSTALL_DIR)/bin

INSTALL_LIB_DIR = $(INSTALL_DIR)/lib

INSTALL_MAN_DIR = $(INSTALL_DIR)/man

# Uncomment the next line for RedHat 5.0
# PATCHES = patch_redhat5.0

#
# The OPENWINHOME variable is only used when you install the Clean
# IO library. It should point to the directory where OpenWindows
# is installed on your system.
#
OPENWINHOME = /usr/openwin

#
# END site dependent make variables
#


#
# The default entry
#
default: install

#
# Be quiet
#
.SILENT:
MAKEFLAGS = s

#
# The following piece of witchcraft sets the value of CURRENTDIR
# for both make and gmake.
#
CURRENTDIR = $(MAKECURRENTDIR)$(GMAKECURRENTDIR)
MAKECURRENTDIR : sh=pwd
GMAKECURRENTDIR = ${shell echo `pwd`}

#
# Install section
#
install: install_bin install_stdenv install_man $(PATCHES)
	$(PATCH_BIN) $(INSTALL_CLM) CLEANLIB $(INSTALL_EXE_DIR)
	
io: install install_iolib
cleanup: cleanup_stdenv cleanup_iolib

#
# Commands section
#
CLM = \
'CLEANLIB=$(CURRENTDIR)/exe;export CLEANLIB;CLEANPATH=$(CURRENTDIR)/stdenv;export CLEANPATH;$(CURRENTDIR)/bin/clm'
CLMFLAGS = -nw
FCLC = $(CURRENTDIR)/bin/fclc

PATCH_BIN = $(CURRENTDIR)/bin/patch_bin

#
# Binaries
#
BIN_FILES = clm
EXE_FILES = cocl cg
IDE_FILES = CleanIDE CleanIDEConfig

INSTALL_BIN_FILES = $(BIN_FILES:%=$(INSTALL_BIN_DIR)/%)
INSTALL_CLM = $(INSTALL_BIN_DIR)/clm

INSTALL_EXE_DIR = $(INSTALL_LIB_DIR)/exe
INSTALL_EXE_FILES = $(EXE_FILES:%=$(INSTALL_EXE_DIR)/%)
INSTALL_IDE_FILES = $(IDE_FILES:%=$(INSTALL_LIB_DIR)/%)
INSTALL_HELP_FILES = $(INSTALL_LIB_DIR)/Clean\ Help

install_bin : $(INSTALL_BIN_DIR) $(INSTALL_BIN_FILES) \
				$(INSTALL_EXE_DIR) $(INSTALL_EXE_FILES) \
				$(INSTALL_IDE_FILES) $(INSTALL_HELP_FILES)

DEL = %

$(INSTALL_BIN_DIR):
	install -m 755 -d $@

$(INSTALL_BIN_DIR)/% : bin/%
	install -m 711 $< $@

$(INSTALL_EXE_DIR):
	install -m 755 -d $@

$(INSTALL_EXE_DIR)/% : exe/%
	install -m 711 $< $@

$(INSTALL_LIB_DIR)/CleanIDE : data/CleanIDE
	install -m 711 data/CleanIDE $@
	ln -s $(INSTALL_LIB_DIR)/CleanIDE $(INSTALL_BIN_DIR)/CleanIDE

$(INSTALL_LIB_DIR)/CleanIDEConfig : CleanIDEConfig
	sed -e s\$(DEL)'$$STDENV'$(DEL)$(INSTALL_STDENV_DIR)$(DEL)g CleanIDEConfig > $@
	chmod 644 $@

#	install -m 644 CleanIDEConfig $@

$(INSTALL_LIB_DIR)/Clean\ Help : data/Clean\ Help
	install -m 644 "data/Clean Help" "$@"

#
# Clean Standard Environment
#
INSTALL_STDENV_DIR = $(INSTALL_LIB_DIR)/stdenv

install_stdenv :
	cd stdenv; \
	$(MAKE) install \
		INSTALL_STDENV_DIR=$(INSTALL_STDENV_DIR) \
		CLM=$(CLM) \
		CLMFLAGS=$(CLMFLAGS)
	$(PATCH_BIN) $(INSTALL_CLM) CLEANPATH $(INSTALL_STDENV_DIR); \
	cd $(INSTALL_STDENV_DIR)/Clean\ System\ Files ; $(RM) libCleanxv.a ; ln -s ../../iolib/libCleanxv.a .

cleanup_stdenv :
	cd stdenv; $(MAKE) cleanup

#
# Clean IO Library
#
INSTALL_IOLIB_DIR = $(INSTALL_LIB_DIR)/iolib

install_iolib :
	cd iolib; \
	$(MAKE) install \
		INSTALL_IOLIB_DIR=$(INSTALL_IOLIB_DIR) \
		OPENWINHOME=$(OPENWINHOME) \
		CLM=$(CLM) \
		CLMFLAGS="$(CLMFLAGS) -d" \
		FCLC=$(FCLC)
	$(PATCH_BIN) $(INSTALL_CLM) CLEANPATH \
					$(INSTALL_STDENV_DIR):$(INSTALL_IOLIB_DIR)

cleanup_iolib :
	cd iolib; $(MAKE) cleanup

#
# Clean man pages
#

MAN_FILES = man1/clm.1

INSTALL_MAN_FILES = $(MAN_FILES:%=$(INSTALL_MAN_DIR)/%)

install_man : $(INSTALL_MAN_DIR)/man1 $(INSTALL_MAN_FILES)

$(INSTALL_MAN_DIR)/man1 :
	install -d $@

$(INSTALL_MAN_DIR)/man1/% : man/man1/%
	install -m 644 $< $@

