Rogue Wave banner
Previous fileTop of DocumentContentsIndex pageNext file
Installing and Building Your SourcePro C++ Products
Rogue Wave web site:  Home Page  |  Main Documentation Page

5.4 Using RCB After SPM

If you are moving from SPM to RCB, to use RCB, you must do the following:

  1. Build your components. Section 5.4.1

  2. Rebuild your legacy applications. Section 5.4.2

  3. Consider backward compatibility issues. Section 5.4.3

5.4.1 Building Your SourcePro C++ Components


The easiest way to build your new SourcePro C++ components in RCB is explained in Chapter 2.

As an alternative to simply installing your components into the RCB directory structure as explained in Chapter 2, you can use RCB to build Rogue Wave components with the same name and directory locations they had when built with SPM.

The following example shows the procedure for using your existing SPM directory structure.


You do not have to use this procedure. You only need to use this procedure if you want to imitate your existing SPM directory structure instead of using the default RCB directory structure.

This example assumes the following SPM structure:

Assuming you have installed the Essential Tools Module into an arbitrary RCB buildspace, you would do the following:

  1. Rename existing workspace directories to 12s.old and 15d.old.

  2. Create new, empty 12s and 15d directories.


    You could build directly into the existing directories, but there are a number of risks. The result might be a mixture of old and new libraries and header files, which could cause problems when you build your applications. Rogue Wave strongly recommends creating fresh directories for your RCB build results.

    On UNIX, RCB does not support symbolic links. See below for details.

    If your SPM workspaces make use of symbolic links, you will probably need to eliminate them before you can direct RCB builds to those workspaces. Otherwise, those builds may fail with the error message "Unable to verify Buildspace is properly homed." This means RCB cannot verify that the buildspec being processed is correctly located in the buildspace it specifies, a consequence of RCB being unable to follow the symbolic link.

  3. In RCB, create a buildspec that does the following. Chapter 2 explains how to create buildspecs.

  4. Create a buildspec for the 15d configuration by repeating Step 3 and specifying the appropriate build options for a 15d build.

  5. Click Done editing buildspec to submit the buildspec to the build queue.

The result should be Essential Tools Module builds that create appropriately named libraries in .../12s/lib and .../15d/lib, and that place the header files in .../12s/rw and .../15d/rw. The source code remains in the RCB buildspace, which is similar to the SPM case where the source code was stored separately in the parts directory tree.


Dynamically linked libraries on UNIX platforms now include the major and minor version number in the name.
Section 5.4.3 explains details.

5.4.2 Rebuilding Your Legacy Applications

With SPM, when building an application that linked in Rogue Wave components, you needed to do four things on the build command line:

This section shows how these issues worked on an SPM command line, what to do now, and what the functionally equivalent RCB command line looks like.

5.4.2.1 Example SPM Command Line

To help illustrate these issues, let's start by looking at this example of a command line invocation under the SPM model, for an application that links to Tools.h++ built in the 12s configuration:

5.4.2.2 Include Path and Path to Components to be Linked

You do not need to change the first requirement, include path and component paths, if you have chosen to place your RCB build results into your legacy SPM workspaces. If you have chosen instead to build into the RCB buildspace, you may need to alter any makefiles and automation scripts to point to the new locations.

5.4.2.3 Rogue Wave Command Line Macros

The second requirement, command line macros, was a ready source of errors with SPM because it was often difficult to determine the correct set of macros to declare.

With RCB, this has been greatly simplified. Rather than declaring a string of command line macros, you need define only a single macro, _RWCONFIG=buildtag, where buildtag is the build type tag generated by the build of the SourcePro C++ components plus an optional user tag.

So, for the Essential Tools Module built in a 12s configuration, the macro declaration would be _RWCONFIG=12s, assuming the user specified no user tag.

The inner workings of the _RWCONFIG=buildtag macro are explained in Building Your Applications, listed in Section 1.6.

5.4.2.4 System Compiler Flags, Libraries, and Macros

The third requirement, system compiler flags, libraries, and macros, was also tricky with SPM since there was no easy source of information on what the appropriate flags were.

Be aware that with RCB, compiler flags required for certain build configurations on Windows have changed, as explained in Section 5.4.3.4.

To find the system libraries, compiler flags, and macros, look in one of these places:

Note that a few system macros — non-Rogue Wave macros outside the scope of the _RWCONFIG=buildtag macro — are defined through CPPFLAGS and end up directly on the command line. These include _REENTRANT for multithreaded builds on UNIX, WIN32_LEAN_AND_MEAN for Essential Networking Module builds on Windows, and some standard Windows macros such as NOMINMAX and WIN32.

For more complete information on meeting system requirements, see Building Your Applications, listed in Section 1.6.

5.4.2.5 Equivalent RCB Command Line

Here is the example command line given for SPM, modified to reflect RCB:

5.4.3 Backward Compatibility Issues

There are a number of specific issues to consider when rebuilding legacy applications that depend on Rogue Wave libraries. The final three items may require changes to your makefiles or automation scripts.

5.4.3.1 Link Compatibility

All products in the current release break link compatibility with previous Rogue Wave products. Before rebuilding your legacy applications, rebuild all Rogue Wave libraries on which they depend.

5.4.3.2 Dynamic Library Naming on UNIX

On UNIX platforms, dynamically linked library names formerly had no product version information. For example, a dynamically linked version of Rogue Wave Tools.h++ on Solaris had a name such as tls15d.so.

To support the use of multiple versions of dynamically linked libraries, the library names now include the major and minor version numbers. So the Essential Tools Module library would have a name such as tls7515d.so.

5.4.3.3 Other Library Name Issues

The functionality that used to reside in the int and net libraries of Tools.h++ Professional is now contained in the Internet Protocols and Essential Networking modules of SourcePro Net. The implications are:

The Threads Module of SourcePro Core incorporates the functionality of the previous Rogue Wave product Threads.h++. The point at which Threads.h++ was divided into packages, release of Threads.h++ 2.x, addressed backwards compatibility. It did so by providing a thr library that included all the classes of Threads.h++. A full build of the Threads Module does not produce a thr library, but only the individual package libraries.

Similar to the case of the Internet Protocols Module described above, refer to the Modules tab of the SourcePro C++ API Reference Guide for information on which classes reside in which packages, and then link your legacy applications to the required package libraries.

5.4.3.4 Changed Compiler Options on Windows

Static builds on Microsoft Visual C++ were changed to use the runtime library options /MD or /MDd. This decision was necessary to accommodate user needs and third-party library requirements. As a result, the Rogue Wave static libraries, and applications built with them, are now dependent on the Microsoft C Runtime Library DLLs (MSVCRT.DLL for release-mode, and MSVCRTD.DLL for debug-mode).

If you are upgrading from Rogue Wave products that used the Microsoft static runtime libraries, you must switch to the DLL runtime libraries. You can use one of the following methods:



Previous fileTop of DocumentContentsIndex pageNext file

Copyright © Rogue Wave Software, Inc. All Rights Reserved.

The Rogue Wave name and logo, and SourcePro, are registered trademarks of Rogue Wave Software. All other trademarks are the property of their respective owners.
Contact Rogue Wave about documentation or support issues.