add Windows build and test notes to wiki ----------------------------------------
Key: QPID-1675 URL: https://issues.apache.org/jira/browse/QPID-1675 Project: Qpid Issue Type: Improvement Components: Build Tools, C++ Broker, C++ Client, Interop Testing, Python Test Suite, Starter, website Affects Versions: M4 Environment: Hardware: Any Windows: Windows Vista (64 bit) Windows Server 2008 (64 bit). Windows XP (32 bit) Visual Studio: Visual Studio 2008 Express (32 bit C++ package) Visual Studio Team Suite 2008 (32 bit and 64 bit C++ packages) Visual Studio 2008 Professional (32 bit and 64 bit C++ packages) Reporter: Vince Seavello Priority: Trivial 1) Introduction The following are notes for building and testing QPID M4 on Windows. This document is split into 4 sections: - setup for building QPID M4 on Windows. This includes obtaining sources, supporting technologies, installation and configuration of the build environment. - building QPID M4 on Windows. - running the Linux test suites against the Windows QPID broker. - building the tests on a Windows system. These notes are intended to highlight issues discovered during the build and testing of QPID on Windows. It's a work in progress. Comments welcome. 2) Setup of QPID M4 on Windows 2.1) Obtaining the sources M4 C++ broker and client source archive is available on the QPID web site. http://www.apache.org/dist/qpid/M4/qpid-cpp-M4.tar.gz The sources contained here will build a Static_Debug version of the broker and client libraries. To be able to build a Static_Release version, replace the file cpp/src/qpid/InlineAllocator.h with the M5 version of the file: https://svn.apache.org/repos/asf/qpid/trunk/qpid/cpp/src/qpid/InlineAllocator.h 2.2) Setting up for the build Builds have been taking place using a variety of platforms and versions of Visual Studio. Platforms include: Windows: Windows Vista (64 bit) Windows Server 2008 (64 bit). Windows XP (32 bit) Visual Studio: Visual Studio 2008 Express (32 bit C++ package) Visual Studio Team Suite 2008 (32 bit and 64 bit C++ packages) Visual Studio 2008 Professional (32 bit and 64 bit C++ packages) 2.3) Technologies Dependencies 2.3.1) boost The stated requirement is boost 1.35.0. 1.36.0 is also being tested in our labs. There are only a few version compatibility issues detected. You can find install images for boost at: http://www.boostpro.com/boost_1_35_0_setup.exe http://www.boostpro.com/boost_1_36_0_setup.exe Once you've installed one of these, set your environment variables: for 1.35.0: BOOST_ROOT = C:\Program Files (x86)\boost\boost_1_35_0 BOOST_VERSION = 103500 for 1.36.0: BOOST_ROOT = C:\Program Files (x86)\boost\boost_1_36_0 BOOST_VERSION = 103600 Note: "Program Files (x86)" is "Program Files" on the 32 bit system. The boost libs are 32 bit. When building on a 64 bit system the 32 bit boost libs are installed in "Program Files (x86)". 64 bit boost build is being looked into. 2.3.2) python Use Python 2.6, which is the stated requirement for the QPID build. Pick up a copy at: http://www.python.org/ftp/python/2.6/python-2.6.msi You must include the python directory in the environment variable PATH. Typically, python is installed in: C:\python26 test to see that python is installed correctly and that you have the correct version: C:\>python --version Python 2.6.1 2.3.3) ruby Use Ruby 1.8.6, which is the required version. Pick up a copy at: http://rubyforge.org/frs/?group_id=167 You must include the ruby directory in the environment variable PATH. Typically, ruby is installed in: C:\ruby\bin test to see that ruby is installed correctly and that you have the correct version: C:\>ruby -v ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] 2.4) Build tools The QPID build environment on Windows are centered around Visual Studio C++ Development tools. There is an effort to reduce the overhead of the QPID build so developers who are unfamiliar with the Visual Studio IDE can build and test on Windows with as minimal an effort as possible. 2.4.1) Visual Studio Microsoft makes Visual Studio Express available at no charge. You can find it online at the following location: http://www.microsoft.com/downloads/details.aspx?FamilyID=3254c868-bcb9-412c-95c6-d100c872ec60&DisplayLang=en 2.5) M4 preparation 2.5.1) Initial environment configuration Most of the prep is in the installation of the helper apps, Visual Studio, source extraction and patching. When that's all done, there is one more step you still need to do before you can build anything. Using the Visual Studio's Command Prompt, change directory to qpid/cpp/src and run: nmake protocol_gen.mak 2.5.2) source changes The described source fix needed to be able to get a clean Static_Release build from M4 is listed above. This fix wasn't available before M4 was finalized, so it was added in M5. Other fixes may be available in M5 to address other issues, but haven't been tried in this environment. Any changes made to source files during this investigation haven't been submitted. They are presented here for what they're worth. Diffs of source changes are appended at the end of this document. 2.5.3) Debug vs Release When building QPID, you may want to change from building static debug to static release. There are several ways to do this. Look in the tool bar at the top of the Visual Studio window. Locate the pulldown selection box that contains the value "Debug" or "Release". Change the value to whichever active solution configuration you would like to produce. All built objects/executables will be found in the subdirectories Static_Debug or Static_Release, depending on your active solution configuration. 3) Building QPID M4 on Windows 3.1) QPID Project Files Visual Studio uses special configuration files to identify the "solution" and "project" parameters. These are made available in .sln and .vcproj files. There are a smattering of these files in the M4 source tree, and more are being added to the M5 tree as time goes on. For QPID, look for the following: qpid/cpp/src/qpid.sln qpid/cpp/src/broker.vcproj qpid/cpp/src/client.vcproj qpid/cpp/src/common.vcproj qpid/cpp/src/MaxMethodBodySize.vcproj When you open the solution, you can choose to build the entire solution, or just a project within. The executables and objects will be in Static_Release or Static_Debug, depending on your build settings. Select the solution in the solution explorer pane. Right mouse click and choose "Build Solution". When complete, you should have built the libraries and qpidbroker.exe. 3.2) Libraries The Windows QPID M4 build will produce 2 libraries: qpidclients.lib qpidcommons.lib The Linux build will also produce a broker library. The Windows build links the broker source objects directly into the broker, but doesn't add them to a library. A broker library will be needed for the building of some tests. The build of the broker will have compiled all the source objects which are to live in the broker library. By creating a library by hand we will be able to link the tests that require the broker library. See libs.mk later in this document (section 5.4.1). Libraries are placed in cpp/src. Our efforts don't include building the qmfconsole library yet, so no status on that. 4) Testing AMQP from a Linux system There isn't a "push button" build and test for Windows. In fact, in M4 there are relatively few tests that build for Windows. However, the tests do run on Linux. The Windows broker can be tested by running the test suites from a Linux platform. 4.1) localhost vs distributed The test suites as they are built and run on Linux assume brokers and tests are running on the localhost. There are a few that try to use ssh to start and stop processes on a remote host. But, the majority of the tests start brokers locally, look for PID files and run the tests against the local brokers. In order to use these tests against a remote Windows broker, some modifications will be necessary. These changes are outlined later in this document. 4.2) test harnesses QPID makes use of the boost test framework for some of it's tests, but there are a number of different tools and programming methods used. These are: make - Building and running the tests from the makefile. Provides a convenient way to produce a push button QPID. The makefiles allow selection of subsets of tests and provide some command parameters to the test framework. boost - Boost provides libraries and header files for putting together test cases, test suites and overall test execution control. /bin/sh shell - the "bridge" between make and the test cases is handled through shell scripts and other tools, like valgrind and libtool. There are makefile variables that can control how some of these tools are utilized. python - There is a separate python directory with test cases and test suites. These tests are initiated from the makefile by calling a wrapper boost test case called python_tests. C++ - The .cpp source files in the tests directory are the main consumers of the boost framework. They typically provide a common command line interface that every test shares, as well as additional options specific to the test itself. Many of these tests have multiple test cases within and are controlled, to some fashion, by the command line options. At the top level is the make file. To initiate the tests, type the following: make check This will build all the QPID sources and tests. After all has been built, the test suites are run. There are several options you can use when using make to narrow down the running of the tests. You can select a specific list of test suites by setting the variable TESTS: make check TESTS=perftest These command line options have been helpful in isolating the various test suites. The makefile uses the script run_test to initiate the indicated test. In most cases, the test being requested is front-ended by a shell script generated during the make process. The run_test script can pass command line options through to the called program, but the makefile isn't set up to send much in the way of options. Many of the lower level test programs have an option that accepts a broker address on the command line. In some cases, the intermediate scripts have a broker option, too. In order to use the Linux tests against the Windows broker, the tests have to be redirected to the remote broker address. Rather than modify the structure of the Makefile.am file used to generate the final makefile, the broker address can be passed to the tests in the execution environment. The modified command line invocation then looks like this: BROKER="IP_Address" make check TESTS="fanout_perftest" The run_test script can be modified to look for a broker address environment variable. Because run_test is used to start many of the test programs, sometimes the broker address should not to be passed through. In particular, the broker address is not necessary when starting and stopping localhost brokers. The run_test script determines when to pass the broker address by looking at the program name. Alternatively, tests can be run directly. The fanout perftest example can be run like this: ./perftest --summary --count 30000 --broker IP_Address \ --mode fanout --npubs 16 --nsubs 16 --size 64 The python tests can be run by changing directory to the python test dir and using one of the following command lines: ./run-tests --skip-self-test -v -s 0-10-errata \ -I cpp_failing_0-10.txt \ -b 10.197.62.244:5672 ./run-tests -v -s 0-10-errata -I cpp_failing_0-10.txt \ -b 10.197.62.244:5672 ./run-tests -v -s 0-10-errata -b 10.197.62.244:5672 4.3) Changes to Linux tests Some of the tests, or scripts that initiate the tests, have the localhost address hardcoded, or look for a broker PID in a local file. A majority of the changes made to allow the tests to be run from a Linux system to a Wondows broker deal with this limitation. The tests that were run successfully against the Windows broker from a Linux system are: client_test quick_perftest quick_topictest python_tests run_federation_tests fanout_perftest shared_perftest multiq_perftest topic_perftest txtest latencytest echotest benchmark 5) Building tests on Windows The Linux test environment makes use of tools, scripts and methods that don't work on a Windows platform. These issues will have to be addressed before a "push button" test can be accomplished similar to that on the Linux system. In the mean time, the test programs can be built on a Windows platform and run by hand. The following sections talk about this. 5.1) quick and dirty modifications The modifications described here do not represent "best practice" coding methodologies. They are presented for information sake. The following files required some sort of modification to build on Windows. A diff listing will be added to the end of this document. cpp/src/tests/ClientSessionTest.cpp cpp/src/tests/FieldTable.cpp cpp/src/tests/MessageBuilderTest.cpp cpp/src/tests/MessageTest.cpp cpp/src/tests/QueueOptionsTest.cpp cpp/src/tests/TimerTest.cpp cpp/src/tests/Uuid.cpp cpp/src/tests/logging.cpp cpp/src/tests/perftest.cpp cpp/src/tests/topic_listener.cpp cpp/src/tests/topic_publisher.cpp cpp/src/tests/unit_test.h While the following needed modification, the have been excluded from the build due to larger porting issues. cpp/src/tests/ForkedBroker.h cpp/src/tests/failover_soak.cpp cpp/src/tests/ConsoleTest.cpp 5.2) nmake environment A small handful of make files have been created to use on a Windows platform to build the various test programs. The nmake utility is used with these files to perform the compilation. tests/libs.mk tests/tests.mk 5.3) diff listings ========================================== cpp/src/tests/ClientSessionTest.cpp 38a39,44 > #if defined(_WIN32) > # include <windows.h> > # include <winbase.h> > #endif > > 225a232,234 > #if defined(_WIN32) > Sleep(1000); > #else 226a236 > #endif 277a288,290 > #if defined(_WIN32) > Sleep(2000); > #else 278a292 > #endif 291a306,308 > #if defined(_WIN32) > ::Sleep(300* 1); > #else 292a310 > #endif ========================================== cpp/src/tests/FieldTable.cpp 25c25,27 < #include <alloca.h> --- > #if !defined (_WIN32) > # include <alloca.h> > #endif ========================================== cpp/src/tests/MessageBuilderTest.cpp 39c39 < uint64_t id; --- > boost::uint64_t id; 215c215 < BOOST_CHECK_EQUAL((uint64_t) 1, builder.getMessage()->getPersistenceId()); --- > BOOST_CHECK_EQUAL((boost::uint64_t) 1, builder.getMessage()->getPersistenceId()); ========================================== cpp/src/tests/MessageTest.cpp 31c31,33 < #include <alloca.h> --- > #if !defined (_WIN32) > # include <alloca.h> > #endif 81,82c83,84 < BOOST_CHECK_EQUAL((uint64_t) data1.size() + data2.size(), msg->contentSize()); < BOOST_CHECK_EQUAL((uint64_t) data1.size() + data2.size(), msg->getProperties<MessageProperties>()->getContentLength()); --- > BOOST_CHECK_EQUAL((boost::uint64_t) data1.size() + data2.size(), msg->contentSize()); > BOOST_CHECK_EQUAL((boost::uint64_t) data1.size() + data2.size(), msg->getProperties<MessageProperties>()->getContentLength()); 85c87 < BOOST_CHECK_EQUAL((uint8_t) PERSISTENT, msg->getProperties<DeliveryProperties>()->getDeliveryMode()); --- > BOOST_CHECK_EQUAL((boost::uint8_t) PERSISTENT, msg->getProperties<DeliveryProperties>()->getDeliveryMode()); ========================================== cpp/src/tests/QueueOptionsTest.cpp 24c24,26 < #include <alloca.h> --- > #if !defined(_WIN32) > # include <alloca.h> > #endif ========================================== cpp/src/tests/TimerTest.cpp 78c78 < uint64_t difference = abs(expected - actual); --- > uint64_t difference = abs((long)(expected - actual)); ========================================== cpp/src/tests/Uuid.cpp 25c25,27 < #include <alloca.h> --- > #if !defined(_WIN32) > # include <alloca.h> > #endif ========================================== cpp/src/tests/logging.cpp 25a26 > # include "qpid/log/windows/SinkOptions.h" 272a274,276 > #if defined(_WIN32) > qpid::log::windows::SinkOptions sinks("test"); > #else 273a278 > #endif 288a294,296 > #if defined(_WIN32) > qpid::log::windows::SinkOptions sinks("test"); > #else 289a298 > #endif 347a357,360 > #if defined(_WIN32) > qpid::log::windows::SinkOptions *sinks = > dynamic_cast<qpid::log::windows::SinkOptions *>(opts.sinkOptions.get()); > #else 349a363 > #endif ========================================== cpp/src/tests/perftest.cpp 41c41,43 < #include <unistd.h> --- > #if !defined(_WIN32) > # include <unistd.h> > #endif ========================================== cpp/src/tests/topic_listener.cpp 43a44,46 > #if defined(_WIN32) > # include <process.h> > #endif ========================================== cpp/src/tests/topic_publisher.cpp 43c43,45 < #include <unistd.h> --- > #if !defined(_WIN32) > # include <unistd.h> > #endif ========================================== cpp/src/tests/unit_test.h 56c56 < #if (BOOST_VERSION < 103600) --- > #if (BOOST_VERSION <= 103600) 5.4) make files Once the Visual Studio build has been run, the objects for the broker are available and can be combined into a broker library. This nmake file can be used in the tests directory to create the library. This will be necessary to build the unit_test test suite. >From the tests directory you can run nmake with the tests.mk file listed below to build the tests. This build file does not build the files: ConsoleTest.cpp failover_soak.cpp 5.4.1) lib.mk C89_COMPILER=C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin/cl.exe C89_LINKER=C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin/link.exe LINK="link.exe" OBJEXT=.obj INCLUDES=/I "C:/Program Files (x86)/boost/boost_1_36_0/include/103600" /I "C:/Program Files (x86)/boost/boost_1_36_0/." /I "." /I ".." /I "../gen" FLAGS=/D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_CRT_NONSTDC_NO_WARNINGS" /D "NOMINMAX" /D "WIN32_LEAN_AND_MEAN" /D "_SCL_SECURE_NO_WARNINGS" /D "_CRT_SECURE_NO_WARNINGS" /FD /EHsc /MT /W3 /c /TP /wd4244 /wd4800 /wd4290 /wd4355 LIBS=ws2_32.lib secur32.lib rpcrt4.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib LDFLAGS=/INCREMENTAL:NO /LIBPATH:"." /LIBPATH:"C:\Program Files (x86)\boost\boost_1_36_0\lib" /DEBUG /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /nologo /errorReport:prompt RELDIR=Static_Release ROOTDIR=C:\Users\v-vinsea\Dev\AMQP\qpid-M4\cpp\src\tests check_PROGRAMS= check_LTLIBRARIES= TESTS= EXTRA_DIST= CLEANFILES= .cpp$(OBJEXT): echo $(CC) /O2 $(INCLUDES) $(FLAGS) /Fo"..\Static_Release\qmfconsole/I386//" /Fd"..\Static_Release\qmfconsole/I386/vc90.pdb" $< broker_OBJECTS=../Static_Release/broker/I386/Acl.obj \ ../Static_Release/broker/I386/Agent.obj \ ../Static_Release/broker/I386/Binding.obj \ ../Static_Release/broker/I386/Bridge.obj \ ../Static_Release/broker/I386/Bridge2.obj \ ../Static_Release/broker/I386/Broker.obj \ ../Static_Release/broker/I386/Broker2.obj \ ../Static_Release/broker/I386/BrokerDefaults.obj \ ../Static_Release/broker/I386/BrokerSingleton.obj \ ../Static_Release/broker/I386/Connection.obj \ ../Static_Release/broker/I386/Connection2.obj \ ../Static_Release/broker/I386/Connection3.obj \ ../Static_Release/broker/I386/ConnectionFactory.obj \ ../Static_Release/broker/I386/ConnectionHandler.obj \ ../Static_Release/broker/I386/DeliverableMessage.obj \ ../Static_Release/broker/I386/DeliveryRecord.obj \ ../Static_Release/broker/I386/DirectExchange.obj \ ../Static_Release/broker/I386/DtxAck.obj \ ../Static_Release/broker/I386/DtxBuffer.obj \ ../Static_Release/broker/I386/DtxManager.obj \ ../Static_Release/broker/I386/DtxTimeout.obj \ ../Static_Release/broker/I386/DtxWorkRecord.obj \ ../Static_Release/broker/I386/EventAllow.obj \ ../Static_Release/broker/I386/EventBind.obj \ ../Static_Release/broker/I386/EventBrokerLinkDown.obj \ ../Static_Release/broker/I386/EventBrokerLinkUp.obj \ ../Static_Release/broker/I386/EventClientConnect.obj \ ../Static_Release/broker/I386/EventClientConnectFail.obj \ ../Static_Release/broker/I386/EventClientDisconnect.obj \ ../Static_Release/broker/I386/EventDeny.obj \ ../Static_Release/broker/I386/EventExchangeDeclare.obj \ ../Static_Release/broker/I386/EventExchangeDelete.obj \ ../Static_Release/broker/I386/EventFileLoadFailed.obj \ ../Static_Release/broker/I386/EventFileLoaded.obj \ ../Static_Release/broker/I386/EventQueueDeclare.obj \ ../Static_Release/broker/I386/EventQueueDelete.obj \ ../Static_Release/broker/I386/EventSubscribe.obj \ ../Static_Release/broker/I386/EventUnbind.obj \ ../Static_Release/broker/I386/EventUnsubscribe.obj \ ../Static_Release/broker/I386/Exchange.obj \ ../Static_Release/broker/I386/Exchange2.obj \ ../Static_Release/broker/I386/ExchangeRegistry.obj \ ../Static_Release/broker/I386/FanOutExchange.obj \ ../Static_Release/broker/I386/HeadersExchange.obj \ ../Static_Release/broker/I386/IncompleteMessageList.obj \ ../Static_Release/broker/I386/Link.obj \ ../Static_Release/broker/I386/Link2.obj \ ../Static_Release/broker/I386/LinkRegistry.obj \ ../Static_Release/broker/I386/ManagementBroker.obj \ ../Static_Release/broker/I386/ManagementExchange.obj \ ../Static_Release/broker/I386/Message.obj \ ../Static_Release/broker/I386/MessageAdapter.obj \ ../Static_Release/broker/I386/MessageBuilder.obj \ ../Static_Release/broker/I386/MessageStoreModule.obj \ ../Static_Release/broker/I386/NameGenerator.obj \ ../Static_Release/broker/I386/NullMessageStore.obj \ ../Static_Release/broker/I386/Package.obj \ ../Static_Release/broker/I386/Package2.obj \ ../Static_Release/broker/I386/PersistableMessage.obj \ ../Static_Release/broker/I386/QpiddBroker.obj \ ../Static_Release/broker/I386/Queue.obj \ ../Static_Release/broker/I386/Queue2.obj \ ../Static_Release/broker/I386/QueueBindings.obj \ ../Static_Release/broker/I386/QueueCleaner.obj \ ../Static_Release/broker/I386/QueueListeners.obj \ ../Static_Release/broker/I386/QueuePolicy.obj \ ../Static_Release/broker/I386/QueueRegistry.obj \ ../Static_Release/broker/I386/RateTracker.obj \ ../Static_Release/broker/I386/RecoveredDequeue.obj \ ../Static_Release/broker/I386/RecoveredEnqueue.obj \ ../Static_Release/broker/I386/RecoveryManagerImpl.obj \ ../Static_Release/broker/I386/SaslAuthenticator.obj \ ../Static_Release/broker/I386/SemanticState.obj \ ../Static_Release/broker/I386/Session.obj \ ../Static_Release/broker/I386/SessionAdapter.obj \ ../Static_Release/broker/I386/SessionHandler.obj \ ../Static_Release/broker/I386/SessionManager.obj \ ../Static_Release/broker/I386/SessionState.obj \ ../Static_Release/broker/I386/System.obj \ ../Static_Release/broker/I386/System2.obj \ ../Static_Release/broker/I386/TCPIOPlugin.obj \ ../Static_Release/broker/I386/Timer.obj \ ../Static_Release/broker/I386/TopicExchange.obj \ ../Static_Release/broker/I386/TxAccept.obj \ ../Static_Release/broker/I386/TxBuffer.obj \ ../Static_Release/broker/I386/TxPublish.obj \ ../Static_Release/broker/I386/Vhost.obj \ ../Static_Release/broker/I386/Vhost2.obj \ ../Static_Release/broker/I386/qpidd.obj qmfconsole_OBJECTS=../Static_Release/qmfconsole/I386/ClassKey.obj lib: lib.exe /OUT:"../qpidbrokers.lib" $(broker_OBJECTS) 5.4.2) tests.mk C89_COMPILER=C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin/cl.exe C89_LINKER=C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin/link.exe LINK="link.exe" OBJEXT=.obj EXEEXT=.exe INCLUDES=/I "C:/Program Files (x86)/boost/boost_1_36_0/include/103600" /I "C:/Program Files (x86)/boost/boost_1_36_0/." /I "." /I ".." /I "../gen" FLAGS=/D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_CRT_NONSTDC_NO_WARNINGS" /D "NOMINMAX" /D "WIN32_LEAN_AND_MEAN" /D "_SCL_SECURE_NO_WARNINGS" /D "_CRT_SECURE_NO_WARNINGS" /FD /EHsc /MT /W3 /c /TP /wd4244 /wd4800 /wd4290 /wd4355 lib_client=..\qpidclients.lib lib_common=..\qpidcommons.lib lib_broker=..\qpidbrokers.lib #lib_console=..\qmfconsoles.lib LDLIBS=..\qpidclients.lib ..\qpidcommons.lib ..\qpidbrokers.lib LIBS=ws2_32.lib secur32.lib rpcrt4.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib LDFLAGS=/INCREMENTAL:NO /LIBPATH:"." /LIBPATH:"C:\Program Files (x86)\boost\boost_1_36_0\lib" /DEBUG /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /nologo /errorReport:prompt RELDIR=Static_Release OBJDIR=$(RELDIR)/tests/I386 #UNIT_TEST_OBJDIR=$(RELDIR)/unit_test/I386 ROOTDIR=C:\Users\v-vinsea\Dev\AMQP\qpid-M4\cpp\src\tests check_PROGRAMS= check_LTLIBRARIES= TESTS= EXTRA_DIST= CLEANFILES= SOURCES= UNIT_TEST_OBJECTS= unit_test_SOURCES= \ ConsoleTest.cpp \ unit_test.cpp \ exception_test.cpp \ RefCounted.cpp \ SessionState.cpp Blob.cpp logging.cpp \ AsyncCompletion.cpp \ Url.cpp Uuid.cpp \ Shlib.cpp FieldValue.cpp FieldTable.cpp Array.cpp \ QueueOptionsTest.cpp \ InlineAllocator.cpp \ InlineVector.cpp \ ClientSessionTest.cpp \ SequenceSet.cpp \ StringUtils.cpp \ IncompleteMessageList.cpp \ RangeSet.cpp \ AtomicValue.cpp \ QueueTest.cpp \ AccumulatedAckTest.cpp \ DtxWorkRecordTest.cpp \ DeliveryRecordTest.cpp \ ExchangeTest.cpp \ HeadersExchangeTest.cpp \ MessageTest.cpp \ QueueRegistryTest.cpp \ QueuePolicyTest.cpp \ FramingTest.cpp \ HeaderTest.cpp \ SequenceNumberTest.cpp \ TimerTest.cpp \ TopicExchangeTest.cpp \ TxBufferTest.cpp \ TxPublishTest.cpp \ MessageBuilderTest.cpp \ ManagementTest.cpp \ MessageReplayTracker.cpp perftest_SOURCES=perftest.cpp txtest_SOURCES=txtest.cpp latencytest_SOURCES=latencytest.cpp echotest_SOURCES=echotest.cpp client_test_SOURCES=client_test.cpp topic_listener_SOURCES=topic_listener.cpp topic_publisher_SOURCES=topic_publisher.cpp publish_SOURCES=publish.cpp consume_SOURCES=consume.cpp header_test_SOURCES=header_test.cpp failover_soak_SOURCES=failover_soak.cpp declare_queues_SOURCES=declare_queues.cpp replaying_sender_SOURCES=replaying_sender.cpp resuming_receiver_SOURCES=resuming_receiver.cpp txshift_SOURCES=txshift.cpp txjob_SOURCES=txjob.cpp receiver_SOURCES=receiver.cpp sender_SOURCES=sender.cpp SOURCES=$(SOURCES) $(unit_test_SOURCES) SOURCES=$(SOURCES) $(perftest_SOURCES) SOURCES=$(SOURCES) $(txtest_SOURCES) SOURCES=$(SOURCES) $(latencytest_SOURCES) SOURCES=$(SOURCES) $(echotest_SOURCES) SOURCES=$(SOURCES) $(client_test_SOURCES) SOURCES=$(SOURCES) $(topic_listener_SOURCES) SOURCES=$(SOURCES) $(topic_publisher_SOURCES) SOURCES=$(SOURCES) $(publish_SOURCES) SOURCES=$(SOURCES) $(consume_SOURCES) SOURCES=$(SOURCES) $(header_test_SOURCES) #SOURCES=$(SOURCES) $(failover_soak_SOURCES) SOURCES=$(SOURCES) $(declare_queues_SOURCES) SOURCES=$(SOURCES) $(replaying_sender_SOURCES) SOURCES=$(SOURCES) $(resuming_receiver_SOURCES) SOURCES=$(SOURCES) $(txshift_SOURCES) SOURCES=$(SOURCES) $(txjob_SOURCES) SOURCES=$(SOURCES) $(receiver_SOURCES) SOURCES=$(SOURCES) $(sender_SOURCES) UNIT_TEST_OBJECTS= \ $(OBJDIR)/unit_test$(OBJEXT) \ $(OBJDIR)/exception_test$(OBJEXT) \ $(OBJDIR)/RefCounted$(OBJEXT) \ $(OBJDIR)/SessionState$(OBJEXT) \ $(OBJDIR)/Blob$(OBJEXT) \ $(OBJDIR)/logging$(OBJEXT) \ $(OBJDIR)/AsyncCompletion$(OBJEXT) \ $(OBJDIR)/Url$(OBJEXT) \ $(OBJDIR)/Uuid$(OBJEXT) \ $(OBJDIR)/Shlib$(OBJEXT) \ $(OBJDIR)/FieldValue$(OBJEXT) \ $(OBJDIR)/FieldTable$(OBJEXT) \ $(OBJDIR)/Array$(OBJEXT) \ $(OBJDIR)/QueueOptionsTest$(OBJEXT) \ $(OBJDIR)/InlineAllocator$(OBJEXT) \ $(OBJDIR)/InlineVector$(OBJEXT) \ $(OBJDIR)/ClientSessionTest$(OBJEXT) \ $(OBJDIR)/SequenceSet$(OBJEXT) \ $(OBJDIR)/StringUtils$(OBJEXT) \ $(OBJDIR)/IncompleteMessageList$(OBJEXT) \ $(OBJDIR)/RangeSet$(OBJEXT) \ $(OBJDIR)/AtomicValue$(OBJEXT) \ $(OBJDIR)/QueueTest$(OBJEXT) \ $(OBJDIR)/AccumulatedAckTest$(OBJEXT) \ $(OBJDIR)/DtxWorkRecordTest$(OBJEXT) \ $(OBJDIR)/DeliveryRecordTest$(OBJEXT) \ $(OBJDIR)/ExchangeTest$(OBJEXT) \ $(OBJDIR)/HeadersExchangeTest$(OBJEXT) \ $(OBJDIR)/MessageTest$(OBJEXT) \ $(OBJDIR)/QueueRegistryTest$(OBJEXT) \ $(OBJDIR)/QueuePolicyTest$(OBJEXT) \ $(OBJDIR)/FramingTest$(OBJEXT) \ $(OBJDIR)/HeaderTest$(OBJEXT) \ $(OBJDIR)/SequenceNumberTest$(OBJEXT) \ $(OBJDIR)/TimerTest$(OBJEXT) \ $(OBJDIR)/TopicExchangeTest$(OBJEXT) \ $(OBJDIR)/TxBufferTest$(OBJEXT) \ $(OBJDIR)/TxPublishTest$(OBJEXT) \ $(OBJDIR)/MessageBuilderTest$(OBJEXT) \ $(OBJDIR)/ManagementTest$(OBJEXT) \ $(OBJDIR)/MessageReplayTracker$(OBJEXT) # $(OBJDIR)/ConsoleTest$(OBJEXT) \ TESTS=$(TESTS) $(RELDIR)/unit_test$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/perftest$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/txtest$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/latencytest$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/echotest$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/client_test$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/topic_listener$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/topic_publisher$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/publish$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/consume$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/header_test$(EXEEXT) #TESTS=$(TESTS) $(RELDIR)/failover_soak$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/declare_queues$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/replaying_sender$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/resuming_receiver$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/txshift$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/txjob$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/receiver$(EXEEXT) TESTS=$(TESTS) $(RELDIR)/sender$(EXEEXT) .cpp.obj: @mkdir -p $(RELDIR) @mkdir -p $(OBJDIR) $(CC) /O2 $(INCLUDES) $(FLAGS) /Fo"$(OBJDIR)//" /Fd"$(OBJDIR)/vc90.pdb" $** all: $(SOURCES:.cpp=.obj) $(TESTS) $(RELDIR)/perftest$(EXEEXT): {$(OBJDIR)}$(perftest_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/txtest$(EXEEXT): {$(OBJDIR)}$(txtest_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/latencytest$(EXEEXT): {$(OBJDIR)}$(latencytest_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/echotest$(EXEEXT): {$(OBJDIR)}$(echotest_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/client_test$(EXEEXT): {$(OBJDIR)}$(client_test_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/topic_listener$(EXEEXT): {$(OBJDIR)}$(topic_listener_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/topic_publisher$(EXEEXT): {$(OBJDIR)}$(topic_publisher_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/publish$(EXEEXT): {$(OBJDIR)}$(publish_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/consume$(EXEEXT): {$(OBJDIR)}$(consume_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/header_test$(EXEEXT): {$(OBJDIR)}$(header_test_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/failover_soak$(EXEEXT): {$(OBJDIR)}$(failover_soak_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/declare_queues$(EXEEXT): {$(OBJDIR)}$(declare_queues_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/replaying_sender$(EXEEXT): {$(OBJDIR)}$(replaying_sender_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/resuming_receiver$(EXEEXT): {$(OBJDIR)}$(resuming_receiver_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/txshift$(EXEEXT): {$(OBJDIR)}$(txshift_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/txjob$(EXEEXT): {$(OBJDIR)}$(txjob_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/receiver$(EXEEXT): {$(OBJDIR)}$(receiver_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/sender$(EXEEXT): {$(OBJDIR)}$(sender_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) %|pfF$(OBJEXT) $(RELDIR)/unit_test$(EXEEXT): {$(OBJDIR)}$(unit_test_SOURCES:.cpp=.obj) $(LINK) /OUT:$(RELDIR)/%|fF$(EXEEXT) /PDB:$(ROOTDIR)/$(RELDIR)/%|fF.pdb /MANIFEST /MANIFESTFILE:"$(OBJDIR)\%|fF$(EXEEXT).intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" $(LDFLAGS) $(LDLIBS) $(LIBS) $(UNIT_TEST_OBJECTS) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:dev-subscr...@qpid.apache.org