rosaria/Legacy/Aria/Makefile
2021-12-16 14:07:59 +00:00

777 lines
24 KiB
Makefile

####
#### Aria top level makefile
####
####
#### Internal variables:
####
#### CFILEEXT -- This is to denote the file extension that is used. This is
#### used by the build rules to figure out which files to build.
#### ie: cpp
#### ie: cxx
#### ie: cc
# 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
####
#### General variables
####
CFILEEXT:=cpp
# this is set up with the extra layer since the python wrapper needs exceptions
# but I didn't want to have two sets of defines
BARECXXFLAGS:=-g -Wall -D_REENTRANT #-pg -fprofile-arcs
CXXFLAGS+=$(BARECXXFLAGS) -fno-exceptions
CXXINC:=-Iinclude
CXXLINK=-Llib -lAria
CXXSTATICLINK:=-Llib -Xlinker -Bstatic -lAria -Xlinker -Bdynamic
host:=$(shell uname | cut -d _ -f 1)
ifeq ($(host),MINGW32)
$(info Building on MinGW)
#CXXFLAGS+=-mwindows -mms-bitfields -D__MINGW__ -DMINGW
CXXFLAGS+=-mms-bitfields -D__MINGW__ -DMINGW
CXXLINK+=-lpthreadGC2 -lwinmm -lws2_32 -lstdc++
CXXSTATICLINK+=-Wl,-Bstatic -lpthread -Wl,-Bdynamic -lwinmm -lws2_32 -lstdc++
binsuffix:=.exe
else
BARECXXFLAGS+=-fPIC
CXXLINK+=-lpthread -ldl -lrt
CXXSTATICLINK+=-Xlinker -Bdynamic -lpthread -ldl -lrt -Xlinker -Bstatic -lstdc++ -Xlinker -Bdynamic
binsuffix:=
endif
ifndef JAVAC
ifdef JAVA_BIN
JAVAC:=$(JAVA_BIN)/javac
else
JAVAC:=javac
endif #ifdef JAVA_BIN
endif #ifndef JAVAC
ifndef JAR
ifdef JAVA_BIN
JAR:=$(JAVA_BIN)/jar
else
JAR:=jar
endif #ifdef JAVA_BIN
endif #ifndef JAR
####
#### Aria build variables
####
# Default targets to build in the default rule:
TARGETS:=lib/libAria.so examples/demo$(binsuffix)
# Default static libraries and examples:
STATIC_TARGETS:=lib/libAria.a examples/demoStatic$(binsuffix)
# Lots of targets, to build in the everything rule:
ALL_TARGETS:=lib/libAria.so utils examples tests docs params lib/libArNetworking.so swig arnetworking_docs arnetworking_swig clib/libArNetworking.a $(STATIC_TARGETS)
CFILES:= \
ArAction.cpp \
ArActionAvoidFront.cpp \
ArActionAvoidSide.cpp \
ArActionBumpers.cpp \
ArActionColorFollow.cpp \
ArActionConstantVelocity.cpp \
ArActionDeceleratingLimiter.cpp \
ArActionDesired.cpp \
ArActionDriveDistance.cpp \
ArActionGoto.cpp \
ArActionGotoStraight.cpp \
ArActionGroup.cpp \
ArActionGroups.cpp \
ArActionInput.cpp \
ArActionIRs.cpp \
ArActionJoydrive.cpp \
ArActionKeydrive.cpp \
ArActionLimiterBackwards.cpp \
ArActionLimiterForwards.cpp \
ArActionLimiterRot.cpp \
ArActionLimiterTableSensor.cpp \
ArActionMovementParameters.cpp \
ArActionMovementParametersDebugging.cpp \
ArActionRatioInput.cpp \
ArActionRobotJoydrive.cpp \
ArActionStallRecover.cpp \
ArActionStop.cpp \
ArActionTriangleDriveTo.cpp \
ArActionTurn.cpp \
ArACTS.cpp \
ArAMPTU.cpp \
ArAnalogGyro.cpp \
ArArg.cpp \
ArArgumentBuilder.cpp \
ArArgumentParser.cpp \
ArASyncTask.cpp \
ArBasePacket.cpp \
ArBatteryConnector.cpp \
ArBatteryMTX.cpp \
ArBumpers.cpp \
ArCameraCommands.cpp \
ArCameraCollection.cpp \
ArCondition_LIN.cpp \
ArConfig.cpp \
ArConfigArg.cpp \
ArConfigGroup.cpp \
ArDataLogger.cpp \
ArDeviceConnection.cpp \
ArDPPTU.cpp \
ArFileParser.cpp \
ArForbiddenRangeDevice.cpp \
ArFunctorASyncTask.cpp \
ArGPS.cpp \
ArGPSConnector.cpp \
ArGPSCoords.cpp \
ArGripper.cpp \
ArInterpolation.cpp \
ArIrrfDevice.cpp \
ArIRs.cpp \
ArJoyHandler.cpp \
ArKeyHandler.cpp \
ArLaser.cpp \
ArLaserConnector.cpp \
ArLaserFilter.cpp \
ArLaserLogger.cpp \
ArLaserReflectorDevice.cpp \
ArLCDConnector.cpp \
ArLCDMTX.cpp \
ArLineFinder.cpp \
ArLMS1XX.cpp \
ArLMS2xx.cpp \
ArLMS2xxPacket.cpp \
ArLMS2xxPacketReceiver.cpp \
ArLog.cpp \
ArLogFileConnection.cpp \
ArMap.cpp \
ArMapComponents.cpp \
ArMapInterface.cpp \
ArMapObject.cpp \
ArMapUtils.cpp \
ArMD5Calculator.cpp \
ArMode.cpp \
ArModes.cpp \
ArModule.cpp \
ArModuleLoader.cpp \
ArMutex.cpp \
ArMutex_LIN.cpp \
ArNetServer.cpp \
ArNMEAParser.cpp \
ArNovatelGPS.cpp \
ArP2Arm.cpp \
ArPriorityResolver.cpp \
ArPTZ.cpp \
ArPTZConnector.cpp \
ArRangeBuffer.cpp \
ArRangeDevice.cpp \
ArRangeDeviceThreaded.cpp \
ArRatioInputKeydrive.cpp \
ArRatioInputJoydrive.cpp \
ArRatioInputRobotJoydrive.cpp \
ArRecurrentTask.cpp \
ArRobot.cpp \
ArRobotBatteryPacketReader.cpp \
ArRobotConfig.cpp \
ArRobotConfigPacketReader.cpp \
ArRobotConnector.cpp \
ArRobotJoyHandler.cpp \
ArRobotPacket.cpp \
ArRobotPacketReceiver.cpp \
ArRobotPacketReaderThread.cpp \
ArRobotPacketSender.cpp \
ArRobotParams.cpp \
ArRobotTypes.cpp \
ArRVisionPTZ.cpp \
ArS3Series.cpp \
ArSZSeries.cpp \
ArSick.cpp \
ArSimpleConnector.cpp \
ArSimulatedLaser.cpp \
ArSocket.cpp \
ArSonarConnector.cpp \
ArSonarDevice.cpp \
ArSonarMTX.cpp \
ArSensorReading.cpp \
ArSonyPTZ.cpp \
ArSoundsQueue.cpp \
ArSoundPlayer.cpp \
ArStringInfoGroup.cpp \
ArSyncLoop.cpp \
ArSyncTask.cpp \
ArSystemStatus.cpp \
ArSonarAutoDisabler.cpp \
ArSpeech.cpp \
ArTCM2.cpp \
ArTCMCompassDirect.cpp \
ArTCMCompassRobot.cpp \
ArTcpConnection.cpp \
ArThread.cpp \
ArThread_LIN.cpp \
ArTransform.cpp \
ArTrimbleGPS.cpp \
ArUrg.cpp \
ArUrg_2_0.cpp \
ArVCC4.cpp \
Aria.cpp \
ariaUtil.cpp \
md5.cpp
# Omit some Linux-only classes, and replace others with Win32 implementations.
ifeq ($(host),MINGW32)
CFILES+=ArSocket_WIN.cpp \
ArJoyHandler_WIN.cpp \
ArSerialConnection_WIN.cpp \
ArSignalHandler_WIN.cpp
else
CFILES+=ArSocket_LIN.cpp \
ArJoyHandler_LIN.cpp \
ArSerialConnection_LIN.cpp \
ArSignalHandler_LIN.cpp \
ArVersalogicIO.cpp \
ArMTXIO.cpp
endif
####
#### Utility variables. No need to touch these.
####
OTFILES:=$(patsubst %.$(CFILEEXT),%.o,$(CFILES))
OFILES:=$(patsubst %,obj/%,$(OTFILES))
EXAMPLES_CPP:=$(shell find examples -name "*.$(CFILEEXT)" | grep -v Mod.cpp | grep -v proprietary)
EXAMPLES:=$(patsubst %.$(CFILEEXT),%$(binsuffix),$(EXAMPLES_CPP))
EXAMPLES_STATIC:=$(patsubst %,%Static$(binsuffix),$(EXAMPLES))
MOD_EXAMPLES_CPP:=$(shell find examples -name "*.$(CFILEEXT)" | grep Mod.cpp)
MOD_EXAMPLES:=$(patsubst %.$(CFILEEXT),%.so,$(MOD_EXAMPLES_CPP))
TESTS_CPP:=$(shell find tests -name "*.$(CFILEEXT)" | grep -v Mod.cpp | grep -v proprietary)
MOD_TESTS_CPP:=$(shell find tests -name "*Mod.$(CFILEEXT)")
MOD_TESTS:=$(patsubst %.$(CFILEEXT),%.so,$(MOD_TESTS_CPP))
TESTS:=$(patsubst %.$(CFILEEXT),%$(binsuffix),$(TESTS_CPP))
TESTS_STATIC:=$(patsubst %,%Static$(binsuffix),$(TESTS))
ADVANCED_CPP:=$(shell find advanced -name "*.$(CFILEEXT)" | grep -v Mod.cpp | grep -v proprietary)
ADVANCED:=$(patsubst %.$(CFILEEXT),%,$(ADVANCED_CPP))
UTILS_CPP:=$(shell find utils -name "*.$(CFILEEXT)")
UTILS:=$(patsubst %.$(CFILEEXT),%$(binsuffix),$(UTILS_CPP))
SRC_FILES:=$(patsubst %,src/%,$(CFILES))
HEADER_FILES:=$(shell find include -type f -name \*.h)
####
#### General rules for user invocation
####
# Default Rule
all: dirs $(TARGETS)
# Build all targets, docs, params, etc. etc.
everything: dirs $(ALL_TARGETS)
static: dirs $(STATIC_TARGETS)
# Build everything required for distribution packages
dist-all: lib/libAria.so params docs CommandLineOptions.txt.in \
lib/libArNetworking.so ArNetworking/CommandLineOptions.txt.in examples/demo \
examples/demoStatic ArNetworking/examples/serverDemo \
ArNetworking/examples/serverDemoStatic ArNetworking/examples/clientDemo \
ArNetworking/examples/clientDemoStatic java python arnetworking_swig \
arnetworking_docs
examples: $(EXAMPLES)
modExamples: $(MOD_EXAMPLES)
tests: $(TESTS) $(MOD_TESTS)
advanced: $(ADVANCED)
utils: $(UTILS)
cleanDep:
-rm Makefile.dep `find . -name Makefile.dep`
# directories that might not exist:
dirs:
@mkdir -p -v obj
@mkdir -p -v lib
docs: doc
doc: docs/index.html
docs/index.html: $(SRC_FILES) $(HEADER_FILES) $(EXAMPLES_CPP) docs/overview.dox docs/options/all_options.dox docs/params.dox
@echo Removing old documentation...
$(MAKE) cleanDoc
@echo Running dist/make-doc.sh to generate HTML API documentation...
dist/make-doc.sh dev ARIA_DIST_NO_NTP=1
arnetworking_swig:
$(MAKE) -C ArNetworking java python
arnetworking_docs:
$(MAKE) -C ArNetworking docs
help:
@echo To make most things, run \'make\' or \'make all\'
@echo Some useful targets include:
@echo " allLibs, cleanAllLibs, depAllLibs (do all subdirectories)"
@echo " clean"
@echo " dep"
@echo " cleanDep"
@echo " docs"
@echo " cleanAll (also cleans ArNetworking, java, python, etc.)"
@echo " examples"
@echo " tests"
@echo " utils"
@echo " python"
@echo " cleanPython"
@echo " java"
@echo " cleanJava"
@echo " examples/<Some Example>, where examples/<Some Example>.cpp is an example program source file."
@echo " tests/<Some Test>, where tests/<Some Test>.cpp is a test program source file."
@echo " allLibs (try to build all auxilliary libraries that you have installed by running make in each directory starting with \"Ar\")"
@echo " cleanAllLibs, depAllLibs (do make clean or make dep in the \"Ar*\" auxilliary libraries)"
@echo " install (if this is a source tar.gz package)"
info:
@echo ARIA=$(ARIA)
@echo CXX=$(CXX)
@echo CXXFLAGS=$(CXXFLAGS)
@echo CXXINC=$(CXXINC)
@echo CXXLINK=$(CXXLINK)
@echo CXXSTATICLINK=$(CXXSTATICLINK)
@echo ALL_TARGETS=$(ALL_TARGETS)
@echo
@echo JAVAC=$(JAVAC)
@echo JAR=$(JAR)
@echo
@echo Use \'make moreinfo\' for info about individual files, etc.
moreinfo:
@echo CFILES=$(CFILES)
@echo
@echo EXAMPLES=$(EXAMPLES)
@echo
@echo MOD_EXAMPLES=$(MOD_EXAMPLES)
@echo
@echo TESTS=$(TESTS)
@echo
@echo MOD_TESTS=$(MOD_TESTS)
@echo
@echo ADVANCED=$(ADVANCED)
@echo
@echo UTILS=$(UTILS)
@echo
@echo SRC_FILES=$(SRC_FILES)
@echo
@echo HEADER_FILES=$(HEADER_FILES)
clean: cleanUtils cleanExamples cleanModules cleanTests cleanAdvanced
-rm -f lib/libAria.a lib/libAria.so $(OFILES) `find . -name core` `find . -name '*~'` obj/AriaPy.o obj/AriaJava.o
cleanUtils:
-rm -f $(UTILS)
cleanExamples:
-rm -f $(EXAMPLES) $(EXAMPLES_STATIC)
cleanTests:
-rm -f $(TESTS) $(TESTS_STATIC)
cleanAdvanced:
-rm -f $(ADVANCED)
cleanModules:
-rm -f $(MOD_EXAMPLES)
cleanDoc:
-rm docs/*.html docs/*.png docs/doxygen.css
cleandoc: cleanDoc
cleanPython:
-rm python/_AriaPy.so
-rm python/AriaPy.py
-rm python/AriaPy.pyc
-rm python/AriaPy_wrap.cpp
-rm python/AriaPy_wrap.h
-rm obj/AriaPy_wrap.o
cleanpython: cleanPython
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$(binsuffix)\n", $$0} $$1 !~ /:/' | \
sed 's/\.o//' >> Makefile.dep; fi
if [ -f `echo utils/*.cpp | cut -d' ' -f1` ]; then \
$(CXX) $(CXXFLAGS) $(CXXINC) -MM utils/*.cpp | \
awk '$$1 ~ /:/{printf "utils/%s$(binsuffix)\n", $$0} $$1 !~ /:/' | \
sed 's/\.o//' >> Makefile.dep; fi
if [ -f `echo tests/*.cpp | cut -d' ' -f1` ]; then \
$(CXX) $(CXXFLAGS) $(CXXINC) -MM tests/*.cpp | \
awk '$$1 ~ /:/{printf "tests/%s$(binsuffix)\n", $$0} $$1 !~ /:/' | \
sed 's/\.o//' >> Makefile.dep; fi
if [ -f `echo advanced/*.cpp | cut -d' ' -f1` ]; then \
$(CXX) $(CXXFLAGS) $(CXXINC) -MM advanced/*.cpp | \
awk '$$1 ~ /:/{printf "advanced/%s$(binsuffix)\n", $$0} $$1 !~ /:/' | \
sed 's/\.o//' >> Makefile.dep; fi
Makefile.dep:
$(MAKE) dep
depAll: cleanDep
make dep;
for dir in `find . -maxdepth 1 -name "Ar*" -xtype d`; do cd $$dir; make dep; cd ..; done
cleanAll: clean
rm -f lib/lib*.so*
for dir in `find . -maxdepth 1 -name "Ar*" -xtype d`; do cd $$dir; make clean; cd ..; done
$(MAKE) -C ArVideo cleanAll
$(MAKE) -C ArNetworking cleanAll
fullCleanAll: cleanAll cleanJava cleanPython
rm -f lib/lib*.so*
rm -f obj/*.o*
for dir in `find . -maxdepth 1 -name "Ar*" -xtype d`; do cd $$dir; make fullClean; cd ..; done
params: utils/makeParams$(binsuffix)
-mkdir params
utils/makeParams$(binsuffix)
CommandLineOptions.txt.in docs/options/all_options.dox: utils/genCommandLineOptionDocs$(binsuffix) src/ArSimpleConnector.cpp src/ArGPSConnector.cpp src/ArTCM2.cpp
-mkdir docs/options
utils/genCommandLineOptionDocs$(binsuffix)
alllibs: allLibs
allLibs: all
find . -type d -and -name Ar\* -maxdepth 1 -exec $(MAKE) -C \{\} \;
cleanAllLibs: clean cleanJava cleanPython cleanDep
for dir in `find . -maxdepth 1 -name "Ar*" -xtype d`; do $(MAKE) -C $$dir clean cleanAll; done
cleanalllibs: cleanAllLibs
checkAll:
$(MAKE) everything > checkAll.log 2>&1
$(MAKE) allLibs >> checkAll.log 2>&1
grep -n -v 'Error 1 (ignored)' checkAll.log | grep -C 4 'Error' > checkAll-Errors.log
@echo
@echo Errors were:
@echo
@cat checkAll-Errors.log
@echo
@echo Error log also saved as checkAll-Errors.log. Full log saved as checkAll.log.
####
#### Swig wrappers
####
ifndef SWIG
SWIG=swig
endif
### Python 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: python/_AriaPy.so python/AriaPy.py
py: python
python-doc: python/AriaPy.html
python/AriaPy.html: python/AriaPy.py
cd python; pydoc -w AriaPy
python/AriaPy_wrap.cpp python/AriaPy.py: include/wrapper.i include/*.h
-rm -f `find python -maxdepth 1 -xtype f -name "*Aria*" | grep -v .ds | grep -v .sln | grep -v .vcproj`
cd python; $(SWIG) -Wall -c++ -python -modern -module AriaPy -Dlinux -DAREXPORT -o AriaPy_wrap.cpp -I../include ../include/wrapper.i
python/_AriaPy.so: obj/AriaPy_wrap.o lib/libAria.so Makefile.dep
if ! test -f $(PYTHON_INCLUDE)/Python.h; then echo Error: $(PYTHON_INCLUDE)/Python.h not found. Is the Python development package installed on this system? Is PYTHON_INCLUDE set correctly?; exit 1; fi
$(CXX) -shared -o $(@) obj/AriaPy_wrap.o $(CXXLINK)
obj/AriaPy_wrap.o: python/AriaPy_wrap.cpp
mkdir -p obj
@ if test -z "$(PYTHON_INCLUDE)"; then echo "*** Error: PYTHON_INCLUDE is not set, cannot build ARIA python wrapper"; fi
if ! test -f $(PYTHON_INCLUDE)/Python.h; then echo Error: $(PYTHON_INCLUDE)/Python.h not found. Is the Python development package installed on this system? Is PYTHON_INCLUDE set correctly?; exit 1; fi
$(CXX) -c $(BARECXXFLAGS) $(CXXINC) $(PYTHON_INCLUDE_FLAGS) $< -o $@
### Java Wrapper: ###
java: lib/libAriaJava.so java/Aria.jar
java/Aria.jar: java/com/mobilerobots/Aria/ArRobot.class
cd java; $(JAR) cf Aria.jar com/mobilerobots/Aria/*.class
cleanJava:
-rm -f `find java -xtype f -maxdepth 1 | grep -v .ds | grep -v .sln | grep -v .vcproj`
-rm lib/libAriaJava.so
-rm java/AriaJava_wrap.cpp
-rm java/AriaJava_wrap.h
-rm obj/AriaJava_wrap.o
cleanjava: cleanJava
cleanSwigJava:
-rm -r java/Aria.jar java/com/mobilerobots/Aria
lib/libAriaJava.so: obj/AriaJava_wrap.o lib/libAria.so Makefile.dep
$(CXX) -shared -o $(@) obj/AriaJava_wrap.o $(CXXLINK)
obj/AriaJava_wrap.o: java/AriaJava_wrap.cpp
@ if test -z "$(JAVA_INCLUDE)"; then echo "Error: JAVA_INCLUDE is not set, compiling AriaJava_wrap.cpp will fail!"; fi
@ test -n "$(JAVA_INCLUDE)"
@ if test \! -d "$(JAVA_INCLUDE)"; then echo "Error: JAVA_INCLUDE directory $(JAVA_INCLUDE) does not exist, compiling AriaJava_wrap.cpp will fail!"; fi
@ test -d "$(JAVA_INCLUDE)"
mkdir -p obj
$(CXX) -c $(BARECXXFLAGS) $(CXXINC) -I$(JAVA_INCLUDE) -I$(JAVA_INCLUDE)/linux $< -o $@
java/AriaJava_wrap.cpp java/com/mobilerobots/Aria/ArRobot.java: include/wrapper.i $(HEADER_FILES)
-mkdir -p java/com/mobilerobots/Aria; rm java/com/mobilerobots/Aria/*.java java/AriaJava_wrap.cpp java/AriaJava_wrap.h; $(SWIG) -Wall -c++ -java -package com.mobilerobots.Aria -outdir java/com/mobilerobots/Aria -module AriaJava -Dlinux -DAREXPORT -o java/AriaJava_wrap.cpp -Iinclude include/wrapper.i
# The sed script is a hack to let subclasses outside of Aria work for ArFunctor;
# for some reason SWIG doesn't use my %typmeap(javabody) for ArFunctor.
# \
# && sed 's/protected static long getCPtr/public ArFunctor() { this(0, false); } public static long getCPtr/' java/com/mobilerobots/Aria/ArFunctor.java > ArFunctor.java.tmp \
# && mv ArFunctor.java.tmp java/com/mobilerobots/Aria/ArFunctor.java
# It is much faster to compile them all at once. Use ArRobot.java/class as a
# stand-in for all java files and all class files.
java/com/mobilerobots/Aria/ArRobot.class: java/com/mobilerobots/Aria/ArRobot.java
rm java/com/mobilerobots/Aria/*.class; $(JAVAC) -classpath java java/com/mobilerobots/Aria/*.java
java/ArNetworking.jar: FORCE
$(MAKE) -C ArNetworking ../$@
lib/libArNetworkingJava.so: FORCE
$(MAKE) -C ArNetworking ../$@
python/ArNetworkingPy.py: FORCE
$(MAKE) -C ArNetworking ../$@
python/_ArNetworkingPy.so: FORCE
$(MAKE) -C ArNetworking ../$@
####
#### Targets to actually build binaries (libraries, programs)
####
lib/libAria.so: $(OFILES) Makefile.dep
$(CXX) -shared -o $(@) $(OFILES)
lib/libAria.a: $(OFILES) Makefile.dep
ar -cr $(@) $(OFILES)
ranlib $(@)
examples/%.so: examples/%.$(CFILEEXT) lib/libAria.so Makefile.dep
$(CXX) $(CXXFLAGS) $(CXXINC) -shared $< -o $@
examples/%$(binsuffix): examples/%.$(CFILEEXT) lib/libAria.so Makefile.dep
$(CXX) $(CXXFLAGS) $(CXXINC) $< -o $@ $(CXXLINK)
examples/%Static$(binsuffix): examples/%.$(CFILEEXT) lib/libAria.a Makefile.dep
$(CXX) $(CXXFLAGS) $(CXXINC) $< -o $@ $(CXXSTATICLINK)
if test -n "$$NOSTRIP"; then strip $@; fi
tests/%.so: tests/%.$(CFILEEXT) lib/libAria.so Makefile.dep
$(CXX) $(CXXFLAGS) $(CXXINC) -shared $< -o $@
tests/%$(binsuffix): tests/%.$(CFILEEXT) lib/libAria.so Makefile.dep
$(CXX) $(CXXFLAGS) $(CXXINC) $< -o $@ $(CXXLINK)
tests/%Static$(binsuffix): tests/%.$(CFILEEXT) lib/libAria.a Makefile.dep
$(CXX) $(CXXFLAGS) $(CXXINC) $< -o $@ $(CXXSTATICLINK)
if test -n "$$NOSTRIP"; then strip $@; fi
advanced/%.so: advanced/%.$(CFILEEXT) lib/libAria.so
$(CXX) $(CXXFLAGS) $(CXXINC) -shared $< -o $@
advanced/%$(binsuffix): advanced/%.$(CFILEEXT) lib/libAria.so Makefile.dep
$(CXX) $(CXXFLAGS) $(CXXINC) $< -o $@ $(CXXLINK)
advanced/%Static$(binsuffix): advanced/%.$(CFILEEXT) lib/libAria.a Makefile.dep
$(CXX) $(CXXFLAGS) $(CXXINC) $< -o $@ $(CXXSTATICLINK)
#strip $@
utils/%$(binsuffix): utils/%.$(CFILEEXT) lib/libAria.so Makefile.dep
$(CXX) $(CXXFLAGS) $(CXXINC) $< -o $@ $(CXXLINK)
utils/%Static$(binsuffix): utils/%.$(CFILEEXT) lib/libAria.a Makefile.dep
$(CXX) $(CXXFLAGS) $(CXXINC) $< -o $@ $(CXXSTATICLINK)
#strip $@
utils/genCommandLineOptionDocs$(binsuffix): utils/genCommandLineOptionDocs.cpp lib/libAria.so Makefile.dep
$(CXX) $(CXXFLAGS) -DFOR_ARIA $(CXXINC) $< -o $@ $(CXXLINK)
ifneq ($(binsuffix),)
examples/%: examples/%$(binsuffix)
utils/%: utils/%$(binsuffix)
advanced/%: advanced/%$(binsuffix)
tests/%: tests/$(binsuffix)
endif
obj/%.o : src/%.cpp Makefile.dep
@mkdir -p obj
$(CXX) -c $(CXXFLAGS) $(CXXINC) $< -o $@
obj/%.o : src/%.c Makefile.dep
@mjdir -p obj
$(CXX) -c $(CXXFLAGS) $(CXXINC) $< -o $@
include/%.i: include/%.h Makefile.dep
$(CXX) -E $(CXXFLAGS) $(CXXINC) $< -o $@
src/%.i: src/%.cpp Makefile.dep
$(CXX) -E $(CXXFLAGS) $(CXXINC) $< -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)
# To build things in the ArNetworking subdirectory:
lib/libArNetworking.so: FORCE
$(MAKE) -C ArNetworking ../$@
lib/libArNetworking.a: FORCE
$(MAKE) -C ArNetworking ../$@
ArNetworking/examples/%: ArNetworking/examples/%.cpp lib/libArNetworking.so
$(MAKE) -C ArNetworking examples/$*
ArNetworking/examples/%Static: ArNetworking/examples/%.cpp lib/libArNetworking.a
$(MAKE) -C ArNetworking examples/$*Static
#ArNetworking/docs/index.html: FORCE
# $(MAKE) -C ArNetworking docs/index.html
ArNetworking/%: FORCE
$(MAKE) -C ArNetworking $*
# This rule doesn't actually produce its target, so anything depending on it
# will always get remade.
FORCE:
####
#### Installation and distribution
####
ifndef INSTALL_DIR
INSTALL_DIR=/usr/local/Aria
endif
ifndef SYSTEM_ETC_DIR
SYSTEM_ETC_DIR=/etc
endif
# What to put in /etc/Aria:
ifndef STORED_INSTALL_DIR
STORED_INSTALL_DIR=$(INSTALL_DIR)
endif
# How to run 'install' for the install rule:
ifndef INSTALL
INSTALL:=install --preserve-timestamps
endif
dist: FORCE
dist/dist.sh
dist-install: install
# Install rule. This can be used by users or ARIA developers; in the latter
# case it also installs various files needed to make a release distribution.
# Override installation locations with INSTALL_DIR environment variable.
# Things are installed group-writable so as to be hacked upon.
install:
@echo --------------------------------------
@echo Installing ARIA in $(DESTDIR)$(INSTALL_DIR)...
@echo --------------------------------------
$(INSTALL) -m 775 -d $(DESTDIR)$(INSTALL_DIR)
find include src tests utils params docs examples advanced maps \
ArNetworking java javaExamples python pythonExamples obj \
\( -name \*.o -or -name core -or -name CVS -or -name .\* -or -name \*~ -or -name tmp -or -name proprietary* -or -name \*.bak -or -name \*.class \) -prune \
-or -type d -exec $(INSTALL) -d -m 777 $(DESTDIR)$(INSTALL_DIR)/\{\} \; \
-or -type l -exec cp --no-dereference \{\} $(DESTDIR)$(INSTALL_DIR)/\{\} \; \
-or -name \*.a -exec $(INSTALL) -D -m 666 \{\} $(DESTDIR)$(INSTALL_DIR)/\{\} \; \
-or -perm +1 -exec $(INSTALL) -D --strip -m 777 \{\} $(DESTDIR)$(INSTALL_DIR)/\{\} \; \
-or -exec $(INSTALL) -D -m 666 \{\} $(DESTDIR)$(INSTALL_DIR)/\{\} \;
$(INSTALL) -D -m 664 LICENSE.txt INSTALL.txt README.txt Makefile Aria-Reference.html version.txt Changes.txt CommandLineOptions.txt icon.png $(DESTDIR)$(INSTALL_DIR)/
$(INSTALL) -D -m 666 Makefile.dep doxygen.conf $(DESTDIR)$(INSTALL_DIR)/
$(INSTALL) -D -m 664 bin/SIMULATOR_README.txt $(DESTDIR)$(INSTALL_DIR)/bin/SIMULATOR_README.txt
$(INSTALL) -d -m 777 $(DESTDIR)$(INSTALL_DIR)/lib/
$(INSTALL) -D --strip -m 666 lib/libAria.so lib/libArNetworking.so lib/libAriaJava.so lib/libArNetworkingJava.so $(DESTDIR)$(INSTALL_DIR)/lib/
@if test -z "$(DIST_INSTALL)"; then \
echo "if test \! -d $(DESTDIR)$(SYSTEM_ETC_DIR); then install -d $(DESTDIR)$(SYSTEM_ETC_DIR); fi" ;\
if test \! -d $(DESTDIR)$(SYSTEM_ETC_DIR); then install -d $(DESTDIR)$(SYSTEM_ETC_DIR); fi ;\
echo "echo $(STORED_INSTALL_DIR) > $(DESTDIR)$(SYSTEM_ETC_DIR)/Aria" ;\
echo $(STORED_INSTALL_DIR) > $(DESTDIR)$(SYSTEM_ETC_DIR)/Aria ;\
echo ------------------------------------------------------------------------------------ ;\
echo ARIA has been installed in $(DESTDIR)$(INSTALL_DIR). ;\
echo ;\
echo To be able to use the ARIA libraries, you must now add $(DESTDIR)$(INSTALL_DIR)/lib ;\
echo to your LD_LIBRARY_PATH environment variable, or to the /etc/ld.so.conf system file, ;\
echo then run \'ldconfig\';\
echo ------------------------------------------------------------------------------------ ;\
fi
# echo ;\
# echo The files are owned by the group \"users\", and all members of that group ;\
# echo can enter the directory, read files, and modify the \"examples\" directory. ;\
###
### Make optimization, tell it what rules aren't files:
###
.PHONY: all everything examples modExamples tests advanced utils cleanDep docs doc dirs help info moreinfo clean cleanUtils cleanExamples cleanTests cleanAdvanced cleanModules cleanDoc cleanPython dep depAll cleanAll params allLibs python python-doc java cleanJava install alllibs arnetworking_swig arnetworking_docs params swig help info moreinfo py python-doc cleanSwigJava checkAll
### Autogenerated dependencies:
# Just see if there is a Makefile.dep, if so include one... there
# should be one because various rules above depend on Makefile.dep.
# Note, use this ifeq/wildcard hacok rather than "-include" directive to
# prevent Make from trying to create Makefile.dep itself if missing during the
# recursive call to $(MAKE) dep. (it just keeps
# calling make dep recursively).
ifeq (Makefile.dep,$(wildcard Makefile.dep))
include Makefile.dep
# End of the Makefile.dep check
endif