# To use this Makefile:
# 1. For linux, change the definitions of LINCOMPILE and LINLINK to
#    point to your compiler.
# 2. For SunOS, change the definitions of SUNCOMPILE and SUNLINK to
#    point to your compiler.
# 3. bison and flex must be available if source files are to be made.

LINCOMPILE = /usr/bin/g++ -c -v -g -Wall
LINLINK = /usr/bin/g++ -v

SUNCOMPILE = /usr/sfw/bin/g++ -c -v -g -Wall
SUNLINK = /usr/sfw/bin/g++ -v

MODLISTS = source/cs1Lists.cc\
           source/cs2Lists.cc\
           source/cs3Lists.cc\
           source/ipv1Lists.cc\
           source/ipv2Lists.cc\
           source/ipv3Lists.cc\
           source/mc1Lists.cc\
           source/mc2Lists.cc\
           source/mc3Lists.cc\
           source/p1Lists.cc\
           source/p2Lists.cc\
           source/p3Lists.cc\
           source/qis1Lists.cc\
           source/qis2Lists.cc\
           source/qis3Lists.cc\
           source/rt1Lists.cc\
           source/rt2Lists.cc\
           source/rt3Lists.cc\
           source/sga1Lists.cc\
           source/sga2Lists.cc\
           source/sga3Lists.cc\
           source/tw1Lists.cc\
           source/tw2Lists.cc\
           source/tw3Lists.cc\
           source/unc1Lists.cc\
           source/unc2Lists.cc\
           source/unc3Lists.cc

##################################################################

# Linux

../../utilities/linux/bin/dmisConformanceChecker : \
            ofilesLinux/dmisConformanceCheckerDriver.o\
            ofilesLinux/dmisConformanceChecker.o\
            libLinux/dmis.a
	$(LINLINK) -o $@ ofilesLinux/dmisConformanceCheckerDriver.o\
                         ofilesLinux/dmisConformanceChecker.o\
                         libLinux/dmis.a

../../utilities/linux/bin/dmisConformanceTester : \
	    ofilesLinux/dmisConformanceTesterDriver.o\
            ofilesLinux/dmisConformanceTester.o\
            libLinux/dmis.a
	$(LINLINK) -o $@  ofilesLinux/dmisConformanceTesterDriver.o\
                          ofilesLinux/dmisConformanceTester.o\
                          libLinux/dmis.a

../../utilities/linux/bin/dmisConformanceRecorder : \
	    ofilesLinux/dmisConformanceRecorderDriver.o\
            ofilesLinux/dmisConformanceTester.o\
            libLinux/dmis.a
	$(LINLINK) -o $@  ofilesLinux/dmisConformanceRecorderDriver.o\
                          ofilesLinux/dmisConformanceTester.o\
                          libLinux/dmis.a

../../utilities/linux/bin/dmisParser : \
              ofilesLinux/dmisParserDriver.o\
              ofilesLinux/dmisParser.o\
              libLinux/dmis.a
	$(LINLINK) -o $@ ofilesLinux/dmisParserDriver.o\
                         ofilesLinux/dmisParser.o\
                         libLinux/dmis.a

../../utilities/linux/bin/dmisTestFileReductor : \
              ofilesLinux/dmisTestFileReductor.o
	$(LINLINK) -o $@ ofilesLinux/dmisTestFileReductor.o

../../utilities/linux/bin/dmisTestFileReductorSH : \
              ofilesLinux/dmisTestFileReductorSH.o
	$(LINLINK) -o $@ ofilesLinux/dmisTestFileReductorSH.o

binLinux/changeLists : ofilesLinux/changeLists.o
	$(LINLINK) -o $@ ofilesLinux/changeLists.o

binLinux/insertNamespace : ofilesLinux/insertNamespace.o
	$(LINLINK) -o $@ ofilesLinux/insertNamespace.o

ofilesLinux/changeLists.o : source/changeLists.cc
	$(LINCOMPILE) -o $@ source/changeLists.cc

ofilesLinux/dmisConformanceChecker.o : \
                         source/dmisConformanceChecker.cc\
                         source/dmisConformanceCheckerStart.cc\
                         source/dmis.hh\
                         source/assignModuleSubAtts.cc\
                         source/assignMasterSubAtts.cc
	$(LINCOMPILE) -o $@ source/dmisConformanceChecker.cc

ofilesLinux/dmisConformanceTester.o : \
                         source/dmisConformanceTester.cc\
                         source/dmisConformanceTesterStart.cc\
                         source/dmis.hh\
                         source/allSubAtts.cc\
                         source/levelsSet.cc\
                         source/assignModuleSubAtts.cc\
                         source/assignMasterSubAtts.cc\
                         $(MODLISTS)
	$(LINCOMPILE) -o $@ source/dmisConformanceTester.cc

ofilesLinux/dmisParser.o : source/dmisParser.cc source/dmis.hh
	$(LINCOMPILE) -o $@ source/dmisParser.cc

ofilesLinux/dmis.o : source/dmis.cc source/dmis.hh
	$(LINCOMPILE) -o $@ source/dmis.cc

