OpenCCM - Production Module User's Guide

Production Module User's Guide

The OpenCCM Production Tool Chain

The OpenCCM Production Tool Chain is a set of tools for compiling CORBA Components specifications (i.e. OMG IDL 3.0, OMG PSDL OMG CIDL) and for generating OMG IDL 2.x interfaces.
The compilation of XMI 1.1 UML 1.4 Profile for CORBA Components files, as well as the generation of CORBA Components implementation artefacts (i.e. local interfaces, container code, XML CCM descriptors) are provided by other modules (see UML, PSS and OpenCCM core modules).

The OpenCCM Production Tool Chain is composed of the following tools:

ToolDescription
ir3_startStarts the OpenCCM Interface Repository.
ir3_startedChecks if the OpenCCM Interface Repository is started.
ir3_stopStops the OpenCCM Interface Repository.
idl3_checkChecks OMG IDL 3.0 files.
ir3_feedFeeds OMG IDL 3.0 files into the OpenCCM Interface Repository.
ir3_destroyDestroys OpenCCM Interface Repository objects.
ir3_idl3Generates OMG IDL 3.0 files from the OpenCCM Interface Repository.
ir3_idl2Generates equivalent OMG IDL 2.4 files from the OpenCCM Interface Repository.
cidlCompiles specifications and regenerates the OMG CIDL part only.
psdlCompiles specifications and regenerates the OMG PSDL part only.

In the following sections, all OpenCCM Production Tool Chain scripts are illustrated on top of the ORBacus 4.1.0 product running on a Linux system.

However all these following scripts could be used in the same way on any ORB products and operating systems supported by OpenCCM.

The OpenCCM Interface Repository

The OpenCCM Interface Repository is the central part of the OpenCCM Production Tool Chain. This permanent repository is composed of CORBA objects storing CORBA Components specifications and making them accessible at runtime. The OMG IDL interfaces of the OpenCCM Interface Repository are fully conform to the interfaces defined in the CORBA 3.0 Core Specification.

Then the following OpenCCM compilers feed CORBA Components specifications into the OpenCCM Interface Repository and the following OpenCCM generators obtain specifications from the OpenCCM Interface Repository.

Let's note that before using any OpenCCM Production Tool Chain tools, it is required to start the OpenCCM Interface Repository with the ir3_start script.

Warning: To use any of the OpenCCM generation tools, it is required to feed the OpenCCM Interface Repository with OMG IDL 3.0 files or XMI 1.1 UML 1.4 docuuments.

Starting the OpenCCM Interface Repository

The ir3_start script starts the OpenCCM Interface Repository, e.g.:

$ ir3_start
The OpenCCM Interface Repository will be started.
Creating the $OpenCCM_CONFIG_DIR directory.
Launching the OpenCCM Interface Repository.
Feeding the OpenCCM Interface Repository with the IFR_3_0.idl file.
. . .
Feeding the OpenCCM Interface Repository with the Components.idl file.
. . .
The OpenCCM Interface Repository is started.
$

Let's note that this script automatically creates the $OpenCCM_CONFIG_DIR directory if it does not exist, launches the OpenCCM Interface Repository process, and feeds it with the IFR_3_0.idl and Components.idl specifications.

Moreover, the IOR, PID, and standard output of the started OpenCCM Interface Repository are stored into the OpenCCM Configuration Repository, e.g.:

$ ls $OpenCCM_CONFIG_DIR
IR3.IOR IR3.PID IR3.output IR3.start
$

Warning: Only one OpenCCM Interface Repository can be started for an OpenCCM Configuration Repository, e.g.:

$ ir3_start
Error: The OpenCCM Interface Repository is already started!
$

By default, the OpenCCM Interface Repository automatically computes the OMG IDL 2.x mapping for component and home definitions. The --no-mappings option allows you to disable this default behaviour, e.g.:

$ ir3_start --no-mappings
. . .
$

Warning: Don't disable the OMG IDL 2.x mapping computation if you will use OpenCCM generators.

See the ir3_stop script to stop the started OpenCCM Interface Repository.

Checking if the OpenCCM Interface Repository is started

The ir3_started script checks if the OpenCCM Interface Repository is started, e.g.:

$ ir3_stop
. . .
$ ir3_started
Error: The OpenCCM Interface Repository is not started!
$

