diff options
Diffstat (limited to 'apps/soreduce/Library.cpp')
-rw-r--r-- | apps/soreduce/Library.cpp | 370 |
1 files changed, 0 insertions, 370 deletions
diff --git a/apps/soreduce/Library.cpp b/apps/soreduce/Library.cpp deleted file mode 100644 index b56579092c4..00000000000 --- a/apps/soreduce/Library.cpp +++ /dev/null @@ -1,370 +0,0 @@ -// -*- C++ -*- -// $Id$ - -// File: Library.cpp - -// Author: Phil Mesnier - -// This file contains the implementation of the classes responsible for -// generating specialized makefiles 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/Log_Msg.h" - -#include "Library.h" - -ACE_RCSID(src, Library, "$Id$") - -Makefile_Generator::Makefile_Generator (const ACE_CString& libname) - : makefile_(), - libname_(libname), - makefilename_() -{ - makefilename_ = "Makefile." + libname_ + "_subset"; -} - -Makefile_Generator::~Makefile_Generator () -{ -} - -void -Makefile_Generator::write_file (const ACE_CString& file) -{ - makefile_ << " \\\n\t" << file << flush; -} - -void -Makefile_Generator::write_prolog (const ACE_CString& path) -{ - ACE_CString fname (path + "/" + makefilename_); - ACE_DEBUG ((LM_DEBUG, "writing file %s\n",fname.c_str())); - makefile_.open(fname.c_str()); - if (!makefile_) - ACE_DEBUG ((LM_DEBUG,"makefile open failed\n")); - - makefile_ - << "#--------------------------------------------------------------------" - << endl; - makefile_ - << "# Generated makefile for producing a subset of the " - << libname_ << " library " << endl; - makefile_ - << "#--------------------------------------------------------------------" - << endl; - - makefile_ << "\nMAKEFILE = " << makefilename_ << endl; - makefile_ << "LIB = lib" << libname_ << "_subset.a" << endl; - makefile_ << "SHLIB = lib" << libname_ << "_subset.$(SOEXT)" << endl; - makefile_ << "\nFILES =" << flush; -} - -void -Makefile_Generator::write_epilog () -{ - makefile_ << "\n" << endl; - this->write_libdeps(); - makefile_ - << "#--------------------------------------------------------" << endl; - makefile_ - << "# Include macros and targets" << endl; - makefile_ - << "#--------------------------------------------------------" << endl; - makefile_ - << "include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU" << endl; - - this->write_initial_rules(); - - makefile_ - << "\nLSRC = $(addsuffix .cpp,$(FILES))\n" << endl; - - makefile_ - << "include $(ACE_ROOT)/include/makeinclude/macros.GNU" << endl; - makefile_ - << "include $(ACE_ROOT)/include/makeinclude/rules.common.GNU" << endl; - makefile_ - << "include $(ACE_ROOT)/include/makeinclude/rules.nested.GNU" << endl; - makefile_ - << "include $(ACE_ROOT)/include/makeinclude/rules.lib.GNU" << endl; - makefile_ - << "include $(ACE_ROOT)/include/makeinclude/rules.local.GNU" << endl; - - this->write_final_rules(); - - makefile_ << "\n" << endl; - - makefile_ - << "#-----------------------------------------------------------" << endl; - makefile_ - << "# Dependencies" << endl; - makefile_ - << "#-----------------------------------------------------------" << endl; - makefile_ - << "# DO NOT DELETE THIS LINE -- g++dep uses it." << endl; - makefile_ - << "# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY." << endl; - makefile_ - << "# IF YOU PUT ANYTHING HERE IT WILL GO AWAY" << endl; - - makefile_.close(); -} - -void -Makefile_Generator::write_libdeps() -{ - // nothing to do -} - -void -Makefile_Generator::write_initial_rules() -{ - // nothing to do -} - -void -Makefile_Generator::write_final_rules() -{ - // nothing to do -} - -//----------------------------------------------------------------------------- -Make_ACE_Dep_Lib::Make_ACE_Dep_Lib (const ACE_CString& libname) - : Makefile_Generator(libname) -{} - -void -Make_ACE_Dep_Lib::write_libdeps() -{ - makefile_ << "ACE_SHLIBS = -lACE_subset" << endl; -} - -//----------------------------------------------------------------------------- -Make_TAO_Lib::Make_TAO_Lib (const ACE_CString& libname) - : Make_ACE_Dep_Lib(libname) -{} - -void -Make_TAO_Lib::write_libdeps() -{ - makefile_ << "ifndef TAO_ROOT" << endl; - makefile_ << "TAO_ROOT = $(ACE_ROOT)/TAO" << endl; - makefile_ << "endif" << endl; - - makefile_ << "ACE_SHLIBS = -lACE_subset" << endl; -} - -void -Make_TAO_Lib::write_initial_rules() -{ - makefile_ << "include $(TAO_ROOT)/rules.tao.GNU" << endl; -} - -void -Make_TAO_Lib::write_final_rules() -{ - makefile_ << "include $(TAO_ROOT)/taoconfig.mk" << endl; -} - -//----------------------------------------------------------------------------- -Make_TAO_Dep_Lib::Make_TAO_Dep_Lib (const ACE_CString& libname) - : Make_TAO_Lib(libname) -{} - -void -Make_TAO_Dep_Lib::write_libdeps() -{ - makefile_ << "ifndef TAO_ROOT" << endl; - makefile_ << "TAO_ROOT = $(ACE_ROOT)/TAO" << endl; - makefile_ << "endif" << endl; - - makefile_ << "ACE_SHLIBS = -lTAO_subset -lACE_subset" << endl; -} - -//----------------------------------------------------------------------------- - -Library::Library (const char *name) - : name_(name), - path_(), - num_modules_(0), - num_exports_(0), - num_extrefs_(0), - modules_(0), - exported_(0), - makefile_(0) -{ - if (name_ == "ACE") - makefile_ = new Makefile_Generator(name_); - else if (name_.find ("ACE_") == 0) - makefile_ = new Make_ACE_Dep_Lib (name_); - else if (name_ == "TAO") - makefile_ = new Make_TAO_Lib (name_); - else - makefile_ = new Make_TAO_Dep_Lib (name_); -} - -Library::~Library () -{ - delete makefile_; - int i; - for (i = 0; i < num_modules_; delete modules_[i++]); - delete [] modules_; -} - -void -Library::set_path (const char *p) -{ - char abspath[1000]; - memset (abspath,0,1000); - int abspathlen = ACE_OS::readlink(p,abspath,999); - ACE_CString path (p); - if (abspathlen > 0) { - abspath[abspathlen] = 0; - path = abspath; - } - - int 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; -} - -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); -} - -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) - 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_)); - - makefile_->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; - } - makefile_->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; - } - - makefile_->write_epilog(); -} |