# Makefile for the TTM analysis programs
#
# Version:	17-Jan-2003
# OS:		Solaris 
# 
# Adapated from ROOT's test suite Makefile
#------------------------------------------

ROOTVERSION = root-3.04_02
ROOTSYS = /usr/local/$(ROOTVERSION)

TTROOT  = /ncc/ttpro
INCDIR  = $(TTROOT)/include
BINDIR  = $(TTROOT)/bin/$(shell uname -s)/$(ROOTVERSION)/
LIBDIR  = $(TTROOT)/lib/$(shell uname -s)/$(ROOTVERSION)/

HOSTOSCPU	= $(shell uname -smp | tr 'A-Z' 'a-z' | sed -e 's/ /-/g')

BDECFLAGS=      -W -Wall -ansi -pedantic -Wbad-function-cast -Wcast-align \
				-Wcast-qual -Wchar-subscripts -Winline \
				-Wmissing-prototypes -Wnested-externs -Wpointer-arith \
				-Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings  

ARCH          = solaris
INSTALL       = /usr/ucb/install

CXX           =
ObjSuf        = o
SrcSuf        = C
ExeSuf        =
DllSuf        = so
OutPutOpt     = -o 

ROOTCFLAGS   := $(shell ROOTSYS=$(ROOTSYS) $(ROOTSYS)/bin/root-config --cflags) -I$(INCDIR)
ROOTLIBS     := $(shell ROOTSYS=$(ROOTSYS) $(ROOTSYS)/bin/root-config --libs)
ROOTGLIBS    := $(shell ROOTSYS=$(ROOTSYS) $(ROOTSYS)/bin/root-config --glibs)

ifeq ($(ARCH),hpux)
# HP-UX with CC
CXX           = CC
CXXFLAGS      = -O +Z
LD            = CC
LDFLAGS       = -O +a1 -z
SOFLAGS       = -b
DllSuf        = sl
endif

ifeq ($(ARCH),hpuxacc)
# HP-UX 10.x with aCC
CXX           = aCC
CXXFLAGS      = -O +Z
LD            = aCC
LDFLAGS       = -O -z
SOFLAGS       = -b
endif

ifeq ($(ARCH),hpuxegcs)
# HP-UX 10.x with g++
CXXFLAGS      = -O -fPIC
CXX           = g++
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -fPIC -shared
endif

ifeq ($(ARCH),aix)
# IBM AIX
CXX           = xlC
CXXFLAGS      = -O
LD            = xlC
LDFLAGS       = -O
SOFLAGS       =
endif

ifeq ($(ARCH),aixegcs)
# IBM AIX with GCC
CXX           = g++
CXXFLAGS      = -O
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared
endif

ifeq ($(ARCH),solaris)
# Solaris CC
CXX           = /opt/SUNWspro/bin/CC
#CXXFLAGS      = -O -KPIC -compat=4
CXXFLAGS      = -O -KPIC
LD            = /opt/SUNWspro/bin/CC
#LDFLAGS       = -O -compat=4
LDFLAGS       = -O
SOFLAGS       = -G
endif

ifeq ($(ARCH),solarisCC5)
# Solaris CC 5.0
CXX           = CC
CXXFLAGS      = -O -KPIC -D__SunOS_5_6 -library=iostream,no%Cstd
LD            = CC
LDFLAGS       = -O -library=iostream,no%Cstd -o
SOFLAGS       = -G
endif

ifeq ($(ARCH),solarisegcs)
# Solaris egcs
CXX           = g++
CXXFLAGS      = -O -fPIC
LD            = CC
LDFLAGS       = -O
SOFLAGS       = -shared
endif

ifeq ($(ARCH),solarisgcc)
# Solaris gcc
CXX           = g++
CXXFLAGS      = -O -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared
endif

ifeq ($(ARCH),solariskcc)
# Solaris kcc
CXX           = KCC
CXXFLAGS      = -O4 -KPIC
LD            = KCC
LDFLAGS       = -O4
SOFLAGS       =
endif

ifeq ($(ARCH),solarisx86)
# Solaris CC on Intel
CXX           = CC
CXXFLAGS      = -O -KPIC
LD            = CC
LDFLAGS       = -O
SOFLAGS       = -G
endif

ifeq ($(ARCH),sgicc)
# SGI
CXX           = CC -n32  -I/usr/include/CC.sgi
CXXFLAGS      = -O
LD            = CC -n32  -I/usr/include/CC.sgi
LDFLAGS       = -O
SOFLAGS       = -shared
endif

