# Copyright (C) 1993 by the author(s).
# 
# This software is published in the hope that it will be useful, but
# WITHOUT ANY WARRANTY for any part of this software to work correctly
# or as described in the manuals. See the ShapeTools Public License
# for details.
#
# Permission is granted to use, copy, modify, or distribute any part of
# this software but only under the conditions described in the ShapeTools 
# Public License. A copy of this license is supposed to have been given
# to you along with ShapeTools in a file named LICENSE. Among other
# things, this copyright notice and the Public License must be
# preserved on all copies.

#
# shape_CM environment -- general targets for Makefiles
#
# Authors: Andreas Lampen (Andreas.Lampen@cs.tu-berlin.de)
#          Axel Mahler (Axel.Mahler@cs.tu-berlin.de)
#
# Modified by: Karl-Heinz Koester (Karl-Heinz.Koester@sietec.de)
#
# $__Header$
#

localinstallbin: $(BINTARGET)
	@-if [ -n "$(BINTARGET)" ]; \
	then \
	  echo "installing $(BINTARGET) in $(LOCALBINPATH)"; \
	  rm -f $(LOCALBINPATH)/$(BINTARGET); \
	  cp $(BINTARGET) $(LOCALBINPATH)/$(BINTARGET); \
	  chmod $(LOCALBINMODE) $(LOCALBINPATH)/$(BINTARGET); \
	  _aliases="$(ALIASES)"; \
	  for i in $$_aliases; \
	  do \
	    rm -f $(LOCALBINPATH)/$$i; \
	    echo "linking $(LOCALBINPATH)/$(BINTARGET) to $(LOCALBINPATH)/$$i"; \
  	    ln $(LOCALBINPATH)/$(BINTARGET) $(LOCALBINPATH)/$$i; \
	  done; \
	fi

localinstalllib: $(LIBTARGET)
	@-if [ -n "$(LIBTARGET)" ]; \
	then \
	  echo "installing $(LIBTARGET) in $(LOCALLIBPATH)"; \
	  rm -f $(LOCALLIBPATH)/$(LIBTARGET); \
	  cp $(LIBTARGET) $(LOCALLIBPATH)/$(LIBTARGET); \
	  chmod $(LOCALLIBMODE) $(LOCALLIBPATH)/$(LIBTARGET); \
	  ($(RANLIB) $(LOCALLIBPATH)/$(LIBTARGET)) 2> /dev/null; \
	fi

localinstallsharedlib: $(SHAREDLIBTARGET)
	@-if [ -n "$(SHAREDLIBTARGET)" ]; \
	then \
	  echo "installing $(SHAREDLIBTARGET) in $(LOCALLIBPATH)"; \
	  if [ -f $(LOCALLIBPATH)/$(SHAREDLIBTARGET) ] ;\
	  then \
	    mv -f $(LOCALLIBPATH)/$(SHAREDLIBTARGET) \
	          $(LOCALLIBPATH)/$(SHAREDLIBTARGET).old;\
	  fi; \
	  cp $(SHAREDLIBTARGET) $(LOCALLIBPATH)/$(SHAREDLIBTARGET); \
	  chmod $(LOCALBINMODE) $(LOCALLIBPATH)/$(SHAREDLIBTARGET); \
	fi

localinstallheaders: $(PUBLIC_HEADERS) $(GLOBAL_HEADERS)
	@-_headers="$(PUBLIC_HEADERS)"; \
	for i in $$_headers; \
	do \
	  echo "installing $$i in $(LOCALINCPATH)"; \
	  rm -f $(LOCALINCPATH)/$$i; \
	  cp $$i $(LOCALINCPATH)/$$i; \
	  chmod $(LOCALINCMODE) $(LOCALINCPATH)/$$i; \
	done
	@-_headers="$(GLOBAL_HEADERS)"; \
	for i in $$_headers; \
	do \
	  echo "installing $$i in $(LOCALINCPATH)"; \
	  rm -f $(LOCALINCPATH)/$$i; \
	  cp $$i $(LOCALINCPATH)/$$i; \
	  chmod $(LOCALINCMODE) $(LOCALINCPATH)/$$i; \
	done

