| # |
| # 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 |
| |