#### 6.3.1 Usage of `iac`

`iac` is PolyORB's new IDL-to-Ada compiler. It supports many command line parameters to control code generation optimizations such as use of static hashing for deterministic request dispatching, and optimized GIOP marshalling for CORBA applications.

         NAME
                iac - PolyORB's IDL-to-Ada compiler

         SYNOPSIS
                iac [options] file [-cppargs args...]

         DESCRIPTION
                iac is an IDL-to-Ada compiler, compliant with version 1.2 of the
                ``Ada Language Mapping Specification'' produced by the OMG.

         OPTIONS
                iac accepts the following options:

           -h       Print this help message, and do nothing else

           file is the name of the .idl file (.idl suffix optional)

           -E       Preprocess only
           -k       Keep temporary files
           -o DIR   Output directory (DIR must exist)
           -p       Produce source on standard output
           -q       Quiet mode

           -dm      Generate debug messages when analyzing scopes

           -df      Dump the frontend tree (the IDL tree)

           -cppargs Pass arguments to the C++ preprocessor
           -I <dir> Shortcut -cppargs -I directory. Use this flag
                    for the imported entities
           -nocpp   Do not preprocess input

           -gnatW8  Use UTF-8 character encoding in Ada output.
                    (Default is Latin-1.)

           -<lang>  Generate code for one of the following languages:

            types   Generate a list of all types present in the IDL file
                    -p       Print the list generated

            ada     (default) Generate Ada source code
                    -i       Generate implementation packages
                    -c       Generate code for client side only
                    -s       Generate code for server side only
                    -d       Generate delegation package (defunct)
                    -ir      Generate code for interface repository
                    -noir    Do not generate code for interface repository (default)
                    -hc      Minimize CPU time in perfect hash tables in skels
                    -hm      Minimize memory use in perfect hash tables in skels
                             This is the default.
                    -rs      Use the SII/SSI to handle requests
                    -rd      Use the DII/DSI to handle requests (default)
                    -da      Dump the Ada tree
                    -db      Generate only the package bodies
                    -ds      Generate only the package specs
                    -dw      Output the withed entities
                    -dt      Output tree warnings
                    -di      Generate code for imported entities

            idl     Dump parsed IDL file
                    -b n     Base to output integer literals
                             As a default (zero) use base from input
                    -e       Expand IDL Tree
                    -df      Dump IDL Tree (may be used in conjunction with -e
                             to dump the expanded IDL tree)
                    -di      Output IDL code of imported entities  (may be
                             used in conjunction with -e to output the
                             expanded IDL code)

         EXIT STATUS
                iac returns one of the following values upon exit:

                0      Successful completion

                1      Usage error

                2      Illegal IDL specification

`iac` creates several files :

- `myinterface.ads`, `myinterface.adb` : these files contain the mapping for user defined types (client and server side).
- `myinterface-impl.ads`, `myinterface-impl.adb` : these files are to be filled in by the user. They contain the implementation of the server. They are generated only if the -i flag is specified.
- `myinterface.ads`, `myinterface.adb` : these files contain the client stubs for the interface.
- `myinterface-skel.ads`, `myinterface-skel.adb` : these files contain the server-side skeletons for the interface.
- `myinterface-helper.ads`, `myinterface-helper.adb` : these files contain subprograms to marshal data into CORBA Any containers.
- `myinterface-ir_info.ads`, `myinterface-ir_info.adb` : these files contain code for registering IDL definitions in the CORBA Interface Repository. They are generated only if the `'-ir'` flag is specified.
- `myinterface-cdr.ads`, `myinterface-cdr.adb` : these files contain code for optimized CDR marshalling of GIOP messages. They are generated only if the `'-rs'` flag is specified.