Uploaded image for project: 'Qpid'
  1. Qpid
  2. QPID-1675

add Windows build and test notes to wiki

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Trivial
    • Resolution: Fixed
    • M4
    • 0.6

    Description

      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)

      1. $(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)

      Attachments

        Activity

          People

            shuston Stephen D. Huston
            vinces Vince Seavello
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: