blob: dd7551a648d9a5e3e3c7e73d170e2bd7aaf20fcf [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
#
# See README for details.
#
include options.mk
.PHONY: test all all-nogen generate unittest pythontest doxygen build-gentools
test: unittest pythontest
.PHONY: show-vars
show-vars:
@echo APR_LDFLAGS=$(APR_LDFLAGS)
@echo APR_CFLAGS=$(APR_CFLAGS)
@echo CXXFLAGS=$(CXXFLAGS)
@echo LDFLAGS=$(LDFLAGS)
@echo CXX=$(CXX)
# Must run two separate make processes to pick up generated files.
all:
$(MAKE) generate
$(MAKE) all-nogen
## Generaged code
# Add all XML specs to be generated onto the following line
SPECS := $(SPEC_DIR)/amqp-8.0.xml # $(SPEC_DIR)/amqp-0.9.test.xml $(SPEC_DIR)/cluster-0.9.test.xml $(SPEC_DIR)/amqp-0.10.test.xml
GENERATE := java -cp $(GENTOOLS_DIR)/src org.apache.qpid.gentools.Main -c -o $(GENDIR)/qpid/framing -t $(GENTOOLS_DIR)/templ.cpp $(SPECS)
generate: build-gentools $(GENDIR)/timestamp
$(GENDIR)/timestamp: $(wildcard) $(SPECS)
@echo "---------- Generating code from $(SPECS) ----------"
@rm -rf $(GENDIR)
@mkdir -p $(GENDIR)/qpid/framing
@$(GENERATE)
@touch $(GENDIR)/timestamp
@echo "---------- Code generation complete ----------"
#Build the code generator
build-gentools: $(GENTOOLS_DIR)/src/org/apache/qpid/gentools/Main.class
$(GENTOOLS_DIR)/src/org/apache/qpid/gentools/Main.class:
@echo "Gentools not built; building..."
@( cd $(GENTOOLS_DIR) && ./build )
# Dependencies for existing generated files.
GENFILES:=$(wildcard $(GENDIR)/qpid/*/*.cpp $(GENDIR)/qpid/*/*.h)
ifdef GENFILES
$(GENFILES): $(GENDIR)/timestamp
endif
$(BUILDDIRS):
mkdir -p $(BUILDDIRS)
## Library rules
LIB_common := $(call LIBFILE,common,1.0)
DIRS_common := qpid qpid/framing qpid/sys qpid/$(PLATFORM)
$(LIB_common): $(call OBJECTS, $(DIRS_common))
$(LIB_COMMAND)
LIB_client := $(call LIBFILE,client,1.0)
DIRS_client := qpid/client
$(LIB_client): $(call OBJECTS,$(DIRS_client)) $(LIB_common)
$(LIB_COMMAND)
LIB_broker := $(call LIBFILE,broker,1.0)
DIRS_broker := qpid/broker
$(LIB_broker): $(call OBJECTS,$(DIRS_broker)) $(LIB_common)
$(LIB_COMMAND)
## Daemon executable
$(BINDIR)/qpidd: $(OBJDIR)/qpidd.o $(LIB_common) $(LIB_broker)
mkdir -p $(dir $@)
$(CXX) -o $@ $(CXXFLAGS) $(LDFLAGS) $^
all-nogen: $(BINDIR)/qpidd
## Unit tests.
UNITTEST_SRC:=$(shell find test/unit -name *Test.cpp)
UNITTEST_SRC:=$(filter-out test/unit/qpid/$(IGNORE)/%,$(UNITTEST_SRC))
UNITTESTS:=$(UNITTEST_SRC:test/unit/%.cpp=$(TESTDIR)/%.so)
unittest: all
DllPlugInTester -c -b $(UNITTESTS:.cpp=.so)
all-nogen: $(UNITTESTS)
## Run python tests
pythontest: all
$(BINDIR)/qpidd > qpidd.log 2>&1 &
cd ../python ; ./run-tests -v -I cpp_failing.txt
## Doxygen documentation.
doxygen: generate build/html
build/html: doxygen.cfg
doxygen doxygen.cfg
touch $@
## Implicit rules
# C++ compile
define CPPRULE
$(OBJDIR)/%.o: $1/%.cpp
@mkdir -p $$(dir $$@)
$(CXX) $(CXXFLAGS) -c -o $$@ $$<
endef
$(foreach dir,$(SRCDIRS),$(eval $(call CPPRULE,$(dir))))
ifndef CPPUNIT_LDFLAGS
CPPUNIT_LDFLAGS := -lcppunit
endif
# Unit test plugin libraries.
$(TESTDIR)/%Test.so: test/unit/%Test.cpp $(LIB_common) $(LIB_broker)
mkdir -p $(dir $@)
$(CXX) -shared -o $@ $< $(CXXFLAGS) -Itest/include $(LDFLAGS) $(CPPUNIT_LDFLAGS) $(LIB_common) $(LIB_broker)
# Client test programs
$(TESTDIR)/%: test/client/%.cpp $(LIB_common) $(LIB_client)
mkdir -p $(dir $@)
$(CXX) -o $@ $(CXXFLAGS) -Itest/include $(LDFLAGS) $^
CLIENT_TEST_SRC := $(wildcard test/client/*.cpp)
CLIENT_TEST_EXE := $(CLIENT_TEST_SRC:test/client/%.cpp=$(TESTDIR)/%)
all-nogen: $(CLIENT_TEST_EXE)
client: $(CLIENT_TEST_EXE)
## include dependencies
DEPFILES:=$(wildcard $(OBJDIR)/*.d $(OBJDIR)/*/*.d $(OBJDIR)/*/*/*.d)
ifdef DEPFILES
-include $(DEPFILES)
endif
## Clean up
# Just the current build.
clean:
rm -rf build/$(BUILD)
# Clean all builds
spotless:
rm -rf build
-rm $(GENTOOLS_DIR)/src/org/apache/qpid/gentools/*.class