#  Makefile for building JTC JThreads/C++ 
#  Source code from Object Oriented Concepts  www.ooc.com
#  R. Ansari      LAL-IN2P3/CNRS    

CXX := g++
ifdef EROSCXX
  CXX := $(EROSCXX)
endif

SYSNOM = $(shell echo `uname`)
SYSCOMPNOM = $(SYSNOM)-$(CXX)

$(OBJ)%.o:%.cc
	$(COMPILE.cc) -o $@ $<

$(OBJ)%.o:%.cpp
	$(COMPILE.cc) -o $@ $<

#  Flag pour compilo DEC-cxx (Compaq)
ifeq ($(CXX),cxx)
  CPPFLAGS   :=  -I. -pthread -nopt -distinguish_nested_enums 
endif

AR = ar
ARFLAGS = -rcs

LIB = Objs/
OBJ = Objs/

OBJLIST =  $(OBJ)Cond.o $(OBJ)Event.o $(OBJ)License.o $(OBJ)Monitor.o $(OBJ)Mutex.o $(OBJ)TSS.o $(OBJ)TSSManager.o $(OBJ)Thread.o $(OBJ)ThreadGroup.o $(OBJ)Version.o

SYSLIBS = -lpthread 

# ---------------- Building Library
all: rep $(LIB)libJTC.a $(LIB)libJTC.so 

rep :
	if (test ! -d Objs) then mkdir Objs ; fi

$(LIB)libJTC.a : $(OBJLIST)
	$(AR) $(ARFLAGS) $(LIB)libJTC.a $(OBJLIST) 
ifeq ($(CXX),cxx)
	$(CXX) $? $(CPPFLAGS) $(CXXFLAGS) -o $(OBJ)xx.x -Hf
endif 

$(LIB)libJTC.so : $(LIB)libJTC.a
	$(CXX) -shared -o $(LIB)libJTC.so $(OBJLIST) $(SYSLIBS)

# ---------------- Cleaning 
clean:
	rm -rf Objs

# --------------- Installing 
install:
	if (test ! -d $(JTCBASEREP)/Include) then mkdir $(JTCBASEREP)/Include ; fi
	if (test ! -d $(JTCBASEREP)/Include/JTC) then mkdir $(JTCBASEREP)/Include/JTC ; fi
	cp JTC/*.h $(JTCBASEREP)/Include/JTC
	if (test ! -d $(JTCBASEREP)/$(SYSCOMPNOM)) then mkdir $(JTCBASEREP)/$(SYSCOMPNOM) ; fi
	if (test ! -d $(JTCBASEREP)/$(SYSCOMPNOM)/Libs)  then mkdir $(JTCBASEREP)/$(SYSCOMPNOM)/Libs ; fi
	if (test ! -d $(JTCBASEREP)/$(SYSCOMPNOM)/ShLibs)  then mkdir $(JTCBASEREP)/$(SYSCOMPNOM)/ShLibs ; fi
	cp Objs/libJTC.a $(JTCBASEREP)/$(SYSCOMPNOM)/Libs
	cp Objs/libJTC.so $(JTCBASEREP)/$(SYSCOMPNOM)/ShLibs

$(OBJ)Cond.o : Cond.cpp
	$(CXX) $(CPPFLAGS) -c -o $@ $< 
$(OBJ)Event.o : Event.cpp
	$(CXX) $(CPPFLAGS) -c -o $@ $< 
$(OBJ)License.o : License.cpp
	$(CXX) $(CPPFLAGS) -c -o $@ $< 
$(OBJ)Monitor.o : Monitor.cpp
	$(CXX) $(CPPFLAGS) -c -o $@ $< 
$(OBJ)Mutex.o : Mutex.cpp
	$(CXX) $(CPPFLAGS) -c -o $@ $< 
$(OBJ)TSS.o : TSS.cpp
	$(CXX) $(CPPFLAGS) -c -o $@ $< 
$(OBJ)TSSManager.o : TSSManager.cpp
	$(CXX) $(CPPFLAGS) -c -o $@ $< 
$(OBJ)Thread.o : Thread.cpp
	$(CXX) $(CPPFLAGS) -c -o $@ $< 
$(OBJ)ThreadGroup.o : ThreadGroup.cpp
	$(CXX) $(CPPFLAGS) -c -o $@ $< 
$(OBJ)Version.o : Version.cpp
	$(CXX) $(CPPFLAGS) -c -o $@ $< 