Let's note that this OpenCCM script is mainly used by other OpenCCM scripts to check if the OpenCCM Interface Repository is started or not.

Stopping the OpenCCM Interface Repository

The ir3_stop script stops the previously started OpenCCM Interface Repository, e.g.:

$ ir3_start
. . .
$ ir3_stop
The OpenCCM Interface Repository will be stopped.
Removing the $OpenCCM_CONFIG_DIR directory.
The OpenCCM Interface Repository is stopped.
$

Let's note that this script shutdowns the OpenCCM Interface Repository process, removes its associated IOR, PID, and standard output files, and removes the $OpenCCM_CONFIG_DIR directory.

Checking OMG IDL 3.0 files

The idl3_check script checks if the specified OMG IDL 3.0 file is conform to OMG IDL 3.0 grammar and semantics rules, e.g.:

$ cat test/sample.idl3
// This file is the OMG IDL 3.0 example used in the OpenCCM User's Guide.
#pragma prefix "ccm.objectweb.org"
module sample
{
  component MyComponent {};
  home MyHome manages MyComponent {};
};
$
$ idl3_check test/sample.idl3
idl3_check 0.9.0: Reading from file test/sample.idl3...
idl3_check 0.9.0: Preprocessing file test/sample.idl3...
idl3_check 0.9.0: File test/sample.idl3 preprocessed.
idl3_check 0.9.0: Compiling test/sample.idl3 file...
idl3_check 0.9.0: Compilation completed: 0 warning.
$

The idl3_check script supports the following options:

OptionDescription
-h or
--help
Display usage and help information, and exit.
--versionOutput version information and exit.
--silentSilent output messages.
--cpp pathSet the path to the external C preprocessor used.
-PInhibit generation of #-lines with line-number information.
-DNAME or
-DNAME=DEF
Define NAME as DEF, default is 1.
-UNAMERemove any definition for NAME.
-IDIRPut DIR in the include file search path.

To obtain usage and help information, do:

$ idl3_check --help
Usage: idl3_check [-h|--help] [--version] [--silent]
                  [--cpp path] [-P] [-DNAME|-DNAME=DEF] [-UNAME] [-IDIR]
                  omg_idl_file

Options:
  -h, --help         Display this information and exit
  --version          Output version information and exit
  --silent           Silent output messages
  --cpp path         Set the path to the external C preprocessor used
  -P                 Inhibit generation of #-lines with line-number information
  -DNAME, -DNAME=DEF Define NAME as DEF, default is 1
  -UNAME             Remove any definition for NAME
  -IDIR              Put DIR in the include file search path

Description:
  Compile and check an OMG IDL file

$

To obtain version information, do:

$ idl3_check --version
OpenCCM idl3_check 0.9.0

Copyright (C) 2000-2005 INRIA - USTL - LIFL - GOAL
. . .
$

By default, the idl3_check script displays messages. To silent these output messages, do:

$ idl3_check --silent test/sample.idl3
$

By default, the idl3_check script uses an internal preprocessor written in Java. However, it is possible to use any external C/C++ preprocessor, e.g.:

$ idl3_check --cpp /usr/bin/cpp test/sample.idl3
. . .
$

Let's note that the standard -P, -D, -U and -I options for the C/C++ preprocessor could be passed as arguments to idl3_check before the file name, e.g.:

$ idl3_check -DFOO -Itest test/sample.idl3
. . .
$

When some preprocessing options are often used, e.g. -IAnIncludeDir, -DTheMacro, then they could be set by default in the xml/launcher/IDL3Check.xml file if they are specific to the idl3_check script or in the xml/launcher/Compiler.xml file if they are required by all OpenCCM compilation scripts.

By default, the __OMG_IDL_3__ macro is defined by the OpenCCM OMG IDL/PSDL/CIDL compiler. This macro could be used to distinguish if used OMG IDL modules should be imported from the OpenCCM Interface Repository or if their associated files should be included, e.g.

// An OMG IDL file.

#ifdef __OMG_IDL_3__

// This file is compiled by an OMG IDL 3.x compliant compiler.

import CORBA;

#else

// This file is compiled by a non OMG IDL 3.x compliant compiler.

#include <CORBA.idl>

#endif

// ...

Feeding OMG IDL 3.0 files into the OpenCCM Interface Repository

