summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_global.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_global.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_global.cpp2777
1 files changed, 2777 insertions, 0 deletions
diff --git a/TAO/TAO_IDL/be/be_global.cpp b/TAO/TAO_IDL/be/be_global.cpp
new file mode 100644
index 00000000000..e6f1b26e4ba
--- /dev/null
+++ b/TAO/TAO_IDL/be/be_global.cpp
@@ -0,0 +1,2777 @@
+// $Id$
+
+// ============================================================================
+//
+//
+// = LIBRARY
+// TAO IDL
+//
+// = FILENAME
+// be_global.cpp
+//
+// = DESCRIPTION
+// Stores global data specific to the compiler back end.
+//
+// = AUTHOR
+// Jeff Parsons <parsons@cs.wustl.edu>
+//
+// ============================================================================
+
+#include "be_global.h"
+#include "be_codegen.h"
+#include "be_generator.h"
+#include "be_module.h"
+#include "be_valuetype.h"
+#include "be_interface.h"
+#include "ast_predefined_type.h"
+#include "utl_identifier.h"
+#include "utl_string.h"
+#include "global_extern.h"
+#include "idl_defines.h"
+#include "ace/ACE.h"
+#include "ace/OS_NS_stdio.h"
+#include "ace/OS_NS_sys_stat.h"
+#include "ace/os_include/os_ctype.h"
+
+ACE_RCSID (be,
+ be_global,
+ "$Id$")
+
+TAO_IDL_BE_Export BE_GlobalData *be_global = 0;
+
+BE_GlobalData::BE_GlobalData (void)
+ : changing_standard_include_files_ (1),
+ skel_export_macro_ (0),
+ skel_export_include_ (0),
+ stub_export_macro_ (0),
+ stub_export_include_ (0),
+ anyop_export_macro_ (0),
+ anyop_export_include_ (0),
+ pch_include_ (0),
+ pre_include_ (0),
+ post_include_ (0),
+ include_guard_ (0),
+ safe_include_ (0),
+ unique_include_ (0),
+ core_versioning_begin_ ("\nTAO_BEGIN_VERSIONED_NAMESPACE_DECL\n"),
+ core_versioning_end_ ("\nTAO_END_VERSIONED_NAMESPACE_DECL\n"),
+ versioning_begin_ (),
+ versioning_end_ (),
+ client_hdr_ending_ (ACE::strnew ("C.h")),
+ client_stub_ending_ (ACE::strnew ("C.cpp")),
+ client_inline_ending_ (ACE::strnew ("C.inl")),
+ server_hdr_ending_ (ACE::strnew ("S.h")),
+ implementation_hdr_ending_ (ACE::strnew ("I.h")),
+ implementation_skel_ending_ (ACE::strnew ("I.cpp")),
+ impl_class_prefix_ (ACE::strnew ("")),
+ impl_class_suffix_ (ACE::strnew ("_i")),
+ server_template_hdr_ending_ (ACE::strnew ("S_T.h")),
+ server_skeleton_ending_ (ACE::strnew ("S.cpp")),
+ server_template_skeleton_ending_ (ACE::strnew ("S_T.cpp")),
+ server_inline_ending_ (ACE::strnew ("S.inl")),
+ anyop_hdr_ending_ (ACE::strnew ("A.h")),
+ anyop_src_ending_ (ACE::strnew ("A.cpp")),
+ output_dir_ (0),
+ skel_output_dir_ (0),
+ anyop_output_dir_ (0),
+ any_support_ (true),
+ tc_support_ (true),
+ obv_opt_accessor_ (0),
+ gen_impl_files_ (false),
+ gen_impl_debug_info_ (false),
+ gen_copy_ctor_ (false),
+ gen_assign_op_ (false),
+ gen_thru_poa_collocation_ (true), // Default is thru_poa.
+ gen_direct_collocation_ (false),
+ use_raw_throw_ (false),
+ opt_tc_ (false),
+ ami_call_back_ (false),
+ gen_amh_classes_ (false),
+ gen_tie_classes_ (false),
+ gen_smart_proxies_ (false),
+ gen_inline_constants_ (true),
+ gen_dcps_type_support_ (false),
+ gen_orb_h_include_ (true),
+ gen_empty_anyop_header_ (false),
+ lookup_strategy_ (TAO_PERFECT_HASH),
+ void_type_ (0),
+ ccmobject_ (0),
+ messaging_ (0),
+ messaging_exceptionholder_ (0),
+ exceptionholder_ (0),
+ messaging_replyhandler_ (0),
+ gen_anyop_files_ (false),
+ gen_skel_files_ (true),
+ gen_client_inline_ (true),
+ gen_server_inline_ (true),
+ gen_client_stub_ (true),
+ gen_server_skeleton_ (true),
+ gen_local_iface_anyops_ (true),
+ use_clonable_in_args_ (false),
+ gen_template_export_ (false)
+{
+}
+
+BE_GlobalData::~BE_GlobalData (void)
+{
+}
+
+// To switch between changing or non-changing standard include files
+// include files, so that #include statements can be
+// generated with ""s or <>s respectively, for the standard include
+// files (e.g. tao/corba.h)
+void
+BE_GlobalData::changing_standard_include_files (size_t changing)
+{
+ this->changing_standard_include_files_ = changing;
+}
+
+size_t
+BE_GlobalData::changing_standard_include_files (void)
+{
+ return this->changing_standard_include_files_;
+}
+
+/************ Helper functions **************/
+static const char*
+be_change_idl_file_extension (UTL_String* idl_file,
+ const char *new_extension,
+ bool base_name_only = false,
+ bool for_anyop = false,
+ bool for_skel = false)
+{
+ // @@ This shouldn't happen anyway; but a better error handling
+ // mechanism is needed.
+ if (idl_file == 0 || new_extension == 0)
+ {
+ return 0;
+ }
+
+ static char fname[MAXPATHLEN];
+ ACE_OS::memset (fname, 0, MAXPATHLEN);
+
+ // Get the char* from the UTL_String.
+ const char* string = idl_file->get_string ();
+
+ // Get the base part of the filename, we try several extensions
+ // before giving up.
+ const char *base = 0;
+
+ static const char* extensions[] = {
+ ".idl",
+ ".pidl",
+ ".IDL",
+ ".PIDL"
+ };
+
+ static int nextensions = sizeof(extensions)/sizeof(extensions[0]);
+
+ for (int k = 0; k < nextensions; ++k)
+ {
+ base = ACE_OS::strstr (string, extensions[k]);
+
+ if (base != 0)
+ {
+ break;
+ }
+ }
+
+ if (base == 0)
+ {
+ return 0;
+ }
+
+ // Anyop * skel file output defaults to general output dir if not set.
+ const char *output_path = 0;
+
+ if (for_anyop && 0 != be_global->anyop_output_dir ())
+ {
+ output_path = be_global->anyop_output_dir ();
+ }
+ else if (for_skel && 0 != be_global->skel_output_dir ())
+ {
+ output_path = be_global->skel_output_dir ();
+ }
+ else
+ {
+ output_path = be_global->output_dir ();
+ }
+
+ if (!base_name_only && output_path != 0)
+ {
+ // Path info should also be added to fname.
+
+ // Add path and "/".
+ ACE_OS::sprintf (fname, "%s/", output_path);
+
+ // Append the base part to fname.
+ ACE_OS::strncpy (fname + strlen (fname), string, base - string);
+ }
+ else
+ {
+ // Base_name_only or no putput_dir specified by user. JUST put the
+ // base part to fname.
+ ACE_OS::strncpy (fname, string, base - string);
+ }
+
+ // Turn '\' and '\\' into '/'.
+ char* i = fname;
+
+ for (char* j = fname; *j != 0; ++i, ++j)
+ {
+ if (*j == '\\')
+ {
+ *i = '/';
+
+ if (*(j+1) == '\\')
+ {
+ ++j;
+ }
+ }
+ else
+ {
+ *i = *j;
+ }
+ }
+
+ *i = 0;
+
+ // Append the newextension.
+ ACE_OS::strcat (fname, new_extension);
+
+ return fname;
+}
+
+const char *
+BE_GlobalData::be_get_client_hdr (UTL_String *idl_file_name,
+ bool base_name_only)
+{
+ // User-defined file extensions don't apply to .pidl files.
+ ACE_CString fn (idl_file_name->get_string ());
+ ACE_CString fn_ext = fn.substr (fn.length () - 5);
+ bool orb_file = (fn_ext == ".pidl" || fn_ext == ".PIDL");
+
+ return be_change_idl_file_extension (idl_file_name,
+ orb_file
+ ? "C.h"
+ : be_global->client_hdr_ending (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_client_stub (UTL_String *idl_file_name)
+{
+ return be_change_idl_file_extension (idl_file_name,
+ be_global->client_stub_ending ());
+}
+
+const char *
+BE_GlobalData::be_get_client_inline (UTL_String *idl_file_name,
+ bool base_name_only)
+{
+ return be_change_idl_file_extension (idl_file_name,
+ be_global->client_inline_ending (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_server_hdr (UTL_String *idl_file_name,
+ bool base_name_only)
+{
+ // User-defined file extensions don't apply to .pidl files.
+ ACE_CString fn (idl_file_name->get_string ());
+ ACE_CString fn_ext = fn.substr (fn.length () - 5);
+ bool orb_file = (fn_ext == ".pidl" || fn_ext == ".PIDL");
+
+ return be_change_idl_file_extension (idl_file_name,
+ orb_file
+ ? "S.h"
+ : be_global->server_hdr_ending (),
+ base_name_only,
+ false,
+ true);
+}
+
+const char *
+BE_GlobalData::be_get_implementation_hdr (UTL_String *idl_file_name,
+ bool base_name_only)
+{
+ return be_change_idl_file_extension (idl_file_name,
+ be_global->implementation_hdr_ending (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_implementation_skel (UTL_String *idl_file_name,
+ bool base_name_only)
+{
+ return be_change_idl_file_extension (idl_file_name,
+ be_global->implementation_skel_ending (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_server_template_hdr (UTL_String *idl_file_name,
+ bool base_name_only)
+{
+ return be_change_idl_file_extension (idl_file_name,
+ be_global->server_template_hdr_ending (),
+ base_name_only,
+ false,
+ true);
+}
+
+const char *
+BE_GlobalData::be_get_server_skeleton (UTL_String *idl_file_name)
+{
+ return be_change_idl_file_extension (idl_file_name,
+ be_global->server_skeleton_ending (),
+ false,
+ false,
+ true);
+}
+
+const char *
+BE_GlobalData::be_get_server_template_skeleton (UTL_String *idl_file_name,
+ bool base_name_only)
+{
+ return be_change_idl_file_extension (idl_file_name,
+ be_global->server_template_skeleton_ending (),
+ base_name_only,
+ false,
+ true);
+}
+
+const char *
+BE_GlobalData::be_get_server_inline (UTL_String *idl_file_name,
+ bool base_name_only)
+{
+ return be_change_idl_file_extension (idl_file_name,
+ be_global->server_inline_ending (),
+ base_name_only,
+ false,
+ true);
+}
+
+const char *
+BE_GlobalData::be_get_anyop_header (UTL_String *idl_file_name,
+ bool base_name_only)
+{
+ return be_change_idl_file_extension (idl_file_name,
+ be_global->anyop_header_ending (),
+ base_name_only,
+ true);
+}
+
+const char *
+BE_GlobalData::be_get_anyop_source (UTL_String *idl_file_name,
+ bool base_name_only)
+{
+ return be_change_idl_file_extension (idl_file_name,
+ be_global->anyop_source_ending (),
+ base_name_only,
+ true);
+}
+
+const char *
+BE_GlobalData::be_get_client_hdr_fname (bool base_name_only)
+{
+ return be_get_client_hdr (idl_global->stripped_filename (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_client_stub_fname (void)
+{
+ return be_get_client_stub (idl_global->stripped_filename ());
+}
+
+const char *
+BE_GlobalData::be_get_client_inline_fname (bool base_name_only)
+{
+ return be_get_client_inline (idl_global->stripped_filename (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_server_hdr_fname (bool base_name_only)
+{
+ return be_get_server_hdr (idl_global->stripped_filename (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_implementation_hdr_fname (bool base_name_only)
+{
+ return be_get_implementation_hdr (idl_global->stripped_filename (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_implementation_skel_fname (bool base_name_only)
+{
+ return be_get_implementation_skel (idl_global->stripped_filename (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_server_template_hdr_fname (bool base_name_only)
+{
+ return be_get_server_template_hdr (idl_global->stripped_filename (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_server_skeleton_fname (void)
+{
+ return be_get_server_skeleton (idl_global->stripped_filename ());
+}
+
+const char *
+BE_GlobalData::be_get_implementation_skeleton_fname (void)
+{
+ return be_get_implementation_skel (idl_global->stripped_filename ());
+}
+
+const char *
+BE_GlobalData::be_get_server_template_skeleton_fname (bool base_name_only)
+{
+ return be_get_server_template_skeleton (idl_global->stripped_filename (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_server_inline_fname (bool base_name_only)
+{
+ return be_get_server_inline (idl_global->stripped_filename (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_anyop_source_fname (bool base_name_only)
+{
+ return be_get_anyop_source (idl_global->stripped_filename (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_anyop_header_fname (bool base_name_only)
+{
+ return be_get_anyop_header (idl_global->stripped_filename (),
+ base_name_only);
+}
+
+const char*
+BE_GlobalData::skel_export_macro (void) const
+{
+ if (this->skel_export_macro_ == 0)
+ {
+ return "";
+ }
+
+ return this->skel_export_macro_;
+}
+
+void
+BE_GlobalData::skel_export_macro (const char *s)
+{
+ this->skel_export_macro_ = ACE_OS::strdup (s);
+}
+
+const char*
+BE_GlobalData::skel_export_include (void) const
+{
+ return this->skel_export_include_;
+}
+
+void
+BE_GlobalData::skel_export_include (const char *s)
+{
+ this->skel_export_include_ = ACE_OS::strdup (s);
+}
+
+const char*
+BE_GlobalData::stub_export_macro (void) const
+{
+ if (this->stub_export_macro_ == 0)
+ {
+ return "";
+ }
+
+ return this->stub_export_macro_;
+}
+
+void
+BE_GlobalData::stub_export_macro (const char *s)
+{
+ this->stub_export_macro_ = ACE_OS::strdup (s);
+}
+
+const char*
+BE_GlobalData::stub_export_include (void) const
+{
+ return this->stub_export_include_;
+}
+
+void
+BE_GlobalData::stub_export_include (const char *s)
+{
+ this->stub_export_include_ = ACE_OS::strdup (s);
+}
+
+const char*
+BE_GlobalData::anyop_export_macro (void) const
+{
+ if (this->anyop_export_macro_ == 0)
+ {
+ return "";
+ }
+
+ return this->anyop_export_macro_;
+}
+
+void
+BE_GlobalData::anyop_export_macro (const char *s)
+{
+ this->anyop_export_macro_ = ACE_OS::strdup (s);
+}
+
+const char*
+BE_GlobalData::anyop_export_include (void) const
+{
+ return this->anyop_export_include_;
+}
+
+void
+BE_GlobalData::anyop_export_include (const char *s)
+{
+ this->anyop_export_include_ = ACE_OS::strdup (s);
+}
+
+const char*
+BE_GlobalData::pch_include (void) const
+{
+ return this->pch_include_;
+}
+
+void
+BE_GlobalData::pch_include (const char *s)
+{
+ this->pch_include_ = ACE_OS::strdup (s);
+}
+
+const char*
+BE_GlobalData::pre_include (void) const
+{
+ return this->pre_include_;
+}
+
+void
+BE_GlobalData::pre_include (const char *s)
+{
+ this->pre_include_ = ACE_OS::strdup (s);
+}
+
+const char*
+BE_GlobalData::post_include (void) const
+{
+ return this->post_include_;
+}
+
+void
+BE_GlobalData::post_include (const char *s)
+{
+ this->post_include_ = ACE_OS::strdup (s);
+}
+
+const char*
+BE_GlobalData::include_guard (void) const
+{
+ return this->include_guard_;
+}
+
+void
+BE_GlobalData::include_guard (const char *s)
+{
+ this->include_guard_ = ACE_OS::strdup (s);
+}
+
+const char*
+BE_GlobalData::safe_include (void) const
+{
+ return this->safe_include_;
+}
+
+void
+BE_GlobalData::safe_include (const char *s)
+{
+ this->safe_include_ = ACE_OS::strdup (s);
+}
+
+const char*
+BE_GlobalData::unique_include (void) const
+{
+ return this->unique_include_;
+}
+
+void
+BE_GlobalData::unique_include (const char *s)
+{
+ this->unique_include_ = ACE_OS::strdup (s);
+}
+
+void
+BE_GlobalData::versioning_begin (const char * s)
+{
+ this->versioning_begin_ =
+ ACE_CString ("\n\n")
+ + ACE_CString (s)
+ + ACE_CString ("\n\n");
+
+ this->core_versioning_end_ += this->versioning_begin_; // Yes, "begin".
+}
+
+const char *
+BE_GlobalData::versioning_begin (void) const
+{
+ return this->versioning_begin_.c_str ();
+}
+
+const char *
+BE_GlobalData::core_versioning_begin (void) const
+{
+ return this->core_versioning_begin_.c_str ();
+}
+
+void
+BE_GlobalData::versioning_end (const char * s)
+{
+ this->versioning_end_ =
+ ACE_CString ("\n\n")
+ + ACE_CString (s)
+ + ACE_CString ("\n\n");
+
+ this->core_versioning_begin_ =
+ this->versioning_end_ // Yes, "end".
+ + this->core_versioning_begin_; // Initialized in constructor.
+}
+
+const char *
+BE_GlobalData::versioning_end (void) const
+{
+ return this->versioning_end_.c_str ();
+}
+
+const char *
+BE_GlobalData::core_versioning_end (void) const
+{
+ return this->core_versioning_end_.c_str ();
+}
+
+// Set the client_hdr_ending.
+void
+BE_GlobalData::client_hdr_ending (const char* s)
+{
+ delete [] this->client_hdr_ending_;
+ this->client_hdr_ending_ = ACE::strnew (s);
+}
+
+// Get the client_hdr_ending.
+const char*
+BE_GlobalData::client_hdr_ending (void) const
+{
+ return this->client_hdr_ending_;
+}
+
+void
+BE_GlobalData::client_inline_ending (const char* s)
+{
+ delete [] this->client_inline_ending_;
+ this->client_inline_ending_ = ACE::strnew (s);
+}
+
+const char*
+BE_GlobalData::client_inline_ending (void) const
+{
+ return this->client_inline_ending_;
+}
+
+// Set the client_stub_ending.
+void
+BE_GlobalData::client_stub_ending (const char* s)
+{
+ delete [] this->client_stub_ending_;
+ this->client_stub_ending_ = ACE::strnew (s);
+}
+
+const char*
+BE_GlobalData::client_stub_ending (void) const
+{
+ return this->client_stub_ending_;
+}
+
+void
+BE_GlobalData::server_hdr_ending (const char* s)
+{
+ delete [] this->server_hdr_ending_;
+ this->server_hdr_ending_ = ACE::strnew (s);
+}
+
+const char*
+BE_GlobalData::server_hdr_ending (void) const
+{
+ return this->server_hdr_ending_;
+}
+
+void
+BE_GlobalData::implementation_hdr_ending (const char* s)
+{
+ delete [] this->implementation_hdr_ending_;
+ this->implementation_hdr_ending_ = ACE::strnew (s);
+}
+
+void
+BE_GlobalData::implementation_skel_ending (const char* s)
+{
+ delete [] this->implementation_skel_ending_;
+ this->implementation_skel_ending_ = ACE::strnew (s);
+}
+
+void
+BE_GlobalData::impl_class_prefix (const char* s)
+{
+ delete [] this->impl_class_prefix_;
+ this->impl_class_prefix_ = ACE::strnew (s);
+}
+
+void
+BE_GlobalData::impl_class_suffix (const char* s)
+{
+ delete [] this->impl_class_suffix_;
+ this->impl_class_suffix_ = ACE::strnew (s);
+}
+
+const char*
+BE_GlobalData::impl_class_prefix (void) const
+{
+ return this->impl_class_prefix_;
+}
+
+const char*
+BE_GlobalData::implementation_hdr_ending (void) const
+{
+ return this->implementation_hdr_ending_;
+}
+
+const char*
+BE_GlobalData::impl_class_suffix (void) const
+{
+ return this->impl_class_suffix_;
+}
+
+const char*
+BE_GlobalData::implementation_skel_ending (void) const
+{
+ return this->implementation_skel_ending_;
+}
+
+void
+BE_GlobalData::server_template_hdr_ending (const char* s)
+{
+ delete [] this->server_template_hdr_ending_;
+ this->server_template_hdr_ending_ = ACE::strnew (s);
+}
+
+const char*
+BE_GlobalData::server_template_hdr_ending (void) const
+{
+ return this->server_template_hdr_ending_;
+}
+
+void
+BE_GlobalData::server_skeleton_ending (const char* s)
+{
+ delete [] this->server_skeleton_ending_;
+ this->server_skeleton_ending_ = ACE::strnew (s);
+}
+
+const char*
+BE_GlobalData::server_skeleton_ending (void) const
+{
+ return this->server_skeleton_ending_;
+}
+
+void
+BE_GlobalData::server_template_skeleton_ending (const char* s)
+{
+ delete [] this->server_template_skeleton_ending_;
+ this->server_template_skeleton_ending_ = ACE::strnew (s);
+}
+
+const char*
+BE_GlobalData::server_template_skeleton_ending (void) const
+{
+ return this->server_template_skeleton_ending_;
+}
+
+void
+BE_GlobalData::server_inline_ending (const char* s)
+{
+ delete [] this->server_inline_ending_;
+ this->server_inline_ending_ = ACE::strnew (s);
+}
+
+const char*
+BE_GlobalData::server_inline_ending (void) const
+{
+ return this->server_inline_ending_;
+}
+
+void
+BE_GlobalData::anyop_header_ending (const char* s)
+{
+ delete [] this->anyop_hdr_ending_;
+ this->anyop_hdr_ending_ = ACE::strnew (s);
+}
+
+void
+BE_GlobalData::use_clonable_in_args (bool clonable)
+{
+ this->use_clonable_in_args_ = clonable;
+}
+
+bool
+BE_GlobalData::use_clonable_in_args (void) const
+{
+ return this->use_clonable_in_args_;
+}
+
+bool
+BE_GlobalData::gen_template_export (void) const
+{
+ return this->gen_template_export_;
+}
+
+void
+BE_GlobalData::gen_template_export (bool val)
+{
+ this->gen_template_export_ = val;
+}
+
+const char*
+BE_GlobalData::anyop_header_ending (void) const
+{
+ return this->anyop_hdr_ending_;
+}
+
+void
+BE_GlobalData::anyop_source_ending (const char* s)
+{
+ delete [] this->anyop_src_ending_;
+ this->anyop_src_ending_ = ACE::strnew (s);
+}
+
+const char*
+BE_GlobalData::anyop_source_ending (void) const
+{
+ return this->anyop_src_ending_;
+}
+
+void
+BE_GlobalData::output_dir (const char* s)
+{
+ delete [] this->output_dir_;
+ this->output_dir_ = ACE::strnew (s);
+}
+
+const char*
+BE_GlobalData::output_dir (void) const
+{
+ return this->output_dir_;
+}
+
+void
+BE_GlobalData::skel_output_dir (const char* s)
+{
+ delete [] this->skel_output_dir_;
+ this->skel_output_dir_ = ACE::strnew (s);
+}
+
+const char*
+BE_GlobalData::skel_output_dir (void) const
+{
+ return this->skel_output_dir_;
+}
+
+void
+BE_GlobalData::anyop_output_dir (const char* s)
+{
+ delete [] this->anyop_output_dir_;
+ this->anyop_output_dir_ = ACE::strnew (s);
+}
+
+const char*
+BE_GlobalData::anyop_output_dir (void) const
+{
+ return this->anyop_output_dir_;
+}
+
+void
+BE_GlobalData::any_support (bool val)
+{
+ this->any_support_ = val;
+}
+
+bool
+BE_GlobalData::any_support (void) const
+{
+ return this->any_support_;
+}
+
+void
+BE_GlobalData::tc_support (bool val)
+{
+ this->tc_support_ = val;
+}
+
+bool
+BE_GlobalData::tc_support (void) const
+{
+ return this->tc_support_;
+}
+
+void
+BE_GlobalData::obv_opt_accessor (bool val)
+{
+ this->obv_opt_accessor_ = val;
+}
+
+bool
+BE_GlobalData::obv_opt_accessor (void) const
+{
+ return this->obv_opt_accessor_;
+}
+
+void
+BE_GlobalData::gen_impl_files (bool val)
+{
+ this->gen_impl_files_ = val;
+}
+
+bool
+BE_GlobalData::gen_impl_files (void) const
+{
+ return this->gen_impl_files_;
+}
+
+void
+BE_GlobalData::gen_impl_debug_info (bool val)
+{
+ this->gen_impl_debug_info_ = val;
+}
+
+bool
+BE_GlobalData::gen_impl_debug_info (void) const
+{
+ return this->gen_impl_debug_info_;
+}
+
+void
+BE_GlobalData::gen_copy_ctor (bool val)
+{
+ this->gen_copy_ctor_ = val;
+}
+
+bool
+BE_GlobalData::gen_copy_ctor (void) const
+{
+ return this->gen_copy_ctor_;
+}
+
+void
+BE_GlobalData::gen_assign_op (bool val)
+{
+ this->gen_assign_op_ = val;
+}
+
+bool
+BE_GlobalData::gen_assign_op (void) const
+{
+ return this->gen_assign_op_;
+}
+
+void
+BE_GlobalData::gen_thru_poa_collocation (bool val)
+{
+ this->gen_thru_poa_collocation_ = val;
+}
+
+bool
+BE_GlobalData::gen_thru_poa_collocation (void) const
+{
+ return this->gen_thru_poa_collocation_;
+}
+
+void
+BE_GlobalData::gen_direct_collocation (bool val)
+{
+ this->gen_direct_collocation_ = val;
+}
+
+bool
+BE_GlobalData::gen_direct_collocation (void) const
+{
+ return this->gen_direct_collocation_;
+}
+
+void
+BE_GlobalData::use_raw_throw (bool val)
+{
+ this->use_raw_throw_ = val;
+}
+
+bool
+BE_GlobalData::use_raw_throw (void) const
+{
+ return this->use_raw_throw_;
+}
+
+void
+BE_GlobalData::opt_tc (bool val)
+{
+ this->opt_tc_ = val;
+}
+
+bool
+BE_GlobalData::opt_tc (void) const
+{
+ return this->opt_tc_;
+}
+
+void
+BE_GlobalData::ami_call_back (bool val)
+{
+ this->ami_call_back_ = val;
+}
+
+bool
+BE_GlobalData::ami_call_back (void) const
+{
+ return this->ami_call_back_;
+}
+
+void
+BE_GlobalData::gen_amh_classes (bool val)
+{
+ this->gen_amh_classes_ = val;
+}
+
+bool
+BE_GlobalData::gen_amh_classes (void) const
+{
+ return this->gen_amh_classes_;
+}
+
+void
+BE_GlobalData::gen_tie_classes (bool val)
+{
+ this->gen_tie_classes_ = val;
+}
+
+bool
+BE_GlobalData::gen_tie_classes (void) const
+{
+ return this->gen_tie_classes_;
+}
+
+void
+BE_GlobalData::gen_smart_proxies (bool val)
+{
+ this->gen_smart_proxies_ = val;
+}
+
+bool
+BE_GlobalData::gen_smart_proxies (void) const
+{
+ return this->gen_smart_proxies_;
+}
+
+void
+BE_GlobalData::gen_inline_constants (bool val)
+{
+ this->gen_inline_constants_ = val;
+}
+
+bool
+BE_GlobalData::gen_inline_constants (void) const
+{
+ return this->gen_inline_constants_;
+}
+
+void
+BE_GlobalData::gen_dcps_type_support (bool val)
+{
+ this->gen_dcps_type_support_ = val;
+}
+
+bool
+BE_GlobalData::gen_dcps_type_support (void) const
+{
+ return this->gen_dcps_type_support_;
+}
+
+void
+BE_GlobalData::gen_orb_h_include (bool val)
+{
+ this->gen_orb_h_include_ = val;
+}
+
+bool
+BE_GlobalData::gen_orb_h_include (void) const
+{
+ return this->gen_orb_h_include_;
+}
+
+void
+BE_GlobalData::gen_empty_anyop_header (bool val)
+{
+ this->gen_empty_anyop_header_ = val;
+}
+
+bool
+BE_GlobalData::gen_empty_anyop_header (void) const
+{
+ return this->gen_empty_anyop_header_;
+}
+
+void
+BE_GlobalData::lookup_strategy (LOOKUP_STRATEGY s)
+{
+ this->lookup_strategy_ = s;
+}
+
+BE_GlobalData::LOOKUP_STRATEGY
+BE_GlobalData::lookup_strategy (void) const
+{
+ return this->lookup_strategy_;
+}
+
+void
+BE_GlobalData::destroy (void)
+{
+ ACE_OS::free (this->pch_include_);
+ this->pch_include_ = 0;
+
+ ACE_OS::free (this->pre_include_);
+ this->pre_include_ = 0;
+
+ ACE_OS::free (this->post_include_);
+ this->post_include_ = 0;
+
+ ACE_OS::free (this->include_guard_);
+ this->include_guard_ = 0;
+
+ ACE_OS::free (this->safe_include_);
+ this->safe_include_ = 0;
+
+ ACE_OS::free (this->unique_include_);
+ this->unique_include_ = 0;
+
+ delete [] this->client_hdr_ending_;
+ this->client_hdr_ending_ = 0;
+
+ delete [] this->client_stub_ending_;
+ this->client_stub_ending_ = 0;
+
+ delete [] this->client_inline_ending_;
+ this->client_inline_ending_ = 0;
+
+ delete [] this->server_hdr_ending_;
+ this->server_hdr_ending_ = 0;
+
+ delete [] this->implementation_hdr_ending_;
+ this->implementation_hdr_ending_ = 0;
+
+ delete [] this->implementation_skel_ending_;
+ this->implementation_skel_ending_ = 0;
+
+ delete [] this->impl_class_prefix_;
+ this->impl_class_prefix_ = 0;
+
+ delete [] this->impl_class_suffix_;
+ this->impl_class_suffix_ = 0;
+
+ delete [] this->server_template_hdr_ending_;
+ this->server_template_hdr_ending_ = 0;
+
+ delete [] this->server_skeleton_ending_;
+ this->server_skeleton_ending_ = 0;
+
+ delete [] this->server_template_skeleton_ending_;
+ this->server_template_skeleton_ending_ = 0;
+
+ delete [] this->server_inline_ending_;
+ this->server_inline_ending_ = 0;
+
+ delete [] this->anyop_hdr_ending_;
+ this->anyop_hdr_ending_ = 0;
+
+ delete [] this->anyop_src_ending_;
+ this->anyop_src_ending_ = 0;
+
+ delete [] this->output_dir_;
+ this->output_dir_ = 0;
+
+ delete [] this->anyop_output_dir_;
+ this->anyop_output_dir_ = 0;
+
+ if (0 != this->messaging_)
+ {
+ this->messaging_->destroy ();
+ delete this->messaging_;
+ this->messaging_ = 0;
+ }
+
+ if (0 != this->messaging_exceptionholder_)
+ {
+ this->messaging_exceptionholder_->destroy ();
+ delete this->messaging_exceptionholder_;
+ this->messaging_exceptionholder_ = 0;
+ }
+
+ if (0 != this->messaging_replyhandler_)
+ {
+ this->messaging_replyhandler_->destroy ();
+ delete this->messaging_replyhandler_;
+ this->messaging_replyhandler_ = 0;
+ }
+
+ if (0 != tao_cg)
+ {
+ tao_cg->destroy ();
+ }
+}
+
+AST_PredefinedType *
+BE_GlobalData:: void_type (void)
+{
+ if (0 == this->void_type_)
+ {
+ AST_Decl *d =
+ idl_global->scopes ().bottom ()->lookup_primitive_type (
+ AST_Expression::EV_void
+ );
+ this->void_type_ = AST_PredefinedType::narrow_from_decl (d);
+ }
+
+ return this->void_type_;
+}
+
+be_interface *
+BE_GlobalData::ccmobject (void)
+{
+ if (0 == this->ccmobject_)
+ {
+ Identifier *local_id = 0;
+ ACE_NEW_RETURN (local_id,
+ Identifier ("CCMObject"),
+ 0);
+ UTL_ScopedName *local_name = 0;
+ ACE_NEW_RETURN (local_name,
+ UTL_ScopedName (local_id, 0),
+ 0);
+
+ Identifier *module_id = 0;
+ ACE_NEW_RETURN (module_id,
+ Identifier ("Components"),
+ 0);
+ UTL_ScopedName sn (module_id,
+ local_name);
+
+ AST_Decl *d =
+ idl_global->scopes ().top_non_null ()->lookup_by_name (&sn,
+ true,
+ true,
+ true);
+
+ sn.destroy ();
+
+ if (0 == d)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%N:%l) be_global::ccmobject - "
+ "lookup of CCMObject failed\n"),
+ 0);
+ }
+
+ this->ccmobject_ = be_interface::narrow_from_decl (d);
+ }
+
+ return this->ccmobject_;
+}
+
+be_module *
+BE_GlobalData::messaging (void)
+{
+ if (0 == this->messaging_)
+ {
+ Identifier *id = 0;
+ UTL_ScopedName *sn = 0;
+
+ ACE_NEW_RETURN (id,
+ Identifier ("Messaging"),
+ 0);
+
+ ACE_NEW_RETURN (sn,
+ UTL_ScopedName (id,
+ 0),
+ 0);
+
+ ACE_NEW_RETURN (this->messaging_,
+ be_module (sn),
+ 0);
+
+ this->messaging_->set_name (sn);
+ }
+
+ return this->messaging_;
+}
+
+be_valuetype *
+BE_GlobalData::messaging_exceptionholder (void)
+{
+ if (0 == this->messaging_exceptionholder_)
+ {
+ Identifier *id = 0;
+ be_module *msg = this->messaging ();
+ idl_global->scopes ().push (msg);
+
+ ACE_NEW_RETURN (id,
+ Identifier ("Messaging"),
+ 0);
+
+ // Create a valuetype "ExceptionHolder"
+ // from which we inherit.
+ UTL_ScopedName *full_name = 0;
+ ACE_NEW_RETURN (full_name,
+ UTL_ScopedName (id,
+ 0),
+ 0);
+
+ ACE_NEW_RETURN (id,
+ Identifier ("ExceptionHolder"),
+ 0);
+
+ UTL_ScopedName *local_name = 0;
+ ACE_NEW_RETURN (local_name,
+ UTL_ScopedName (id,
+ 0),
+ 0);
+
+ full_name->nconc (local_name);
+
+ ACE_NEW_RETURN (this->messaging_exceptionholder_,
+ be_valuetype (full_name,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0),
+ 0);
+
+ this->messaging_exceptionholder_->set_name (full_name);
+
+ // Notice the valuetype "ExceptionHolder" that it is defined in the
+ // "Messaging" module
+ this->messaging_exceptionholder_->set_defined_in (msg);
+ this->messaging_exceptionholder_->set_prefix_with_typeprefix (
+ "omg.org"
+ );
+
+ idl_global->scopes ().pop ();
+
+ // Notice the interface "ReplyHandler" that it is defined in the
+ // "Messaging" module.
+ this->messaging_exceptionholder_->set_defined_in (msg);
+ }
+
+ return this->messaging_exceptionholder_;
+}
+
+be_valuetype *
+BE_GlobalData::exceptionholder (void) const
+{
+ return this->exceptionholder_;
+}
+
+void
+BE_GlobalData::exceptionholder (be_valuetype *val)
+{
+ this->exceptionholder_ = val;
+}
+
+be_interface *
+BE_GlobalData::messaging_replyhandler (void)
+{
+ if (0 == this->messaging_replyhandler_)
+ {
+ be_module *msg = this->messaging ();
+ idl_global->scopes ().push (msg);
+
+ Identifier *id = 0;
+ UTL_ScopedName *local_name = 0;
+
+ // Create a virtual module named "Messaging"
+ // "and an interface "ReplyHandler"
+ // from which we inherit.
+ ACE_NEW_RETURN (id,
+ Identifier ("Messaging"),
+ 0);
+
+ UTL_ScopedName *full_name = 0;
+ ACE_NEW_RETURN (full_name,
+ UTL_ScopedName (id,
+ 0),
+ 0);
+
+ ACE_NEW_RETURN (id,
+ Identifier ("ReplyHandler"),
+ 0);
+
+ ACE_NEW_RETURN (local_name,
+ UTL_ScopedName (id,
+ 0),
+ 0);
+
+ full_name->nconc (local_name);
+
+ ACE_NEW_RETURN (this->messaging_replyhandler_,
+ be_interface (full_name,
+ 0, // inherited interfaces
+ 0, // number of inherited interfaces
+ 0, // ancestors
+ 0, // number of ancestors
+ 0, // not local
+ 0), // not abstract
+ 0);
+
+ this->messaging_replyhandler_->set_name (full_name);
+ this->messaging_replyhandler_->set_prefix_with_typeprefix ("omg.org");
+
+ idl_global->scopes ().pop ();
+
+ // Notice the interface "ReplyHandler" that it is defined in the
+ // "Messaging" module.
+ this->messaging_replyhandler_->set_defined_in (msg);
+ }
+
+ return this->messaging_replyhandler_;
+}
+
+bool
+BE_GlobalData::gen_anyop_files (void) const
+{
+ return this->gen_anyop_files_;
+}
+
+void
+BE_GlobalData::gen_anyop_files (bool val)
+{
+ this->gen_anyop_files_ = val;
+}
+
+bool
+BE_GlobalData::gen_skel_files (void) const
+{
+ return this->gen_skel_files_;
+}
+
+void
+BE_GlobalData::gen_skel_files (bool val)
+{
+ this->gen_skel_files_ = val;
+}
+
+bool
+BE_GlobalData::gen_client_inline (void) const
+{
+ return this->gen_client_inline_;
+}
+
+void
+BE_GlobalData::gen_client_inline (bool val)
+{
+ this->gen_client_inline_ = val;
+}
+
+bool
+BE_GlobalData::gen_server_inline (void) const
+{
+ return this->gen_server_inline_;
+}
+
+void
+BE_GlobalData::gen_server_inline (bool val)
+{
+ this->gen_server_inline_ = val;
+}
+
+bool
+BE_GlobalData::gen_client_stub (void) const
+{
+ return this->gen_client_stub_;
+}
+
+void
+BE_GlobalData::gen_client_stub (bool val)
+{
+ this->gen_client_stub_ = val;
+}
+
+bool
+BE_GlobalData::gen_server_skeleton (void) const
+{
+ return this->gen_server_skeleton_;
+}
+
+void
+BE_GlobalData::gen_server_skeleton (bool val)
+{
+ this->gen_server_skeleton_ = val;
+}
+
+bool
+BE_GlobalData::gen_local_iface_anyops (void) const
+{
+ return this->gen_local_iface_anyops_;
+}
+
+void
+BE_GlobalData::gen_local_iface_anyops (bool val)
+{
+ this->gen_local_iface_anyops_ = val;
+}
+
+ACE_CString
+BE_GlobalData::spawn_options (void)
+{
+ return idl_global->idl_flags ();
+}
+
+void
+BE_GlobalData::parse_args (long &i, char **av)
+{
+ switch (av[i][1])
+ {
+ // = Various 'h'eader_file_name_endings.
+ case 'h':
+
+ // <-hc Client's header file name ending>
+ // Default is "C.h".
+ // <-hs Server's header file name ending>
+ // Default is "S.h".
+ // <-hT Server's template hdr file name ending>
+ // Default is "S_T.h".
+ // <-hI Server's implementation header file name ending>
+ // Default is "I.h".
+
+ if (av[i][2] == 'c')
+ {
+ // Client stub's header file ending.
+ // @@ No error handling done here.
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->client_hdr_ending (av[i + 1]);
+ ++i;
+ }
+ else if (av[i][2] == 's')
+ {
+ // Server skeleton's header file.
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->server_hdr_ending (av[i + 1]);
+ ++i;
+ }
+ else if (av[i][2] == 'T')
+ {
+ // Server template header ending.
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->server_template_hdr_ending (av[i + 1]);
+ ++i;
+ }
+ else if (av[i][2] == 'I')
+ {
+ // Server implementation header ending.
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->implementation_hdr_ending (av[i + 1]);
+ ++i;
+ }
+ else
+ {
+ // I expect 'c' or 's' or 'I' or 'T' after this.
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand the '%s' option\n"),
+ av[i]
+ ));
+ }
+
+ break;
+ case 'b':
+ if (av[i][2] == '\0')
+ {
+ be_global->use_clonable_in_args(true);
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand")
+ ACE_TEXT (" the '%s' option\n"),
+ av[i]
+ ));
+ }
+ break;
+ // = Various 'c'lient side stub file_name_endings.
+ case 'c':
+ // <-cs Client stub's file name ending>
+ // Default is "C.cpp".
+ // <-ci Client inline file name ending>
+ // Default is "C.inl".
+
+ if (av[i][2] == 's')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->client_stub_ending (av[i + 1]);
+ i++;
+ }
+ else if (av[i][2] == 'i')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->client_inline_ending (av[i + 1]);
+ i++;
+ }
+ else
+ {
+ // I expect 's' or 'i' after 'c'.
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand the '%s' option\n"),
+ av[i]
+ ));
+ }
+
+ break;
+ // = Various 's'erver side skeleton file name endings.
+ case 's':
+ // <-ss Server's skeleton file name ending>
+ // Default is "S.cpp".
+ // <-sT Server's template skeleton file name ending>
+ // Default is "S_T.cpp".
+ // <-si Server's inline file name ending>
+ // Default is "S.inl".
+ // <-sI Server's implementation skeleton file name ending>
+ // Default is "I.cpp".
+
+ if (av[i][2] == 's')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->server_skeleton_ending (av[i + 1]);
+ ++i;
+ }
+ else if (av[i][2] == 'T')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->server_template_skeleton_ending (av[i + 1]);
+ ++i;
+ }
+ else if (av[i][2] == 'i')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->server_inline_ending (av[i + 1]);
+ ++i;
+ }
+ else if (av[i][2] == 'I')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->implementation_skel_ending (av[i + 1]);
+ ++i;
+ }
+ else
+ {
+ // I expect 's' or 'T' or 'i' or 't' after 's'.
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand the '%s' option\n"),
+ av[i]
+ ));
+ }
+
+ break;
+ // Operation lookup strategy.
+ // <perfect_hash>, <dynamic_hash> or <binary_search>
+ // Default is perfect.
+ case 'H':
+ idl_global->append_idl_flag (av[i + 1]);
+
+ if (av[i + 1] == 0 || av[i + 1][0] == '-')
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("no selection for -H option\n")));
+ }
+ else if (ACE_OS::strcmp (av[i+1], "dynamic_hash") == 0)
+ {
+ be_global->lookup_strategy (
+ BE_GlobalData::TAO_DYNAMIC_HASH
+ );
+ }
+ else if (ACE_OS::strcmp (av[i + 1], "perfect_hash") == 0)
+ {
+ be_global->lookup_strategy (
+ BE_GlobalData::TAO_PERFECT_HASH
+ );
+ }
+ else if (ACE_OS::strcmp (av[i + 1], "binary_search") == 0)
+ {
+ be_global->lookup_strategy (
+ BE_GlobalData::TAO_BINARY_SEARCH
+ );
+ }
+ else if (ACE_OS::strcmp (av[i + 1], "linear_search") == 0)
+ {
+ be_global->lookup_strategy (
+ BE_GlobalData::TAO_LINEAR_SEARCH
+ );
+ }
+ else
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("%s: unknown operation lookup <%s>\n"),
+ av[0],
+ av[i + 1]));
+ }
+
+ ++i;
+ break;
+ // Switching between ""s and <>s when we generate
+ // #include statements for the standard files (e.g. tao/corba.h)
+ case 'i':
+ if (av[i][2] == 'c')
+ {
+ be_global->changing_standard_include_files (1);
+ }
+ else if (av[i][2] == 'n')
+ {
+ be_global->changing_standard_include_files (0);
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand the '%s' option\n"),
+ av[i]
+ ));
+ }
+
+ break;
+ // Path for the perfect hash generator(gperf) program. Default
+ // is $ACE_ROOT/bin/gperf.
+ case 'g':
+ if (av[i][2] == '\0')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ ACE_CString tmp (av[i + 1], 0, 0);
+#if defined (ACE_WIN32)
+ // WIN32's CreateProcess needs the full executable name
+ // when the gperf path is modified, but not for the default
+ // path given above. Other platforms don't need the
+ // executable name at all.
+ tmp += "\\gperf.exe";
+#endif
+ idl_global->gperf_path (tmp.fast_rep ());
+ ++i;
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand")
+ ACE_TEXT (" the '%s' option\n"),
+ av[i]
+ ));
+ }
+
+ break;
+ // Directory where all the IDL-Compiler-Generated files are to
+ // be kept. Default is the current directory from which the
+ // <tao_idl> is called.
+ case 'o':
+ if (av[i][2] == '\0')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ int result = ACE_OS::mkdir (av[i + 1]);
+
+ #if !defined (__BORLANDC__)
+ if (result != 0 && errno != EEXIST)
+ #else
+ // The Borland RTL doesn't give EEXIST back, only EACCES in case
+ // the directory exists, reported to Borland as QC 9495
+ if (result != 0 && errno != EEXIST && errno != EACCES)
+ #endif
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: unable to create directory %s")
+ ACE_TEXT (" specified by -o option\n"),
+ av[i + 1]
+ ));
+
+ break;
+ }
+
+ be_global->output_dir (av[i + 1]);
+ ++i;
+ }
+ else if (av[i][2] == 'A')
+ {
+ if (av[i][3] == '\0')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ int result = ACE_OS::mkdir (av[i + 1]);
+
+ #if !defined (__BORLANDC__)
+ if (result != 0 && errno != EEXIST)
+ #else
+ // The Borland RTL doesn't give EEXIST back, only EACCES in
+ // case the directory exists, reported to Borland as QC 9495
+ if (result != 0 && errno != EEXIST && errno != EACCES)
+ #endif
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: unable to create directory %s")
+ ACE_TEXT (" specified by -oA option\n"),
+ av[i + 1]
+ ));
+
+ break;
+ }
+
+ be_global->anyop_output_dir (av[i + 1]);
+ ++i;
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand")
+ ACE_TEXT (" the '%s' option\n"),
+ av[i]
+ ));
+ }
+ }
+ else if (av[i][2] == 'S')
+ {
+ if (av[i][3] == '\0')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ int result = ACE_OS::mkdir (av[i + 1]);
+
+ #if !defined (__BORLANDC__)
+ if (result != 0 && errno != EEXIST)
+ #else
+ // The Borland RTL doesn't give EEXIST back, only EACCES in
+ // case the directory exists, reported to Borland as QC 9495
+ if (result != 0 && errno != EEXIST && errno != EACCES)
+ #endif
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: unable to create directory %s")
+ ACE_TEXT (" specified by -oS option\n"),
+ av[i + 1]
+ ));
+
+ break;
+ }
+
+ be_global->skel_output_dir (av[i + 1]);
+ ++i;
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand")
+ ACE_TEXT (" the '%s' option\n"),
+ av[i]
+ ));
+ }
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand")
+ ACE_TEXT (" the '%s' option\n"),
+ av[i]
+ ));
+ }
+
+ break;
+ case 'G':
+ // Enable generation of ...
+ if (av[i][2] == 'C')
+ {
+ // AMI with Call back.
+ be_global->ami_call_back (true);
+ }
+ else if (av[i][2] == 'T')
+ {
+ // Generate tie classes and files
+ be_global->gen_tie_classes (true);
+ }
+ else if (av[i][2] == 'H')
+ {
+ // AMH classes.
+ be_global->gen_amh_classes (true);
+ }
+ else if (av[i][2] == 'X')
+ {
+ // Generate empty A.h file.
+ be_global->gen_empty_anyop_header (true);
+ }
+ else if (av[i][2] == 'A')
+ {
+ // TAO-team-only, undocumented option to generate
+ // Any operators into a separate set of files.
+ be_global->gen_anyop_files (true);
+ }
+ else if (av[i][2] == 'e')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ int option = ACE_OS::atoi (av[i + 1]);
+
+ // Use of raw 'throw'.
+ be_global->use_raw_throw (option == 2);
+ ++i;
+ }
+ else if (av[i][2] == 's')
+ {
+ if (av[i][3] == 'p')
+ {
+ // Smart proxies.
+ be_global->gen_smart_proxies (true);
+ }
+ else if (av[i][3] == 'e')
+ {
+ // Explicit sequence base class template export.
+ be_global->gen_template_export (true);
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand ")
+ ACE_TEXT ("the '%s' option\n"),
+ av[i]
+ ));
+ }
+
+ break;
+ }
+ else if (av[i][2] == 'u')
+ {
+ if (av[i][3] == 'c')
+ {
+ // Inline constants.
+ be_global->gen_inline_constants (false);
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand ")
+ ACE_TEXT ("the '%s' option\n"),
+ av[i]
+ ));
+ }
+
+ break;
+ }
+ else if (av[i][2] == 't')
+ {
+ // Optimized typecode generation.
+ be_global->opt_tc (1);
+ }
+ else if (av[i][2] == 'p')
+ {
+ // Generating Thru_POA collocated stubs.
+ be_global->gen_thru_poa_collocation (true);
+ }
+ else if (av[i][2] == 'd')
+ {
+ if (av[i][3] == 'c')
+ {
+ if (av[i][4] == 'p' && av[i][5] =='s' && '\0' == av[i][6])
+ {
+ // DDS DCSP type support.
+ be_global->gen_dcps_type_support (true);
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand ")
+ ACE_TEXT ("the '%s' option\n"),
+ av[i]
+ ));
+ }
+ }
+ else if ('\0' == av[i][3])
+ {
+ // Generating Direct collocated stubs.
+ be_global->gen_direct_collocation (true);
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand ")
+ ACE_TEXT ("the '%s' option\n"),
+ av[i]
+ ));
+ }
+ }
+ else if (av[i][2] == 'I')
+ {
+ size_t options = ACE_OS::strlen (av[i]) - 3;
+ size_t j;
+ size_t k = i;
+ // Generate implementation files.
+ be_global->gen_impl_files (1);
+
+ for (j = 0; j < options; ++j)
+ {
+ if (av[k][j + 3] == 's')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->implementation_skel_ending (av[i + 1]);
+ ++i;
+ }
+ else if (av[k][j + 3] == 'h')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->implementation_hdr_ending (av[i + 1]);
+ ++i;
+ }
+ else if (av[k][j + 3] == 'b')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->impl_class_prefix (av[i + 1]);
+ ++i;
+ }
+ else if (av[k][j + 3] == 'e')
+ {
+ idl_global->append_idl_flag (av[i + 1]);
+ be_global->impl_class_suffix (av[i + 1]);
+ ++i;
+ }
+ else if (av[k][j + 3] == 'c')
+ {
+ be_global->gen_copy_ctor (true);
+ }
+ else if (av[k][j + 3] == 'a')
+ {
+ be_global->gen_assign_op (true);
+ }
+ else if (av[k][j + 3] == 'd')
+ {
+ be_global->gen_impl_debug_info (true);
+ }
+ else if (isalpha (av[k][j + 3] ))
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand")
+ ACE_TEXT (" the '%s' option\n"),
+ av[i]
+ ));
+
+ idl_global->set_compile_flags (
+ idl_global->compile_flags ()
+ | IDL_CF_ONLY_USAGE
+ );
+ }
+ }
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand the '%s' option\n"),
+ av[i]
+ ));
+ }
+
+ break;
+ case 'S':
+ // Suppress generation of...
+ if (av[i][2] == 'a')
+ {
+ if (av[i][3] == 'l')
+ {
+ // Suppress Any support for local interfaces.
+ be_global->gen_local_iface_anyops (false);
+ }
+ else
+ {
+ // Suppress all Any support.
+ be_global->any_support (false);
+ }
+ }
+ else if (av[i][2] == 'o' && av[i][3] == 'r' && av[i][4] =='b' && '\0' == av[i][5])
+ {
+ be_global->gen_orb_h_include (false);
+ }
+ else if (av[i][2] == 't')
+ {
+ // Suppress typecode generation
+ // Anys must be suppressed as well.
+ be_global->tc_support (false);
+ be_global->any_support (false);
+ }
+ else if (av[i][2] == 'p')
+ {
+ // Suppress generating Thru_POA collocated stubs.
+ be_global->gen_thru_poa_collocation (false);
+ }
+ else if (av[i][2] == 'd')
+ {
+ // sSppress generating Direct collocated stubs.
+ be_global->gen_direct_collocation (false);
+ }
+ else if (av[i][2] == 'c')
+ {
+ if (av[i][3] == 'i')
+ {
+ // No stub inline.
+ be_global->gen_client_inline (false);
+ }
+ else if (av[i][3] == 'c')
+ {
+ // No stub inline.
+ be_global->gen_client_stub (false);
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand the '%s' option\n"),
+ av[i]
+ ));
+ }
+ }
+ else if (av[i][2] == 'm')
+ {
+ // Turn off ccm preprocessing.
+ idl_global->ignore_idl3 (true);
+ }
+ else if (av[i][2] == 'S')
+ {
+ if ('\0' == av[i][3])
+ {
+ // Disable skeleton file generation.
+ be_global->gen_skel_files (false);
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand the '%s' option\n"),
+ av[i]
+ ));
+ }
+ }
+ else if (av[i][2] == 's')
+ {
+ if (av[i][3] == 'i')
+ {
+ // No skeleton inline.
+ be_global->gen_server_inline (false);
+ }
+ else if (av[i][3] == 'c')
+ {
+ // No skeleton inline.
+ be_global->gen_server_skeleton (false);
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand the '%s' option\n"),
+ av[i]
+ ));
+ }
+ }
+ else
+ {
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand the '%s' option\n"),
+ av[i]
+ ));
+ }
+
+ break;
+ default:
+ ACE_ERROR ((
+ LM_ERROR,
+ ACE_TEXT ("IDL: I don't understand the '%s' option\n"),
+ av[i]
+ ));
+
+ idl_global->set_compile_flags (idl_global->compile_flags ()
+ | IDL_CF_ONLY_USAGE);
+ break;
+ }
+}
+
+// Prepare an argument for a BE
+void
+BE_GlobalData::prep_be_arg (char *s)
+{
+ static const char arg_macro[] = "export_macro=";
+ static const char arg_include[] = "export_include=";
+ static const char skel_arg_macro[] = "skel_export_macro=";
+ static const char skel_arg_include[] = "skel_export_include=";
+ static const char stub_arg_macro[] = "stub_export_macro=";
+ static const char stub_arg_include[] = "stub_export_include=";
+ static const char anyop_arg_macro[] = "anyop_export_macro=";
+ static const char anyop_arg_include[] = "anyop_export_include=";
+ static const char arg_pch_include[] = "pch_include=";
+ static const char arg_pre_include[] = "pre_include=";
+ static const char arg_post_include[] = "post_include=";
+ static const char arg_versioning_begin[] = "versioning_begin=";
+ static const char arg_versioning_end[] = "versioning_end=";
+ static const char obv_opt_accessor[] = "obv_opt_accessor";
+ static const char include_guard[] = "include_guard=";
+ static const char safe_include[] = "safe_include=";
+ static const char unique_include[] = "unique_include=";
+
+ char* last = 0;
+
+ for (char* arg = ACE_OS::strtok_r (s, ",", &last);
+ arg != 0;
+ arg = ACE_OS::strtok_r (0, ",", &last))
+ {
+ if (ACE_OS::strstr (arg, arg_macro) == arg)
+ {
+ char* val = arg + sizeof (arg_macro) - 1;
+ be_global->skel_export_macro (val);
+ be_global->stub_export_macro (val);
+ be_global->anyop_export_macro (val);
+ }
+ else if (ACE_OS::strstr (arg, arg_include) == arg)
+ {
+ char* val = arg + sizeof (arg_include) - 1;
+ be_global->stub_export_include (val);
+ }
+ else if (ACE_OS::strstr (arg, skel_arg_macro) == arg)
+ {
+ char* val = arg + sizeof (skel_arg_macro) - 1;
+ be_global->skel_export_macro (val);
+ }
+ else if (ACE_OS::strstr (arg, skel_arg_include) == arg)
+ {
+ char* val = arg + sizeof (skel_arg_include) - 1;
+ be_global->skel_export_include (val);
+ }
+ else if (ACE_OS::strstr (arg, stub_arg_macro) == arg)
+ {
+ char* val = arg + sizeof (stub_arg_macro) - 1;
+ be_global->stub_export_macro (val);
+ }
+ else if (ACE_OS::strstr (arg, stub_arg_include) == arg)
+ {
+ char* val = arg + sizeof (stub_arg_include) - 1;
+ be_global->stub_export_include (val);
+ }
+ else if (ACE_OS::strstr (arg, anyop_arg_macro) == arg)
+ {
+ char* val = arg + sizeof (anyop_arg_macro) - 1;
+ be_global->anyop_export_macro (val);
+ }
+ else if (ACE_OS::strstr (arg, anyop_arg_include) == arg)
+ {
+ char* val = arg + sizeof (anyop_arg_include) - 1;
+ be_global->anyop_export_include (val);
+ }
+ else if (ACE_OS::strstr (arg, arg_pch_include) == arg)
+ {
+ char* val = arg + sizeof (arg_pch_include) - 1;
+ be_global->pch_include (val);
+ }
+ else if (ACE_OS::strstr (arg, arg_pre_include) == arg)
+ {
+ char* val = arg + sizeof (arg_pre_include) - 1;
+ be_global->pre_include (val);
+ }
+ else if (ACE_OS::strstr (arg, arg_post_include) == arg)
+ {
+ char* val = arg + sizeof (arg_post_include) - 1;
+ be_global->post_include (val);
+ }
+ else if (ACE_OS::strstr (arg, include_guard) == arg)
+ {
+ char* val = arg + sizeof (include_guard) - 1;
+ be_global->include_guard (val);
+ }
+ else if (ACE_OS::strstr (arg, safe_include) == arg)
+ {
+ char* val = arg + sizeof (safe_include) - 1;
+ be_global->safe_include (val);
+ }
+ else if (ACE_OS::strstr (arg, unique_include) == arg)
+ {
+ char* val = arg + sizeof (unique_include) - 1;
+ be_global->unique_include (val);
+ }
+ else if (ACE_OS::strstr (arg, obv_opt_accessor) == arg)
+ {
+ be_global->obv_opt_accessor (1);
+ }
+ else if (ACE_OS::strstr (arg, arg_versioning_begin) == arg)
+ {
+ char const * const val = arg + sizeof (arg_versioning_begin) - 1;
+ be_global->versioning_begin (val);
+ }
+ else if (ACE_OS::strstr (arg, arg_versioning_end) == arg)
+ {
+ char const * const val = arg + sizeof (arg_versioning_end) - 1;
+ be_global->versioning_end (val);
+ }
+ else
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("%s%s%s%s"),
+ idl_global->prog_name (),
+ ACE_TEXT (": invalid or unknown argument <"),
+ arg,
+ ACE_TEXT ("> to back end\n")));
+ }
+ }
+}
+
+void
+BE_GlobalData::arg_post_proc (void)
+{
+ // Let us try to use Perfect Hashing Operation Lookup Strategy. Let
+ // us check whether things are fine with GPERF.
+#if defined (ACE_HAS_GPERF)
+ // If Perfect Hashing or Binary Search or Linear Search strategies
+ // have been selected, let us make sure that it exists and will
+ // work.
+ if ((be_global->lookup_strategy () == BE_GlobalData::TAO_PERFECT_HASH) ||
+ (be_global->lookup_strategy () == BE_GlobalData::TAO_BINARY_SEARCH) ||
+ (be_global->lookup_strategy () == BE_GlobalData::TAO_LINEAR_SEARCH))
+ {
+ // Testing whether GPERF works or no.
+ int return_value = idl_global->check_gperf ();
+ if (return_value == -1)
+ {
+ // If gperf_path is an absolute path, try to call this
+ // again with
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT ("TAO_IDL: warning, GPERF could not be executed\n")
+ ACE_TEXT ("Perfect Hashing or Binary/Linear Search cannot be")
+ ACE_TEXT (" done without GPERF\n")
+ ACE_TEXT ("Now, using Dynamic Hashing..\n")
+ ACE_TEXT ("To use Perfect Hashing or Binary/Linear")
+ ACE_TEXT (" Search strategy\n")
+ ACE_TEXT ("\t-Build gperf at $ACE_ROOT/apps/gperf/src\n")
+ ACE_TEXT ("\t-Set the environment variable $ACE_ROOT")
+ ACE_TEXT (" appropriately or add $ACE_ROOT/bin to the PATH\n")
+ ACE_TEXT ("\t-Refer to Operation Lookup section in the TAO IDL")
+ ACE_TEXT (" User Guide ($TAO_ROOT/docs/compiler.html)")
+ ACE_TEXT (" for more details\n")
+ ));
+
+ // Switching over to Dynamic Hashing.
+ be_global->lookup_strategy (BE_GlobalData::TAO_DYNAMIC_HASH);
+ }
+ }
+#else /* Not ACE_HAS_GPERF */
+ // If GPERF is not there, we cannot use PERFECT_HASH strategy. Let
+ // us go for DYNAMIC_HASH.
+ if ((be_global->lookup_strategy () == BE_GlobalData::TAO_PERFECT_HASH) ||
+ (be_global->lookup_strategy () == BE_GlobalData::TAO_BINARY_SEARCH) ||
+ (be_global->lookup_strategy () == BE_GlobalData::TAO_LINEAR_SEARCH))
+ {
+ be_global->lookup_strategy (BE_GlobalData::TAO_DYNAMIC_HASH);
+ }
+#endif /* ACE_HAS_GPERF */
+
+ // Make sure that we are not suppressing TypeCode generation and asking for
+ // optimized typecode support at the same time.
+ if (!be_global->tc_support () && be_global->opt_tc ())
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("Bad Combination -St and -Gt \n")));
+ }
+}
+
+void
+BE_GlobalData::usage (void) const
+{
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,export_macro=<macro name>\t\t\tsets export macro ")
+ ACE_TEXT ("for all files\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,export_include=<include path>\t\tsets export include ")
+ ACE_TEXT ("file for all files\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,stub_export_macro=<macro name>\t\tsets export ")
+ ACE_TEXT ("macro for client files only\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,stub_export_include=<include path>\t\tsets export ")
+ ACE_TEXT ("include file for client only\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,skel_export_macro=<macro name>\t\tsets export ")
+ ACE_TEXT ("macro for server files only\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,skel_export_include=<include path>\t\tsets export ")
+ ACE_TEXT ("include file for server only\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,anyop_export_macro=<macro name>\t\tsets export macro ")
+ ACE_TEXT ("for typecode/Any operator files only, when -GA option ")
+ ACE_TEXT ("is used\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,anyop_export_include=<include path>\tsets export ")
+ ACE_TEXT ("include file typecode/Any operator files only, when -GA ")
+ ACE_TEXT ("option is used\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,pch_include=<include path>\t\t\tsets include ")
+ ACE_TEXT ("file for precompiled header mechanism\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,pre_include=<include path>\t\t\tsets include ")
+ ACE_TEXT ("file generate before any other includes\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,post_include=<include path>\t\tsets include ")
+ ACE_TEXT ("file generated at the end of the file\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,include_guard=<include path>\t\tguard to prevent ")
+ ACE_TEXT ("the generated client header file\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,safe_include=<include path>\t\tinclude that should ")
+ ACE_TEXT ("be used instead of the own generated client header file\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,unique_include=<include path>\t\tinclude that should ")
+ ACE_TEXT ("be generated as only contents of the generated client ")
+ ACE_TEXT ("header file.\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,obv_opt_accessor\t\t\t\toptimizes access to base class ")
+ ACE_TEXT ("data in valuetypes\n")
+ ));
+#if (defined (ACE_HAS_VERSIONED_NAMESPACE) \
+ && ACE_HAS_VERSIONED_NAMESPACE == 1) \
+ || (defined (TAO_HAS_VERSIONED_NAMESPACE) \
+ && TAO_HAS_VERSIONED_NAMESPACE == 1)
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,versioning_begin\t\t\tSet text that opens a ")
+ ACE_TEXT ("a \"versioned\" namespace\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Wb,versioning_end\t\t\tSet text that closes a ")
+ ACE_TEXT ("a \"versioned\" namespace\n")
+ ));
+#endif /* ACE_HAS_VERSIONED_NAMESPACE || TAO_HAS_VERSIONED_NAMESPACE */
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -b\t\t\tUse a clonable argument type for oneway methods.\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -ci\t\t\tClient inline file name ending. Default is C.inl\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -cs\t\t\tClient stub's file name ending.")
+ ACE_TEXT (" Default is C.cpp\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -g <gperf_path>\tPath for the GPERF program.")
+ ACE_TEXT (" Default is $ACE_ROOT/bin/gperf\n")));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -GC \t\t\tGenerate the AMI classes\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -GH \t\t\tGenerate the AMH classes\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Gd \t\t\tGenerate the code for direct collocation. Default ")
+ ACE_TEXT ("is thru-POA collocation\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Ge 2\t\t\tUse raw throw instead of ACE_THROW macro")
+ ACE_TEXT (" (disabled by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -GI[h|s|b|e|c|a|d]\tGenerate Implementation Files \n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" \t\t\th - Implementation header file name ending.")
+ ACE_TEXT (" Default is I.h \n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" \t\t\ts - Implementation skeleton file name ending.")
+ ACE_TEXT (" Default is I.cpp\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" \t\t\tb - Prefix to the implementation class names.")
+ ACE_TEXT (" Default is 'no prefix' \n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" \t\t\te - Suffix to the implementation class names.")
+ ACE_TEXT (" Default is _i\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" \t\t\tc - Generate copy constructors in the servant")
+ ACE_TEXT (" implementation template files (off by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" \t\t\ta - Generate assignment operators in the servant")
+ ACE_TEXT (" implementation template files (off by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" \t\t\td - Generate debug (source file/line#) information.")
+ ACE_TEXT (" (off by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Gp \t\t\tGenerate the code for thru-POA collocation")
+ ACE_TEXT (" (default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Gsp\t\t\tGenerate the code for Smart Proxies\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Gt\t\t\tenable optimized TypeCode support")
+ ACE_TEXT (" (unopt by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -GT\t\t\tgenerate tie class (and file)")
+ ACE_TEXT (" generation (disabled by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" \t\t\tNo effect if TypeCode generation is suppressed\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -GA\t\t\tgenerate Any operator and type codes in *A.{h,cpp}")
+ ACE_TEXT (" (generated in *C.{h,cpp} by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Guc\t\t\tgenerate uninlined constant if declared ")
+ ACE_TEXT ("in a module (inlined by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Gse\t\t\tgenerate explicit export of sequence's ")
+ ACE_TEXT ("template base class (not generated by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -hc\t\t\tClient's header file name ending.")
+ ACE_TEXT (" Default is C.h\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -hs\t\t\tServer's header file name ending.")
+ ACE_TEXT (" Default is S.h\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -hT\t\t\tServer's template hdr file name ending.")
+ ACE_TEXT (" Default is S_T.h\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -H perfect_hash\tTo force perfect hashed operation")
+ ACE_TEXT (" lookup strategy (default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -H dynamic_hash\tTo force dynamic hashed operation")
+ ACE_TEXT (" lookup strategy. Default is perfect hashing\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -H linear_search\tTo force linear search operation")
+ ACE_TEXT (" lookup strategy\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -H binary_search\tTo force binary search operation")
+ ACE_TEXT (" lookup strategy\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -in \t\t\tTo generate <>s for standard #include'd")
+ ACE_TEXT (" files (non-changing files)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -ic \t\t\tTo generate \"\"s for standard #include'd")
+ ACE_TEXT (" files (changing files)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -o <output_dir>\tOutput directory for the generated files.")
+ ACE_TEXT (" Default is current directory\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -oS <output_dir>\tOutput directory for the generated ")
+ ACE_TEXT ("skeleton files. Default is -o value or current directory\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -oA <output_dir>\tOutput directory for the generated anyop")
+ ACE_TEXT ("files. Default is -o value or current directory\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -si\t\t\tServer's inline file name ending.")
+ ACE_TEXT (" Default is S.inl\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -ss\t\t\tServer's skeleton file name ending.")
+ ACE_TEXT (" Default is S.cpp\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -sT\t\t\tServer's template skeleton file name ending.")
+ ACE_TEXT (" Default is S_T.cpp\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Sa\t\t\tsuppress Any support")
+ ACE_TEXT (" (support enabled by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Sal\t\t\tsuppress Any support")
+ ACE_TEXT (" for local interfaces")
+ ACE_TEXT (" (support enabled by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -St\t\t\tsuppress TypeCode support")
+ ACE_TEXT (" (support enabled by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Sp\t\t\tsuppress generating Thru POA collocated")
+ ACE_TEXT (" stubs (enabled by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Sd\t\t\tsuppress generating Direct collocated")
+ ACE_TEXT (" stubs (disable by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Sm\t\t\tdisable IDL3 equivalent IDL preprocessing")
+ ACE_TEXT (" (enabled by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -SS\t\t\tsuppress generating skeleton implementation")
+ ACE_TEXT (" and inline file (disabled by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Sci\t\t\tsuppress generating client inline file")
+ ACE_TEXT (" (disabled by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Ssi\t\t\tsuppress generating server inline file")
+ ACE_TEXT (" (disabled by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
+ ACE_TEXT (" -Sorb\t\t\tsuppress generating include of ORB.h")
+ ACE_TEXT (" (disabled by default)\n")
+ ));
+}
+
+AST_Generator *
+BE_GlobalData::generator_init (void)
+{
+ tao_cg = TAO_CODEGEN::instance ();
+ tao_cg->config_visitor_factory ();
+
+ AST_Generator *gen = 0;
+ ACE_NEW_RETURN (gen,
+ be_generator,
+ 0);
+
+ return gen;
+}