localinstallemacsmode: $(ELISP_SRC) $(EINFO_SRC)
	@-_sources="$(ELISP_SRC)"; \
	for i in $$_sources; \
	do \
	  echo "installing $$i in $(LOCALEMACSLISPPATH)"; \
	  rm -f $(LOCALEMACSLISPPATH)/$$i; \
	  cp $$i $(LOCALEMACSLISPPATH)/$$i; \
	  chmod $(LOCALEMACSLISPMODE) $(LOCALEMACSLISPPATH)/$$i; \
	done
	@-_infos="$(EINFO_SRC)"; \
	for i in $$_infos; \
	do \
	  echo "installing $$i in $(LOCALEMACSINFOPATH)"; \
	  rm -f $(LOCALEMACSINFOPATH)/$$i; \
	  cp $$i $(LOCALEMACSINFOPATH)/$$i; \
	  chmod $(LOCALEMACSINFOMODE) $(LOCALEMACSINFOPATH)/$$i; \
	done

installbin: $(BINTARGET)
	@-if [ -n "$(BINTARGET)" ]; \
	then \
 	  echo "installing $(BINTARGET) in $(INSTALLBINPATH)"; \
	  rm -f $(INSTALLBINPATH)/$(BINTARGET); \
	  cp $(BINTARGET) $(INSTALLBINPATH)/$(BINTARGET); \
	  chmod $(INSTALLBINMODE) $(INSTALLBINPATH)/$(BINTARGET); \
	  _aliases="$(ALIASES)"; \
	  for i in $$_aliases; \
	  do \
	    rm -f $(INSTALLBINPATH)/$$i; \
	    echo "linking $(INSTALLBINPATH)/$(BINTARGET) to $(INSTALLBINPATH)/$$i"; \
	    ln $(INSTALLBINPATH)/$(BINTARGET) $(INSTALLBINPATH)/$$i; \
	  done; \
	fi

installlib: $(LIBTARGET)
	@-if [ -n "$(LIBTARGET)" ]; \
	then \
	  echo "installing $(LIBTARGET) in $(INSTALLLIBPATH)"; \
	  rm -f $(INSTALLLIBPATH)/$(LIBTARGET); \
	  cp $(LIBTARGET) $(INSTALLLIBPATH)/$(LIBTARGET); \
	  chmod $(INSTALLLIBMODE) $(INSTALLLIBPATH)/$(LIBTARGET); \
	  ($(RANLIB) $(INSTALLLIBPATH)/$(LIBTARGET)) 2> /dev/null; \
	fi

installsharedlib: $(SHAREDLIBTARGET)
	@-if [ -n "$(SHAREDLIBTARGET)" ]; \
	then \
	  echo "installing $(SHAREDLIBTARGET) in $(INSTALLLIBPATH)"; \
	  if [ -f $(INSTALLLIBPATH)/$(SHAREDLIBTARGET) ] ;\
	  then \
	    mv -f $(INSTALLLIBPATH)/$(SHAREDLIBTARGET) \
	          $(INSTALLLIBPATH)/$(SHAREDLIBTARGET).old;\
	  fi; \
	  cp $(SHAREDLIBTARGET) $(INSTALLLIBPATH)/$(SHAREDLIBTARGET); \
	  chmod $(INSTALLBINMODE) $(INSTALLLIBPATH)/$(SHAREDLIBTARGET); \
	fi

installheaders: $(PUBLIC_HEADERS)
	@-_headers="$(PUBLIC_HEADERS)"; \
	for i in $$_headers; \
	do \
	  echo "installing $$i in $(INSTALLINCPATH)"; \
	  rm -f $(INSTALLINCPATH)/$$i; \
	  cp $$i $(INSTALLINCPATH)/$$i; \
	  chmod $(INSTALLINCMODE) $(INSTALLINCPATH)/$$i; \
	done