The ir3_feed script allows you to compile a specified OMG IDL 3.0 file and to feed it into the OpenCCM Interface Repository, e.g.:

$ ir3_feed test/sample.idl3
ir3_feed 0.9.0: Reading from file test/sample.idl3...
ir3_feed 0.9.0: Preprocessing file test/sample.idl3...
ir3_feed 0.9.0: File test/sample.idl3 preprocessed.
ir3_feed 0.9.0: Compiling test/sample.idl3 file...
ir3_feed 0.9.0: Compilation completed: 0 warning.
$

Warning: OMG IDL files must be fed into the OpenCCM Interface Repository only once!!!

The ir3_feed script supports the following options:

OptionDescription
-h or
--help
Display usage and help information, and exit.
--versionOutput version information and exit.
--silentSilent output messages.
--cpp pathSet the path to the external C preprocessor used.
-PInhibit generation of #-lines with line-number information.
-DNAME or
-DNAME=DEF
Define NAME as DEF, default is 1.
-UNAMERemove any definition for NAME.
-IDIRPut DIR in the include file search path.

To obtain usage and help information, do:

$ ir3_feed --help
Usage: ir3_feed [-h|--help] [--version] [--silent]
                [--cpp path] [-P] [-DNAME|-DNAME=DEF] [-UNAME] [-IDIR]
                omg_idl_files

Options:
  -h, --help         Display this information and exit
  --version          Output version information and exit
  --silent           Silent output messages
  --cpp path         Set the path to the external C preprocessor used
  -P                 Inhibit generation of #-lines with line-number information
  -DNAME, -DNAME=DEF Define NAME as DEF, default is 1
  -UNAME             Remove any definition for NAME
  -IDIR              Put DIR in the include file search path

Description:
  Feed the OpenCCM Interface Repository with OMG IDL files

$

To obtain version information, do:

$ ir3_feed --version
OpenCCM ir3_feed 0.9.0

Copyright (C) 2000-2005 INRIA - USTL - LIFL - GOAL
. . .
$

By default, the ir3_feed script displays messages. To silent these output messages, do:

$ ir3_feed --silent test/sample.idl3
$

By default, the ir3_feed script uses an internal preprocessor written in Java. However, it is possible to use any external C/C++ preprocessor, e.g.:

$ ir3_feed --cpp /usr/bin/cpp test/sample.idl3
. . .
$

Let's note that the standard -P, -D, -U and -I options for the C/C++ preprocessor could be passed as arguments to ir3_feed before the file name, e.g.:

$ ir3_feed -DFOO -Itest test/sample.idl3
. . .
$

When some preprocessing options are often used, e.g. -IAnIncludeDir, -DTheMacro, then they could be set by default in the xml/launcher/IR3Feed.xml file if they are specific to the ir3_feed script or in the xml/launcher/Compiler.xml file if they are required by all OpenCCM compilation scripts.

By default, the __OMG_IDL_3__ macro is defined by the OpenCCM OMG IDL/PSDL/CIDL compiler. This macro could be used to distinguish if used OMG IDL modules should be imported from the OpenCCM Interface Repository or if their associated files should be included, e.g.

// An OMG IDL file.

#ifdef __OMG_IDL_3__

// This file is compiled by an OMG IDL 3.x compliant compiler.

import CORBA;

#else

// This file is compiled by a non OMG IDL 3.x compliant compiler.

#include <CORBA.idl>

#endif

// ...

Destroying OpenCCM Interface Repository objects

The ir3_destroy script allows you to destroy a specified object from the OpenCCM Interface Repository.

Destroying an object from the OpenCCM Interface Repository requires to provide its full OMG IDL scope name, e.g.:

$ ir3_destroy ::sample
ir3_destroy 0.9.0: ::sample destroyed successfully.
$

If the object to destroy does not exist in the OpenCCM Interface Repository, then an error is reported, e.g.:

$ ir3_destroy ::sample
ir3_destroy 0.9.0: ::sample not found in the OpenCCM Interface Repository!
$

If the object is referenced by other OpenCCM Interface Repository objects, then it could not be destroyed until other objects are destroyed, e.g.:

$ ir3_feed test/sample.idl3
. . .
$ ir3_destroy sample::MyComponent
ir3_destroy 0.9.0: sample::MyComponent not destroyed because dependency exits
in the OpenCCM Interface Repository preventing destruction!

$ ir3_destroy sample::MyHome
ir3_destroy 0.9.0: sample::MyHome destroyed successfully.

$ ir3_destroy sample::MyComponent
ir3_destroy 0.9.0: sample::MyComponent destroyed successfully.
$

The ir3_destroy script supports the following options:

OptionDescription
-h or
--help
Display usage and help information, and exit.
--versionOutput version information and exit.
--silentSilent output messages.

To obtain usage and help information, do:

$ ir3_destroy --help
Usage: ir3_destroy [-h|--help] [--version] [--silent] omg_idl_scoped_name

Options:
  -h, --help Display this information and exit
  --version  Output version information and exit
  --silent   Silent output messages

Description:
  Destroy an object from the OpenCCM Interface Repository

$

To obtain version information, do:

$ ir3_destroy --version
OpenCCM ir3_destroy 0.9.0

Copyright (C) 2000-2005 INRIA - USTL - LIFL - GOAL
. . .
$

By default, the ir3_destroy script displays messages. To silent these output messages, do:

$ ir3_feed test/sample.idl3
. . .
$ ir3_destroy --silent sample
$

Generating OMG IDL 3.0 files from the OpenCCM Interface Repository

The ir3_idl3 script allows you to generate the OMG IDL 3.0 definition associated to an OpenCCM Interface Repository object and its children objects, e.g.:

$ ir3_idl3 sample
ir3_idl3 0.9.0: Generating OMG IDL 3.0 for sample...
ir3_idl3 0.9.0: OMG IDL 3.0 generated in generated.idl3.
$

By default, the ir3_idl3 script generates the generated.idl3 file.

$ cat generated.idl3
. . .
#ifndef __SAMPLE__
#define __SAMPLE__

#pragma prefix "ccm.objectweb.org"
module sample
{
    component MyComponent;

    component MyComponent
    {
    };
    home MyHome
         manages ::sample::MyComponent
    {
    };

};

#endif
$

The ir3_idl3 script supports the following options:

OptionDescription
-h or
--help
Display usage and help information, and exit.
--versionOutput version information and exit.
--silentSilent output messages.
-o outputfileSet the output file name, default is generated.idl3.
-i ir_objectAdd import ir_object statement.

To obtain usage and help information, do:

$ ir3_idl3 --help
Usage: ir3_idl3 [-h|--help] [--version] [--silent]
                [-o outputfile] [-i ir_object] declaration

Options:
  -h, --help    Display this information and exit
  --version     Output version information and exit
  --silent      Silent output messages
  -o outputfile Set the output file name, default is generated.idl3
  -i ir_object  Add import ir_object statement

Description:
  Generate OMG IDL 3.0 for a declaration from the OpenCCM Interface Repository

$

To obtain version information, do:

$ ir3_idl3 --version
OpenCCM ir3_idl3 0.9.0

Copyright (C) 2000-2005 INRIA - USTL - LIFL - GOAL
. . .
$

By default, the ir3_idl3 script displays messages. To silent these output messages, do:

$ ir3_idl3 --silent sample
$

By default, the ir3_idl3 script generates the OMG IDL 3.0 definition into the generated.idl3 file.
However, this script can produce the output into a file specified by the -o outputfile option, e.g.:

$ ir3_idl3 -o tmp.idl3 sample
ir3_idl3 0.9.0: Generating OMG IDL 3.0 for sample ...
ir3_idl3 0.9.0: OMG IDL 3.0 generated in tmp.idl3.
$
$ cat tmp.idl3
. . .
#ifndef __SAMPLE__
#define __SAMPLE__

#pragma prefix "ccm.objectweb.org"
module sample
{
    component MyComponent;

    component MyComponent
    {
    };
    home MyHome
         manages ::sample::MyComponent
    {
    };

};

#endif
$

Using the -i option produces an import statement at the begin of the generated OMG IDL 3.0 file, e.g.:

$ ir3_idl3 -i Components sample
. . .
$ cat generated.idl3
. . .
import Components;
. . .
$

Generating equivalent OMG IDL 2.4 mapping from the OpenCCM Interface Repository

The ir3_idl2 script allows you to generate the equivalent OMG IDL 2.4 CCM mapping associated to an OpenCCM Interface Repository object and its children objects, e.g.:

$ ir3_idl2 sample
ir3_idl2 0.9.0: Generating OMG IDL2 for sample...
ir3_idl2 0.9.0: OMG IDL2 generated in generated.idl and generated_local.idl.
$

The generated.idl file contains the remote OMG IDL 2.4 interfaces allowing clients to interact with components and homes.

$ cat generated.idl
. . .

#ifndef __SAMPLE__
#define __SAMPLE__
#include <Components.idl>

#pragma prefix "ccm.objectweb.org"
module sample
{
    interface MyComponent;
    interface MyHomeExplicit;
    interface MyHomeImplicit;
    interface MyHome;

    interface MyComponent
                  : ::Components::CCMObject
    {
    };
    interface MyHomeExplicit
                  : ::Components::CCMHome
    {
    };
    interface MyHomeImplicit
                  : ::Components::KeylessCCMHome
    {
        ::sample::MyComponent create()
           raises(::Components::CreateFailure);
    };
    interface MyHome
                  : ::sample::MyHomeExplicit,
                    ::sample::MyHomeImplicit
    {
    };

};

#endif
$

The generated_local.idl file contains the local OMG IDL 2.4 interfaces allowing developers to implement components and homes.

$ cat generated_local.idl
. . .
#ifndef __SAMPLE__LOCAL
#define __SAMPLE__LOCAL
#include "generated.idl"

#pragma prefix "ccm.objectweb.org"
module sample
{
    local interface CCM_MyComponent_Executor;
    local interface CCM_MyComponent;
    local interface CCM_MyComponent_Context;
    local interface CCM_MyHomeExplicit;
    local interface CCM_MyHomeImplicit;
    local interface CCM_MyHome;

    local interface CCM_MyComponent_Executor
                  : ::Components::EnterpriseComponent
    {
    };
    local interface CCM_MyComponent
                  : ::sample::CCM_MyComponent_Executor
    {
    };
    local interface CCM_MyComponent_Context
                  : ::Components::CCMContext
    {
    };
    local interface CCM_MyHomeExplicit
                  : ::Components::HomeExecutorBase
    {
    };
    local interface CCM_MyHomeImplicit
    {
        ::Components::EnterpriseComponent create()
           raises(::Components::CCMException);
    };
    local interface CCM_MyHome
                  : ::sample::CCM_MyHomeExplicit,
                    ::sample::CCM_MyHomeImplicit
    {
    };
};

#endif
$

See the CORBA Component Model Specification for more information about the equivalent OMG IDL 2.4 mapping.

The ir3_idl2 script supports the following options:

OptionDescription
-h or
--help
Display usage and help information, and exit.
--versionOutput version information and exit.
--silentSilent output messages.
-o outputfileSet the output file name, default is generated.idl.
-i fileAdd a #include <file> statement.
-ipath fileAdd a #include "file" statement where file must be the complete file path.

To obtain usage and help information, do:

$ ir3_idl2 --help
Usage: ir3_idl2 [-h|--help] [--version] [--silent]
                [-o outputfile] [-i file] [-ipath file] declaration

Options:
  -h, --help    Display this information and exit
  --version     Output version information and exit
  --silent      Silent output messages
  -o outputfile Set the output file name, default is generated.idl
  -i file       Add a #include <file> statement
  -ipath file   Add a #include "file" statement where
                file must be the complete file path

Description:
  Generate OMG IDL2 for a declaration from the OpenCCM Interface Repository

$

To obtain version information, do:

$ ir3_idl2 --version
OpenCCM ir3_idl2 0.9.0

Copyright (C) 2000-2005 INRIA - USTL - LIFL - GOAL
. . .
$

By default, the ir3_idl2 script displays messages. To silent these output messages, do:

$ ir3_idl2 --silent sample
$

By default, the ir3_idl2 script generates the OMG IDL 2.4 CCM mapping into the generated.idl and generated_local.idl files. However, this script can produce the output into files specified by the -o outputfile option, e.g.:

$ ir3_idl2 -o tmp.idl sample
ir3_idl2 0.9.0: Generating OMG IDL2 for sample...
ir3_idl2 0.9.0: OMG IDL2 generated in tmp.idl and tmp_local.idl.
$ cat tmp.idl tmp_local.idl
. . .
$

Using the -i flag produces an #include statement at the begin of the generated OMG IDL 2.4 file, e.g.:

$ ir3_idl2 -i file1.idl sample
. . .
$ cat generated.idl
. . .
#include <file1.idl>
. . .
$

Using the -ipath flag produces a user #include statement at the begin of the generated OMG IDL 2.4 file, e.g.:

$ ir3_idl2 -ipath file2.idl sample
. . .
$ cat generated.idl
. . .
#include "file2.idl"
. . .
$

Compiling specifications and regenerating the OMG CIDL part only

The cidl script allows you to compile a specification file and regenerate the OMG CIDL part only, e.g.:

$ cidl test/sample.cidl
cidl 0.9.0: Reading from file test/sample.cidl...
cidl 0.9.0: Preprocessing file test/sample.cidl...
cidl 0.9.0: File test/sample.cidl preprocessed.
cidl 0.9.0: Compiling test/sample.cidl file...
cidl 0.9.0: Compilation completed: 0 warning.
cidl 0.9.0: Generating CIDL from test/sample.cidl...
cidl 0.9.0: CIDL generated in generated.cidl.
$

By default, the cidl script regenerates the generated.cidl file.

$ cat generated.cidl
. . .
#pragma prefix "ccm.objectweb.org"
module sample
{

    composition session SampleSessionComposition
    {
        home executor HomeImpl
        {
            implements ::sample::MyHome;
            manages ComponentImpl;
        };
    };

};
$

The cidl script supports the following options:

OptionDescription
-h or
--help
Display usage and help information, and exit.
--versionOutput version information and exit.
--silentSilent output messages.
--cpp pathSet the path to the external C preprocessor used.
-PInhibit generation of #-lines with line-number information.
-DNAME or
-DNAME=DEF
Define NAME as DEF, default is 1.
-UNAMERemove any definition for NAME.
-IDIRPut DIR in the include file search path.
-o outputfileSet the output file name, default is generated.cidl.

To obtain usage and help information, do:

$ cidl --help
Usage: cidl [-h|--help] [--version] [--silent]
            [--cpp path] [-P] [-DNAME|-DNAME=DEF] [-UNAME] [-IDIR]
            [-o outputfile] file

Options:
  -h, --help         Display this information and exit
  --version          Output version information and exit
  --silent           Silent output messages
  --cpp path         Set the path to the external C preprocessor used
  -P                 Inhibit generation of #-lines with line-number information
  -DNAME, -DNAME=DEF Define NAME as DEF, default is 1
  -UNAME             Remove any definition for NAME
  -IDIR              Put DIR in the include file search path
  -o outputfile      Set the output file name, default is generated.cidl

Description:
  Compile a file and regenerate the OMG CIDL part only

$

To obtain version information, do:

$ cidl --version
OpenCCM cidl 0.9.0

Copyright (C) 2000-2005 INRIA - USTL - LIFL - GOAL
. . .
$

By default, the cidl script displays messages. To silent these output messages, do:

$ cidl --silent test/sample.cidl
$

By default, the cidl script uses an internal preprocessor written in Java. However, it is possible to use any external C/C++ preprocessor, e.g.:

$ cidl --cpp /usr/bin/cpp test/sample.cidl
. . .
$

Let's note that the standard -P, -D, -U and -I options for the C/C++ preprocessor could be passed as arguments to cidl before the file name, e.g.:

$ cidl -DFOO -Itest test/sample.cidl
. . .
$

When some preprocessing options are often used, e.g. -IAnIncludeDir, -DTheMacro, then they could be set by default in the xml/launcher/CIDLtoCIDL.xml file if they are specific to the cidl script or in the xml/launcher/Compiler.xml file if they are required by all OpenCCM compilation scripts.

By default, the __OMG_IDL_3__ macro is defined by the OpenCCM OMG IDL/PSDL/CIDL compiler. This macro could be used to distinguish if used OMG IDL modules should be imported from the OpenCCM Interface Repository or if their associated files should be included, e.g.

// An OMG CIDL file.

#ifdef __OMG_IDL_3__

// This file is compiled by an OMG IDL 3.x compliant compiler.

import CORBA;

#else

// This file is compiled by a non OMG IDL 3.x compliant compiler.

#include <CORBA.idl>

#endif

// ...

By default, the cidl script regenerates the OMG CIDL file into the generated.cidl file. However, this script can produce the output into a file specified by the -o outputfile option, e.g.:

$ cidl -o tmp.cidl test/sample.cidl
. . .
$ cat tmp.cidl
. . .
$

Compiling specifications and regenerating the OMG PSDL part only

The psdl script allows you to compile a specification file and regenerate the OMG PSDL part only, e.g.:

$ psdl test/sample.psdl
psdl 0.9.0: Reading from file test/sample.psdl...
psdl 0.9.0: Preprocessing file test/sample.psdl...
psdl 0.9.0: File test/sample.psdl preprocessed.
psdl 0.9.0: Compiling test/sample.psdl file...
psdl 0.9.0: Compilation completed: 0 warning.
psdl 0.9.0: Generating PSDL from test/sample.psdl...
psdl 0.9.0: PSDL generated in generated.psdl.
$

By default, the psdl script regenerates the generated.psdl file.

$ cat generated.psdl
. . .
#pragma prefix "ccm.objectweb.org"
module sample
{
    storagetype ST;

    storagetype ST
    {
    };
    storagehome SH
                of ::sample::ST
    {
    };

};
$

The psdl script supports the following options:

OptionDescription
-h or
--help
Display usage and help information, and exit.
--versionOutput version information and exit.
--silentSilent output messages.
--cpp pathSet the path to the external C preprocessor used.
-PInhibit generation of #-lines with line-number information.
-DNAME or
-DNAME=DEF
Define NAME as DEF, default is 1.
-UNAMERemove any definition for NAME.
-IDIRPut DIR in the include file search path.
-o outputfileSet the output file name, default is generated.psdl.

To obtain usage and help information, do:

$ psdl --help
Usage: psdl [-h|--help] [--version] [--silent]
            [--cpp path] [-P] [-DNAME|-DNAME=DEF] [-UNAME] [-IDIR]
            [-o outputfile] file

Options:
  -h, --help         Display this information and exit
  --version          Output version information and exit
  --silent           Silent output messages
  --cpp path         Set the path to the external C preprocessor used
  -P                 Inhibit generation of #-lines with line-number information
  -DNAME, -DNAME=DEF Define NAME as DEF, default is 1
  -UNAME             Remove any definition for NAME
  -IDIR              Put DIR in the include file search path
  -o outputfile      Set the output file name, default is generated.psdl

Description:
  Compile a file and regenerate the OMG PSDL part only

$

To obtain version information, do:

$ psdl --version
OpenCCM psdl 0.9.0

Copyright (C) 2000-2005 INRIA - USTL - LIFL - GOAL
. . .
$

By default, the psdl script displays messages. To silent these output messages, do:

$ psdl --silent test/sample.psdl
$

By default, the psdl script uses an internal preprocessor written in Java. However, it is possible to use any external C/C++ preprocessor, e.g.:

$ psdl --cpp /usr/bin/cpp test/sample.psdl
. . .
$

Let's note that the standard -P, -D, -U and -I options for the C/C++ preprocessor could be passed as arguments to psdl before the file name, e.g.:

$ psdl -DFOO -Itest test/sample.psdl
. . .
$

When some preprocessing options are often used, e.g. -IAnIncludeDir, -DTheMacro, then they could be set by default in the xml/launcher/PSDLtoPSDL.xml file if they are specific to the psdl script or in the xml/launcher/Compiler.xml file if they are required by all OpenCCM compilation scripts.

By default, the __OMG_IDL_3__ macro is defined by the OpenCCM OMG IDL/PSDL/CIDL compiler. This macro could be used to distinguish if used OMG IDL modules should be imported from the OpenCCM Interface Repository or if their associated files should be included, e.g.

// An OMG PSDL file.

#ifdef __OMG_IDL_3__

// This file is compiled by an OMG IDL 3.x compliant compiler.

import CORBA;

#else

// This file is compiled by a non OMG IDL 3.x compliant compiler.

#include <CORBA.idl>

#endif

// ...

By default, the psdl script regenerates the OMG PSDL file into the generated.psdl file. However, this script can produce the output into a file specified by the -o outputfile option, e.g.:

$ psdl -o tmp.psdl test/sample.psdl
. . .
$ cat tmp.psdl
. . .
$
Copyright © 1999-2005, ObjectWeb Consortium | contact | webmaster | Last modified at 2005-07-07 02:04 PM