ifeq ($(ARCH),sgiegcs)
# SGI 6.x with EGCS
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O -Wl,-u,__builtin_new -Wl,-u,__builtin_delete -Wl,-u,__nw__FUiPv
SOFLAGS       = -shared
endif

ifeq ($(ARCH),sgin32egcs)
# SGI 6.x with EGCS for n32 ABI
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O -L/usr/lib32 -Wl,-woff,134
SOFLAGS       = -shared
endif

ifeq ($(ARCH),sgigcc)
# SGI with GCC
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O -Wl,-u,__builtin_new -Wl,-u,__builtin_delete -Wl,-u,__nw__FUiPv
SOFLAGS       = -shared
endif

ifeq ($(ARCH),sgikcc)
# SGI with KCC
CXX           = KCC -n32 --no_exceptions
CXXFLAGS      = -O
LD            = KCC -n32 --no_exceptions
LDFLAGS       = -O
SOFLAGS       =
endif

ifeq ($(ARCH),alphagcc)
# Alpha/OSF with g++
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -Wl,-expect_unresolved,* -shared
endif

ifeq ($(ARCH),alphaegcs)
# Alpha/OSF with egcs
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -Wl,-expect_unresolved,* -shared
endif

ifeq ($(ARCH),alphakcc)
# Alpha/OSF with kai compiler (not yet valid)
CXX           = g++
CXXFLAGS      = -O -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -Wl,-expect_unresolved,* -shared
endif

ifeq ($(ARCH),alphacxx6)
# Alpha/OSF with cxx6
CXX           = cxx
CXXFLAGS      = -O0
LD            = cxx
LDFLAGS       = -O
SOFLAGS       = -Wl,-expect_unresolved,* -shared
endif

ifeq ($(ARCH),alphacxx)
# Alpha/OSF with cxx5
CXX           = cxx
CXXFLAGS      = -O
LD            = cxx
LDFLAGS       = -O
SOFLAGS       = -Wl,-expect_unresolved,* -call_shared
endif

ifeq ($(ARCH),linux)
# Linux with gcc 2.7.2.x
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared
endif

ifeq ($(ARCH),linuxrh42)
# Linux with gcc 2.7.2.x (RedHat 4.2)
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared
endif

ifeq ($(ARCH),linuxdeb)
# Linux with gcc 2.7.2.x
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared
endif

ifeq ($(ARCH),linuxdeb2)
# Linux with gcc 2.7.2.x
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared
endif

ifeq ($(ARCH),linuxsuse6)
# Linux with gcc 2.7.2.x
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared
endif

BDECFLAGS=      -W -Wall -ansi -pedantic -Wbad-function-cast -Wcast-align \
				-Wcast-qual -Wchar-subscripts -Winline \
				-Wmissing-prototypes -Wnested-externs -Wpointer-arith \
				-Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings  

ifeq ($(ARCH),linuxegcs)
# Linux with egcs (>= RedHat 5.2)
CXX           = g++
#CXXFLAGS      = -g -Wall -fPIC
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared
endif

ifeq ($(ARCH),linuxkcc)
# Linux with the KAI compiler
CXX           = KCC
CXXFLAGS      = -fPIC +K0
LD            = KCC
LDFLAGS       = -O
SOFLAGS       =
endif

ifeq ($(ARCH),linuxppcegcs)
# MkLinux with egcs/glibc
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared -Wl,-soname,
endif

ifeq ($(ARCH),linuxia64gcc)
# Itanium Linux with gcc 2.9x
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared
endif

ifeq ($(ARCH),linuxalphaegcs)
# Alpha Linux with egcs
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared
endif

ifeq ($(ARCH),mklinux)
# MkLinux with libc5
CXX           = g++
CXXFLAGS      = -O -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared -Wl,-soname,
endif

ifeq ($(ARCH),freebsd)
# FreeBSD with libc5
CXX           = g++
CXXFLAGS      = -O -pipe -W -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared -Wl,-x
endif

ifeq ($(ARCH),freebsd4)
# FreeBSD with glibc
CXX           = g++
CXXFLAGS      = -O -pipe -W -Wall -fPIC
LD            = g++
LDFLAGS       = -O
SOFLAGS       = -shared -Wl,-x
endif