installmanuals: $(MANUALS)
	@-_manuals="$(MAN1)"; \
	for i in $$_manuals; \
	do \
	  echo "installing $$i in $(INSTALLMANPATH)/man1"; \
	  rm -f $(INSTALLMANPATH)/man1/$$i; \
	  cp $$i $(INSTALLMANPATH)/man1/$$i; \
	  chmod $(INSTALLMANMODE) $(INSTALLMANPATH)/man1/$$i; \
	done
	@-_manuals="$(MAN3)"; \
	for i in $$_manuals; \
	do \
	  echo "installing $$i in $(INSTALLMANPATH)/man3"; \
	  rm -f $(INSTALLMANPATH)/man3/$$i; \
	  cp $$i $(INSTALLMANPATH)/man3/$$i; \
	  chmod $(INSTALLMANMODE) $(INSTALLMANPATH)/man3/$$i; \
	done
	@-_manuals="$(MAN4)"; \
	for i in $$_manuals; \
	do \
	  echo "installing $$i in $(INSTALLMANPATH)/man4"; \
	  rm -f $(INSTALLMANPATH)/man4/$$i; \
	  cp $$i $(INSTALLMANPATH)/man4/$$i; \
	  chmod $(INSTALLMANMODE) $(INSTALLMANPATH)/man4/$$i; \
	done
	@-_manuals="$(MAN5)"; \
	for i in $$_manuals; \
	do \
	  echo "installing $$i in $(INSTALLMANPATH)/man5"; \
	  rm -f $(INSTALLMANPATH)/man5/$$i; \
	  cp $$i $(INSTALLMANPATH)/man5/$$i; \
	  chmod $(INSTALLMANMODE) $(INSTALLMANPATH)/man5/$$i; \
	done
	@-_manuals="$(MAN7)"; \
	for i in $$_manuals; \
	do \
	  echo "installing $$i in $(INSTALLMANPATH)/man7"; \
	  rm -f $(INSTALLMANPATH)/man7/$$i; \
	  cp $$i $(INSTALLMANPATH)/man7/$$i; \
	  chmod $(INSTALLMANMODE) $(INSTALLMANPATH)/man7/$$i; \
	done

installemacsmode: $(ELISP_SRC) $(EINFO_SRC)
	@-_sources="$(ELISP_SRC)"; \
	for i in $$_sources; \
	do \
	  echo "installing $$i in $(INSTALLEMACSLISPPATH)"; \
	  rm -f $(INSATLLEMACSLISPPATH)/$$i; \
	  cp $$i $(INSTALLEMACSLISPPATH)/$$i; \
	  chmod $(INSTALLEMACSLISPMODE) $(INSTALLEMACSLISPPATH)/$$i; \
	done
	@-_infos="$(EINFO_SRC)"; \
	for i in $$_infos; \
	do \
	  echo "installing $$i in $(INSTALLEMACSINFOPATH)"; \
	  rm -f $(INSATLLEMACSINFOPATH)/$$i; \
	  cp $$i $(INSTALLEMACSINFOPATH)/$$i; \
	  chmod $(INSTALLEMACSINFOMODE) $(INSTALLEMACSINFOPATH)/$$i; \
	done

# Recursive builds. Performed *before* building $(BINTARGET)

