
#include /sw/share/root/test/Makefile.arch

ROOTCONFIG   := root-config

ARCH         := $(shell $(ROOTCONFIG) --arch)
PLATFORM     := $(shell $(ROOTCONFIG) --platform)

CXX           =
ObjSuf        = o
SrcSuf        = cc
ExeSuf        =
DllSuf        = so
OutPutOpt     = -o # keep whitespace after "-o"

ROOTCFLAGS   := $(shell $(ROOTCONFIG) --cflags)
ROOTLDFLAGS  := $(shell $(ROOTCONFIG) --ldflags)
ROOTLIBS     := $(shell $(ROOTCONFIG) --libs)
ROOTGLIBS    := $(shell $(ROOTCONFIG) --glibs)
HASTHREAD    := $(shell $(ROOTCONFIG) --has-thread)

# MacOS X with cc (GNU cc 2.95.2 and gcc 3.3)
MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR)
ifeq ($(MACOSX_MINOR),5) 
MACOSX_MINOR  = 4
endif
CXX           = c++
CXXFLAGS      = -O2 -pipe -Wall -W -Woverloaded-virtual
LD            = $(MACOSXTARGET) c++
LDFLAGS       = -O2 -bind_at_load
# The SOFLAGS will be used to create the .dylib,
# the .so will be created separately
DllSuf        = dylib
UNDEFOPT      = dynamic_lookup
ifneq ($(MACOSX_MINOR),4)
ifneq ($(MACOSX_MINOR),3)
UNDEFOPT      = suppress
LD            = c++
endif
endif
SOFLAGS       = -dynamiclib -single_module -undefined $(UNDEFOPT)

CXXFLAGS     += $(ROOTCFLAGS)
CXXFLAGS     += -I/sw/include/gsl
LDFLAGS      += $(ROOTLDFLAGS)
LIBS          = $(ROOTLIBS) $(SYSLIBS)
GLIBS         = $(ROOTGLIBS) $(SYSLIBS)

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

AXISYMEMFIELDO        = AxiSymEMField.$(ObjSuf) AxiSymEMFieldDict.$(ObjSuf)
AXISYMEMFIELDS        = AxiSymEMField.$(SrcSuf) AxiSymEMFieldDict.$(SrcSuf)
AXISYMEMFIELDSO       = libAxiSymEMField.$(DllSuf)
AXISYMEMFIELD         = AxiSymEMField$(ExeSuf)
AXISYMEMFIELDLIB      = $(shell pwd)/$(AXISYMEMFIELDSO)

MAINAXISYMEMFIELDO    = AxiSymField.$(ObjSuf)
MAINAXISYMEMFIELDS    = AxiSymField.$(SrcSuf)

OBJS          = $(AXISYMEMFIELDO) $(MAINAXISYMEMFIELDO)

PROGRAMS      = $(AXISYMEMFIELD)

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

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

all:            $(PROGRAMS)

$(AXISYMEMFIELDSO):     $(AXISYMEMFIELDO)
ifeq ($(ARCH),aix)
		/usr/ibmcxx/bin/makeC++SharedLib $(OutPutOpt) $@ $(LIBS) -p 0 $^
else
ifeq ($(ARCH),aix5)
		/usr/vacpp/bin/makeC++SharedLib $(OutPutOpt) $@ $(LIBS) -p 0 $^
else
ifeq ($(PLATFORM),macosx)
# We need to make both the .dylib and the .so
		$(LD) $(SOFLAGS) $^ $(OutPutOpt) $@
ifeq ($(MACOSX_MINOR),4)
		ln -sf $@ $(subst .$(DllSuf),.so,$@)
else
		$(LD) -bundle -undefined $(UNDEFOPT) $(LDFLAGS) $^ \
		   $(OutPutOpt) $(subst .$(DllSuf),.so,$@)
endif
else
ifeq ($(PLATFORM),win32)
		bindexplib $* $^ > $*.def
		lib -nologo -MACHINE:IX86 $^ -def:$*.def \
		   $(OutPutOpt)$(AXISYMEMFIELDLIB)
		$(LD) $(SOFLAGS) $(LDFLAGS) $^ $*.exp $(LIBS) \
		   $(OutPutOpt)$@
else
		$(LD) $(SOFLAGS) $(LDFLAGS) $^ $(OutPutOpt) $@ $(EXPLLINKLIBS)
endif
endif
endif
endif
		@echo "$@ done"

$(AXISYMEMFIELD):       $(AXISYMEMFIELDSO) $(MAINAXISYMEMFIELDO)
		$(LD) $(LDFLAGS) $(MAINAXISYMEMFIELDO) $(AXISYMEMFIELDLIB) $(LIBS) \
		   $(OutPutOpt)$(AXISYMEMFIELD)
		@echo "$@ done"

clean:
		@rm -f $(OBJS) core

distclean:      clean
		@rm -f $(PROGRAMS) $(AXISYMEMFIELDSO) $(AXISYMEMFIELDLIB) *Dict.* *.def *.exp \
		   *.root *.ps *.so *.lib *.dll *.d *.log .def so_locations
		@rm -rf cxx_repository

.SUFFIXES: .$(SrcSuf)

###

AxiSymEMField.$(ObjSuf): AxiSymEMField.hh
AxiSymField.$(ObjSuf): AxiSymEMField.hh

AxiSymEMFieldDict.$(SrcSuf): AxiSymEMField.hh AxiSymEMLinkDef.hh
	@echo "Generating dictionary $@..."
	@rootcint -f $@ -c $^

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