ofilesLinux/dmisLex.o : source/dmisLex.cc\
                        source/dmisYACC.hh\
                        source/dmis.hh
	$(LINCOMPILE) -o $@ source/dmisLex.cc

ofilesLinux/dmisYACC.o : source/dmisYACC.cc\
                         source/dmisYACC.hh\
                         source/dmis.hh
	$(LINCOMPILE) -o $@ source/dmisYACC.cc

ofilesLinux/dmisConformanceCheckerDriver.o : \
            source/dmisConformanceCheckerDriver.cc
	$(LINCOMPILE) -o $@ source/dmisConformanceCheckerDriver.cc

ofilesLinux/dmisConformanceTesterDriver.o : \
            source/dmisConformanceTesterDriver.cc
	$(LINCOMPILE) -o $@ source/dmisConformanceTesterDriver.cc

ofilesLinux/dmisConformanceRecorderDriver.o : \
            source/dmisConformanceRecorderDriver.cc
	$(LINCOMPILE) -o $@ source/dmisConformanceRecorderDriver.cc

ofilesLinux/dmisParserDriver.o : source/dmisParserDriver.cc
	$(LINCOMPILE) -o $@ source/dmisParserDriver.cc

ofilesLinux/insertNamespace.o : source/insertNamespace.cc
	$(LINCOMPILE) -o $@ source/insertNamespace.cc

ofilesLinux/dmisTestFileReductor.o : source/dmisTestFileReductor.cc
	$(LINCOMPILE) -o $@ source/dmisTestFileReductor.cc

ofilesLinux/dmisTestFileReductorSH.o : source/dmisTestFileReductorSH.cc
	$(LINCOMPILE) -o $@ source/dmisTestFileReductorSH.cc

libLinux/dmis.a : ofilesLinux/dmisYACC.o\
                  ofilesLinux/dmisLex.o\
                  ofilesLinux/dmis.o
	ar rcs libLinux/dmis.a ofilesLinux/dmisYACC.o\
                               ofilesLinux/dmisLex.o\
                               ofilesLinux/dmis.o

##################################################################

# Sun

../../utilities/sun/bin/dmisConformanceChecker : \
            ofilesSun/dmisConformanceCheckerDriver.o\
            ofilesSun/dmisConformanceChecker.o\
            libSun/dmis.a
	$(SUNLINK) -o $@ ofilesSun/dmisConformanceCheckerDriver.o\
                         ofilesSun/dmisConformanceChecker.o\
                         libSun/dmis.a

../../utilities/sun/bin/dmisConformanceTester : \
	    ofilesSun/dmisConformanceTesterDriver.o\
            ofilesSun/dmisConformanceTester.o\
            libSun/dmis.a
	$(SUNLINK) -o $@  ofilesSun/dmisConformanceTesterDriver.o\
                          ofilesSun/dmisConformanceTester.o\
                          libSun/dmis.a

../../utilities/sun/bin/dmisConformanceRecorder : \
	    ofilesSun/dmisConformanceRecorderDriver.o\
            ofilesSun/dmisConformanceTester.o\
            libSun/dmis.a
	$(SUNLINK) -o $@  ofilesSun/dmisConformanceRecorderDriver.o\
                          ofilesSun/dmisConformanceTester.o\
                          libSun/dmis.a

../../utilities/sun/bin/dmisParser : \
              ofilesSun/dmisParserDriver.o\
              ofilesSun/dmisParser.o\
              libSun/dmis.a
	$(SUNLINK) -o $@ ofilesSun/dmisParserDriver.o\
                         ofilesSun/dmisParser.o\
                         libSun/dmis.a

../../utilities/sun/bin/dmisTestFileReductor : \
              ofilesSun/dmisTestFileReductor.o
	$(SUNLINK) -o $@ ofilesSun/dmisTestFileReductor.o

binSun/changeLists : ofilesSun/changeLists.o
	$(SUNLINK) -o binSun/changeLists ofilesSun/changeLists.o

binSun/insertNamespace : ofilesSun/insertNamespace.o
	$(SUNLINK) -o $@ ofilesSun/insertNamespace.o

ofilesSun/changeLists.o : source/changeLists.cc
	$(SUNCOMPILE) -o ofilesSun/changeLists.o source/changeLists.cc

ofilesSun/dmisConformanceChecker.o : \
                         source/dmisConformanceChecker.cc\
                         source/dmisConformanceCheckerStart.cc\
                         source/dmis.hh\
                         source/assignModuleSubAtts.cc\
                         source/assignMasterSubAtts.cc
	$(SUNCOMPILE) -o $@ source/dmisConformanceChecker.cc

ofilesSun/dmisConformanceTester.o : \
                         source/dmisConformanceTester.cc\
                         source/dmisConformanceTesterStart.cc\
                         source/dmis.hh\
                         source/allSubAtts.cc\
                         source/levelsSet.cc\
                         source/assignModuleSubAtts.cc\
                         source/assignMasterSubAtts.cc\
                         $(MODLISTS)
	$(SUNCOMPILE) -o $@ source/dmisConformanceTester.cc

