######################################################################### 
#									# 
#   File: scorpion/Makefile 
#				 					# 
#   Copyright (C) 1991 Karen Shannon
#									# 
#   The Scorpion System is free software in the public domain; you can  # 
#   redistribute it and/or modify it as you wish. We ask that you 	# 
#   retain credits referencing the University of Arizona and that you	# 
#   identify any changes you make.					# 
#									# 
#   Report problems to scorpion-project@cs.arizona.edu			# 
#   Direct all inquiries to:	The Scorpion Project			# 
#				Department of Computer Science		# 
#				Gould-Simpson Building			# 
#				University of Arizona			# 
#				Tucson, AZ 85721			# 
#				U.S.A.					# 
#									# 
#   Revision Log:							# 
#	$Log:$ 
#									# 
#   Edit Log:								# 
#									# 
######################################################################### 


############ Options for creating the Scorpion System ###################
# Makefile variables must have the no spaces between the `='
# and the name of the variable. For example,
#	HASPASCAL= false
# is okay and so is
#	HASPASCAL=true
# but
#	HASPASCAL =true
# causes problems when updating lower level makefiles. Also, do not
# put any comments on the same line as the variable definition. The
# following will cause problems.
#	TOPLEVELDESTDIR=/usr/scorpion      # was /usr/local/scorpion


# The following is only used in *DEST, and then only if all the
# destinations reside in a single directory.

TOPLEVELDESTDIR=/usr/local/scorpion

# destinations for doc, include, bin, lib, src, and man directories

DOCDEST=$(TOPLEVELDESTDIR)/doc
INCDEST=$(TOPLEVELDESTDIR)/include
BINDEST=$(TOPLEVELDESTDIR)/bin
LIBDEST=$(TOPLEVELDESTDIR)/lib
SRCDEST=$(TOPLEVELDESTDIR)/src
MANDEST=$(TOPLEVELDESTDIR)/man
HELPDEST=$(TOPLEVELDESTDIR)/help
MISCDEST=$(TOPLEVELDESTDIR)/misc
EXAMPLEDEST=$(DOCDEST)/examples

# Set the machine to sun, sparc, hp9000, vax, sequent, next or mips.

MACHINE=sparc

# Yacc does not work on the suns (bombs on large files) and generates bad
# code on mips. 
# We have provided the yacc output for two large files in case you are
# using these machines.
# Set RUNYACC to false if you have problems with yacc.
# We recommend setting this variable to false.

RUNYACC=false

# On DEC3100, and SEQUENT lex produces code which causes a core dump in
# idlread. We have provided the lex output for one file. Set RUNLEX to false
# if you have any problems.
# We recommend setting this variable to false.

RUNLEX=false

# If you want to run lint on the system is desired, then lint libraries
# need to be created. These libraries are created during the make
# Libraries phase. Set to true or false as needed. 

LINTLIBRARY=true

# If the target machine does not have a Pascal compiler, then set
# HASPASCAL to false. This will prevent treepr, which is
# written in Pascal, also the libidlP library won't be installed.

HASPASCAL=true

# Set the flag below to DEBUG or OPTIMIZE, depending on how you want the 
# system to be compiled

HOWTOCOMPILE=OPTIMIZE

# Set the C and Pascal compilation flags appropriately. Do not specify 
# debugging/optimizing flags in CFLAGS/PFLAGS. All debugging/optimizating 
# information should be specified in DEBUG_?FLAGS and OPTIMIZE_?FLAGS.
# Debug flags must be specified because some files in the system have
# to be compiled with debugging on. Following settings are highly recommended.

MYCFLAGS=-I$(INCDEST)
DEBUG_CFLAGS=-g
OPTIMIZE_CFLAGS=-O

MYPFLAGS=-w
DEBUG_PFLAGS=-g
OPTIMIZE_PFLAGS=-O

# If extra copies of the libraries with debugging information are required
# set the following to true. Else set to false.

DEBUGLIBRARY=true

# Unix Utilities: Set the following flags with the pathnames existing 
# on your system.

# To set the protection, group, and owner flags, specify the command and 
# options below. If any of them is not usable, set it to $(NOOP).

CHMOD=/usr/bin/chmod 755 
CHOWN=/etc/chown bin
CHGRP=/usr/bin/chgrp scorpion

AR=/usr/bin/ar ru
CAT=/bin/cat
CC=/bin/cc
CP=/bin/cp
FIND=/usr/bin/find
LEX=/usr/bin/lex
LINT=/usr/bin/lint
MAKE=/bin/make
MV=/bin/mv
PC=/usr/ucb/pc
RANLIB=/usr/bin/ranlib
RM=/bin/rm -f
RMDIR=/usr/bin/rmdir
SED=/usr/bin/sed
SHELL=/bin/sh
STRIP=/usr/bin/strip
TOUCH=/usr/bin/touch -c
YACC=/usr/bin/yacc -d

# Document processing commands:

TEX=/usr/local/tex

LATEX=/usr/local/latex

EQN=/usr/bin/eqn
PIC=/usr/local/pic
SOELIM=/usr/ucb/soelim
TBL=/usr/bin/tbl
PSROFF=/usr/local/psroff

PRINT=/usr/ucb/lpr -Plw0
PRINTDVI=/usr/ucb/lpr -Plw0 -d

#### IDLVIEW Installation:

# A number of variables must be set. If you want idlview to be installed 
# set the following to true. If set to false you may skip other idlview 
# flags

INSTALLIDLVIEW=true

# Set the following to true or false, depending on the available window systems.
# Note that OpenWindows is not supported currently. So it must be set to false.

HASOPENWINDOWS=false
HASSUNTOOLS=true
HASXWINDOWS=true

# For the window systems chosen, specify the libraries to be compiled with:

OPENWINDOWSLIB=-lXaw -lXmu -lXt -lXext -lX11
SUNTOOLSLIB=-lsuntool -lsunwindow -lpixrect
XWINDOWSLIB=-lXaw -lXmu -lXt -lXext -lX11

# Specify below the default window system do be assumed by idlview
# Possible values are SUNTOOLS and XWINDOWS.

DEFAULTWM=SUNTOOLS

# Set the following variable to true for only one architecture for which
# scorpion is being compiled. There must be only one master process 
# for each LAN.

COMPILEMASTER=true

# The following variable specifies the name of the machine on which the 
# idlview master process will execute. 

MASTERHOST=cheltenham

# A file is created by the idlview master for internal processing. Specify the 
# file name

MASTERFILE=/tmp/IDLidlview_master.status

# idlbrowse interfaces with idlview. To share their data a common file is
# used. Specify the pathname below

IDLBROWSEFILE=/tmp/IDLbrowse.temp

## End of idlview

# In the following, we recommend that you not use toggle options (such
# as -nc or -h) that would have exactly the opposite of the desired effect
# if they also appeared in lower level Makefiles.

IDLC=$(BINDEST)/idlc
IDLCFLAGS=-v

# Lint flags: 

LINTFLAGS=-abx

###################### END OF CUSTOMIZATION ####################################

######### INTERNAL VARIABLES #################

#### EDITED FLAGS ##

CWD=

CFLAGS=
#Debug C flag for files that require debug info
D_CFLAGS=
#No Optimize C flag for files that cannot be optimized (too large)
NO_CFLAGS=

PFLAGS=
#Debug P flag for files that require debug info
D_PFLAGS=
#No Optimize P flag for files that cannot be optimized (too large)
NO_PFLAGS=

#### END OF EDITED FLAGS

INSTALL=$(CWD)/bin/install -c "$(CP)" -m "$(CHMOD)" -o "$(CHOWN)" -g "$(CHGRP)"

THISMAKEFILE=Makefile
SEDFILE=Makefile.sedfile

NOOP=$(CWD)/bin/noop
UPDATEMAKEFILE=$(CWD)/bin/updatemakefile -m "$(MV)" -s "$(SED)" $(SEDFILE)

IDLVIEWVARS='INSTALLIDLVIEW=$(INSTALLIDLVIEW)' 'HASSUNTOOLS=$(HASSUNTOOLS)'\
    	      'HASXWINDOWS=$(HASXWINDOWS)' 'HASOPENWINDOWS=$(HASOPENWINDOWS)' \
	      'OPENWINDOWSLIB=$(OPENWINDOWSLIB)' 'XWINDOWSLIB=$(XWINDOWSLIB)'\
	      'DEFAULTWM=$(DEFAULTWM)' 'COMPILEMASTER=$(COMPILEMASTER)' \
	      'MASTERHOST=$(MASTERHOST)' 'MASTERFILE=$(MASTERFILE)' \
	      'IDLBROWSEFILE=$(IDLBROWSEFILE)'

LINTVARS='LINT=$(LINT)' 'LINTFLAGS=$(LINTFLAGS)' 'LINTINC=$(LINTINC)' \
	 'MACHINE=$(MACHINE)' 'LIBDIR=$(LIBDIR)'

INSTALLVARS='INSTALL=$(INSTALL)' 'CHMOD=$(CHMOD)' 'CHGRP=$(CHGRP)' \
	    'CHOWN=$(CHOWN)' 'MACHINE=$(MACHINE)' 

UTILITYVARS='AR=$(AR)' 'CC=$(CC)' 'PC=$(PC)' 'IDLC=$(IDLC)' 'FIND=$(FIND)' \
	'CFLAGS=$(CFLAGS)' 'IDLCFLAGS=$(IDLCFLAGS)' 'PFLAGS=$(PFLAGS)' \
	'CP=$(CP)' 'MV=$(MV)' 'RM=$(RM)' 'LEX=$(LEX)' 'MAKE=$(MAKE)' \
	'YACC=$(YACC)' 'MACHINE=$(MACHINE)' 'SED=$(SED)' 'SHELL=$(SHELL)'\
	'LINT=$(LINT)' 'RANLIB=$(RANLIB)' 'CAT=$(CAT)' 'TOUCH=$(TOUCH)' \
	'RMDIR=$(RMDIR)' 'STRIP=$(STRIP)' 

