* ./crlcore:
- New: Inspector support enabled for AllianceFramework and most of it's sub-objects. Attached as a property on the DataBase to be browsable through the Inspector. - Change: Now also read a <.coriolis2.configuration.xml> in the user's root account (before the directory specific one and after the system- wide). - Change: In verbose mode, also display what environment files are being read. - Change: No more reference to CRL_CATA_LIB in error messages. - Change: Suppress stratus2sxlib obsolete library.
This commit is contained in:
parent
928b3a0a2a
commit
7d49e75797
|
@ -25,7 +25,6 @@
|
||||||
<library>${CELL_TOP}/cells/rflib</library>
|
<library>${CELL_TOP}/cells/rflib</library>
|
||||||
<library>${CELL_TOP}/cells/rf2lib</library>
|
<library>${CELL_TOP}/cells/rf2lib</library>
|
||||||
<library>${CELL_TOP}/cells/pxlib</library>
|
<library>${CELL_TOP}/cells/pxlib</library>
|
||||||
<library>${CORIOLIS_TOP}/share/cells/stratus2sxlib</library>
|
|
||||||
</system>
|
</system>
|
||||||
</libraries>
|
</libraries>
|
||||||
<formats>
|
<formats>
|
||||||
|
|
|
@ -50,12 +50,82 @@ namespace CRL {
|
||||||
using Hurricane::Graphics;
|
using Hurricane::Graphics;
|
||||||
using Hurricane::ForEachIterator;
|
using Hurricane::ForEachIterator;
|
||||||
using Hurricane::Instance;
|
using Hurricane::Instance;
|
||||||
|
using Hurricane::PrivateProperty;
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Class : "CRL::AllianceFrameworkProperty".
|
||||||
|
|
||||||
|
|
||||||
|
class AllianceFrameworkProperty : public PrivateProperty {
|
||||||
|
public:
|
||||||
|
static AllianceFrameworkProperty* create ( AllianceFramework* );
|
||||||
|
static Name getPropertyName ();
|
||||||
|
virtual Name getName () const;
|
||||||
|
inline AllianceFramework* getFramework () const;
|
||||||
|
virtual string _getTypeName () const;
|
||||||
|
virtual Record* _getRecord () const;
|
||||||
|
private:
|
||||||
|
static Name _name;
|
||||||
|
AllianceFramework* _framework;
|
||||||
|
private:
|
||||||
|
inline AllianceFrameworkProperty ( AllianceFramework* );
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Name AllianceFrameworkProperty::_name = "AllianceFramework";
|
||||||
|
|
||||||
|
|
||||||
|
inline AllianceFrameworkProperty::AllianceFrameworkProperty ( AllianceFramework* af )
|
||||||
|
: PrivateProperty(), _framework(af)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
inline AllianceFramework* AllianceFrameworkProperty::getFramework () const
|
||||||
|
{ return _framework; }
|
||||||
|
|
||||||
|
|
||||||
|
AllianceFrameworkProperty* AllianceFrameworkProperty::create ( AllianceFramework* af )
|
||||||
|
{
|
||||||
|
AllianceFrameworkProperty *property = new AllianceFrameworkProperty ( af );
|
||||||
|
|
||||||
|
property->_postCreate ();
|
||||||
|
return property;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Name AllianceFrameworkProperty::getPropertyName ()
|
||||||
|
{ return _name; }
|
||||||
|
|
||||||
|
|
||||||
|
Name AllianceFrameworkProperty::getName () const
|
||||||
|
{ return getPropertyName(); }
|
||||||
|
|
||||||
|
|
||||||
|
string AllianceFrameworkProperty::_getTypeName () const
|
||||||
|
{ return _TName ( "AllianceFrameworkProperty" ); }
|
||||||
|
|
||||||
|
|
||||||
|
Record* AllianceFrameworkProperty::_getRecord () const
|
||||||
|
{
|
||||||
|
Record* record = PrivateProperty::_getRecord();
|
||||||
|
if ( record ) {
|
||||||
|
record->add( getSlot("_name" ,_name ) );
|
||||||
|
record->add( getSlot("_framework",_framework) );
|
||||||
|
}
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Class : "CRL::AllianceFramework".
|
||||||
|
|
||||||
|
|
||||||
AllianceFramework* AllianceFramework::_singleton = NULL;
|
AllianceFramework* AllianceFramework::_singleton = NULL;
|
||||||
const Name AllianceFramework::_parentLibraryName = "AllianceFramework";
|
const Name AllianceFramework::_parentLibraryName = "AllianceFramework";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AllianceFramework::AllianceFramework ()
|
AllianceFramework::AllianceFramework ()
|
||||||
: _environment()
|
: _environment()
|
||||||
, _parsers()
|
, _parsers()
|
||||||
|
@ -70,9 +140,13 @@ namespace CRL {
|
||||||
System::get ();
|
System::get ();
|
||||||
|
|
||||||
DataBase* db = DataBase::getDB ();
|
DataBase* db = DataBase::getDB ();
|
||||||
if ( !db )
|
if ( not db )
|
||||||
db = DataBase::create ();
|
db = DataBase::create ();
|
||||||
|
|
||||||
|
db->put ( AllianceFrameworkProperty::create(this) );
|
||||||
|
|
||||||
|
cmess1 << " o Reading Alliance Environment." << endl;
|
||||||
|
|
||||||
_environment.loadFromShell ();
|
_environment.loadFromShell ();
|
||||||
_environment.loadFromXml ();
|
_environment.loadFromXml ();
|
||||||
|
|
||||||
|
@ -105,9 +179,9 @@ namespace CRL {
|
||||||
|
|
||||||
cmess2 << " o Loading libraries (working first)." << endl;
|
cmess2 << " o Loading libraries (working first)." << endl;
|
||||||
for ( unsigned i=0 ; i<LIBRARIES.getSize() ; i++ ) {
|
for ( unsigned i=0 ; i<LIBRARIES.getSize() ; i++ ) {
|
||||||
createLibrary ( LIBRARIES[i], flags );
|
createLibrary ( LIBRARIES[i].getPath(), flags, LIBRARIES[i].getName() );
|
||||||
|
|
||||||
cmess2 << " - \"" << LIBRARIES[i] << "\"";
|
cmess2 << " - \"" << LIBRARIES[i].getPath() << "\"";
|
||||||
cmess2.flush();
|
cmess2.flush();
|
||||||
|
|
||||||
if ( flags&HasCatalog ) cmess2 << " [have CATAL]." << endl;
|
if ( flags&HasCatalog ) cmess2 << " [have CATAL]." << endl;
|
||||||
|
@ -286,19 +360,14 @@ namespace CRL {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AllianceLibrary* AllianceFramework::getAllianceLibrary ( const Name &path, unsigned int& flags )
|
AllianceLibrary* AllianceFramework::getAllianceLibrary ( const Name &libName, unsigned int& flags )
|
||||||
{
|
{
|
||||||
|
|
||||||
string spath = getString ( path );
|
|
||||||
size_t slash = spath.rfind ( '/' );
|
|
||||||
string sname = spath.substr ( (slash!=string::npos)?slash+1:0 );
|
|
||||||
|
|
||||||
for ( size_t ilib=0 ; ilib<_libraries.size() ; ++ilib ) {
|
for ( size_t ilib=0 ; ilib<_libraries.size() ; ++ilib ) {
|
||||||
if ( _libraries[ilib]->getLibrary()->getName() == sname )
|
if ( _libraries[ilib]->getLibrary()->getName() == libName )
|
||||||
return _libraries[ilib];
|
return _libraries[ilib];
|
||||||
}
|
}
|
||||||
|
|
||||||
return (flags&CreateLibrary) ? createLibrary ( getString(path), flags ) : NULL;
|
return (flags&CreateLibrary) ? createLibrary ( getString(libName), flags ) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -338,7 +407,6 @@ namespace CRL {
|
||||||
|
|
||||||
// Transmit all flags except thoses related to views.
|
// Transmit all flags except thoses related to views.
|
||||||
loadMode |= (mode & (!Catalog::State::Views));
|
loadMode |= (mode & (!Catalog::State::Views));
|
||||||
|
|
||||||
parser = & ( _parsers.getParserSlot ( name, loadMode, _environment ) );
|
parser = & ( _parsers.getParserSlot ( name, loadMode, _environment ) );
|
||||||
|
|
||||||
// Try to open cell file (file extention is supplied by the parser).
|
// Try to open cell file (file extention is supplied by the parser).
|
||||||
|
@ -372,10 +440,9 @@ namespace CRL {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AllianceLibrary* AllianceFramework::createLibrary ( const string& path, unsigned int& flags )
|
AllianceLibrary* AllianceFramework::createLibrary ( const string& path, unsigned int& flags, string libName )
|
||||||
{
|
{
|
||||||
size_t slash = path.rfind ( '/' );
|
if ( libName.empty() ) libName = SearchPath::extractLibName(path);
|
||||||
string libName = path.substr ( (slash!=string::npos)?slash+1:0 );
|
|
||||||
|
|
||||||
flags &= ~HasCatalog;
|
flags &= ~HasCatalog;
|
||||||
|
|
||||||
|
@ -387,7 +454,7 @@ namespace CRL {
|
||||||
}
|
}
|
||||||
|
|
||||||
SearchPath& LIBRARIES = _environment.getLIBRARIES ();
|
SearchPath& LIBRARIES = _environment.getLIBRARIES ();
|
||||||
if ( not (flags & InSearchPath) ) LIBRARIES.prepend ( path );
|
if ( not (flags & InSearchPath) ) LIBRARIES.prepend ( path, libName );
|
||||||
else LIBRARIES.select ( path );
|
else LIBRARIES.select ( path );
|
||||||
|
|
||||||
library = new AllianceLibrary ( path, Library::create(getParentLibrary(),libName) );
|
library = new AllianceLibrary ( path, Library::create(getParentLibrary(),libName) );
|
||||||
|
@ -405,11 +472,8 @@ namespace CRL {
|
||||||
|
|
||||||
if ( not parser.loadByLib() ) return library;
|
if ( not parser.loadByLib() ) return library;
|
||||||
|
|
||||||
if ( slash == path.npos ) return library;
|
|
||||||
string file = path.substr(slash+1,path.size()-slash);
|
|
||||||
|
|
||||||
// Load the whole library.
|
// Load the whole library.
|
||||||
if ( ! _readLocate(file,Catalog::State::State::Logical,true) ) return library;
|
if ( ! _readLocate(libName,Catalog::State::State::Logical,true) ) return library;
|
||||||
|
|
||||||
// Call the parser function.
|
// Call the parser function.
|
||||||
(parser.getParsLib())( _environment.getLIBRARIES().getSelected() , library->getLibrary() , _catalog );
|
(parser.getParsLib())( _environment.getLIBRARIES().getSelected() , library->getLibrary() , _catalog );
|
||||||
|
@ -690,4 +754,18 @@ namespace CRL {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string AllianceFramework::_getString () const
|
||||||
|
{ return "<AllianceFramework>"; }
|
||||||
|
|
||||||
|
|
||||||
|
Record *AllianceFramework::_getRecord () const
|
||||||
|
{
|
||||||
|
Record* record = new Record ( "<AllianceFramework>" );
|
||||||
|
record->add ( getSlot ( "_environment", &_environment) );
|
||||||
|
record->add ( getSlot ( "_libraries" , &_libraries ) );
|
||||||
|
record->add ( getSlot ( "_catalog" , &_catalog ) );
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of CRL namespace.
|
} // End of CRL namespace.
|
||||||
|
|
|
@ -210,6 +210,8 @@ namespace {
|
||||||
envPath = env.getCORIOLIS_TOP() + "/" + sysConfDir + "/coriolis2/environment.alliance.xml" ;
|
envPath = env.getCORIOLIS_TOP() + "/" + sysConfDir + "/coriolis2/environment.alliance.xml" ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmess1 << " - <" << envPath << ">." << endl;
|
||||||
|
|
||||||
return ep._load ( envPath, warnNotFound );
|
return ep._load ( envPath, warnNotFound );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -391,6 +393,7 @@ namespace {
|
||||||
{
|
{
|
||||||
unsigned int mode = Environment::Append;
|
unsigned int mode = Environment::Append;
|
||||||
QString modeAttribute = _reader->attributes().value("mode").toString();
|
QString modeAttribute = _reader->attributes().value("mode").toString();
|
||||||
|
QString nameAttribute = _reader->attributes().value("name").toString();
|
||||||
|
|
||||||
if ( not modeAttribute.isEmpty() ) {
|
if ( not modeAttribute.isEmpty() ) {
|
||||||
if ( modeAttribute == "append" ) mode = Environment::Append;
|
if ( modeAttribute == "append" ) mode = Environment::Append;
|
||||||
|
@ -403,9 +406,13 @@ namespace {
|
||||||
|
|
||||||
string library = readTextAsString().toStdString();
|
string library = readTextAsString().toStdString();
|
||||||
expandVariables ( library );
|
expandVariables ( library );
|
||||||
|
|
||||||
|
string libName = nameAttribute.toStdString();
|
||||||
|
if ( libName.empty() ) libName = SearchPath::extractLibName ( library );
|
||||||
|
|
||||||
switch ( _state ) {
|
switch ( _state ) {
|
||||||
case WorkingLibrary: _environment.setWORKING_LIBRARY ( library.c_str() ); break;
|
case WorkingLibrary: _environment.setWORKING_LIBRARY ( library.c_str() ); break;
|
||||||
case SystemLibrary: _environment.addSYSTEM_LIBRARY ( library.c_str(), mode ); break;
|
case SystemLibrary: _environment.addSYSTEM_LIBRARY ( library.c_str(), libName.c_str(), mode ); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -651,14 +658,14 @@ namespace CRL {
|
||||||
s << " o Libraries.\n"
|
s << " o Libraries.\n"
|
||||||
<< " - Catalog := \"" << _CATALOG << "\"\n"
|
<< " - Catalog := \"" << _CATALOG << "\"\n"
|
||||||
<< " - Working Library:\n"
|
<< " - Working Library:\n"
|
||||||
<< " 0:\"" << _LIBRARIES[0] << "\"\n"
|
<< " 0:\"" << _LIBRARIES[0].getPath() << "\"\n"
|
||||||
<< " - System Libraries:\n";
|
<< " - System Libraries:\n";
|
||||||
|
|
||||||
if ( _LIBRARIES.getSize() <= 1 ) {
|
if ( _LIBRARIES.getSize() <= 1 ) {
|
||||||
s << " <not set or empty>.\n";
|
s << " <not set or empty>.\n";
|
||||||
} else {
|
} else {
|
||||||
for ( size_t i = 1; i < _LIBRARIES.getSize() ; i++ ) {
|
for ( size_t i = 1; i < _LIBRARIES.getSize() ; i++ ) {
|
||||||
s << " " << setw(2) << i << ":\"" << _LIBRARIES[i] << "\"\n";
|
s << " " << setw(2) << i << ":\"" << _LIBRARIES[i].getPath() << "\"\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -737,26 +744,44 @@ namespace CRL {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Environment::addSYSTEM_LIBRARY ( const char* value, unsigned int mode )
|
void Environment::addSYSTEM_LIBRARY ( const char* value, const char* libName, unsigned int mode )
|
||||||
{
|
{
|
||||||
if ( mode == Prepend ) { _LIBRARIES.prepend(value); return; }
|
if ( mode == Prepend ) { _LIBRARIES.prepend(value,libName); return; }
|
||||||
if ( mode == Append ) { _LIBRARIES.append (value); return; }
|
if ( mode == Append ) { _LIBRARIES.append (value,libName); return; }
|
||||||
|
|
||||||
string newLibName = _getLibraryName ( value );
|
string newLibName = libName;
|
||||||
for ( size_t i=0 ; i < _LIBRARIES.getSize() ; ++i ) {
|
for ( size_t i=0 ; i < _LIBRARIES.getSize() ; ++i ) {
|
||||||
if ( newLibName == _getLibraryName(_LIBRARIES[i]) ) {
|
if ( newLibName == _LIBRARIES[i].getName() ) {
|
||||||
_LIBRARIES.replace ( value, i );
|
_LIBRARIES.replace ( value, newLibName, i );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_LIBRARIES.append (value);
|
_LIBRARIES.append (value,libName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
string Environment::_getLibraryName ( const std::string& path )
|
string Environment::_getString () const
|
||||||
|
{ return "<Environment>"; }
|
||||||
|
|
||||||
|
|
||||||
|
Record *Environment::_getRecord () const
|
||||||
{
|
{
|
||||||
size_t slash = path.rfind ( '/' );
|
Record* record = new Record ( "<Environment>" );
|
||||||
return path.substr ( (slash!=string::npos)?slash+1:0 );
|
record->add ( getSlot ( "_CORIOLIS_TOP" , &_CORIOLIS_TOP ) );
|
||||||
|
record->add ( getSlot ( "_displayStyle" , &_displayStyle ) );
|
||||||
|
record->add ( getSlot ( "_SCALE_X" , &_SCALE_X ) );
|
||||||
|
record->add ( getSlot ( "_SYMBOLIC_TECHNOLOGY", &_SYMBOLIC_TECHNOLOGY ) );
|
||||||
|
record->add ( getSlot ( "_REAL_TECHNOLOGY" , &_REAL_TECHNOLOGY ) );
|
||||||
|
record->add ( getSlot ( "_DISPLAY" , &_DISPLAY ) );
|
||||||
|
record->add ( getSlot ( "_IN_LO" , &_IN_LO ) );
|
||||||
|
record->add ( getSlot ( "_IN_PH" , &_IN_PH ) );
|
||||||
|
record->add ( getSlot ( "_POWER" , &_POWER ) );
|
||||||
|
record->add ( getSlot ( "_GROUND" , &_GROUND ) );
|
||||||
|
record->add ( getSlot ( "_CLOCK" , &_CLOCK ) );
|
||||||
|
record->add ( getSlot ( "_OBSTACLE" , &_OBSTACLE ) );
|
||||||
|
record->add ( getSlot ( "_pad" , &_pad ) );
|
||||||
|
record->add ( getSlot ( "_LIBRARIES" , &_LIBRARIES ) );
|
||||||
|
return record;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,24 @@ namespace CRL {
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
string SearchPath::Element::_getString () const
|
||||||
|
{
|
||||||
|
ostringstream s;
|
||||||
|
|
||||||
|
s << "<SearchPath::Element " << _name << ":" << _path << ">";
|
||||||
|
return s.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Record *SearchPath::Element::_getRecord () const
|
||||||
|
{
|
||||||
|
Record* record = new Record ( "<SearchPath::Element>" );
|
||||||
|
record->add ( getSlot ( "_path", &_path ) );
|
||||||
|
record->add ( getSlot ( "_name", &_name ) );
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
const size_t SearchPath::npos = (size_t)-1;
|
const size_t SearchPath::npos = (size_t)-1;
|
||||||
const string SearchPath::_selectFailed = "<File or directory not found>";
|
const string SearchPath::_selectFailed = "<File or directory not found>";
|
||||||
|
|
||||||
|
@ -49,9 +67,16 @@ namespace CRL {
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
bool SearchPath::_canOpen ( const string& directory, const string& file, ios::openmode mode )
|
string SearchPath::extractLibName ( const string& path )
|
||||||
{
|
{
|
||||||
_selected = directory + "/" + file;
|
size_t slash = path.rfind ( '/' );
|
||||||
|
return path.substr ( (slash!=string::npos) ? slash+1 : 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool SearchPath::_canOpen ( const SearchPath::Element& directory, const string& file, ios::openmode mode )
|
||||||
|
{
|
||||||
|
_selected = directory.getPath() + "/" + file;
|
||||||
fstream filestream ( _selected.c_str(), mode );
|
fstream filestream ( _selected.c_str(), mode );
|
||||||
if ( filestream.is_open() ) {
|
if ( filestream.is_open() ) {
|
||||||
filestream.close ();
|
filestream.close ();
|
||||||
|
@ -62,30 +87,30 @@ namespace CRL {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SearchPath::prepend ( const std::string& path )
|
void SearchPath::prepend ( const std::string& path, const std::string& name )
|
||||||
{
|
{
|
||||||
vector<string>::iterator ipath = _paths.begin();
|
vector<Element>::iterator ipath = _paths.begin();
|
||||||
|
|
||||||
_index = 0;
|
_index = 0;
|
||||||
if ( ipath != _paths.end() ) { ++ipath; ++_index; }
|
if ( ipath != _paths.end() ) { ++ipath; ++_index; }
|
||||||
|
|
||||||
_paths.insert ( ipath, path );
|
_paths.insert ( ipath, Element(path,name) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SearchPath::replace ( const string& path, size_t index )
|
void SearchPath::replace ( const string& path, const std::string& name, size_t index )
|
||||||
{
|
{
|
||||||
_index = index;
|
_index = index;
|
||||||
if ( index < _paths.size() )
|
if ( index < _paths.size() )
|
||||||
_paths[index] = path;
|
_paths[index] = Element(path,name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SearchPath::select ( const string& path )
|
void SearchPath::select ( const string& path )
|
||||||
{
|
{
|
||||||
for ( size_t ipath=0 ; ipath < _paths.size() ; ++ipath ) {
|
for ( size_t ipath=0 ; ipath < _paths.size() ; ++ipath ) {
|
||||||
if ( _paths[ipath] == path ) {
|
if ( _paths[ipath].getPath() == path ) {
|
||||||
_selected = _paths[ipath];
|
_selected = _paths[ipath].getPath();
|
||||||
_index = ipath;
|
_index = ipath;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -113,17 +138,17 @@ namespace CRL {
|
||||||
size_t SearchPath::hasPath ( const string& path ) const
|
size_t SearchPath::hasPath ( const string& path ) const
|
||||||
{
|
{
|
||||||
for ( size_t i=0 ; i < _paths.size() ; i++ )
|
for ( size_t i=0 ; i < _paths.size() ; i++ )
|
||||||
if ( _paths[i] == path ) return i;
|
if ( _paths[i].getPath() == path ) return i;
|
||||||
return npos;
|
return npos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const string& SearchPath::operator[] ( size_t index ) const
|
const SearchPath::Element& SearchPath::operator[] ( size_t index ) const
|
||||||
{
|
{
|
||||||
static const string OutOfBound = "<index out of bound>";
|
static Element nullElement;
|
||||||
|
|
||||||
if ( index < _paths.size() ) return _paths[index];
|
if ( index < _paths.size() ) return _paths[index];
|
||||||
return OutOfBound;
|
return nullElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,8 @@ namespace {
|
||||||
|
|
||||||
std::string environmentMapper ( std::string environmentName )
|
std::string environmentMapper ( std::string environmentName )
|
||||||
{
|
{
|
||||||
if ( environmentName == "CORIOLIS_TOP" ) return "coriolis_top";
|
if ( environmentName == "HOME" ) return "home";
|
||||||
|
else if ( environmentName == "CORIOLIS_TOP" ) return "coriolis_top";
|
||||||
else if ( environmentName == "STRATUS_MAPPING_NAME" ) return "stratus_mapping_name";
|
else if ( environmentName == "STRATUS_MAPPING_NAME" ) return "stratus_mapping_name";
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
@ -236,6 +237,8 @@ namespace CRL {
|
||||||
// Environment variables reading.
|
// Environment variables reading.
|
||||||
boptions::options_description options ("Environment Variables");
|
boptions::options_description options ("Environment Variables");
|
||||||
options.add_options()
|
options.add_options()
|
||||||
|
( "home" , boptions::value<string>()
|
||||||
|
, "User's home directory." )
|
||||||
( "coriolis_top" , boptions::value<string>()->default_value(CORIOLIS_TOP)
|
( "coriolis_top" , boptions::value<string>()->default_value(CORIOLIS_TOP)
|
||||||
, "The root directory of the Coriolis installation tree." )
|
, "The root directory of the Coriolis installation tree." )
|
||||||
( "stratus_mapping_name", boptions::value<string>()
|
( "stratus_mapping_name", boptions::value<string>()
|
||||||
|
@ -260,7 +263,7 @@ namespace CRL {
|
||||||
bfs::path sysConfDir ( SYS_CONF_DIR );
|
bfs::path sysConfDir ( SYS_CONF_DIR );
|
||||||
if ( not sysConfDir.has_root_path() ) {
|
if ( not sysConfDir.has_root_path() ) {
|
||||||
if ( arguments.count("coriolis_top") ) {
|
if ( arguments.count("coriolis_top") ) {
|
||||||
const boptions::variable_value& value = arguments["coriolis_top"];
|
// const boptions::variable_value& value = arguments["coriolis_top"];
|
||||||
// cerr << "value:"
|
// cerr << "value:"
|
||||||
// << " empty:" << boolalpha << value.empty()
|
// << " empty:" << boolalpha << value.empty()
|
||||||
// << " defaulted:" << boolalpha << value.defaulted()
|
// << " defaulted:" << boolalpha << value.defaulted()
|
||||||
|
@ -320,6 +323,14 @@ namespace CRL {
|
||||||
,systemConfFile.string().c_str()) << endl;
|
,systemConfFile.string().c_str()) << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool homeConfFound = false;
|
||||||
|
bfs::path homeConfFile = arguments["home"].as<string>();
|
||||||
|
homeConfFile /= ".coriolis2.configuration.xml";
|
||||||
|
if ( bfs::exists(homeConfFile) ) {
|
||||||
|
homeConfFound = true;
|
||||||
|
conf->readFromFile ( homeConfFile.string() );
|
||||||
|
}
|
||||||
|
|
||||||
bool dotConfFound = false;
|
bool dotConfFound = false;
|
||||||
bfs::path dotConfFile = "./.coriolis2.configuration.xml";
|
bfs::path dotConfFile = "./.coriolis2.configuration.xml";
|
||||||
if ( bfs::exists(dotConfFile) ) {
|
if ( bfs::exists(dotConfFile) ) {
|
||||||
|
@ -340,6 +351,7 @@ namespace CRL {
|
||||||
if ( cmess1.enabled() ) {
|
if ( cmess1.enabled() ) {
|
||||||
cmess1 << " o Reading Configuration. " << endl;
|
cmess1 << " o Reading Configuration. " << endl;
|
||||||
if (systemConfFound) cmess1 << " - <" << systemConfFile.string() << ">." << endl;
|
if (systemConfFound) cmess1 << " - <" << systemConfFile.string() << ">." << endl;
|
||||||
|
if (homeConfFound) cmess1 << " - <" << homeConfFile.string() << ">." << endl;
|
||||||
if (dotConfFound) cmess1 << " - <" << dotConfFile.string() << ">." << endl;
|
if (dotConfFound) cmess1 << " - <" << dotConfFile.string() << ">." << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1282,7 +1282,7 @@ void vstParser ( const string cellPath, Cell *cell )
|
||||||
, Catalog::State::Views
|
, Catalog::State::Views
|
||||||
, __ys->_state->getDepth()-1) ) {
|
, __ys->_state->getDepth()-1) ) {
|
||||||
throw Error ( "CParsVst():\n"
|
throw Error ( "CParsVst():\n"
|
||||||
" Unable to find cell \"%s\", please check your CRL_CATA_LIB.\n"
|
" Unable to find cell \"%s\", please check your <.environment.alliance.xml>.\n"
|
||||||
, getString(__ys->_cellQueue.front()).c_str()
|
, getString(__ys->_cellQueue.front()).c_str()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,9 +79,9 @@ namespace CRL {
|
||||||
inline Library* getParentLibrary ();
|
inline Library* getParentLibrary ();
|
||||||
Library* getLibrary ( unsigned int index );
|
Library* getLibrary ( unsigned int index );
|
||||||
AllianceLibrary* getAllianceLibrary ( unsigned int index );
|
AllianceLibrary* getAllianceLibrary ( unsigned int index );
|
||||||
AllianceLibrary* getAllianceLibrary ( const Name& path, unsigned int& flags );
|
AllianceLibrary* getAllianceLibrary ( const Name& libName, unsigned int& flags );
|
||||||
AllianceLibrary* getAllianceLibrary ( Library* );
|
AllianceLibrary* getAllianceLibrary ( Library* );
|
||||||
AllianceLibrary* createLibrary ( const string& path, unsigned int& flags );
|
AllianceLibrary* createLibrary ( const string& path, unsigned int& flags, string libName="" );
|
||||||
void saveLibrary ( Library* );
|
void saveLibrary ( Library* );
|
||||||
void saveLibrary ( AllianceLibrary* );
|
void saveLibrary ( AllianceLibrary* );
|
||||||
RoutingGauge* getRoutingGauge ( const Name& name="" );
|
RoutingGauge* getRoutingGauge ( const Name& name="" );
|
||||||
|
@ -99,6 +99,10 @@ namespace CRL {
|
||||||
unsigned int loadLibraryCells ( Library* );
|
unsigned int loadLibraryCells ( Library* );
|
||||||
unsigned int loadLibraryCells ( const Name& );
|
unsigned int loadLibraryCells ( const Name& );
|
||||||
static size_t getInstancesCount ( Cell*, unsigned int flags );
|
static size_t getInstancesCount ( Cell*, unsigned int flags );
|
||||||
|
// Hurricane Managment.
|
||||||
|
inline string _getTypeName () const;
|
||||||
|
string _getString () const;
|
||||||
|
Record* _getRecord () const;
|
||||||
|
|
||||||
// Internals - Attributes.
|
// Internals - Attributes.
|
||||||
protected:
|
protected:
|
||||||
|
@ -154,9 +158,13 @@ namespace CRL {
|
||||||
// TEMPORARY.
|
// TEMPORARY.
|
||||||
inline const Name AllianceFramework::getDefaultCGPinLayerName
|
inline const Name AllianceFramework::getDefaultCGPinLayerName
|
||||||
() const { return "CALU1"; }
|
() const { return "CALU1"; }
|
||||||
|
inline string AllianceFramework::_getTypeName () const { return "AllianceFramework"; }
|
||||||
|
|
||||||
|
|
||||||
} // End of CRL namespace.
|
} // End of CRL namespace.
|
||||||
|
|
||||||
|
|
||||||
|
INSPECTOR_P_SUPPORT(CRL::AllianceFramework);
|
||||||
|
|
||||||
|
|
||||||
#endif // __CRL_ALLIANCE_FRAMEWORK__
|
#endif // __CRL_ALLIANCE_FRAMEWORK__
|
||||||
|
|
|
@ -118,4 +118,7 @@ namespace CRL {
|
||||||
} // End of CRL namespace.
|
} // End of CRL namespace.
|
||||||
|
|
||||||
|
|
||||||
|
INSPECTOR_P_SUPPORT(CRL::AllianceLibrary);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -123,8 +123,8 @@ namespace CRL {
|
||||||
inline void setDepth ( unsigned int depth );
|
inline void setDepth ( unsigned int depth );
|
||||||
// Hurricane Management.
|
// Hurricane Management.
|
||||||
inline string _getTypeName () const;
|
inline string _getTypeName () const;
|
||||||
inline string _getString () const;
|
string _getString () const;
|
||||||
inline Record* _getRecord () const;
|
Record* _getRecord () const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Internal - Attributes.
|
// Internal - Attributes.
|
||||||
|
@ -389,5 +389,8 @@ namespace CRL {
|
||||||
|
|
||||||
inline std::string getPrint ( const CRL::Catalog &CATAL ) { return CATAL._getPrint(); }
|
inline std::string getPrint ( const CRL::Catalog &CATAL ) { return CATAL._getPrint(); }
|
||||||
|
|
||||||
|
INSPECTOR_P_SUPPORT(CRL::Catalog);
|
||||||
|
INSPECTOR_P_SUPPORT(CRL::Catalog::State);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
#include <regex.h>
|
#include <regex.h>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include <crlcore/SearchPath.h>
|
#include <crlcore/SearchPath.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,10 +91,13 @@ namespace CRL {
|
||||||
void setPad ( const char* value );
|
void setPad ( const char* value );
|
||||||
inline void setCATALOG ( const char* value );
|
inline void setCATALOG ( const char* value );
|
||||||
inline void setWORKING_LIBRARY ( const char* value );
|
inline void setWORKING_LIBRARY ( const char* value );
|
||||||
void addSYSTEM_LIBRARY ( const char* value, unsigned int mode=Append );
|
void addSYSTEM_LIBRARY ( const char* value, const char* libName, unsigned int mode=Append );
|
||||||
|
|
||||||
// Methods.
|
// Methods.
|
||||||
std::string getPrint () const;
|
std::string getPrint () const;
|
||||||
|
inline std::string _getTypeName () const;
|
||||||
|
std::string _getString () const;
|
||||||
|
Record* _getRecord () const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Internal: Attributes.
|
// Internal: Attributes.
|
||||||
|
@ -126,7 +128,6 @@ namespace CRL {
|
||||||
private:
|
private:
|
||||||
void _setRegex ( regex_t* regex, const std::string& pattern, const char* name );
|
void _setRegex ( regex_t* regex, const std::string& pattern, const char* name );
|
||||||
void _check () const;
|
void _check () const;
|
||||||
static std::string _getLibraryName ( const std::string& path );
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -159,10 +160,14 @@ namespace CRL {
|
||||||
inline void Environment::setOUT_LO ( const char* value ) { _OUT_LO = value; }
|
inline void Environment::setOUT_LO ( const char* value ) { _OUT_LO = value; }
|
||||||
inline void Environment::setOUT_PH ( const char* value ) { _OUT_PH = value; }
|
inline void Environment::setOUT_PH ( const char* value ) { _OUT_PH = value; }
|
||||||
inline void Environment::setCATALOG ( const char* value ) { _CATALOG = value; }
|
inline void Environment::setCATALOG ( const char* value ) { _CATALOG = value; }
|
||||||
inline void Environment::setWORKING_LIBRARY ( const char* value ) { _LIBRARIES.replace(value,0); }
|
inline void Environment::setWORKING_LIBRARY ( const char* value ) { _LIBRARIES.replace(value,"working",0); }
|
||||||
|
inline std::string Environment::_getTypeName () const { return "Environment"; }
|
||||||
|
|
||||||
|
|
||||||
} // End of CRL namespace.
|
} // End of CRL namespace.
|
||||||
|
|
||||||
|
|
||||||
|
INSPECTOR_P_SUPPORT(CRL::Environment);
|
||||||
|
|
||||||
|
|
||||||
# endif
|
# endif
|
||||||
|
|
|
@ -43,32 +43,47 @@ namespace CRL {
|
||||||
|
|
||||||
class SearchPath {
|
class SearchPath {
|
||||||
public:
|
public:
|
||||||
static const size_t npos;
|
class Element {
|
||||||
SearchPath ();
|
public:
|
||||||
|
inline Element ( const std::string& path="", const std::string& name="" );
|
||||||
|
inline bool empty () const;
|
||||||
|
inline const std::string& getPath () const;
|
||||||
|
inline const std::string& getName () const;
|
||||||
|
inline std::string _getTypeName () const;
|
||||||
|
std::string _getString () const;
|
||||||
|
Record* _getRecord () const;
|
||||||
|
private:
|
||||||
|
std::string _path;
|
||||||
|
std::string _name;
|
||||||
|
};
|
||||||
public:
|
public:
|
||||||
inline void reset ();
|
static const size_t npos;
|
||||||
inline void append ( const std::string& path );
|
static std::string extractLibName ( const std::string& );
|
||||||
void prepend ( const std::string& path );
|
SearchPath ();
|
||||||
void replace ( const std::string& path, size_t index );
|
public:
|
||||||
size_t locate ( const std::string& file
|
inline void reset ();
|
||||||
, std::ios::openmode mode =std::ios::in
|
inline void append ( const std::string& path, const std::string& name="" );
|
||||||
, int first=0
|
void prepend ( const std::string& path, const std::string& name="");
|
||||||
, int last =64 );
|
void replace ( const std::string& path, const std::string&, size_t index );
|
||||||
void select ( const std::string& );
|
size_t locate ( const std::string& file
|
||||||
inline size_t getSize () const;
|
, std::ios::openmode mode =std::ios::in
|
||||||
inline const std::string& getSelected () const;
|
, int first=0
|
||||||
inline size_t getIndex () const;
|
, int last =64 );
|
||||||
inline bool hasSelected () const;
|
void select ( const std::string& );
|
||||||
size_t hasPath ( const std::string& path ) const;
|
inline size_t getSize () const;
|
||||||
const std::string& operator[] ( size_t index ) const;
|
inline const std::string& getSelected () const;
|
||||||
|
inline size_t getIndex () const;
|
||||||
|
inline bool hasSelected () const;
|
||||||
|
size_t hasPath ( const std::string& path ) const;
|
||||||
|
const Element& operator[] ( size_t index ) const;
|
||||||
private:
|
private:
|
||||||
static const std::string _selectFailed;
|
static const std::string _selectFailed;
|
||||||
std::vector<std::string> _paths;
|
std::vector<Element> _paths;
|
||||||
size_t _index;
|
size_t _index;
|
||||||
std::string _selected;
|
std::string _selected;
|
||||||
private:
|
private:
|
||||||
SearchPath ( const SearchPath& );
|
SearchPath ( const SearchPath& );
|
||||||
bool _canOpen ( const std::string& directory
|
bool _canOpen ( const Element& directory
|
||||||
, const std::string& file
|
, const std::string& file
|
||||||
, std::ios::openmode mode
|
, std::ios::openmode mode
|
||||||
);
|
);
|
||||||
|
@ -81,16 +96,32 @@ namespace CRL {
|
||||||
|
|
||||||
// Inline Functions.
|
// Inline Functions.
|
||||||
inline void SearchPath::reset () { _paths.resize(1); }
|
inline void SearchPath::reset () { _paths.resize(1); }
|
||||||
inline void SearchPath::append ( const std::string& path ) { _paths.push_back(path); }
|
|
||||||
inline size_t SearchPath::getSize () const { return _paths.size(); }
|
inline size_t SearchPath::getSize () const { return _paths.size(); }
|
||||||
inline const std::string& SearchPath::getSelected () const { return _selected; }
|
inline const std::string& SearchPath::getSelected () const { return _selected; }
|
||||||
inline size_t SearchPath::getIndex () const { return _index; }
|
inline size_t SearchPath::getIndex () const { return _index; }
|
||||||
inline bool SearchPath::hasSelected () const { return _index != npos; }
|
inline bool SearchPath::hasSelected () const { return _index != npos; }
|
||||||
inline std::string SearchPath::_getTypeName () const { return _TName("SearchPath"); }
|
inline std::string SearchPath::_getTypeName () const { return _TName("SearchPath"); }
|
||||||
|
|
||||||
|
inline void SearchPath::append ( const std::string& path, const std::string& name ) {
|
||||||
|
_paths.push_back ( Element ( path, name.empty()?extractLibName(path):name ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
inline SearchPath::Element::Element ( const std::string& path, const std::string& name )
|
||||||
|
: _path(path)
|
||||||
|
, _name(name.empty()?SearchPath::extractLibName(path):name)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
inline bool SearchPath::Element::empty () const { return _path.empty() and _name.empty(); }
|
||||||
|
inline const std::string& SearchPath::Element::getPath () const { return _path; }
|
||||||
|
inline const std::string& SearchPath::Element::getName () const { return _name; }
|
||||||
|
inline std::string SearchPath::Element::_getTypeName () const { return "SearchPath::Element"; }
|
||||||
|
|
||||||
|
|
||||||
} // End of CRL namespace.
|
} // End of CRL namespace.
|
||||||
|
|
||||||
|
|
||||||
|
INSPECTOR_P_SUPPORT(CRL::SearchPath);
|
||||||
|
INSPECTOR_V_SUPPORT(CRL::SearchPath::Element);
|
||||||
|
|
||||||
|
|
||||||
# endif
|
# endif
|
||||||
|
|
Loading…
Reference in New Issue