ifeq ($(ARCH),hiux)
# Hitachi HIUX
CXX           = g++
CXXFLAGS      = -O2 -fPIC
LD            = g++
LDFLAGS       = -Wl,+s
SOFLAGS       = -Wl,-b,-E -nostdlib -nostartfiles
DllSuf        = sl
endif

ifeq ($(ARCH),win32)
# Windows with the VC++ compiler
ObjSuf        = obj
SrcSuf        = cxx
ExeSuf        = .exe
DllSuf        = dll
OutPutOpt     = -out:
CXX           = cl
CXXOPT        = -O2
#CXXOPT        = -Z7
CXXFLAGS      = $(CXXOPT) -G5 -MD -DWIN32 -D_WINDOWS -nologo \
                -DVISUAL_CPLUSPLUS -D_X86_=1 -D_DLL
LD            = link
LDOPT         = -opt:ref
#LDOPT         = -debug
LDFLAGS       = $(LDOPT) -pdb:none -nologo -nodefaultlib -incremental:no
SOFLAGS       = -DLL
SYSLIBS       = msvcrt.lib oldnames.lib kernel32.lib  ws2_32.lib mswsock.lib \
                advapi32.lib  user32.lib gdi32.lib comdlg32.lib winspool.lib \
                msvcirt.lib

ROOTLIBS     := $(shell $(ROOTSYS)/bin/root-config --nonew --libs)
ROOTGLIBS    := $(shell $(ROOTSYS)/bin/root-config --nonew --glibs)
endif

ifeq ($(CXX),)
$(error $(ARCH) invalid architecture)
endif

CXXFLAGS     += $(ROOTCFLAGS)
LIBS          = $(ROOTLIBS) $(SYSLIBS)
GLIBS         = $(ROOTGLIBS) $(SYSLIBS)

#------------------------------------------------------------------------------

DELAYO        = Delay.$(ObjSuf) \
                DelayDict.$(ObjSuf)

DELAYS        = Delay.$(SrcSuf) \
                DelayDict.$(SrcSuf)

DELAYPLOTS	= delayplots$(ExeSuf)
DELAYSTATS	= delaystats$(ExeSuf)
SUMMARIZE	= summarize$(ExeSuf)
TRENDPLOTS	= trendplots$(ExeSuf)
IPDVPLOTS	= ipdvplots$(ExeSuf)
IPDV		= ipdv$(ExeSuf)

DELAYPLOTSO   = delayplots.$(ObjSuf) TestBox.$(ObjSuf) TestBoxConfig.$(ObjSuf) \
		 TTMDelayData.$(ObjSuf) TTMStatistics.$(ObjSuf) \
		 Percentiles.$(ObjSuf) RoutingInfo.$(ObjSuf) \
		 TTMHistograms.$(ObjSuf) TTMOptions.$(ObjSuf) CSVdump.$(ObjSuf)

DELAYSTATSO   = delaystats.$(ObjSuf) TestBox.$(ObjSuf) TestBoxConfig.$(ObjSuf) \
		 TTMDelayData.$(ObjSuf) TTMStatistics.$(ObjSuf) \
		 Percentiles.$(ObjSuf) RoutingInfo.$(ObjSuf) \
		 TTMHistograms.$(ObjSuf) TTMOptions.$(ObjSuf) CSVdump.$(ObjSuf)

SUMMARIZEO    = summarize.$(ObjSuf) TestBox.$(ObjSuf) TestBoxConfig.$(ObjSuf) \
		 TTMSummaryChain.$(ObjSuf) Percentiles.$(ObjSuf) \
		 TTMOptions.$(ObjSuf) 
		 

TRENDPLOTSO   = trendplots.$(ObjSuf) TestBox.$(ObjSuf) TestBoxConfig.$(ObjSuf) \
		 TTMSummaryChain.$(ObjSuf) Percentiles.$(ObjSuf) \
		 TTMOptions.$(ObjSuf) 

IPDVPLOTSO   = ipdvplots.$(ObjSuf) TestBox.$(ObjSuf) TestBoxConfig.$(ObjSuf) \
		 TTMOptions.$(ObjSuf) 

IPDVO    = ipdv.$(ObjSuf) Percentiles.$(ObjSuf) iso8601.$(ObjSuf) 

DELAYPLOTSS   = delayplots.$(SrcSuf) TestBox.$(SrcSuf) TestBoxConfig.$(SrcSuf) \
		 TTMDelayData.$(SrcSuf) TTMStatistics.$(SrcSuf) \
		 Percentiles.$(SrcSuf) RoutingInfo.$(SrcSuf) \
		 TTMHistograms.$(SrcSuf) TTMOptions.$(SrcSuf) CSVdump.$(SrcSuf)

DELAYSTATSS   = delaystats.$(SrcSuf) TestBox.$(SrcSuf) TestBoxConfig.$(SrcSuf) \
		 TTMDelayData.$(SrcSuf) TTMOptions.${SrcSuf} TTMStatistics.$(SrcSuf) \
		 Percentiles.$(SrcSuf) CSVdump.$(SrcSuf)

SUMMARIZES    = summarize.$(SrcSuf) TestBox.$(SrcSuf) TestBoxConfig.$(SrcSuf) \
		 TTMSummaryChain.$(SrcSuf) Percentiles.$(SrcSuf) \
		 TTMOptions.$(SrcSuf)
		 
TRENDPLOTSS   = trendplots.$(SrcSuf) TestBox.$(SrcSuf) TestBoxConfig.$(SrcSuf) \
		 TTMSummaryChain.$(SrcSuf) Percentiles.$(SrcSuf) \
		 TTMOptions.$(SrcSuf) 

IPDVPLOTSS   = ipdvplots.$(SrcSuf) TestBox.$(SrcSuf) TestBoxConfig.$(SrcSuf) \
		 TTMOptions.$(SrcSuf) 

IPDVS    = ipdv.$(SrcSuf) Percentiles.$(SrcSuf) iso8601.$(SrcSuf) 


DELAYLIB      = $(LIBDIR)/libDelay.$(DllSuf)

PROGRAMS      = $(DELAYPLOTS) $(DELAYSTATS) $(TRENDPLOTS) \
		$(SUMMARIZE) $(IPDVPLOTS) $(IPDV)
OBJS          = $(DELAYPLOTSO) $(DELAYSTATSO) $(TRENDPLOTSO) \
		$(SUMMARIZEO) $(IPDVPLOTSO) $(IPDVO)

#------------------------------------------------------------------------------

.SUFFIXES: .$(SrcSuf) .$(ObjSuf) .$(DllSuf)

all:            $(PROGRAMS)

$(DELAYPLOTS):       $(DELAYPLOTSO)
		$(LD) $(LDFLAGS) $(DELAYPLOTSO) $(DELAYLIB) $(LIBS) \
		   $(OutPutOpt)$(DELAYPLOTS)
		@echo "$@ done"

$(DELAYSTATS):       $(DELAYSTATSO)
		$(LD) $(LDFLAGS) $(DELAYSTATSO) $(DELAYLIB) $(LIBS) \
		   $(OutPutOpt)$(DELAYSTATS)
		@echo "$@ done"

$(SUMMARIZE):       $(SUMMARIZEO)
		$(LD) $(LDFLAGS) $(SUMMARIZEO) $(DELAYLIB) $(LIBS) \
		$(OutPutOpt)$(SUMMARIZE)
		@echo "$@ done"

$(TRENDPLOTS):	$(TRENDPLOTSO)
		$(LD) $(LDFLAGS) $(TRENDPLOTSO) $(DELAYLIB) $(LIBS)\
		$(OutPutOpt)$(TRENDPLOTS)
		@echo "$@ done"

$(IPDVPLOTS):	$(IPDVPLOTSO)
		$(LD) $(LDFLAGS) $(IPDVPLOTSO) $(LIBS)\
		$(OutPutOpt)$(IPDVPLOTS)
		@echo "$@ done"

$(IPDV):       $(IPDVO)
		$(LD) $(LDFLAGS) $(IPDVO) $(DELAYLIB) $(LIBS) \
		   $(OutPutOpt)$(IPDV)
		@echo "$@ done"
clean:
		@rm -f $(OBJS) core

distclean:      clean
		@rm -f $(PROGRAMS) 

.SUFFIXES: .$(SrcSuf)

###


.$(SrcSuf).$(ObjSuf):
	$(CXX) $(CXXFLAGS) -c $<

install:   $(PROGRAMS)
	for i in $(PROGRAMS) ;\
	do	              \
		mv -f $(BINDIR)/$${i}  $(BINDIR)/$${i}.old   ;\
		$(INSTALL) -c -m 555 $$i $(BINDIR) ;\
	done