ALLPARAMS='DOCDEST=$(DOCDEST)' 'INCDEST=$(INCDEST)' 'BINDEST=$(BINDEST)' \
        'LIBDEST=$(LIBDEST)' 'SRCDEST=$(SRCDEST)' 'MANDEST=$(MANDEST)' \
        'HELPDEST=$(HELPDEST)' 'MISCDEST=$(MISCDEST)' \
	'EXAMPLEDEST=$(EXAMPLEDEST)' 'RUNYACC=$(RUNYACC)' 'MACHINE=$(MACHINE)' \
	'INSTALLIDLVIEW=$(INSTALLIDLVIEW)' 'HASPASCAL=$(HASPASCAL)' \
	$(UTILITYVARS)

DOCVARS='EQN=$(EQN)' 'LATEX=$(LATEX)' 'PIC=$(PIC)' \
	'PRINT=$(PRINT)' 'PRINTDVI=$(PRINTDVI) 'PSROFF=$(PSROFF)' \
	'SOELIM=$(SOELIM)' 'TBL=$(TBL)' 'TEX=$(TEX)'

# The following files have been derived from the .idl files by
# running idlc on them. Since  the site may not have idlc, the
# .c and .p files are supplied and the files are touched before a
# make system.
IDLFILES=src/candleexpand/candleexpand.c src/candleexpand/candleexpand.h \
          src/candlewalk/candlewalk.h src/candlewalk/candlewalk.c \
          src/errordb/errordb.h src/errordb/errordb.c \
          src/gentransitions/gentransitions.h \
	          src/gentransitions/gentransitions.c \
          src/idlbrowse/idlbrowse.h src/idlbrowse/idlbrowse.c \
          src/idlc/frontend/Frontend.h src/idlc/frontend/Frontend.c \
          src/idlc/semantic/Semantic.h src/idlc/semantic/Semantic1.c \
		src/idlc/semantic/Semantic2.c src/idlc/semantic/Semantic3.c \
          src/idlc/semassert/SemAssert.h src/idlc/semassert/SemAssert1.c \
	     src/idlc/semassert/SemAssert2.c src/idlc/semassert/SemAssert3.c \
          src/idlc/rep/Rep.h src/idlc/rep/Rep1.c \
		src/idlc/rep/Rep2.c src/idlc/rep/Rep3.c \
	  src/idlc/backend/Backend.h src/idlc/backend/Backend.c \
          src/idlcheck/assertcodegen/GeneratePostfix.h \
	          src/idlcheck/assertcodegen/GeneratePostfix1.c \
        	  src/idlcheck/assertcodegen/GeneratePostfix2.c \
	          src/idlcheck/assertcodegen/GeneratePostfix3.c \
          src/idlcheck/check/Check.h src/idlcheck/check/Check.c \
          src/idldatacount/idldatacount.h src/idldatacount/idldatacount.c \
          src/idlread/idlread.h src/idlread/idlread.c \
          src/idlview/sidlview/ivwidlprc.h src/idlview/sidlview/ivwidlprc.c \
          src/idlview/xidlview/ivwidlprc.h src/idlview/xidlview/ivwidlprc.c \
          src/idlwrite/idlwrite.h src/idlwrite/idlwrite.c \
          src/lister/lister.h src/lister/lister.c \
          src/showdep/ShowDep.h src/showdep/ShowDep.c \
          src/treepr/treepr.h src/treepr/treepr.p \
          src/treewalk/treewalk.h src/treewalk/treewalk.c \
          src/xref/frontend/frontend.h src/xref/frontend/frontend.c \
          src/xref/analyser/analyser.h src/xref/analyser/analyser.c \
          src/xref/interpreter/interpreter.h src/xref/interpreter/interpreter.c

L_LEXFILES=src/IDLinclude/tokens.l \
	  src/idlc/frontend/idltokens.l\
          src/xref/frontend/lexer.l

C_LEXFILES=src/IDLinclude/tokens.c \
	  src/idlc/frontend/lex_idltokens.c\
          src/xref/frontend/lex_lexer.c

Y_YACCFILES=src/IDLinclude/parse.y \
           src/idlc/frontend/parse.y \
           src/xref/frontend/parser.y

C_YACCFILES=src/IDLinclude/parse.c \
           src/idlc/frontend/yacc_parse.c src/idlc/frontend/yacc_parse.h \
           src/xref/frontend/yacc_parser.c src/xref/frontend/yacc_parser.h

