CFILEEXT:=cpp # Make sure we're using a compiler (we probably don't need to define # it but we have been so here it is unless it was already set) ifndef CXX CXX=g++ endif BARECXXFLAGS:=-fPIC -g -Wall -D_REENTRANT #-pg -fprofile-arcs CXXFLAGS+=$(BARECXXFLAGS) -fno-exceptions CXXINC:=-I../include -Iinclude CXXLINK:=-L../lib -lAria -lArNetworking -lpthread -ldl -lrt \ -Xlinker -Bstatic -lstdc++ -Xlinker -Bdynamic CXXSTATICLINK:=-L../lib -Xlinker -Bstatic -lArNetworking -lAria -Xlinker -Bdynamic -lpthread -ldl -lrt -Xlinker -Bstatic -lstdc++ -Xlinker -Bdynamic ifdef JAVA_BIN JAVAC:=$(JAVA_BIN)/javac JAR:=$(JAVA_BIN)/jar else JAVAC:=javac JAR:=jar endif CFILES:= \ ArCentralManager.cpp \ ArCentralForwarder.cpp \ ArClientBase.cpp \ ArClientData.cpp \ ArClientHandlerConfig.cpp \ ArClientFileUtils.cpp \ ArClientSimpleConnector.cpp \ ArClientSwitchManager.cpp \ ArClientArgUtils.cpp \ ArHybridForwarderVideo.cpp \ ArMapChanger.cpp \ ArNetPacket.cpp \ ArNetPacketReceiverUdp.cpp \ ArNetPacketReceiverTcp.cpp \ ArNetPacketSenderTcp.cpp \ ArServerBase.cpp \ ArServerClient.cpp \ ArServerData.cpp \ ArServerFileUtils.cpp \ ArServerHandlerCamera.cpp \ ArServerHandlerCameraCollection.cpp \ ArServerHandlerCommands.cpp \ ArServerHandlerCommMonitor.cpp \ ArServerHandlerConfig.cpp \ ArServerHandlerMap.cpp \ ArServerHandlerMapping.cpp \ ArServerHandlerPopup.cpp \ ArServerMode.cpp \ ArServerModeDrive.cpp \ ArServerModeIdle.cpp \ ArServerModeRatioDrive.cpp \ ArServerModeStop.cpp \ ArServerModeWander.cpp \ ArServerInfoDrawings.cpp \ ArServerInfoRobot.cpp \ ArServerInfoSensor.cpp \ ArServerInfoStrings.cpp \ ArServerSimpleCommands.cpp \ ArServerSimpleOpener.cpp \ ArServerUserInfo.cpp \ ArTempDirectoryHelper.cpp \ md5.cpp OTFILES:=$(patsubst %.$(CFILEEXT),%.o,$(CFILES)) OFILES:=$(patsubst %,../obj/%,$(OTFILES)) TARGETS:=../lib/libArNetworking.so examples EXAMPLES_CPP:=$(shell find examples -name "*.$(CFILEEXT)" | grep -v Mod.cpp) EXAMPLES:=$(patsubst %.$(CFILEEXT),%,$(EXAMPLES_CPP)) TESTS_CPP:=$(shell find tests -name "*.$(CFILEEXT)" | grep -v Mod.cpp) TESTS:=$(patsubst %.$(CFILEEXT),%,$(TESTS_CPP)) SRC_FILES:=$(patsubst %,src/%,$(CFILES)) HEADER_FILES:=$(shell find include -type f -name \*.h) all: dirs $(TARGETS) dirs: @mkdir -p -v ../obj @mkdir -p -v ../lib ../lib/libArNetworking.so: $(OFILES) ../lib/libAria.so Makefile.dep @mkdir -p -v ../obj @mkdir -p -v ../lib $(CXX) -shared -Xlinker -Bstatic -lstdc++ -Xlinker -Bdynamic -o $(@) $(OFILES) ../lib/libArNetworking.a: $(OFILES) ../lib/libAria.a Makefile.dep @mkdir -p -v ../obj @mkdir -p -v ../lib ar -cr $(@) $(OFILES) ranlib $(@) examples: dirs $(EXAMPLES) Makefile.dep tests: dirs $(TESTS) Makefile.dep clean: cleanExamples rm -f ../lib/libArNetworking.so ../lib/libArNetworking.a \ `find . -name core` $(OFILES) `find . -name '*~'` cleanPython: -rm ../python/_ArNetworkingPy.so -rm ../python/ArNetworkingPy.py -rm ../python/ArNetworkingPy.pyc -rm ../python/ArNetworkingPy_wrap.cpp -rm ../obj/ArNetworkingPy_wrap.o cleanExamples: rm -f $(EXAMPLES) cleanDoc: -rm -f docs/*.html docs/*.png docs/*.png -rm -rf docs/tmp fullClean: clean cleanExamples cleanJava cleanPython cleanDoc docs: doc doc: docs/index.html docs/index.html: $(SRC_FILES) $(HEADER_FILES) $(EXAMPLES_CPP) doxygen.conf docs/options/all_options.dox ../docs/index.html $(MAKE) cleanDoc -mkdir docs doxygen doxygen.conf ../docs/index.html: FORCE $(MAKE) -C .. docs/index.html #doxygen.conf: FORCE # $(MAKE) -C .. ArNetworking/$@ # #CommandLineOptions.txt: FORCE # $(MAKE) -C .. ArNetworking/$@ Makefile.dep: $(MAKE) dep dep: clean if [ -f `echo src/*.cpp | cut -d' ' -f1` ]; then \ $(CXX) $(CXXFLAGS) $(CXXINC) -MM src/*.cpp | \ awk '$$1 ~ /:/{printf "../obj/%s\n", $$0} $$1 !~ /:/' > Makefile.dep; fi if [ -f `echo examples/*.cpp | cut -d' ' -f1` ]; then \ $(CXX) $(CXXFLAGS) $(CXXINC) -MM examples/*.cpp | \ awk '$$1 ~ /:/{printf "examples/%s\n", $$0} $$1 !~ /:/' | \ sed 's/\.o//' >> Makefile.dep; fi ../lib/libAria.so: FORCE $(MAKE) -C .. dirs lib/libAria.so ../lib/libAria.a: FORCE $(MAKE) -C .. dirs lib/libAria.a ../obj/%.o : src/%.cpp Makefile.dep $(CXX) $(CXXFLAGS) $(CXXINC) -c $< -o $@ ../obj/%.o : src/%.c Makefile.dep $(CXX) $(CXXFLAGS) $(CXXINC) -c $< -o $@ # Don't build .o files if their library is up to date with respect to source files: .INTERMEDIATE: $(OFILES) # But don't delete .o files if we do make them in order to make a library: .PRECIOUS: $(OFILES) examples/%: examples/%.$(CFILEEXT) ../lib/libAria.so ../lib/libArNetworking.so Makefile.dep $(CXX) $(CXXFLAGS) $(CXXINC) $< -o $@ $(CXXLINK) tests/%: tests/%.$(CFILEEXT) ../lib/libAria.so ../lib/libArNetworking.so Makefile.dep $(CXX) $(CXXFLAGS) $(CXXINC) $< -o $@ $(CXXLINK) examples/%Static: examples/%.$(CFILEEXT) ../lib/libAria.a ../lib/libArNetworking.a Makefile.dep $(CXX) $(CXXFLAGS) $(CXXINC) $< -o $@ $(CXXSTATICLINK) strip $@ tests/%Static: tests/%.$(CFILEEXT) ../lib/libAria.a ../lib/libArNetworking.a Makefile.dep $(CXX) $(CXXFLAGS) $(CXXINC) $< -o $@ $(CXXSTATICLINK) strip $@ CommandLineOptions.txt.in docs/options/all_options.dox: genCommandLineOptionDocs -mkdir docs/options ./genCommandLineOptionDocs genCommandLineOptionDocs: ../utils/genCommandLineOptionDocs.cpp ../lib/libAria.so ../lib/libArNetworking.so src/ArServerSimpleOpener.cpp src/ArClientSimpleConnector.cpp src/ArClientSwitchManager.cpp $(CXX) $(CXXFLAGS) -DFOR_ARNETWORKING $(CXXINC) $< -o $@ $(CXXLINK) ## Python SWIG wrapper ## ifdef PYTHON_INCLUDE PYTHON_INCLUDE_FLAGS=-I$(PYTHON_INCLUDE) else ifdef DIST_INSTALL $(warning WARNING using default value of /usr/include/python2.5 for PYTHON_INCLUDE directory. Set PYTHON_INCLUDE environment variable if you would like to use a different version of the Python C development library to build the Python ARIA wrapper.) endif PYTHON_INCLUDE:=/usr/include/python2.5 PYTHON_INCLUDE_FLAGS=-I/usr/include/python2.5 endif python: ariaPython ../python/_ArNetworkingPy.so ariaPython: $(MAKE) -C .. python ../python/ArNetworkingPy_wrap.cpp ../python/ArNetworkingPy.py: include/wrapper.i $(HEADER_FILES) cd ../python; swig -c++ -python -module ArNetworkingPy -Dlinux -DAREXPORT -o ArNetworkingPy_wrap.cpp -I../include -I../ArNetworking/include ../ArNetworking/include/wrapper.i ../python/_ArNetworkingPy.so: ../obj/ArNetworkingPy_wrap.o ../lib/libArNetworking.so Makefile.dep $(CXX) $(BARECXXFLAGS) -shared -o $(@) ../obj/ArNetworkingPy_wrap.o -lpthread -ldl -lrt \ -L../lib -lAria -lArNetworking ../obj/ArNetworkingPy_wrap.o: ../python/ArNetworkingPy_wrap.cpp @ if test -z "$(PYTHON_INCLUDE)"; then echo "*** Error: PYTHON_INCLUDE is not set, cannot build ArNetworking python wrapper! ***"; exit 1; fi $(CXX) -c $(BARECXXFLAGS) -g $(CXXINC) -I$(PYTHON_INCLUDE) $< -o $@ ## Java SWIG wrapper ## java: ../lib/libArNetworkingJava.so ../java/ArNetworking.jar ../java/Aria.jar: $(MAKE) -C .. java ../java/ArNetworking.jar: ../java/com/mobilerobots/ArNetworking/ArServerBase.class cd ../java ; $(JAR) cf ArNetworking.jar com/mobilerobots/ArNetworking/*.class ../java/ArNetworkingJava_wrap.cpp ../java/com/mobilerobots/ArNetworking/ArServerBase.java: include/wrapper.i $(HEADER_FILES) -mkdir -p ../java/com/mobilerobots/ArNetworking rm ../java/com/mobilerobots/ArNetworking/*.java ../java/ArNetworkingJava_wrap.cpp ../java/ArNetworkingJava_wrap.h ; swig -c++ -java -package com.mobilerobots.ArNetworking -outdir ../java/com/mobilerobots/ArNetworking -module ArNetworkingJava -Dlinux -DAREXPORT -o ../java/ArNetworkingJava_wrap.cpp -I../include -Iinclude include/wrapper.i ../java/com/mobilerobots/ArNetworking/ArServerBase.class: ../java/com/mobilerobots/ArNetworking/ArServerBase.java ../java/Aria.jar rm ../java/com/mobilerobots/ArNetworking/*.class; $(JAVAC) -classpath ../java/Aria.jar:../java ../java/com/mobilerobots/ArNetworking/*.java cleanJava: -rm ../java/ArNetworking.jar -rm -r ../java/com/mobilerobots/ArNetworking -rm ../java/ArNetworkingJava_wrap.* ../obj/ArNetworkingJava_wrap.o ../lib/libArNetworkingJava.so ../lib/libArNetworkingJava.so: ../obj/ArNetworkingJava_wrap.o Makefile.dep ../lib/libArNetworking.so $(CXX) $(BARECXXFLAGS) -shared -o $(@) ../obj/ArNetworkingJava_wrap.o -lpthread -ldl -lrt -L../lib -lAria -lArNetworking ../obj/ArNetworkingJava_wrap.o: ../java/ArNetworkingJava_wrap.cpp @ if test -z "$(JAVA_INCLUDE)"; then echo "*** Error: JAVA_INCLUDE is not set, building ArNetworkingPy_wrap.cpp will probably fail! ***"; fi $(CXX) -c $(BARECXXFLAGS) $(CXXINC) -I$(JAVA_INCLUDE) -I$(JAVA_INCLUDE)/linux $< -o $@ FORCE: # Just see if there is a Makefile.dep, if so include one... there # should be one because of the rules up in the command line parsing # part above ifeq (Makefile.dep,$(wildcard Makefile.dep)) include Makefile.dep # End of the Makefile.dep check endif