*/
#include <vector>
+
#include <cstdlib>
-#include <dlfcn.h>
#include <sstream>
#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include <dlfcn.h>
+#include <string.h>
+#include <dirent.h>
#include <ModuleDescriptionParser.h>
#include <ModuleParameterGroup.h>
#include <ModuleDescription.h>
#include <ModuleParameter.h>
-#include <fstream>
#include <ModuleDescriptionUtilities.h>
#include "CreationTool.h"
+
/// STD LD_OPEN CALLS ///
-char* getModuleDescription ( std::string lib ) {
- void* handle = dlopen( lib.c_str( ), RTLD_NOW | RTLD_GLOBAL );
+char* getModuleDescription ( const std::string lib ) {
+
+ void* handle = dlopen( lib.c_str( ) , RTLD_NOW | RTLD_LOCAL ) ;
if ( ! handle ) {
- std::cerr << "CAN'T OPEN LIBRARY: " << dlerror( ) << '\n';
- return NULL;
+ std::cerr << "CAN'T OPEN LIBRARY: " << dlerror( ) << '\n' ;
+ return NULL ;
}
- typedef char* ( *method_t )( void );
+ typedef char* ( *method_t )( void ) ;
// RESET ERRORS
- dlerror( );
- method_t myMethod = ( method_t ) dlsym( handle, "GetXMLModuleDescription" );
- const char *dlsym_error = dlerror( );
+ dlerror( ) ;
+ method_t myMethod = ( method_t ) dlsym( handle , "GetXMLModuleDescription" ) ;
+ const char *dlsym_error = dlerror( ) ;
if ( dlsym_error ) {
- std::cerr << "CAN'T LOAD SYMBOL 'GetXMLModuleDescription: " << dlsym_error << '\n';
- dlclose( handle );
- return NULL;
+ std::cerr << "CAN'T LOAD SYMBOL 'GetXMLModuleDescription: " << dlsym_error << '\n' ;
+ dlclose( handle ) ;
+ return NULL ;
}
// CALLING METHOD
- char* descrption = myMethod( );
+ char* descrption = myMethod( ) ;
// CLOSING LIB
- dlclose( handle );
- return descrption;
+
+ //dlclose( handle ) ;
+
+ return descrption ;
}
-void execute ( std::string lib, int _argc, char * _argv[] ) {
- void* handle = dlopen( lib.c_str( ), RTLD_NOW | RTLD_GLOBAL );
+void execute ( const std::string lib , int _argc , char * _argv[] ) {
+ void* handle = dlopen( lib.c_str( ) , RTLD_NOW | RTLD_LOCAL ) ;
if ( ! handle ) {
- std::cerr << "CAN'T OPEN LIBRARY: " << dlerror( ) << '\n';
- return;
+ std::cerr << "CAN'T OPEN LIBRARY: " << dlerror( ) << '\n' ;
+ return ;
}
- typedef int (*method_t )( int argc, char * argv[] );
+ typedef int (*method_t )( int argc , char * argv[] ) ;
// RESET ERRORS
- dlerror( );
- method_t myMethod = ( method_t ) dlsym( handle, "ModuleEntryPoint" );
- const char *dlsym_error = dlerror( );
+ dlerror( ) ;
+ method_t myMethod = ( method_t ) dlsym( handle , "ModuleEntryPoint" ) ;
+ const char *dlsym_error = dlerror( ) ;
if ( dlsym_error ) {
- std::cerr << "CAN'T LOAD SYMBOL 'ModuleEntryPoint' " << dlsym_error << '\n';
- dlclose( handle );
- return;
+ std::cerr << "CAN'T LOAD SYMBOL 'ModuleEntryPoint' " << dlsym_error << '\n' ;
+ dlclose( handle ) ;
+ return ;
}
// CALLING METHOD
- myMethod( _argc, _argv );
+ myMethod( _argc , _argv ) ;
// CLOSING LIB
- dlclose( handle );
+ dlclose( handle ) ;
}
/// FILE RELATED ///
-void saveFile ( std::string content, std::string file_name ) {
- std::ofstream myfile;
- myfile.open( file_name.c_str( ) );
- myfile << content;
- myfile.close( );
+void saveFile ( const std::string content , const std::string file_name ) {
+ std::ofstream myfile ;
+ myfile.open( file_name.c_str( ) ) ;
+ myfile << content ;
+ myfile.close( ) ;
}
-std::string loadFile ( std::string filename ) {
- std::string line = std::string( "" );
- std::string content = std::string( "" );
+std::string loadFile ( const std::string filename ) {
+ std::string line = std::string( "" ) ;
+ std::string content = std::string( "" ) ;
- std::ifstream infile;
- infile.open( filename.c_str( ) );
+ std::ifstream infile ;
+ infile.open( filename.c_str( ) ) ;
while ( ! infile.eof( ) ) {
- getline( infile, line );
- content += line + "\n";
- line.clear( );
+ getline( infile , line ) ;
+ content += line + "\n" ;
+ line.clear( ) ;
}
- infile.close( );
- return content;
+ infile.close( ) ;
+ return content ;
}
std::string loadDummyBody ( ) {
- return loadFile( "bbSlicerDummy.dummy_cxx" );
+ return loadFile( "bbSlicerDummy.dummy_cxx" ) ;
}
std::string loadDummyHeader ( ) {
- return loadFile( "bbSlicerDummy.dummy_h" );
+ return loadFile( "bbSlicerDummy.dummy_h" ) ;
}
/// BBTK BOX CREATION ///
-std::string updateBoxDescription ( const ModuleDescription* module, std::string _header ) {
- _header = Mthd::Aux::replace_str( _header, "_NNNNN_", Mthd::Aux::replace_str( module->GetTitle( ), " ", "" ) );
- _header = Mthd::Aux::replace_str( _header, "_AAAAA_", module->GetContributor( ) );
- _header = Mthd::Aux::replace_str( _header, "_DDDDD_", module->GetDescription( ) );
- _header = Mthd::Aux::replace_str( _header, "_CCCCC_", module->GetCategory( ) );
- return _header;
+std::string updateBoxDescription ( const ModuleDescription* module , std::string _header ) {
+ _header = Mthd::Aux::replace_str( _header , "_NNNNN_" , Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ) ;
+ _header = Mthd::Aux::replace_str( _header , "_AAAAA_" , module->GetContributor( ) ) ;
+ _header = Mthd::Aux::replace_str( _header , "_DDDDD_" , module->GetDescription( ) ) ;
+ _header = Mthd::Aux::replace_str( _header , "_CCCCC_" , module->GetCategory( ) ) ;
+ return _header ;
}
-std::string updateBoxName ( const ModuleDescription* module, std::string content ) {
- std::string _new_box_name = Mthd::Aux::replace_str( module->GetTitle( ), " ", "" );
- content = Mthd::Aux::replace_str( content, "Dummy", _new_box_name );
- return content;
+std::string updateBoxName ( const ModuleDescription* module , std::string content ) {
+ std::string _new_box_name = Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ;
+ content = Mthd::Aux::replace_str( content , "Dummy" , _new_box_name ) ;
+ return content ;
}
std::string getHeaderFileName ( const ModuleDescription* module ) {
- std::string name = Mthd::Aux::replace_str( module->GetTitle( ), " ", "" );
-
- return "bbSlicer" + name + ".h";
+ std::string name = Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ;
+ return "bbSlicer" + name + ".h" ;
}
std::string getBodyFileName ( const ModuleDescription* module ) {
- std::string name = Mthd::Aux::replace_str( module->GetTitle( ), " ", "" );
+ std::string name = Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ;
- return "bbSlicer" + name + ".cxx";
+ return "bbSlicer" + name + ".cxx" ;
}
-std::string updateBoxInputs ( const ModuleDescription* module, std::string content ) {
+std::string updateBoxInputs ( const ModuleDescription* module , std::string content ) {
- std::string _cxx_inputs = std::string( "\n" );
- std::string _cxx_inputs_end = std::string( "\n" );
- std::string _box_name = Mthd::Aux::replace_str( module->GetTitle( ), " ", "" );
+ std::string _cxx_inputs = std::string( "\n" ) ;
+ std::string _cxx_inputs_end = std::string( "\n" ) ;
+ std::string _box_name = Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ;
- for ( unsigned long int i = 0; i < module->GetParameterGroups( ).size( ); i ++ ) {
- ModuleParameterGroup pGroup = module->GetParameterGroups( ).at( i );
- for ( unsigned long int j = 0; j < pGroup.GetParameters( ).size( ); j ++ ) {
- ModuleParameter mPara = pGroup.GetParameters( ).at( j );
+ for ( unsigned long int i = 0 ; i < module->GetParameterGroups( ).size( ) ; i ++ ) {
+ ModuleParameterGroup pGroup = module->GetParameterGroups( ).at( i ) ;
+ for ( unsigned long int j = 0 ; j < pGroup.GetParameters( ).size( ) ; j ++ ) {
+ ModuleParameter mPara = pGroup.GetParameters( ).at( j ) ;
_cxx_inputs +=
"BBTK_DECLARE_INPUT ( " +
mPara.GetName( ) + " , " +
- mPara.GetCPPType( ) + " );\n";
+ mPara.GetCPPType( ) + " );\n" ;
_cxx_inputs_end +=
"BBTK_INPUT(" +
_box_name + " , " +
mPara.GetName( ) + " , " +
"\"" + mPara.GetName( ) + "\"" + " , " +
- mPara.GetCPPType( ) + ", \"\");\n";
+ mPara.GetCPPType( ) + ", \"\");\n" ;
}
}
- content = Mthd::Aux::replace_str( content, "_11111_", _cxx_inputs );
- content = Mthd::Aux::replace_str( content, "_22222_", _cxx_inputs_end );
+ content = Mthd::Aux::replace_str( content , "_11111_" , _cxx_inputs ) ;
+ content = Mthd::Aux::replace_str( content , "_22222_" , _cxx_inputs_end ) ;
- return content;
+ return content ;
}
const int getNumberOfArguments ( const ModuleDescription* module ) {
- int number = 0;
- for ( unsigned long int i = 0; i < module->GetParameterGroups( ).size( ); i ++ ) {
- ModuleParameterGroup pGroup = module->GetParameterGroups( ).at( i );
- for ( unsigned long int j = 0; j < pGroup.GetParameters( ).size( ); j ++ ) {
+ int number = 0 ;
+ for ( unsigned long int i = 0 ; i < module->GetParameterGroups( ).size( ) ; i ++ ) {
+ ModuleParameterGroup pGroup = module->GetParameterGroups( ).at( i ) ;
+ for ( unsigned long int j = 0 ; j < pGroup.GetParameters( ).size( ) ; j ++ ) {
- ModuleParameter mPara = pGroup.GetParameters( ).at( j );
- number ++;
+ ModuleParameter mPara = pGroup.GetParameters( ).at( j ) ;
+ number ++ ;
}
}
- return number;
+ return number ;
}
-std::string updateProcessMethod ( const ModuleDescription* module, std::string content, std::string lib ) {
- int number = 0;
- std::string arg_list = std::string( "" );
- for ( unsigned long int i = 0; i < module->GetParameterGroups( ).size( ); i ++ ) {
- ModuleParameterGroup pGroup = module->GetParameterGroups( ).at( i );
- for ( unsigned long int j = 0; j < pGroup.GetParameters( ).size( ); j ++ ) {
+std::string updateProcessMethod ( const ModuleDescription* module , std::string content , std::string lib ) {
+ int number = 0 ;
+ std::string arg_list = std::string( "" ) ;
+ for ( unsigned long int i = 0 ; i < module->GetParameterGroups( ).size( ) ; i ++ ) {
+ ModuleParameterGroup pGroup = module->GetParameterGroups( ).at( i ) ;
+ for ( unsigned long int j = 0 ; j < pGroup.GetParameters( ).size( ) ; j ++ ) {
- ModuleParameter mPara = pGroup.GetParameters( ).at( j );
+ ModuleParameter mPara = pGroup.GetParameters( ).at( j ) ;
- arg_list += "Mthd::Aux::toCharArrray( ";
+ arg_list += "Mthd::Aux::toCharArrray( " ;
if ( mPara.GetFlag( ) != "" ) {
- arg_list += "Mthd::Aux::toString( \"";
- arg_list += "-" + mPara.GetFlag( ) + "\" ";
- arg_list += " ) + ";
+ arg_list += "Mthd::Aux::toString( \"" ;
+ arg_list += "-" + mPara.GetFlag( ) + "\" " ;
+ arg_list += " ) + " ;
} else if ( mPara.GetLongFlag( ) != "" ) {
- arg_list += "Mthd::Aux::toString( \"";
- arg_list += "--" + mPara.GetLongFlag( ) + "\" ";
- arg_list += " ) + ";
+ arg_list += "Mthd::Aux::toString( \"" ;
+ arg_list += "--" + mPara.GetLongFlag( ) + "\" " ;
+ arg_list += " ) + " ;
}
- arg_list += "Mthd::Aux::toString( bbGetInput" + mPara.GetName( ) + "( ) )";
- arg_list += " ),\n";
- number ++;
+ arg_list += "Mthd::Aux::toString( bbGetInput" + mPara.GetName( ) + "( ) )" ;
+ arg_list += " ),\n" ;
+ number ++ ;
}
}
- arg_list += "_EEENNNDDD_";
- arg_list = Mthd::Aux::replace_str( arg_list, ",\n_EEENNNDDD_", "" );
- std::string _argc = "\nint _argc =" + Mthd::Aux::toString( number ) + ";\n";
- std::string _slib = "std::string lib = \"" + lib + "\";\n";
- std::string _argv = "char * _argv[ ] = { " + arg_list + " };\n";
- return Mthd::Aux::replace_str( content, "_33333_", _argc + _slib + _argv );
+ arg_list += "_EEENNNDDD_" ;
+ arg_list = Mthd::Aux::replace_str( arg_list , ",\n_EEENNNDDD_" , "" ) ;
+ std::string _argc = "\nint _argc =" + Mthd::Aux::toString( number ) + ";\n" ;
+ std::string _slib = "std::string lib = \"" + lib + "\";\n" ;
+ std::string _argv = "char * _argv[ ] = { " + arg_list + " };\n" ;
+ return Mthd::Aux::replace_str( content , "_33333_" , _argc + _slib + _argv ) ;
}
-int main ( int argc, char* argv[] ) {
+std::vector < std::string > getFilesByExtention ( std::string dir , std::string ext ) {
+ std::vector < std::string > files ;
+ files.clear( ) ;
+ DIR *dp ;
+ struct dirent *dirp ;
+ if ( ( dp = opendir( dir.c_str( ) ) ) == NULL ) {
+ std::cout << "ERROR OPENING " << dir << std::endl ;
+ return files ;
+ }
+
+ while ( ( dirp = readdir( dp ) ) != NULL ) {
+ std::string file = std::string( dirp->d_name ) ;
+ if ( Mthd::Aux::str_ends_with( file , ext ) ) {
+ files.push_back( file ) ;
+ }
+ }
+ closedir( dp ) ;
+ return files ;
+}
- int _argc = 3;
- char * _argv[] = { "-s 20", "/home/riveros/Desktop/Experiments/RA1.mhd", "/home/riveros/Desktop/Experiments/RA1-OUT-MAIN.mhd" };
- std::string gblib = "/home/riveros/.slicer/Slicer4-bin/Slicer-build/lib/Slicer-4.0/cli-modules/libGaussianBlurImageFilterLib.so";
+int main ( int argc , char* argv[] ) {
- execute( gblib, _argc, _argv );
+ // int _argc = 3 ;
+ // char * _argv[] = { "-s 20" , "/home/riveros/Desktop/Experiments/RA1.mhd" , "/home/riveros/Desktop/Experiments/RA1-OUT-MAIN.mhd" } ;
+ // execute( gblib , _argc , _argv ) ;
- /// MODULE INFORMATION ///
- const std::string des = getModuleDescription( gblib );
+ const std::string dummy_body_str = loadDummyBody( ) ;
+ const std::string dummy_header_str = loadDummyHeader( ) ;
- // std::cout << "====================================" << std::endl << std::endl;
- // std::cout << "====================================" << std::endl << std::endl;
- // std::cout << "====================================" << std::endl << std::endl;
- // std::cout << "====================================" << std::endl << std::endl;
- //
- // std::cout << des << std::endl << std::endl;
+ const std::string directory = "/home/riveros/.slicer/Slicer4-bin/Slicer-build/lib/Slicer-4.0/cli-modules/" ;
+ const std::vector < std::string > files = getFilesByExtention( directory , ".so" ) ;
- ModuleDescription module;
- ModuleDescriptionParser parser;
+ for ( unsigned int i = 0 ; i < files.size( ) ; i ++ ) {
- parser.Parse( des, module );
+ std::string gblib = directory + files.at( i ) ;
+ std::cout << "/// " << files.at( i ) << " ///" << std::endl ;
- /// LOADING DUMMY FILES ///
- std::string _body = loadDummyBody( );
- std::string _header = loadDummyHeader( );
+ /// MODULE INFORMATION ///
+ std::string des = getModuleDescription( gblib ) ;
+ std::cout << " getModuleDescription( gblib )...OK" << std::endl ;
- /// SETTING HEADER FILE ///
- _header = updateBoxName( &module, _header );
- _header = updateBoxDescription( &module, _header );
- _header = updateBoxInputs( &module, _header );
- saveFile( _header, getHeaderFileName( &module ) );
+ ModuleDescription module ;
+ ModuleDescriptionParser parser ;
- /// SETTING BODY FILE ///
- _body = updateBoxName( &module, _body );
- _body = updateProcessMethod( &module, _body, gblib );
- saveFile( _body, getBodyFileName( &module ) );
+ parser.Parse( des , module ) ;
+ std::cout << " parser.Parse( des , module )...OK" << std::endl ;
+ /// LOADING DUMMY FILES ///
+ std::string _body = std::string( dummy_body_str ) ;
+ std::cout << " loadDummyBody( )...OK" << std::endl ;
+ std::string _header = std::string( dummy_header_str ) ;
+ std::cout << " loadDummyHeader( )...OK" << std::endl ;
- // std::cout << "====================================" << std::endl << std::endl;
- // std::cout << "====================================" << std::endl << std::endl;
- // std::cout << "====================================" << std::endl << std::endl;
- // std::cout << "====================================" << std::endl << std::endl;
- //
- // std::cout << _header << std::endl;
- //
- // std::cout << "====================================" << std::endl << std::endl;
- // std::cout << "====================================" << std::endl << std::endl;
- // std::cout << "====================================" << std::endl << std::endl;
- // std::cout << "====================================" << std::endl << std::endl;
- //
- // std::cout << _body << std::endl;
+ /// SETTING HEADER FILE ///
+ _header = updateBoxName( &module , _header ) ;
+ std::cout << " updateBoxName( &module , _header )...OK" << std::endl ;
+ _header = updateBoxDescription( &module , _header ) ;
+ std::cout << " updateBoxDescription( &module , _header )...OK" << std::endl ;
+ _header = updateBoxInputs( &module , _header ) ;
+ std::cout << " updateBoxInputs( &module , _header )...OK" << std::endl ;
+ saveFile( _header , getHeaderFileName( &module ) ) ;
- return EXIT_SUCCESS;
+ /// SETTING BODY FILE ///
+ _body = updateBoxName( &module , _body ) ;
+ std::cout << " updateBoxName( &module , _body )...OK" << std::endl ;
+ _body = updateProcessMethod( &module , _body , gblib ) ;
+ std::cout << " updateProcessMethod( &module , _body , gblib )...OK" << std::endl ;
+ saveFile( _body , getBodyFileName( &module ) ) ;
+
+ std::cout << "/// EO " << files.at( i ) << " ///" << std::endl << std::endl ;
+
+ gblib.clear( ) ;
+ des.clear( ) ;
+ //while ( getchar( ) != '\n' ) ;
+
+ }
+ return EXIT_SUCCESS ;
}