summaryrefslogtreecommitdiff
path: root/ACE/apps/soreduce/Library.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/soreduce/Library.h')
-rw-r--r--ACE/apps/soreduce/Library.h128
1 files changed, 128 insertions, 0 deletions
diff --git a/ACE/apps/soreduce/Library.h b/ACE/apps/soreduce/Library.h
new file mode 100644
index 00000000000..af978c61f74
--- /dev/null
+++ b/ACE/apps/soreduce/Library.h
@@ -0,0 +1,128 @@
+// -*- C++ -*-
+#ifndef _LIBRARY_H_
+#define _LIBRARY_H_
+
+// -*- C++ -*-
+// $Id$
+
+// File: Library.h
+
+// Author: Phil Mesnier
+
+// A Library is a collection of Obj_Modules that define a single shared
+// library. It is used to manipulate the list of unresolved references by
+// removing those that are resolved and adding those brought in by new modules
+// that are required to resolve references. The Library is responsible
+// for outputting a specialized mpc file to build the reduce footprint library.
+
+#include "Obj_Module.h"
+
+// FUZZ: disable check_for_streams_include
+#include "ace/streams.h"
+
+// The MPC generator class serves as the base class used to output the
+// custom mpc files used to build the subsetted libraries.
+// The base class will make libACE_subset.so
+
+class MPC_Generator
+{
+public:
+ MPC_Generator (const ACE_CString& libname);
+ virtual ~MPC_Generator();
+
+ void write_prolog (const ACE_CString& );
+ void write_file (const ACE_CString& );
+ void write_epilog ();
+
+protected:
+ virtual void write_baseprojects();
+ virtual void write_projectinfo();
+
+ ofstream mpcfile_;
+ ACE_CString libname_;
+ ACE_CString mpcfilename_;
+};
+
+// Generate mpc files for libraries dependant on ACE, that are not TAO.
+class MPC_ACE_Dep_Lib : public MPC_Generator
+{
+public:
+ MPC_ACE_Dep_Lib (const ACE_CString& libname);
+
+protected:
+ virtual void write_baseprojects();
+ virtual void write_projectinfo();
+};
+
+// Generates mpc files for libTAO_subset.so
+class MPC_TAO_Lib : public MPC_ACE_Dep_Lib
+{
+public:
+ MPC_TAO_Lib (const ACE_CString& libname);
+
+protected:
+ virtual void write_baseprojects();
+ virtual void write_projectinfo();
+};
+
+// Generates makefiles for libs dependant on TAO. This has a problem when
+// building libraries in the orbsvcs tree.
+class MPC_TAO_Dep_Lib : public MPC_TAO_Lib
+{
+public:
+ MPC_TAO_Dep_Lib (const ACE_CString& );
+
+protected:
+ virtual void write_baseprojects();
+ virtual void write_projectinfo();
+};
+
+//----------------------------------------------------------------------------
+
+class Library
+{
+public:
+
+ Library (const ACE_TCHAR *name = 0 );
+ /// Constructor is responsible for loading all of the modules related to the
+ /// library
+ ~Library ();
+
+ // Resolve interates over the supplied list of undefined signatures to locate
+ // modules that contain definitions. Any symbol defined in a module marked as
+ // exported is simply removed from the undef list. Any symbol defined in a
+ // module not yet exported removed from the undef list, the module is marked
+ // as exported, and its unresolved symbols are added to the undef list.
+ void resolve (Sig_List &undefs);
+
+ // Outputs a list of files suitable for inclusion in an mpc file to produce
+ // a subsetted library. If the argument is non-zero, reference countes for
+ // each module are also listed.
+ void write_export_list ( int );
+
+ // set the path to find the .so files
+ void set_path (const ACE_TCHAR *p );
+
+ // Load the actual .so files from the path.
+ void load_modules();
+
+ // returns the library name
+ const ACE_CString &name () const;
+
+ // returns non-zero if the module count is > 0.
+ int has_modules () const;
+
+private:
+ ACE_CString name_;
+ ACE_CString path_;
+
+ int num_modules_;
+ int num_exports_;
+ int num_extrefs_;
+
+ Obj_Module **modules_;
+ Sig_List exported_;
+ MPC_Generator *mpcfile_;
+};
+
+#endif /* _LIBRARY_H_ */