MAKEPARAMS = 	SYSTEM=$(SYSTEM) \
		MACHINE=$(MACHINE) \
		OFILEFMT=$(OFILEFMT) \
		CCOMP=$(CCOMP) \
		INSTALLBASE=$(INSTALLBASE) \
		INSTALLBINPATH=$(INSTALLBINPATH) \
		INSTALLBINMODE=$(INSTALLBINMODE) \
		INSTALLINCPATH=$(INSTALLINCPATH) \
		INSTALLINCMODE=$(INSTALLINCMODE) \
		INSTALLLIBPATH=$(INSTALLLIBPATH) \
		INSTALLLIBMODE=$(INSTALLLIBMODE) \
		INSTALLMANPATH=$(INSTALLMANPATH) \
		INSTALLMANMODE=$(INSTALLMANMODE) \
		INSTALLEMACSLISPPATH=$(INSTALLEMACSLISPPATH) \
		INSTALLEMACSLISPMODE=$(INSTALLEMACSLISPMODE) \
		INSTALLEMACSINFOPATH=$(INSTALLEMACSINFOPATH) \
		INSTALLEMACSINFOMODE=$(INSTALLEMACSINFOMODE) \
		LOCAL=$(LOCAL) \
		LOCALBINPATH=$(LOCALBINPATH) \
		LOCALBINMODE=$(LOCALBINMODE) \
		LOCALLIBPATH=$(LOCALLIBPATH) \
		LOCALLIBMODE=$(LOCALLIBMODE) \
		LOCALINCPATH=$(LOCALINCPATH) \
		LOCALINCMODE=$(LOCALINCMODE) \
		LOCALEMACSLISPPATH=$(LOCALEMACSLISPPATH) \
		LOCALEMACSLISPMODE=$(LOCALEMACSLISPMODE) \
		LOCALEMACSINFOPATH=$(LOCALEMACSINFOPATH) \
		LOCALEMACSINFOMODE=$(LOCALEMACSINFOMODE) \
		MAKE="$(MAKE)" \
		SHELL="$(SHELL)" \
		COOLROOT="$(COOLROOT)" \
		COOL="$(COOL)" \
		LEX="$(LEX)" \
		YACC="$(YACC)" \
		CC="$(CC)" \
		CPP="$(CPP)" \
		MAKELFLAGS="$(MAKELFLAGS)" \
		MAKEYFLAGS="$(MAKEYFLAGS)" \
		MAKECPPFLAGS="$(MAKECPPFLAGS)" \
		MAKECOOLFLAGS="$(MAKECOOLFLAGS)" \
		MAKECFLAGS="$(MAKECFLAGS)" \
		MAKELDFLAGS="$(MAKELDFLAGS)" \
		SHLIBGENFLAGS="${SHLIBGENFLAGS}" \
		SYSLIBS="$(SYSLIBS)" \
		RANLIB="$(RANLIB)" \
		BINDDEFAULT="$(BINDDEFAULT)" \
		QUALITY="$(QUALITY)" \
		BASE="$(BASE)" \
		DELIVERYBASE="$(DELIVERYBASE)" \
		SHAPELIBPATH="$(SHAPELIBPATH)"

subsystems:
	@_subsystems="$(SUBSYSTEMS)"; \
	for i in $$_subsystems; \
	do \
	  echo cd $$i; \
	  (cd $$i; $(MAKE) $(MAKEPARAMS) \
		ALLTARGETS= \
		MAINTARGET= \
		$(MAINTARGET) ); \
	done

# --------------------------------------------------------------------
#			internals (do not modify)
# --------------------------------------------------------------------

build: +build $(ALLTARGETS)

localinstall: +localinstall $(ALLTARGETS)

install: +install $(ALLTARGETS)

clean: +clean $(ALLTARGETS)

+build:
	@-if [ -n "$(ALLTARGETS)" ]; \
	then : ; \
	else \
	  $(MAKE) $(MAKEPARAMS) \
                ALLTARGETS="subsystems targets" \
		MAINTARGET=localinstall \
		build; \
	fi

+localinstall:
	@-if [ -n "$(ALLTARGETS)" ]; \
	then : ; \
	else \
	  $(MAKE) $(MAKEPARAMS) \
		ALLTARGETS="subsystems localinstalltargets" \
		MAINTARGET=localinstall \
		localinstall; \
	fi

+install:
	@-if [ -n "$(ALLTARGETS)" ]; \
	then : ; \
	else \
	  $(MAKE) $(MAKEPARAMS) \
		ALLTARGETS="subsystems installtargets" \
		MAINTARGET=install \
		install; \
	fi

+clean:
	@-if [ -n "$(ALLTARGETS)" ]; \
	then : ; \
	else \
	  $(MAKE) $(MAKEPARAMS) \
		ALLTARGETS="subsystems doclean" \
		MAINTARGET=clean \
		clean; \
	fi
