summaryrefslogtreecommitdiff
path: root/ACE/apps/soreduce
diff options
context:
space:
mode:
authorWilliam R. Otte <wotte@dre.vanderbilt.edu>2008-03-04 13:56:48 +0000
committerWilliam R. Otte <wotte@dre.vanderbilt.edu>2008-03-04 13:56:48 +0000
commitc4078c377d74290ebe4e66da0b4975da91732376 (patch)
tree1816ef391e42a07929304908ac0e21f4c2f6cb7b /ACE/apps/soreduce
parent700d1c1a6be348c6c70a2085e559baeb8f4a62ea (diff)
downloadATCD-c4078c377d74290ebe4e66da0b4975da91732376.tar.gz
swap in externals for ACE and TAO
Diffstat (limited to 'ACE/apps/soreduce')
-rw-r--r--ACE/apps/soreduce/Library.cpp347
-rw-r--r--ACE/apps/soreduce/Library.h128
-rw-r--r--ACE/apps/soreduce/Makefile.am51
-rw-r--r--ACE/apps/soreduce/Obj_Module.cpp200
-rw-r--r--ACE/apps/soreduce/Obj_Module.h70
-rw-r--r--ACE/apps/soreduce/README163
-rw-r--r--ACE/apps/soreduce/SO_Group.cpp166
-rw-r--r--ACE/apps/soreduce/SO_Group.h48
-rw-r--r--ACE/apps/soreduce/Sig_List.cpp184
-rw-r--r--ACE/apps/soreduce/Sig_List.h49
-rw-r--r--ACE/apps/soreduce/Signature.cpp45
-rw-r--r--ACE/apps/soreduce/Signature.h50
-rw-r--r--ACE/apps/soreduce/soreduce.cpp51
-rw-r--r--ACE/apps/soreduce/soreduce.mpc15
14 files changed, 0 insertions, 1567 deletions
diff --git a/ACE/apps/soreduce/Library.cpp b/ACE/apps/soreduce/Library.cpp
deleted file mode 100644
index 7452b546ea7..00000000000
--- a/ACE/apps/soreduce/Library.cpp
+++ /dev/null
@@ -1,347 +0,0 @@
-// -*- C++ -*-
-// $Id$
-
-// File: Library.cpp
-
-// Author: Phil Mesnier
-
-// This file contains the implementation of the classes responsible for
-// generating specialized mpc files for individual libraries, as well as
-// outputting usage metrics for the various object modules contained in the
-// library.
-
-#include "ace/OS_NS_dirent.h"
-#include "ace/OS_NS_stdlib.h"
-#include "ace/OS_NS_string.h"
-#include "ace/OS_NS_unistd.h"
-#include "ace/OS_NS_sys_stat.h"
-#include "ace/OS_NS_ctype.h"
-#include "ace/Log_Msg.h"
-
-#include "Library.h"
-
-ACE_RCSID(src, Library, "$Id$")
-
-MPC_Generator::MPC_Generator (const ACE_CString& libname)
- : mpcfile_(),
- libname_(libname),
- mpcfilename_()
-{
- mpcfilename_ = libname_ + "_subset.mpc";
-}
-
-MPC_Generator::~MPC_Generator ()
-{
-}
-
-void
-MPC_Generator::write_file (const ACE_CString& file)
-{
- mpcfile_ << " " << file << ".cpp" << endl;
-}
-
-void
-MPC_Generator::write_prolog (const ACE_CString& path)
-{
- ACE_CString fname (path + "/" + mpcfilename_);
- ACE_DEBUG ((LM_DEBUG, "writing file %s\n",fname.c_str()));
- mpcfile_.open(fname.c_str());
- if (!mpcfile_)
- ACE_DEBUG ((LM_DEBUG,"mpc file open failed\n"));
-
- mpcfile_
- << "// Generated mpc file for producing a subset of the "
- << libname_ << " library " << endl << endl
- << "project(" << libname_ << "_subset)";
-
- this->write_baseprojects ();
-
- mpcfile_
- << " {" << endl
- << " sharedname = " << libname_ << "_subset" << endl
- << " pch_header = " << endl
- << " pch_source = " << endl;
-
- this->write_projectinfo ();
-
- mpcfile_ << endl
- << " Source_Files {" << endl;
-}
-
-void
-MPC_Generator::write_epilog ()
-{
- mpcfile_ << " }" << endl
- << "}" << endl;
- mpcfile_.close();
-}
-
-void
-MPC_Generator::write_baseprojects()
-{
- mpcfile_ << ": acedefaults, core";
-}
-
-void
-MPC_Generator::write_projectinfo()
-{
- mpcfile_ << " libout = $(ACE_ROOT)/lib" << endl
- << " dynamicflags = ACE_BUILD_DLL ACE_OS_BUILD_DLL" << endl;
-}
-
-//-----------------------------------------------------------------------------
-MPC_ACE_Dep_Lib::MPC_ACE_Dep_Lib (const ACE_CString& libname)
- : MPC_Generator(libname)
-{}
-
-void
-MPC_ACE_Dep_Lib::write_baseprojects()
-{
- mpcfile_ << ": acedefaults, aceversion";
-}
-
-void
-MPC_ACE_Dep_Lib::write_projectinfo()
-{
- mpcfile_ << " libout = $(ACE_ROOT)/lib" << endl
- << " libs += ACE_subset" << endl
- << " after += ACE_subset" << endl;
-}
-
-//-----------------------------------------------------------------------------
-MPC_TAO_Lib::MPC_TAO_Lib (const ACE_CString& libname)
- : MPC_ACE_Dep_Lib(libname)
-{}
-
-void
-MPC_TAO_Lib::write_baseprojects()
-{
- MPC_ACE_Dep_Lib::write_baseprojects ();
- mpcfile_ << ", core, tao_output, taodefaults";
-}
-
-void
-MPC_TAO_Lib::write_projectinfo()
-{
- MPC_ACE_Dep_Lib::write_projectinfo();
- mpcfile_ << " dynamicflags = TAO_BUILD_DLL" << endl;
-}
-
-//-----------------------------------------------------------------------------
-MPC_TAO_Dep_Lib::MPC_TAO_Dep_Lib (const ACE_CString& libname)
- : MPC_TAO_Lib(libname)
-{}
-
-void
-MPC_TAO_Dep_Lib::write_baseprojects()
-{
- MPC_TAO_Lib::write_baseprojects ();
- mpcfile_ << ", taoidldefaults";
-}
-
-void
-MPC_TAO_Dep_Lib::write_projectinfo()
-{
- // Try our best to generate the dynamicflags
- ACE_CString dflags;
- for(size_t i = 0; i < this->libname_.length (); ++i) {
- dflags += static_cast<char>(ACE_OS::ace_toupper (this->libname_[i]));
- }
- dflags += "_BUILD_DLL";
-
- MPC_ACE_Dep_Lib::write_projectinfo();
- mpcfile_ << " dynamicflags = " << dflags.c_str () << endl
- << " libs += TAO_subset" << endl
- << " after += TAO_subset" << endl
- << " includes += $(TAO_ROOT)/orbsvcs" << endl
- << " idlflags += -I$(TAO_ROOT)/orbsvcs" << endl;
-}
-
-//-----------------------------------------------------------------------------
-
-Library::Library (const char *name)
- : name_(name),
- path_(),
- num_modules_(0),
- num_exports_(0),
- num_extrefs_(0),
- modules_(0),
- exported_(0),
- mpcfile_(0)
-{
- if (name_ == "ACE")
- mpcfile_ = new MPC_Generator(name_);
- else if (name_.find ("ACE_") == 0)
- mpcfile_ = new MPC_ACE_Dep_Lib (name_);
- else if (name_ == "TAO")
- mpcfile_ = new MPC_TAO_Lib (name_);
- else
- mpcfile_ = new MPC_TAO_Dep_Lib (name_);
-}
-
-Library::~Library ()
-{
- delete mpcfile_;
- int i;
- for (i = 0; i < num_modules_; delete modules_[i++]);
- delete [] modules_;
-}
-
-void
-Library::set_path (const char *p)
-{
- char abspath[1000];
- ACE_OS::memset (abspath,0,1000);
- ssize_t abspathlen = ACE_OS::readlink(p,abspath,999);
- ACE_CString path (p);
- if (abspathlen > 0) {
- abspath[abspathlen] = 0;
- path = abspath;
- }
-
- ACE_CString::size_type pathsep = path.rfind('/');
-
- if (pathsep == ACE_CString::npos) {
- path_ = ".";
- } else {
- path_ = path.substr(0,pathsep);
- }
-}
-
-const ACE_CString &
-Library::name () const
-{
- return name_;
-}
-
-int
-Library::has_modules () const
-{
- return num_modules_ > 0;
-}
-
-extern "C" {
-
-static int
-selector (const dirent *d)
-{
- return ACE_OS::strstr (d->d_name, ACE_TEXT (".o")) != 0;
-}
-
-static int
-comparator (const dirent **d1, const dirent **d2)
-{
- return ACE_OS::strcmp ((*d1)->d_name, (*d2)->d_name);
-}
-
-} /* extern "C" */
-
-void
-Library::load_modules ()
-{
- ACE_CString subdir = path_ + "/.shobj";
-
- struct dirent **dent;
- num_modules_ = ACE_OS::scandir(ACE_TEXT_CHAR_TO_TCHAR (subdir.c_str()),
- &dent,selector,comparator);
-
- if (num_modules_ > 0) {
- modules_ = new Obj_Module * [num_modules_];
- for (int i = 0; i < num_modules_; i++) {
- ACE_CString ent_name (ACE_TEXT_ALWAYS_CHAR (dent[i]->d_name));
- modules_[i] = new Obj_Module(ent_name);
- modules_[i]->add_source (ACE_CString(subdir + "/" + ent_name).c_str());
- ACE_OS::free(dent[i]);
- };
- }
-
- if (num_modules_ > -1)
- ACE_OS::free(dent);
-}
-
-void
-Library::resolve (Sig_List &undefs)
-{
- if (num_modules_ < 1)
- return;
-
- for (const Signature *uname = undefs.first();
- undefs.hasmore();
- uname = undefs.next()) {
- if (exported_.index_of(uname) != -1) {
- undefs.remove_current();
- }
- else
- for (int i = 0; i < num_modules_; i++)
- if (modules_[i]->extref() == 0 &&
- modules_[i]->exports().index_of(uname) != -1)
- {
- undefs.remove_current();
- exported_.add (modules_[i]->exports());
- for (const Signature *needed = modules_[i]->imports().first();
- modules_[i]->imports().hasmore();
- needed = modules_[i]->imports().next())
- if (exported_.index_of(needed) == -1)
- undefs.add (needed->name());
- modules_[i]->add_extref();
- num_extrefs_++;
- break;
- }
- }
-}
-
-void
-Library::write_export_list (int show_ref_counts)
-{
- if (num_modules_ < 1)
- return;
-
- ACE_CString excludedfilename = path_ + "/excluded_modules";
- ACE_CString rcpath = path_ + "/usage_metrics";
-
- ofstream exclusions (excludedfilename.c_str());
- if (!exclusions) {
- ACE_ERROR ((LM_ERROR, "%p\n", "open exclusions list"));
- }
-
- if (show_ref_counts) {
- ACE_DEBUG ((LM_DEBUG, "Making directory %s\n",rcpath.c_str()));
- if (ACE_OS::mkdir(ACE_TEXT_CHAR_TO_TCHAR (rcpath.c_str())) == -1 &&
- errno != EEXIST)
- ACE_ERROR ((LM_ERROR, "%p\n", "mkdir"));
- }
-
- ACE_DEBUG ((LM_DEBUG,"%s: %d out of %d modules required\n",
- name_.c_str(), num_extrefs_, num_modules_));
-
- mpcfile_->write_prolog(path_);
-
- for (int i = 0; i < num_modules_ ; i++)
- if (modules_[i]->extref()) {
- if (show_ref_counts) {
- ACE_CString fname = rcpath + "/" + modules_[i]->name();
- ofstream countfile (fname.c_str());
- countfile << "Exported symbols:" << endl;
- for (const Signature *sig = modules_[i]->exports().first();
- modules_[i]->exports().hasmore();
- sig = modules_[i]->exports().next())
- {
- countfile.width(5);
- countfile << sig->used_count() << " " << sig->name() << endl;
- }
- countfile << "\nImported symbols:" << endl;
- for (const Signature *n_sig = modules_[i]->imports().first();
- modules_[i]->imports().hasmore();
- n_sig = modules_[i]->imports().next())
- countfile << n_sig->name() << endl;
- }
- mpcfile_->write_file(modules_[i]->name().substring(0,modules_[i]->name().length()-2));
- } else {
- // const char * modname = modules_[i]->name().c_str();
- exclusions
- << modules_[i]->name().substring(0,modules_[i]->name().length()-2)
- << endl;
- }
-
- mpcfile_->write_epilog();
-}
diff --git a/ACE/apps/soreduce/Library.h b/ACE/apps/soreduce/Library.h
deleted file mode 100644
index af978c61f74..00000000000
--- a/ACE/apps/soreduce/Library.h
+++ /dev/null
@@ -1,128 +0,0 @@
-// -*- 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_ */
diff --git a/ACE/apps/soreduce/Makefile.am b/ACE/apps/soreduce/Makefile.am
deleted file mode 100644
index 6b0efcb4b99..00000000000
--- a/ACE/apps/soreduce/Makefile.am
+++ /dev/null
@@ -1,51 +0,0 @@
-## Process this file with automake to create Makefile.in
-##
-## $Id$
-##
-## This file was generated by MPC. Any changes made directly to
-## this file will be lost the next time it is generated.
-##
-## MPC Command:
-## ./bin/mwc.pl -type automake -noreldefs ACE.mwc
-
-ACE_BUILDDIR = $(top_builddir)
-ACE_ROOT = $(top_srcdir)
-
-
-## Makefile.soreduce.am
-
-if !BUILD_ACE_FOR_TAO
-if !BUILD_USES_WCHAR
-
-noinst_PROGRAMS = soreduce
-
-soreduce_CPPFLAGS = \
- -I$(ACE_ROOT) \
- -I$(ACE_BUILDDIR)
-
-soreduce_SOURCES = \
- Library.cpp \
- Obj_Module.cpp \
- SO_Group.cpp \
- Sig_List.cpp \
- Signature.cpp \
- soreduce.cpp \
- Library.h \
- Obj_Module.h \
- SO_Group.h \
- Sig_List.h \
- Signature.h
-
-soreduce_LDADD = \
- $(ACE_BUILDDIR)/ace/libACE.la
-
-endif !BUILD_USES_WCHAR
-endif !BUILD_ACE_FOR_TAO
-
-## Clean up template repositories, etc.
-clean-local:
- -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.*
- -rm -f gcctemp.c gcctemp so_locations *.ics
- -rm -rf cxx_repository ptrepository ti_files
- -rm -rf templateregistry ir.out
- -rm -rf ptrepository SunWS_cache Templates.DB
diff --git a/ACE/apps/soreduce/Obj_Module.cpp b/ACE/apps/soreduce/Obj_Module.cpp
deleted file mode 100644
index de508c32eff..00000000000
--- a/ACE/apps/soreduce/Obj_Module.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-// -*- C++ -*-
-// $Id$
-
-// File: Obj_Module.cpp
-
-// Author: Phil Mesnier
-
-// This file contains the implementation of the classes responsible for
-// managing the contents of a single object module (.o file).
-
-#include "ace/OS_NS_string.h"
-#include "ace/OS_NS_unistd.h"
-#include "ace/Process.h"
-#include "ace/Pipe.h"
-#include "ace/Message_Block.h"
-#include "ace/Log_Msg.h"
-
-#include "Obj_Module.h"
-
-
-ACE_RCSID(src, Obj_Module, "$Id$")
-
-
-//----------------------------------------------------------------------------
-
-Obj_Module::Obj_Module (const ACE_CString &name, int cap)
- : name_ (name),
- imports_(cap),
- exports_(cap),
- extrefs_(0)
-{
-}
-
-ACE_CString &
-Obj_Module::name()
-{
- return name_;
-}
-
-Sig_List &
-Obj_Module::exports()
-{
- return exports_;
-}
-
-Sig_List &
-Obj_Module::imports()
-{
- return imports_;
-}
-
-int
-Obj_Module::extref()
-{
- return extrefs_;
-}
-
-void
-Obj_Module::add_extref()
-{
- extrefs_ ++;
-}
-
-void
-Obj_Module::remove_extref()
-{
- extrefs_ --;
-}
-
-int
-Obj_Module::read_line (ACE_HANDLE src, ACE_Message_Block **buf)
-{
- int eoln = 0;
- // ACE_Time_Value timeout (1,0);
- if (buf == 0 || *buf == 0) {
- char dummy;
- while (!eoln && ACE_OS::read(src,&dummy,1) == 1) {
- eoln = (dummy == '\n');
- }
- return eoln;
- }
- // while (!eoln && ACE::recv(src,buf->wr_ptr(),1,&timeout) == 1) {
- while (!eoln && ACE_OS::read(src,(*buf)->wr_ptr(),1) == 1) {
- eoln = (*(*buf)->wr_ptr() == '\n');
- (*buf)->wr_ptr(1);
- if ((*buf)->space() == 0) {
- (*buf)->cont(new ACE_Message_Block(102400));
- *buf = (*buf)->cont();
- }
- }
- return eoln;
-}
-
-void
-Obj_Module::add_source(const char *p, int imports_only)
-{
- ACE_Process nmproc;
- ACE_Process_Options nm_opts;
- ACE_CString path (p);
-
- ACE_CString::size_type pathsep = path.rfind('/');
-
- ACE_CString src_name;
- ACE_CString workpath;
-
- if (pathsep == ACE_CString::npos) {
- src_name = path;
- workpath = ".";
- } else {
- src_name = path.substr(pathsep+1);
- workpath= path.substr(0,pathsep);
- }
-
- ACE_HANDLE pipe[2];
- ACE_Pipe io(pipe);
-
- nm_opts.working_directory (workpath.c_str());
- nm_opts.set_handles (ACE_STDIN,pipe[1]);
-
- // Options for the command line shown here are for the GNU nm 2.9.5
-
- int result = nm_opts.command_line ("nm -C %s",src_name.c_str());
- // Prevent compiler warning about "unused variable" if ACE_ASSERT is
- // an empty macro.
- ACE_UNUSED_ARG (result);
- ACE_ASSERT (result == 0);
-
- nmproc.spawn (nm_opts);
- if (ACE_OS::close(pipe[1]) == -1)
- ACE_DEBUG ((LM_DEBUG, "%p\n", "close"));
- nm_opts.release_handles();
-
- int import_lines = 0;
- int export_lines = 0;
- ACE_Message_Block im_buffer (102400);
- ACE_Message_Block ex_buffer (102400);
- ACE_Message_Block *im_buf_cur = &im_buffer;
- ACE_Message_Block *ex_buf_cur = &ex_buffer;
- char dummy;
- int eoln = 1;
- // ACE_Time_Value timeout (1,0);
- int is_import = 1;
- int is_export = 1;
-
- while (eoln == 1) {
- for (int i = 0; i < 10; i++) {
- if (ACE_OS::read(pipe[0],&dummy,1) != 1) {
- eoln = 2;
- break;
- }
- }
- if (eoln == 2)
- break;
- is_import = dummy == 'U';
- is_export = !imports_only && (ACE_OS::strchr("BCDRTVW",dummy) != 0);
-
- // if (ACE::recv(pipe[0],&dummy,1,&timeout) != 1)
- if (ACE_OS::read(pipe[0],&dummy,1) != 1)
- break;
-
- eoln = this->read_line (pipe[0], is_import ? &im_buf_cur :
- (is_export ? &ex_buf_cur : 0));
- import_lines += is_import;
- export_lines += is_export;
- }
- // ACE_DEBUG ((LM_DEBUG, "read %d import lines and %d export lines\n",
- // import_lines, export_lines));
-
- nmproc.wait ();
- ACE_OS::close (pipe[0]);
-
- this->populate_sig_list (imports_,import_lines,&im_buffer);
- if (!imports_only)
- this->populate_sig_list (exports_,export_lines,&ex_buffer);
-}
-
-void
-Obj_Module::populate_sig_list (Sig_List &siglist,
- int lines,
- ACE_Message_Block *buf)
-{
- char *c;
- ACE_CString temp;
- for (int i = 0; i < lines; i++) {
- for (c = buf->rd_ptr();
- c != buf->wr_ptr() && *c != '\n'; c++);
- temp += ACE_CString(buf->rd_ptr(),(c - buf->rd_ptr()));
- buf->rd_ptr(c+1);
- if (*c == '\n') {
- // ACE_DEBUG ((LM_DEBUG, "%s\n",temp.c_str()));
- siglist.add (temp);
- temp.clear();
- } else {
- buf = buf->cont();
- if (buf == 0) {
- siglist.add (temp);
- }
- }
- }
-}
diff --git a/ACE/apps/soreduce/Obj_Module.h b/ACE/apps/soreduce/Obj_Module.h
deleted file mode 100644
index 1836b75e7ec..00000000000
--- a/ACE/apps/soreduce/Obj_Module.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// -*- C++ -*-
-// $Id$
-
-// File: Obj_Module.h
-
-// Author: Phil Mesnier
-
-#ifndef _OBJ_MODULE_H_
-#define _OBJ_MODULE_H_
-
-// Obj_Module encapsulates the result of applying nm to a single object module
-// in a shared library. Currently an object module consists of two types of
-// signatures, those that are exported, able to resolve references from others,
-// and those that are imported, needing resolution.
-//
-// Obj_Modules keep track of external references. In the end, any module that
-// has one or more external references to it must be included in the resulting
-// library. While the means exists to remove external references, perhaps
-// through further analysis of undefined signatures and their usage, this is
-// not currently done. Once a technique is discovered to allow for easy
-// determination that reference is truly unneeded this code may be useful.
-
-#include "Sig_List.h"
-
-ACE_BEGIN_VERSIONED_NAMESPACE_DECL
-class ACE_Message_Block;
-ACE_END_VERSIONED_NAMESPACE_DECL
-
-class Obj_Module {
-public:
- Obj_Module ( const ACE_CString &, int = 500);
-
- // Returns the list of exported signatures, ie. those that are defined in
- // this module
- Sig_List & exports();
-
- // Returns the list of signatures used by this module but not defined within
- Sig_List & imports();
-
- // Returns the name of the object module.
- ACE_CString &name();
-
- // Add_source invokes GNU nm on the supplied file and parses the output to
- // build the list of imported and exported signatures. When replacing GNU
- // nm to use a different tool, this method must be modified. In the future
- // this could be a virtual to allow for specialization based on toolset.
- void add_source (const char *, int = 0);
-
- // Get the number of external references to this object module. At the end
- // of processing, if the number of external references is 0, the module is
- // not included in the final library.
- int extref ();
-
- // add a new external reference to this module.
- void add_extref ();
-
- // remove an exterenal reference. Currently, this function is not used.
- void remove_extref();
-
-private:
- void populate_sig_list (Sig_List &, int , ACE_Message_Block *);
- int read_line (ACE_HANDLE src, ACE_Message_Block **buf);
-
- ACE_CString name_;
- Sig_List imports_;
- Sig_List exports_;
- int extrefs_;
-};
-
-#endif /* _OBJ_MODULE_H_ */
diff --git a/ACE/apps/soreduce/README b/ACE/apps/soreduce/README
deleted file mode 100644
index 5e0264bdab2..00000000000
--- a/ACE/apps/soreduce/README
+++ /dev/null
@@ -1,163 +0,0 @@
-Shared Library Reduction Tool
------------------------------
-
-The motivation for this tool was the understanding that the ACE & TAO
-libraries were to be linked with the VxWorks kernel to allow multiple
-applications to be run simultaniously with a minimum of footprint
-consumed. Ordinarily a choice is made between static linking
-applications, where each application gets only the object modules
-needed, and shared object linkage, where multiple applications share
-access to full libraries. Frequently a shared library will contain
-code and data which is not used by any of the applications in a
-particular configuration. The Shared Library Reduction Tool builds
-libraries that include only the modules needed to support a specified
-set of applications.
-
-The analysis is performed very late in the application implementation,
-allowing the system implementors the freedom to use whatever TAO & ACE
-components are needed. Once an application is built and running, its
-shared object need may be evaluated. The evaluation is straight
-forward. Run the soreduce program, passing the path to all of the
-applications that will share the libraries. The soreduce program uses
-the following steps to generate its results.
-
-1. A list of undefined symbols and shared libraries is built by
- invoking the ldd and nm commands on each application. For now,
- soreduce assumes the GNU variant of these tools.
-
-2. For each shared library, soreduce tries to invoke nm on each of the
- intermediate object files used to build the library. It is
- important that target library directory has a current .shobj
- subdirectory.
-
-3. The list of undefined symbols is traversed. For each entry in the list, the
- modules loaded from step 2 are examined to look for a matching
- symbol. When one is found, the target symbol, and any others
- satisfied by the module are removed from the list, and any
- undefined symbols in the module are added to the list. This
- process is repeated until the entire list of undefined symbols is
- traversed without change.
-
-4. MPC files are generated. Rather than invoking the linker directly, an mpc
- file is generated that may be used to build the libs. With these
- mpc files, the actual library will be named (orig)_subset.
-
-Analysis Artifacts
-------------------
-
-Development of the shared library reduction tool also provided a
-secondary benefit. It is able to output usage metrics for the various
-modules, which may be useful for directing further hand-crafted
-reduction efforts. Using the GNU nm with more verbose output, it is
-possible to determine the first function using a given undefined
-symbol. While it is not (yet) possible to automate the refactoring of
-code based on this analysis, this information can provide a road map
-for breaking a single module into two or a few that will result in
-fewer incidental dependancies overall. However this speculation has
-not been tested.
-
-Test results
-------------
-
-Running soreduce providing itself as the sole client. The soreduce
-application is built on top of ACE, using just a few of ACE's
-features. Here is the output:
-
-bash$ ./soreduce soreduce
-discovering libraries
-loading object modules
-Libs subject to analysis:
- ACE
-Starting analysis
-pass 0, undef count = 69
-pass 1, undef count = 207
-pass 2, undef count = 278
-pass 3, undef count = 271
-pass 4, undef count = 245
-pass 5, undef count = 235
-Writing results
-Making directory /opt/wustl/ACE_wrappers/build/native/ace/usage_metrics
-ACE: 61 out of 210 modules required
-writing file /opt/wustl/ACE_wrappers/build/native/ace/ACE_subset.mpc
-Done.
-
-The size of libACE.so before rebuilding:
-
-bash$ size libACE.so
- text data bss dec hex filename
-2361958 498760 12516 2873234 2bd792 libACE.so
-
-and after:
-
-bash$ size libACE_subset.so
- text data bss dec hex filename
- 987167 207452 7580 1202199 125817 libACE_subset.so
-
-
-2873234 - 1202199 = 1671035 bytes eliminated, a 58.2% reduction
-
-Here is another example, using the Naming Service, and its simple test
-client. Note that the orbsvcs results are bogus, the libraries are
-already fairly well factored so that the additional subsetting by
-soreduce is not effective. Also, due to the layout of the orbsvcs
-library source directory, the tool may not generate valid mpc files.
-
-bash$ $ACE_ROOT/apps/soreduce/soreduce Naming_Service/Naming_Service tests/Simple_Naming/client
-discovering libraries
-loading object modules
-Libs subject to analysis:
- TAO_CosNaming
- TAO_Svc_Utils
- TAO_IORTable
- TAO_PortableServer
- TAO
- ACE
-Starting analysis
-pass 0, undef count = 339
-pass 1, undef count = 580
-pass 2, undef count = 438
-pass 3, undef count = 278
-pass 4, undef count = 244
-pass 5, undef count = 246
-pass 6, undef count = 242
-Writing results
-Making directory /opt/wustl/ACE_wrappers/build/native/TAO/orbsvcs/orbsvcs/usage_metrics
-TAO_CosNaming: 11 out of 256 modules required
-writing file /opt/wustl/ACE_wrappers/build/native/TAO/orbsvcs/orbsvcs/TAO_CosNaming_subset.mpc
-Making directory /opt/wustl/ACE_wrappers/build/native/TAO/orbsvcs/orbsvcs/usage_metrics
-TAO_Svc_Utils: 8 out of 256 modules required
-writing file /opt/wustl/ACE_wrappers/build/native/TAO/orbsvcs/orbsvcs/TAO_Svc_Utils_subset.mpc
-Making directory /opt/wustl/ACE_wrappers/build/native/TAO/tao/IORTable/usage_metrics
-TAO_IORTable: 4 out of 4 modules required
-writing file /opt/wustl/ACE_wrappers/build/native/TAO/tao/IORTable/TAO_IORTable_subset.mpc
-Making directory /opt/wustl/ACE_wrappers/build/native/TAO/tao/PortableServer/usage_metrics
-TAO_PortableServer: 26 out of 29 modules required
-writing file /opt/wustl/ACE_wrappers/build/native/TAO/tao/PortableServer/TAO_PortableServer_subset.mpc
-Making directory /opt/wustl/ACE_wrappers/build/native/TAO/tao/usage_metrics
-TAO: 160 out of 191 modules required
-writing file /opt/wustl/ACE_wrappers/build/native/TAO/tao/TAO_subset.mpc
-Making directory /opt/wustl/ACE_wrappers/build/native/ace/usage_metrics
-ACE: 75 out of 210 modules required
-writing file /opt/wustl/ACE_wrappers/build/native/ace/ACE_subset.mpc
-Done.
-
-Size before & after:
- text data bss dec hex filename
-2361958 498760 12516 2873234 2bd792 libACE.so
-3432206 704188 30992 4167386 3f96da libTAO.so
-1931145 326632 7528 2265305 2290d9 libTAO_PortableServer.so
- 76561 12504 364 89429 15d55 libTAO_IORTable.so
-
-
-Sum: 9395354
-
-
- text data bss dec hex filename
-1340017 275440 8140 1623597 18c62d libACE_subset.so
-3131226 643816 27984 3803026 3a0792 libTAO_subset.so
-1845515 308812 6896 2161223 20fa47 libTAO_PortableServer_subset.so
- 76603 12508 364 89475 15d83 libTAO_IORTable_subset.so
-
-Sum: 7677321
-
-Savings: 1718033 or 18.3%
diff --git a/ACE/apps/soreduce/SO_Group.cpp b/ACE/apps/soreduce/SO_Group.cpp
deleted file mode 100644
index f369050a1dd..00000000000
--- a/ACE/apps/soreduce/SO_Group.cpp
+++ /dev/null
@@ -1,166 +0,0 @@
-// -*- C++ -*-
-// $Id$
-
-// File: SO_Group.cpp
-
-#include "ace/OS_NS_string.h"
-#include "ace/OS_NS_unistd.h"
-#include "ace/Log_Msg.h"
-#include "ace/Process.h"
-#include "ace/Pipe.h"
-
-#include "Library.h"
-#include "SO_Group.h"
-
-ACE_RCSID(src, SO_Group, "$Id$")
-
-
-SO_Group::SO_Group ()
- : undef_wrapper_ ("nothing"),
- undefs_(undef_wrapper_.imports()),
- libs_ (0),
- max_libs_ (128),
- num_libs_(0)
-{
- libs_ = new Library*[max_libs_];
-}
-
-SO_Group::~SO_Group ()
-{
- for (int i = 0; i < num_libs_; delete libs_[i++]);
- delete [] libs_;
-}
-
-void
-SO_Group::add_executable (const char * path)
-{
- ACE_Process proc;
- ACE_Process_Options opts;
-
- ACE_HANDLE pipe[2];
- ACE_Pipe io(pipe);
-
- opts.set_handles (ACE_STDIN,pipe[1]);
-
- int result = opts.command_line ("ldd %s",path);
- // Prevent compiler warning about "unused variable" if ACE_ASSERT is
- // an empty macro.
- ACE_UNUSED_ARG (result);
- ACE_ASSERT (result == 0);
-
- proc.spawn (opts);
- if (ACE_OS::close(pipe[1]) == -1)
- ACE_DEBUG ((LM_DEBUG, "%p\n", "close"));
- opts.release_handles();
-
- const int max_line_length = 1000;
- char line[max_line_length];
-
- while (1) {
- ACE_OS::memset (line,0,max_line_length);
- int len = 0;
- int nread = 0;
- int bogus = 0;
- // skip initial whitespace
- while ((nread = ACE_OS::read(pipe[0],line,1)) == 1 &&
- (*line == ' ' || *line == '\t'));
-
- if (nread != 1)
- break;
-
- // read the library name
- len = 1;
- while ((nread = ACE_OS::read(pipe[0],line + len,1)) == 1 &&
- (line[len] != ' '))
- if (! bogus && ++len == max_line_length)
- {
- bogus = 1;
- break;
- }
- if (nread != 1 || bogus)
- break;
- line[len] = 0;
- char * dot = ACE_OS::strchr (line,'.');
- if (dot)
- *dot = 0;
- char * libname = line + 3; // skip over "lib"
-
- // check to see if this is a new library
- int found = 0;
- for (int i = 0; !found && i < num_libs_; i++)
- found = (libs_[i]->name() == libname);
-
- if (!found) {
- Library *nlib = new Library(libname);
- ACE_OS::memset (line,0,max_line_length);
-
- // skip over '=> '
- if (ACE_OS::read(pipe[0],line,3) != 3)
- break;
-
- // get library path
- len = 0;
- while ((nread = ACE_OS::read(pipe[0],line + len,1)) == 1 &&
- (line[len] != ' '))
- if (! bogus && ++len == max_line_length)
- {
- bogus = 1;
- break;
- }
- if (nread != 1 || bogus)
- break;
- line[len] = 0;
- nlib->set_path (line);
- libs_[num_libs_++] = nlib;
- ACE_ASSERT (num_libs_ < max_libs_); // grow max libs?
- }
- // skip the rest of the line
- while ((nread = ACE_OS::read(pipe[0],line,1)) == 1 && *line != '\n');
- if (nread != 1)
- break;
- }
- proc.wait ();
- ACE_OS::close (pipe[0]);
-
- undef_wrapper_.add_source(path,1);
- // now do the ldd, iterate over the results to add new libs, etc.
-}
-
-void
-SO_Group::analize ()
-{
- for (int passcount = 0; undefs_.modified(); passcount++) {
- ACE_DEBUG ((LM_DEBUG,"pass %d, undef count = %d\n",
- passcount,undefs_.size()));
- for (int i = 0; i < num_libs_; libs_[i++]->resolve(undefs_));
- }
-}
-
-void
-SO_Group::write_results()
-{
- for (int i = 0; i < num_libs_; libs_[i++]->write_export_list(1));
-}
-
-void
-SO_Group::load_modules()
-{
- for (int i = 0; i < num_libs_; libs_[i++]->load_modules());
-}
-
-void
-SO_Group::list_libs()
-{
- ACE_DEBUG ((LM_DEBUG,"Libs subject to analysis:\n"));
- for (int i = 0; i < num_libs_; i++) {
- if (libs_[i]->has_modules())
- ACE_DEBUG ((LM_DEBUG," %s\n", libs_[i]->name().c_str()));
- }
-}
-
-
-
-
-
-
-
diff --git a/ACE/apps/soreduce/SO_Group.h b/ACE/apps/soreduce/SO_Group.h
deleted file mode 100644
index 09758c8c7bb..00000000000
--- a/ACE/apps/soreduce/SO_Group.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// -*- C++ -*-
-// $Id$
-
-// File: SO_Group.h
-
-// Author: Phil Mesnier
-
-#ifndef _SO_GROUP_H_
-#define _SO_GROUP_H_
-
-#include "Library.h"
-
-// A shared object group is a wrapper around all of the information needed to
-// analize a collection of applications so that common shared libraries can
-// be reduced.
-
-class SO_Group
-{
-public:
- SO_Group ();
- ~SO_Group ();
-
- // For each executable named, run ldd to get the dependances list, For each
- // library listed, see if there is a path to .shobj and add to the list of
- // libraries if found. Finally, add the undefined symbols from the executable
- // to the undefs collection.
- void add_executable(const char * );
-
- // Do the actual business of the program
- void analize ();
-
- // Output the results
- void write_results ();
-
- // load the object modules for the group
- void load_modules ();
-
- void list_libs();
-
-private:
- Obj_Module undef_wrapper_;
- Sig_List &undefs_;
- Library **libs_;
- int max_libs_;
- int num_libs_;
-};
-
-#endif //_SO_GROUP_H_
diff --git a/ACE/apps/soreduce/Sig_List.cpp b/ACE/apps/soreduce/Sig_List.cpp
deleted file mode 100644
index 2f385790aff..00000000000
--- a/ACE/apps/soreduce/Sig_List.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-// $Id$
-
-// File: Sig_List.cpp
-
-// Author: Phil Mesnier
-
-#include "ace/OS_NS_string.h"
-#include "Sig_List.h"
-
-ACE_RCSID(src, Sig_List, "$Id$")
-
-//-----------------------------------------------------------------------------
-
-Sig_List::Sig_List (int cap)
- : size_(0),
- capacity_(cap),
- index_(0),
- has_nulls_(0),
- modified_(0),
- array_(0)
-{
- array_ = new Signature*[capacity_];
-}
-
-Sig_List::~Sig_List ()
-{
- for (int i = 0; i < size_; i++)
- if (array_[i]) array_[i]->release();
- delete [] array_;
-}
-
-void
-Sig_List::add (const ACE_CString &s)
-{
- if (this->index_of (s) != -1)
- return;
- modified_ = 1;
- if (has_nulls_)
- for (int i = 0; i < size_; i++)
- if (array_[i] == 0) {
- array_[i] = new Signature (s);
- has_nulls_ --;
- return;
- }
- if (size_ == capacity_) {
- int ncap = capacity_ * 2;
- Signature ** narray = new Signature *[ncap];
- ACE_OS::memcpy (narray,array_,capacity_ * sizeof(Signature*));
- delete [] array_;
- array_ = narray;
- capacity_ = ncap;
- }
- array_[size_++] = new Signature(s);
-}
-
-void
-Sig_List::add (const Sig_List &other)
-{
- if (capacity_ < size_ + other.capacity_) {
- int ncap = size_ + other.capacity_ + 50;
- Signature ** narray = new Signature *[ncap];
- ACE_OS::memcpy (narray,array_,capacity_ * sizeof(Signature*));
- delete [] array_;
- array_ = narray;
- capacity_ = ncap;
- }
- modified_ = 1;
- for (int i = 0; i < other.size_; i++)
- if (other.array_[i] != 0 &&
- this->index_of (other.array_[i]->name()) == -1)
- {
- if (!has_nulls_)
- array_[size_++] = other.array_[i]->dup();
- else
- for (int i = 0; i < size_; i++)
- if (array_[i] == 0)
- {
- array_[i] = other.array_[i]->dup();
- has_nulls_ --;
- break;
- }
- }
-}
-
-void
-Sig_List::remove (const Signature &s)
-{
- for (int i = 0; i < size_; i++)
- if (array_[i] && array_[i]->name() == s.name()) {
- array_[i]->release();
- array_[i] = 0;
- modified_ = 1;
- if (i == size_ - 1)
- size_ --;
- else
- has_nulls_ ++;
- break;
- }
-}
-
-void
-Sig_List::remove_current ()
-{
- array_[index_]->release();
- array_[index_] = 0;
- modified_ = 1;
- if (index_ == size_ - 1)
- size_--;
- else
- has_nulls_++;
-}
-
-int
-Sig_List::index_of (const Signature *s)
-{
- for (int i = 0; i < size_; i++)
- if (array_[i] && array_[i]->name() == s->name()) {
- array_[i]->used();
- return i;
- }
- return -1;
-}
-
-int
-Sig_List::index_of (const ACE_CString &s)
-{
- for (int i = 0; i < size_; i++)
- if (array_[i] && array_[i]->name() == s) {
- return i;
- }
- return -1;
-}
-
-
-const Signature *
-Sig_List::first()
-{
- for (index_ = 0; index_ < size_; index_++)
- if (array_[index_] != 0)
- return array_[index_];
- return 0;
-}
-
-const Signature *
-Sig_List::next()
-{
- for (++index_; index_ < size_; index_++)
- if (array_[index_] != 0)
- return array_[index_];
- return 0;
-}
-
-int
-Sig_List::hasmore ()
-{
- return index_ < size_;
-}
-
-int
-Sig_List::size()
-{
- return size_;
-}
-
-int
-Sig_List::modified()
-{
- int rtn = modified_;
- modified_ = 0;
- int insert = 0;
- if (has_nulls_) {
- for (int i = 0; i < size_; i++)
- if (array_[i] != 0) {
- if (i != insert) {
- array_[insert] = array_[i];
- array_[i] = 0;
- }
- insert++;
- }
- size_ = insert+1;
- has_nulls_ = 0;
- }
- return rtn;
-}
diff --git a/ACE/apps/soreduce/Sig_List.h b/ACE/apps/soreduce/Sig_List.h
deleted file mode 100644
index 9b4b0dc115f..00000000000
--- a/ACE/apps/soreduce/Sig_List.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// -*- C++ -*-
-// $Id$
-
-// File: Sig_List.h
-
-// Author: Phil Mesnier
-
-
-#ifndef _SIG_LIST_H_
-#define _SIG_LIST_H_
-
-// A Sig_List is a specialized container of signatures. The initial use of a
-// Sig_List was to manage a variable length of undefined Signatures, so the
-// program could know when all possible resolutions were determined. As the
-// program grows in complexity, Sig_Lists are used to store other groups as
-// well. The methods provide simple list traversal, as well as efficient use
-// of space.
-
-#include "Signature.h"
-
-class Sig_List {
-public:
- Sig_List (int cap = 500);
- ~Sig_List ();
- void add (const ACE_CString &s);
- void add (const Sig_List &other);
- void remove (const Signature &s);
- void remove_current ();
-
- int index_of (const Signature *s);
- int index_of (const ACE_CString &s);
- int hasmore();
- const Signature *first();
- const Signature *next();
-
- int modified ();
- int size();
-
-private:
- int size_;
- int capacity_;
- int index_;
- int has_nulls_;
- int modified_;
- Signature ** array_;
-};
-
-
-#endif /* _SIG_LIST_H_ */
diff --git a/ACE/apps/soreduce/Signature.cpp b/ACE/apps/soreduce/Signature.cpp
deleted file mode 100644
index 2d4d907e92b..00000000000
--- a/ACE/apps/soreduce/Signature.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "Signature.h"
-
-ACE_RCSID(src, Signature, "$Id$")
-
-//-----------------------------------------------------------------------------
-
-Signature::Signature (const ACE_CString &name)
- :name_(name),
- ref_count_ (1),
- used_ (0)
-{
-}
-
-void
-Signature::used ()
-{
- used_++;
-}
-
-int
-Signature::used_count() const
-{
- return used_;
-}
-
-const ACE_CString &
-Signature::name() const
-{
- return name_;
-}
-
-Signature *
-Signature::dup()
-{
- ref_count_++;
- return this;
-}
-
-void
-Signature::release()
-{
- if (--ref_count_ == 0)
- delete this;
-}
-
diff --git a/ACE/apps/soreduce/Signature.h b/ACE/apps/soreduce/Signature.h
deleted file mode 100644
index 358a756aa7a..00000000000
--- a/ACE/apps/soreduce/Signature.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// -*- C++ -*-
-// $Id$
-
-// File: Signature.h
-
-// Author: Phil Mesnier
-
-
-#ifndef _SIGNATURE_H_
-#define _SIGNATURE_H_
-
-// Signature class encapsulates a single line of nm output. This line may be
-// either an "undefined" name to be resolved, or text or data which resolves
-// the unknowns. Some of the features of the Signature class are currently
-// unused, such as owner_, which is anticipation of analysis that may lead to
-// further code reduction. The premise being that unresolved symbols that are
-// defined within otherwise unused code should not be resolved. However this
-// information is not available in the output of nm. Further research is
-// required.
-//
-// Signatures are reference counted to avoid duplication.
-
-#include <ace/SString.h>
-
-class Signature {
-public:
-
- enum Kind {
- text_,
- undef_
- };
-
- Signature (const ACE_CString &);
- void used ();
- int used_count() const;
-
- const ACE_CString &name() const;
-
- Signature *dup();
- void release();
-
-private:
- ACE_CString name_;
- int ref_count_;
- int used_;
- Signature * owner_;
- Kind kind_;
-};
-
-#endif
diff --git a/ACE/apps/soreduce/soreduce.cpp b/ACE/apps/soreduce/soreduce.cpp
deleted file mode 100644
index e13d8f85d06..00000000000
--- a/ACE/apps/soreduce/soreduce.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// $Id$
-
-// File: soreduce.cpp
-
-// Author: Phil Mesnier
-
-// theory of operation:
-// 1. Build a complete set of applications
-// 2. apply "nm" to each of the .o files that make up the libraries to subset
-// filter the results into two files for each, one with exported names, the
-// other with imported names.
-// 3. apply "nm" to all of the elements which use ace & tao. build a list of
-// imported names
-// 4. Repeat the following steps until no entries remain in the list of
-// imports
-// 4.1 Take a name from the list of imports, locate the module containing the
-// export of that name
-// 4.2 Add the exporting module to the list of required modules, add its list
-// of exports to the list of resolved exports, add its imported names to
-// the list of imports.
-// 4.4 Traverse the list of imported names to eliminate any found in the list
-// of exported names.
-// 4.5 go to step 4.1
-// 5. construct a new makefile for all required modules.
-//
-// Currently works only with GNU nm
-
-#include <ace/Log_Msg.h>
-
-#include "SO_Group.h"
-
-ACE_RCSID (src, soreduce, "$Id$")
-
-int
-ACE_TMAIN(int argc, ACE_TCHAR *argv[])
-{
- SO_Group group;
-
- ACE_DEBUG ((LM_DEBUG,"discovering libraries\n"));
- for (int i = 1; i < argc; group.add_executable (argv[i++]));
- ACE_DEBUG ((LM_DEBUG,"loading object modules\n"));
- group.load_modules();
- group.list_libs();
- ACE_DEBUG ((LM_DEBUG,"Starting analysis\n"));
- group.analize();
- ACE_DEBUG ((LM_DEBUG,"Writing results\n"));
- group.write_results();
- ACE_DEBUG ((LM_DEBUG,"Done.\n"));
- return 0;
-}
-
diff --git a/ACE/apps/soreduce/soreduce.mpc b/ACE/apps/soreduce/soreduce.mpc
deleted file mode 100644
index 2fe7cc27101..00000000000
--- a/ACE/apps/soreduce/soreduce.mpc
+++ /dev/null
@@ -1,15 +0,0 @@
-// $Id$
-
-project(soreduce) : aceexe {
- avoids += uses_wchar ace_for_tao
- exename = soreduce
- Source_Files {
- Signature.cpp
- Sig_List.cpp
- Obj_Module.cpp
- Library.cpp
- SO_Group.cpp
- soreduce.cpp
- }
-}
-