DOCFILES=ReadMeFirst/*.dvi ReadMeFirst/*.ps \
	errata/*.dvi \
	heterogeneous/*.dvi \
	idlcusersman/*.dvi idlcusersman/*.ps \
	idlviewimp/*.dvi idlviewimp/*.ps \
	idlviewusers/*.dvi \
	installation/*.dvi installation/*.ps \
	listererrordb/*.dvi \
	macros/*.dvi \
	misc/*.ps \
	releasenotes/*.dvi \
	treeprimp/*.dvi treeprimp/*.ps \
	treeprusersman/*.dvi  \
	tutorial/*.dvi

############# END OF VARIABLES #####################

AllInstall: echoBegin InstallInclude InstallHelp InstallMisc Libraries \
	InstallLibraries Executables InstallExecutables Clean InstallSrc \
	InstallMan InstallDoc InstallExamples echoEnd

echoBegin:
	@echo "Building Scorpion System ..."
	@date
	@echo ""

echoEnd:
	@echo ""
	@echo "Completed Building of Scorpion System"
	@date

TestPath:
	cd test; $(MAKE) $(UTILITYVARS) 'RUNYACC=$(RUNYACC)' \
		'RUNLEX=$(RUNLEX)' 'HASPASCAL=$(HASPASCAL)' \
		'LINTLIBRARY=$(LINTLIBRARY)' 'LINTFLAGS=$(LINTFLAGS)' TestPath

TouchFiles:
	-if ($(RUNYACC)) then \
		$(TOUCH) $(Y_YACCFILES); \
	else \
		$(TOUCH) $(C_YACCFILES); \
	fi
	-if ($(RUNLEX)) then \
		$(TOUCH) $(L_LEXFILES); \
	else \
		$(TOUCH) $(C_LEXFILES); \
	fi
	$(TOUCH) $(IDLFILES)
	cd doc; $(TOUCH) $(DOCFILES)

InstallInclude:
	$(MAKE) CWD=`pwd` $(ALLPARAMS) 'CHMOD=$(CHMOD)' 'CHOWN=$(CHOWN)' \
		'CHGRP=$(CHGRP)' InstallInclude1

InstallInclude1:
	@echo ""
	@date
	@echo ""
# make src/IDLinclude and install the file in current include dir:
# the next command will install all files into dest.
	cd src/IDLinclude ; $(MAKE) -f Makefile $(UTILITYVARS) System; \
		$(MAKE) -f Makefile 'INCDEST=$(CWD)/include' \
		$(INSTALLVARS) $(UTILITYVARS) 'HASPASCAL=$(HASPASCAL)' Install
	cd include ; $(MAKE) -f Makefile.scorpion 'INCDEST=$(INCDEST)' \
		$(INSTALLVARS) $(UTILITYVARS) 'HASPASCAL=$(HASPASCAL)' Install
	if ($(HASPASCAL)) then \
		true; \
	else \
		$(RMDIR) $(INCDEST)/Pascal; \
	fi
	@echo ""
	@date
	@echo ""

Libraries:
	$(MAKE) CWD=`pwd` $(ALLPARAMS) Libraries1

Libraries1:
	@echo ""
	@date
	@echo ""
	if ($(LINTLIBRARY)) then \
	    if (test "$(MACHINE)" = "hp9000" -o "$(MACHINE)" = "mips") then \
		cd lib/lintlib; $(MAKE) 'LINT=$(LINT)' 'INCDIR=$(INCDEST)' \
		'LINT_CREATE_FLAG=-o' 'SRCDIR=$(CWD)/src' System; \
	    else \
		cd lib/lintlib; $(MAKE) 'LINT=$(LINT)' 'INCDIR=$(INCDEST)' \
		'LINT_CREATE_FLAG=-C' 'SRCDIR=$(CWD)/src' System; \
	    fi; \
	else true; \
	fi
	@echo ""
	@date
	@echo ""
	cd src/IDLlib; $(MAKE) 'INCDIR=$(CWD)/include' \
		'HELPDIR=$(HELPDEST)' \
		$(UTILITYVARS) 'SPECSDIR=$(CWD)/src/specs'\
		'HASPASCAL=$(HASPASCAL)' 'INSTALLIDLVIEW=$(INSTALLIDLVIEW)' \
		System
	@echo ""
	@date
	@echo ""
	if ($(DEBUGLIBRARY)) then \
		cd src/IDLlib; $(MAKE) 'RM=$(RM)' Clean; \
		$(MAKE) 'INCDIR=$(INCDEST)' 'D_CFLAGS=$(D_CFLAGS)' \
		'D_PFLAGS=$(D_PFLAGS)' 'HELPDIR=$(HELPDEST)' $(UTILITYVARS) \
		'SPECSDIR=$(CWD)/src/specs' 'HASPASCAL=$(HASPASCAL)' \
		'INSTALLIDLVIEW=$(INSTALLIDLVIEW)' DebugLibrary; \
	else true; \
	fi
	@echo ""
	@date
	@echo ""

InstallLibraries:
	@echo ""
	@date
	@echo ""
	cd lib ; $(MAKE) -f Makefile.scorpion 'LIBDEST=$(LIBDEST)'  \
		$(INSTALLVARS) $(UTILITYVARS) Install
	cd src/IDLlib; $(MAKE) 'LIBDEST=$(LIBDEST)' 'HASPASCAL=$(HASPASCAL)' \
		$(INSTALLVARS) $(UTILITYVARS) 'CP=$(CP)' 'RM=$(RM)' Install
	cd $(LIBDEST); $(CHGRP) *; $(CHMOD) *; $(CHOWN) *
	@echo ""
	@date
	@echo ""

InstallDoc: 
	@echo ""
	@date
	@echo ""
	cd doc; $(CP) Makefile.scorpion $(DOCDEST); \
		$(MAKE) -f Makefile.scorpion \
		$(INSTALLVARS) 'DOCDEST=$(DOCDEST)' $(UTILITYVARS) Install
#	$(MAKE) -f $(THISMAKEFILE) $(UTILITYVARS) UpdateDocMakefiles
	cd $(DOCDEST); $(TOUCH) $(DOCFILES)
	@echo ""
	@date
	@echo ""


Executables:
	$(MAKE) CWD=`pwd` 'NO_CFLAGS=$(NO_CFLAGS)' $(ALLPARAMS) Executables1

Executables1:
	@echo ""
	@date
	@echo ""
	cd src; $(MAKE) -f Makefile.scorpion 'INCDIR=$(CWD)/include' \
		'NO_CFLAGS=$(NO_CFLAGS)' \
		'LIBDIR=$(LIBDEST)' 'BINDIR=$(BINDEST)' 'HELPDIR=$(HELPDEST)' \
		'SRCDIR=$(CWD)/src' 'SPECSDIR=$(CWD)/src/specs' \
		'MISCDIR=$(MISCDEST)' 'CWD=$(CWD)' $(UTILITYVARS)\
		'HASPASCAL=$(HASPASCAL)' 'INSTALLIDLVIEW=$(INSTALLIDLVIEW)' System
	@echo ""
	@date
	@echo ""

InstallExecutables:
	$(MAKE) CWD=`pwd` $(INSTALLVARS) $(ALLPARAMS) 'CHMOD=$(CHMOD)' \
		'CHOWN=$(CHOWN)' 'CHGRP=$(CHGRP)' InstallExecutables1

InstallExecutables1:
	@echo ""
	@date
	@echo ""
	cd bin ; $(MAKE) -f Makefile.scorpion 'BINDEST=$(BINDEST)' \
		'LIBDEST=$(LIBDEST)' 'INCDEST=$(INCDEST)' 'INSTALL=$(INSTALL)' \
		$(UTILITYVARS) 'CWD=$(CWD)' 'HASPASCAL=$(HASPASCAL)' \
		$(INSTALLVARS) Install
	cd src ; $(MAKE) -f Makefile.scorpion 'BINDEST=$(BINDEST)' \
		'LIBDEST=$(LIBDEST)' 'INCDIR=$(INCDEST)' 'CWD=$(CWD)' \
		$(UTILITYVARS) $(INSTALLVARS) 'HASPASCAL=$(HASPASCAL)' \
		'INSTALLIDLVIEW=$(INSTALLIDLVIEW)' Install
	@echo ""
	@date
	@echo ""

InstallSrc:
	@echo ""
	@date
	@echo ""
	cd src ; $(MAKE) -f Makefile.scorpion 'SRCDEST=$(SRCDEST)' \
		$(INSTALLVARS) $(UTILITYVARS) InstallSrc
#	$(MAKE) -f $(THISMAKEFILE) $(UTILITYVARS) UpdateSrcMakefiles
	@echo ""
	@date
	@echo ""

InstallMan:
	@echo ""
	@date
	@echo ""
	cd man ; $(MAKE) -f Makefile.scorpion 'MANDEST=$(MANDEST)' \
		$(INSTALLVARS) $(UTILITYVARS) Install
	@echo ""
	@date
	@echo ""

InstallHelp:
	@echo ""
	@date
	@echo ""
	cd help; $(MAKE) -f Makefile.scorpion 'HELPDEST=$(HELPDEST)' \
		$(INSTALLVARS) $(UTILITYVARS) Install
	@echo ""
	@date
	@echo ""

InstallMisc:
	@echo ""
	@date
	@echo ""
	cd misc; $(MAKE) -f Makefile.scorpion 'MISCDEST=$(MISCDEST)' \
		$(INSTALLVARS) $(UTILITYVARS) Install
	@echo ""
	@date
	@echo ""

InstallExamples:
	@echo ""
	@date
	@echo ""
	cd doc/examples; $(MAKE) -f Makefile.scorpion \
		$(INSTALLVARS) 'EXAMPLEDEST=$(EXAMPLEDEST)' $(UTILITYVARS) Install
#	$(MAKE) -f $(THISMAKEFILE) $(UTILITYVARS) UpdateExampleMakefiles
	@echo ""
	@date
	@echo ""

CompileExamples:
	@echo ""
	@date
	@echo ""
	cd $(EXAMPLEDEST); $(MAKE) -f Makefile.scorpion \
		'HASPASCAL=$(HASPASCAL)' 'BINDIR=$(BINDEST)' $(UTILITYVARS) \
		'INCDIR=$(INCDEST)' 'LIBDIR=$(LIBDEST)' 'MACHINE=$(MACHINE)' \
		'HASIDLVIEW=$(INSTALLIDLVIEW)' 'CHMOD=$(CHMOD)' Example
	@echo ""
	@date
	@echo ""

Doc:
	@echo ""
	@date
	@echo ""
	cd doc; $(MAKE) -f Makefile.scorpion $(DOCVARS) $(UTILITYVARS) $(DOCVARS) System
	@echo ""
	@date
	@echo ""

PrintDoc:
	@echo ""
	@date
	@echo ""
	cd doc; $(MAKE) -f Makefile.scorpion $(DOCVARS) $(UTILITYVARS) \
		$(DOCVARS) Print
	@echo ""
	@date
	@echo ""

Checkout:
	$(MAKE) CWD=`pwd` $(ALLPARAMS) Checkout1

Checkout1: 
	@echo ""
	@date
	@echo ""
	cd src ; $(MAKE) -f Makefile.scorpion 'BINDIR=$(BINDEST)' \
		'LIBDIR=$(LIBDEST)' 'INCDIR=$(INCDEST)' \
		'CWD=$(CWD)' 'SRCDIR=$(CWD)/src' 'SPECSDIR=$(CWD)/src/specs' \
		$(UTILITYVARS) 'MACHINE=$(MACHINE)' \
		'HASPASCAL=$(HASPASCAL)' \
		Checkout
	@echo ""
	@date
	@echo ""

# Command to clean up the directories.
Clean:
	@echo ""
	@date
	@echo ""
	cd lib/lintlib ; $(MAKE) $(UTILITYVARS) Clean
	cd include ; $(MAKE) -f Makefile.scorpion $(UTILITYVARS)\
			Clean
	cd src ; $(MAKE) -f Makefile.scorpion $(UTILITYVARS) Clean
	@echo ""
	@date
	@echo ""

Lint:
	@echo ""
	@date
	@echo ""
	cd src; $(MAKE) -f Makefile.scorpion 'LINTVARS=$(LINTVARS)' \
		'LIBDIR=$(LIBDEST)' Lint
	@echo ""
	@date
	@echo ""

UpdateMake: 
	if (test "$(HOWTOCOMPILE)" = "DEBUG")  then \
		$(MAKE) -f $(THISMAKEFILE) 'CFLAGS=$(DEBUG_CFLAGS) $(MYCFLAGS)' \
			     'D_CFLAGS=$(DEBUG_CFLAGS) $(MYCFLAGS)' \
			     'NO_CFLAGS=$(DEBUG_CFLAGS) $(MYCFLAGS)' \
			     'PFLAGS=$(DEBUG_PFLAGS) $(MYPFLAGS)' \
			     'D_PFLAGS=$(DEBUG_PFLAGS) $(MYPFLAGS)' \
			     'NO_PFLAGS=$(DEBUG_PFLAGS) $(MYPFLAGS)' \
			     'CWD=`pwd`' \
			     UpdateMake2; \
	elif (test "$(HOWTOCOMPILE)" = "OPTIMIZE") then  \
		$(MAKE) -f $(THISMAKEFILE) 'CFLAGS=$(OPTIMIZE_CFLAGS) $(MYCFLAGS)' \
			     'D_CFLAGS=$(DEBUG_CFLAGS) $(MYCFLAGS)' \
			     'NO_CFLAGS=$(MYCFLAGS)' \
			     'PFLAGS=$(OPTIMIZE_PFLAGS) $(MYPFLAGS)' \
			     'D_PFLAGS=$(DEBUG_PFLAGS) $(MYPFLAGS)' \
			     'NO_PFLAGS=$(MYPFLAGS)' \
			     'CWD=`pwd`' \
			     UpdateMake2; \
	else \
		echo; \
		echo "Error: Wrong value of HOWTOCOMPILE"; \
		echo; \
		false;\
	fi
	$(MAKE) -f $(THISMAKEFILE) -s CreateSedFile
	$(MV) $(THISMAKEFILE) TEMP.$(THISMAKEFILE)
	$(MAKE) -f TEMP.$(THISMAKEFILE) UpdateAllMakefiles
	$(MV) TEMP.$(THISMAKEFILE) $(THISMAKEFILE)

UpdateAllMakefiles:
	$(FIND) . -name "Makefile*" -exec $(UPDATEMAKEFILE) {} \;

UpdateMake2:
	$(CP) $(THISMAKEFILE) ORIGINAL.$(THISMAKEFILE)
	$(SED)  -e "s,^CFLAGS=.*,CFLAGS=$(CFLAGS),g" \
		 -e "s,^D_CFLAGS=.*,D_CFLAGS=$(D_CFLAGS),g" \
		 -e "s,^NO_CFLAGS=.*,NO_CFLAGS=$(NO_CFLAGS),g" \
		 -e "s,^PFLAGS=.*,PFLAGS=$(PFLAGS),g" \
		 -e "s,^D_PFLAGS=.*,D_PFLAGS=$(D_PFLAGS),g" \
		 -e "s,^NO_PFLAGS=.*,NO_PFLAGS=$(NO_PFLAGS),g" \
		 -e "s,^CWD=.*,CWD=$(CWD),g" \
		< $(THISMAKEFILE) > $(THISMAKEFILE).tmp
	$(MV) $(THISMAKEFILE).tmp $(THISMAKEFILE)

CreateSedFile:
	$(MAKE) -f $(THISMAKEFILE) CWD=`pwd` CreateSedFile2

CreateSedFile2:
#	echo "s,[ ]*=,=,g" > $(SEDFILE)
#	echo "s,=[ ]*,=,g" >> $(SEDFILE)
	echo "s,^BINDIR=.*,BINDIR=$(BINDEST),g" > $(SEDFILE)
	echo "s,^DOCDIR=.*,DOCDIR=$(DOCDEST),g" >> $(SEDFILE)
	echo "s,^EXAMPLEDIR=.*,EXAMPLEDIR=$(EXAMPLEDEST),g" >> $(SEDFILE)
	echo "s,^HELPDIR=.*,HELPDIR=$(HELPDEST),g" >> $(SEDFILE)
	echo "s,^INCDIR=.*,INCDIR=$(INCDEST),g" >> $(SEDFILE)
	echo "s,^LIBDIR=.*,LIBDIR=$(LIBDEST),g" >> $(SEDFILE)
	echo "s,^MANDIR=.*,MANDIR=$(MANDEST),g" >> $(SEDFILE)
	echo "s,^MISCDIR=.*,MISCDIR=$(MISCDEST),g" >> $(SEDFILE)
	echo "s,^SPECSDIR=.*,SPECSDIR=$(SRCDEST)/specs,g" >> $(SEDFILE)
	echo "s,^SRCDIR=.*,SRCDIR=$(SRCDEST),g" >> $(SEDFILE)
	echo "s,^CHMOD=.*,CHMOD=$(CHMOD),g" >> $(SEDFILE)
	echo "s,^CHGRP=.*,CHGRP=$(CHGRP),g" >> $(SEDFILE)
	echo "s,^CHOWN=.*,CHOWN=$(CHOWN),g" >> $(SEDFILE)
	echo "s,^MACHINE=.*,MACHINE=$(MACHINE),g" >> $(SEDFILE)
	echo "s,^LINT=.*,LINT=$(LINT),g" >> $(SEDFILE)
	echo "s,^LINTFLAGS=.*,LINTFLAGS=$(LINTFLAGS),g" >> $(SEDFILE)
	echo "s,^AR=.*,AR=$(AR),g" >> $(SEDFILE)
	echo "s,^CAT=.*,CAT=$(CAT),g" >> $(SEDFILE)
	echo "s,^CC=.*,CC=$(CC),g" >> $(SEDFILE)
	echo "s,^CP=.*,CP=$(CP),g" >> $(SEDFILE)
	echo "s,^FIND=.*,FIND=$(FIND),g" >> $(SEDFILE)
	echo "s,^LEX=.*,LEX=$(LEX),g" >> $(SEDFILE)
	echo "s,^MAKE=.*,MAKE=$(MAKE),g" >> $(SEDFILE)
	echo "s,^MV=.*,MV=$(MV),g" >> $(SEDFILE)
	echo "s,^PC=.*,PC=$(PC),g" >> $(SEDFILE)
	echo "s,^RANLIB=.*,RANLIB=$(RANLIB),g" >> $(SEDFILE)
	echo "s,^RM=.*,RM=$(RM),g" >> $(SEDFILE)
	echo "s,^SED=.*,SED=$(SED),g" >> $(SEDFILE)
	echo "s,^SHELL=.*,SHELL=$(SHELL),g" >> $(SEDFILE)
	echo "s,^STRIP=.*,STRIP=$(STRIP),g" >> $(SEDFILE)
	echo "s,^YACC=.*,YACC=$(YACC),g" >> $(SEDFILE)
	echo "s,^EQN=.*,EQN=$(EQN),g" >> $(SEDFILE)
	echo "s,^LATEX=.*,LATEX=$(LATEX),g" >> $(SEDFILE)
	echo "s,^PIC=.*,PIC=$(PIC),g" >> $(SEDFILE)
	echo "s,^PRINT=.*,PRINT=$(PRINT),g" >> $(SEDFILE)
	echo "s,^PRINTDVI=.*,PRINTDVI=$(PRINTDVI),g" >> $(SEDFILE)
	echo "s,^PSROFF=.*,PSROFF=$(PSROFF),g" >> $(SEDFILE)
	echo "s,^SOELIM=.*,SOELIM=$(SOELIM),g" >> $(SEDFILE)
	echo "s,^TBL=.*,TBL=$(TBL),g" >> $(SEDFILE)
	echo "s,^TEX=.*,TEX=$(TEX),g" >> $(SEDFILE)
	echo "s,^IDLC=.*,IDLC=$(IDLC),g" >> $(SEDFILE)
	echo "s,^IDLCFLAGS=.*,IDLCFLAGS=$(IDLCFLAGS),g" >> $(SEDFILE)
	echo "s,^CFLAGS=.*,CFLAGS=$(CFLAGS),g" >> $(SEDFILE)
	echo "s,^D_CFLAGS=.*,D_CFLAGS=$(D_CFLAGS),g" >> $(SEDFILE)
	echo "s,^NO_CFLAGS=.*,NO_CFLAGS=$(NO_CFLAGS),g" >> $(SEDFILE)
	echo "s,^PFLAGS=.*,PFLAGS=$(PFLAGS),g" >> $(SEDFILE)
	echo "s,^D_PFLAGS=.*,D_PFLAGS=$(D_PFLAGS),g" >> $(SEDFILE)
	echo "s,^NO_PFLAGS=.*,NO_PFLAGS=$(NO_PFLAGS),g" >> $(SEDFILE)
	echo 's,^INSTALL=.*,INSTALL=$(INSTALL),g' >> $(SEDFILE)
	echo "s,^HASOPENWINDOWS=.*,HASOPENWINDOWS=$(HASOPENWINDOWS),g" >> $(SEDFILE)
	echo "s,^HASSUNTOOLS=.*,HASSUNTOOLS=$(HASSUNTOOLS),g" >> $(SEDFILE)
	echo "s,^HASXWINDOWS=.*,HASXWINDOWS=$(HASXWINDOWS),g" >> $(SEDFILE)
	echo "s,^OPENWINDOWSLIB=.*,OPENWINDOWSLIB=$(OPENWINDOWSLIB),g" >> $(SEDFILE)
	echo "s,^SUNTOOLSLIB=.*,SUNTOOLSLIB=$(SUNTOOLSLIB),g" >> $(SEDFILE)
	echo "s,^XWINDOWSLIB=.*,XWINDOWSLIB=$(XWINDOWSLIB),g" >> $(SEDFILE)
	echo "s,^DEFAULTWM=.*,DEFAULTWM=$(DEFAULTWM),g" >> $(SEDFILE)
	echo "s,^COMPILEMASTER=.*,COMPILEMASTER=$(COMPILEMASTER),g" >> $(SEDFILE)
	echo "s,^MASTERHOST=.*,MASTERHOST=$(MASTERHOST),g" >> $(SEDFILE)
	echo "s,^MASTERFILE=.*,MASTERFILE=$(MASTERFILE),g" >> $(SEDFILE)
	echo "s,^IDLBROWSEFILE=.*,IDLBROWSEFILE=$(IDLBROWSEFILE),g" >> $(SEDFILE)

UpdateSrcMakefiles:
	$(UPDATEMAKEFILE) $(SRCDEST)/Makefile.scorpion
	$(UPDATEMAKEFILE) $(SRCDEST)/IDLinclude/Makefile
	$(FIND) $(SRCDEST)/IDLlib -name "Makefile*" -exec $(UPDATEMAKEFILE) {} \;
	$(UPDATEMAKEFILE) $(SRCDEST)/candleexpand/Makefile
	$(UPDATEMAKEFILE) $(SRCDEST)/candlewalk/Makefile
	$(UPDATEMAKEFILE) $(SRCDEST)/errordb/Makefile
	$(UPDATEMAKEFILE) $(SRCDEST)/gentransitions/Makefile
	$(UPDATEMAKEFILE) $(SRCDEST)/idlbrowse/Makefile
	$(FIND) $(SRCDEST)/idlc -name "Makefile*" -exec $(UPDATEMAKEFILE) {} \;
	$(FIND) $(SRCDEST)/idlccheck -name "Makefile*" -exec $(UPDATEMAKEFILE) {} \;
	$(UPDATEMAKEFILE) $(SRCDEST)/idldatacount/Makefile
	$(UPDATEMAKEFILE) $(SRCDEST)/idlformat/Makefile
	$(UPDATEMAKEFILE) $(SRCDEST)/idlread/Makefile
	$(FIND) $(SRCDEST)/idlview -name "Makefile*" -exec $(UPDATEMAKEFILE) {} \;
	$(UPDATEMAKEFILE) $(SRCDEST)/idlwrite/Makefile
	$(UPDATEMAKEFILE) $(SRCDEST)/lister/Makefile
	$(UPDATEMAKEFILE) $(SRCDEST)/showdep/Makefile
	$(FIND) $(SRCDEST)/specs -name "Makefile*" -exec $(UPDATEMAKEFILE) {} \;
	$(UPDATEMAKEFILE) $(SRCDEST)/treepr/Makefile
	$(UPDATEMAKEFILE) $(SRCDEST)/treewalk/Makefile
	$(FIND) $(SRCDEST)/xref -name "Makefile*" -exec $(UPDATEMAKEFILE) {} \;

#doc stuff:
UpdateDocMakefiles:
	$(UPDATEMAKEFILE) $(DOCDEST)/Makefile.scorpion
	$(UPDATEMAKEFILE) $(DOCDEST)/heterogeneous/Makefile
	$(UPDATEMAKEFILE) $(DOCDEST)/idlcusersman/Makefile
	$(UPDATEMAKEFILE) $(DOCDEST)/installation/Makefile
	$(UPDATEMAKEFILE) $(DOCDEST)/listererrordb/Makefile
	$(UPDATEMAKEFILE) $(DOCDEST)/macros/Makefile
	$(UPDATEMAKEFILE) $(DOCDEST)/releasenotes/Makefile
	$(UPDATEMAKEFILE) $(DOCDEST)/treeprimp/Makefile
	$(UPDATEMAKEFILE) $(DOCDEST)/treeprusersman/Makefile

UpdateExampleMakefiles:
	$(UPDATEMAKEFILE) $(EXAMPLEDEST)/Makefile.scorpion
	$(FIND) $(EXAMPLEDEST)/CandleXRef -name "Makefile*" -exec $(UPDATEMAKEFILE) {} \;
	$(FIND) $(EXAMPLEDEST)/billing -name "Makefile*" -exec $(UPDATEMAKEFILE) {} \;
	$(FIND) $(EXAMPLEDEST)/boolean -name "Makefile*" -exec $(UPDATEMAKEFILE) {} \;
	$(FIND) $(EXAMPLEDEST)/errordb -name "Makefile*" -exec $(UPDATEMAKEFILE) {} \;
	$(FIND) $(EXAMPLEDEST)/functionlang -name "Makefile*" -exec $(UPDATEMAKEFILE) {} \;
	$(FIND) $(EXAMPLEDEST)/xdr -name "Makefile*" -exec $(UPDATEMAKEFILE) {} \;

.IGNORE:
