blob: 269fb75de5310982c14394dc122c311ef2100193 [file]
#
# Copyright (c) 2006 The Apache Software Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ----------------------------------------------------------------
#
# Makefile for Qpid C++ project.
#
# Build system principles
# * Single Makefile (see http://www.apache.org/licenses/LICENSE-2.0)
# * Build from directories, no explicit source lists in Makefile.
# * Corresponding .cpp and .h files in same directory for easy editing.
# * Source directory structure mirrors C++ namespaces.
#
# Source directories:
# * src/ - .h and .cpp source files, directories mirror namespaces.
# * test/
# * unit/ - unit tests (cppunit plugins), directories mirror namespaces.
# * include/ - .h files used by tests
# * client/ - sources for client test executables.
# * etc/ - Non-c++ resources, e.g. stylesheets.
# * gen/ - generated code
#
# Output directories:
# * gen/ - (created by make) generated code
# * bin/ lib/ - exes & libraries.
#
# NOTE: always use := rather than = unless you have a specific need
# for delayed evaluation. See the link for details.
#
include options.mk
.PHONY: test all all-nogen generate unittest pythontest
test: unittest pythontest
# Must run this as two separate make processes to pick up generated files.
all:
$(MAKE) generate
$(MAKE) all-nogen
## Generaged code
SPEC := $(CURDIR)/../specs/amqp-8.0.xml
XSL := code_gen.xsl framing.xsl
STYLESHEETS := $(XSL:%=$(CURDIR)/etc/stylesheets/%)
TRANSFORM := java -jar $(CURDIR)/tools/saxon8.jar -o results.out $(SPEC)
generate: gen/timestamp
gen/timestamp: $(wildcard etc/stylesheets/*.xsl) $(SPEC)
mkdir -p gen/qpid/framing
echo > gen/timestamp
cd gen/qpid/framing && for s in $(STYLESHEETS) ; do $(TRANSFORM) $$s ; done
gen $(wildcard gen/qpid/framing/*.cpp): gen/timestamp
## Libraries
# Library command, late evaluated for $@
LIB_CMD = $(CXX) -shared -o $@ $(LDFLAGS) $(CXXFLAGS) -lapr-1
# Common library.
COMMON_LIB := lib/libqpid_common.so.1.0
COMMON_DIRS := qpid/concurrent qpid/framing qpid/io qpid
COMMON_SRC := $(wildcard gen/qpid/framing/*.cpp $(COMMON_DIRS:%=src/%/*.cpp))
$(COMMON_LIB): gen/timestamp $(COMMON_SRC:.cpp=.o)
$(LIB_CMD) $(COMMON_SRC:.cpp=.o)
all-nogen: $(COMMON_LIB)
UNITTESTS := $(UNITTESTS) $(wildcard $(COMMON_DIRS:%=test/unit/%/*Test.cpp))
# Client library.
CLIENT_LIB := lib/libqpid_client.so.1.0
CLIENT_SRC := $(wildcard src/qpid/client/*.cpp)
$(CLIENT_LIB): $(CLIENT_SRC:.cpp=.o) $(CURDIR)/$(COMMON_LIB)
$(LIB_CMD) $^
all-nogen: $(CLIENT_LIB)
UNITTESTS := $(UNITTESTS) $(wildcard $(COMMON_DIRS:%=test/unit/%/*Test.cpp))
# Broker library.
BROKER_LIB := lib/libqpid_broker.so.1.0
BROKER_SRC := $(wildcard src/qpid/broker/*.cpp)
$(BROKER_LIB): $(BROKER_SRC:.cpp=.o) $(CURDIR)/$(COMMON_LIB)
$(LIB_CMD) $^
all-nogen: $(BROKER_LIB)
UNITTESTS := $(UNITTESTS) $(wildcard test/unit/qpid/broker/*Test.cpp)
# Implicit rule for unit test plugin libraries.
%Test.so: %Test.cpp $(CURDIR)/$(COMMON_LIB) $(CURDIR)/$(BROKER_LIB)
$(CXX) -shared -o $@ $< $($(LIB)_FLAGS) -Itest/include $(CXXFLAGS) $(LDFLAGS) -lapr-1 -lcppunit $(CURDIR)/$(COMMON_LIB) $(CURDIR)/$(BROKER_LIB)
## Client tests
CLIENT_TEST_SRC := $(wildcard test/client/*.cpp)
all-nogen: $(CLIENT_TEST_SRC:.cpp=)
test/client/%: test/client/%.cpp
$(CXX) -o $@ $< $($(LIB)_FLAGS) -Itest/include $(CXXFLAGS) $(LDFLAGS) -lapr-1 $(CURDIR)/$(COMMON_LIB) $(CURDIR)/$(CLIENT_LIB)
## Daemon executable
bin/qpidd: src/qpidd.o $(CURDIR)/$(COMMON_LIB) $(CURDIR)/$(BROKER_LIB)
$(CXX) -o $@ $(CXXFLAGS) $(LDFLAGS) -lapr-1 $^
all-nogen: bin/qpidd
## Run unit tests.
unittest: all
DllPlugInTester -c -b $(UNITTESTS:.cpp=.so)
all-nogen: $(UNITTESTS:.cpp=.so)
## Run python tests
pythontest: all
bin/qpidd > qpidd.log &
cd ../python ; ./run-tests -v -I cpp_failing.txt
## Doxygen documentation.
doxygen: doxygen/doxygen.cfg $(SOURCES)
cd doxygen && doxygen doxygen.cfg
## #include dependencies
-include $(shell find src test -name '*.d')
## Cleanup
clean::
rm -f bin/* lib/* qpidd.log
rm -rf gen
rm -f `find src test -name '*.o' -o -name '*.d' -o -name '*.so'`