ofilesSun/dmisParser.o : source/dmisParser.cc source/dmis.hh
	$(SUNCOMPILE) -o $@ source/dmisParser.cc

ofilesSun/dmis.o : source/dmis.cc source/dmis.hh
	$(SUNCOMPILE) -o $@ source/dmis.cc

ofilesSun/dmisLex.o : source/dmisLex.cc\
                      source/dmisYACC.hh\
                      source/dmis.hh
	$(SUNCOMPILE) -o $@ source/dmisLex.cc

ofilesSun/dmisYACC.o : source/dmisYACC.cc\
                       source/dmisYACC.hh\
                       source/dmis.hh
	$(SUNCOMPILE) -o $@ source/dmisYACC.cc

ofilesSun/dmisConformanceCheckerDriver.o : \
            source/dmisConformanceCheckerDriver.cc
	$(SUNCOMPILE) -o $@ source/dmisConformanceCheckerDriver.cc

ofilesSun/dmisConformanceTesterDriver.o : \
            source/dmisConformanceTesterDriver.cc
	$(SUNCOMPILE) -o $@ source/dmisConformanceTesterDriver.cc

ofilesSun/dmisConformanceRecorderDriver.o : \
            source/dmisConformanceRecorderDriver.cc
	$(SUNCOMPILE) -o $@ source/dmisConformanceRecorderDriver.cc

ofilesSun/dmisParserDriver.o : source/dmisParserDriver.cc
	$(SUNCOMPILE) -o $@ source/dmisParserDriver.cc

ofilesSun/insertNamespace.o : source/insertNamespace.cc
	$(SUNCOMPILE) -o $@ source/insertNamespace.cc

ofilesSun/dmisTestFileReductor.o : source/dmisTestFileReductor.cc
	$(SUNCOMPILE) -o $@ source/dmisTestFileReductor.cc

libSun/dmis.a : ofilesSun/dmisYACC.o\
                  ofilesSun/dmisLex.o\
                  ofilesSun/dmis.o
	ar rcs libSun/dmis.a ofilesSun/dmisYACC.o\
                             ofilesSun/dmisLex.o\
                             ofilesSun/dmis.o


##################################################################

# Source code that works for both Linux and Sun can be generated either
# on a Linux system or on a Sun system.

linuxSource : binLinux/debnf2pars ../../ebnf/dmis.debnf
	dos2unix -n ../../ebnf/dmis.debnf dmis.debnf
	binLinux/debnf2pars
	mv dmisConformanceChecker.cc source
	mv dmisConformanceTester.cc source
	mv dmis.lex source
	mv dmis.y source
	mv dmis.hh source
	mv dmis.cc source
	mv assignMasterSubAtts.cc source
	flex -L -t source/dmis.lex > dmisLex.cc
	bison -d -l -o dmisYACC.cc source/dmis.y
	binLinux/insertNamespace
	rm dmisLex.cc
	rm dmisYACC.cc
	rm dmisYACC.hh
	rm dmis.debnf

sunSource : ../binSun/debnf2pars ../../../ebnf/dmis.debnf
	dos2unix -n ../../ebnf/dmis.debnf dmis.debnf
	binSun/debnf2pars
	mv dmisConformanceChecker.cc source
	mv dmisConformanceTester.cc source
	mv dmis.lex source
	mv dmis.y source
	mv dmis.hh source
	mv dmis.cc source
	mv assignMasterSubAtts.cc source
	flex -L -t source/dmis.lex > dmisLex.cc
	bison -d -l -o dmisYACC.cc source/dmis.y
	binSun/insertNamespace
	rm dmisLex.cc
	rm dmisYACC.cc
	rm dmisYACC.hh
	rm dmis.debnf

# binLinux/generateMore writes source/assignModuleSubAtts.cc
# which is then #included by source/makeLevels.cc
# When binLinux/makeLevels is executed, it writes source/levelsSet.cc
moreLinuxSource : binLinux/generateMore\
                  source/assignMasterSubAtts.cc\
                  source/makeLevels.cc\
                  $(MODLISTS)
	binLinux/generateMore
	$(LINCOMPILE) -o ofilesLinux/makeLevels.o source/makeLevels.cc
	$(LINLINK) -o binLinux/makeLevels ofilesLinux/makeLevels.o
	binLinux/makeLevels

# binSun/generateMore writes source/assignModuleSubAtts.cc
# which is then #included by source/makeLevels.cc
# When binSun/makeLevels is executed, it writes source/levelsSet.cc
moreSunSource : binSun/generateMore\
                source/assignMasterSubAtts.cc\
                source/makeLevels.cc\
                $(MODLISTS)
	binSun/generateMore
	$(SUNCOMPILE) -o ofilesSun/makeLevels.o source/makeLevels.cc
	$(SUNLINK) -o binSun/makeLevels ofilesSun/makeLevels.o
	binSun/makeLevels

##################################################################

