int main(int argc, char **argv) { #ifdef HAVE_LIBGUILE gh_enter(argc, argv, realmain); #else realmain(argc, argv); #endif return 0; }
/*--------------------------------------------------------------------------*/ int sci_windows_main ( int *nos, char *path, InitScriptType pathtype, int *lpath, int memory) { InitializeLaunchScilabSignal(); setbuf (stderr, (char *) NULL); if (!setjmp (env)) { /* first time */ interrupt_setup (); } /* take commands from stdin */ return realmain(*nos,path,pathtype,memory); }
int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { std::string basename( moduleExeBaseName() ); if ( getenv( "OSGEO4W_ROOT" ) ) { std::string envfile( basename + ".env" ); // write or update environment file if ( _access( envfile.c_str(), 0 ) < 0 || _access( envfile.c_str(), 2 ) == 0 ) { std::list<std::string> vars; try { std::ifstream varfile; varfile.open( basename + ".vars" ); std::string var; while ( std::getline( varfile, var ) ) { vars.push_back( var ); } varfile.close(); } catch ( std::ifstream::failure e ) { std::cerr << "could read environment variable list " << basename + ".vars" << " [" << e.what() << "]" << std::endl; return EXIT_FAILURE; } try { std::ofstream file; file.open( envfile, std::ifstream::out ); for ( std::list<std::string>::const_iterator it = vars.begin(); it != vars.end(); ++it ) { if ( getenv( it->c_str() ) ) file << *it << "=" << getenv( it->c_str() ) << std::endl; } } catch ( std::ifstream::failure e ) { std::cerr << "could not write environment file " << basename + ".env" << " [" << e.what() << "]" << std::endl; return EXIT_FAILURE; } } if ( __argc == 2 && strcmp( __argv[1], "--exit" ) == 0 ) { return EXIT_SUCCESS; } } else { try { std::ifstream file; file.open( basename + ".env" ); std::string var; while ( std::getline( file, var ) ) { if ( _putenv( var.c_str() ) < 0 ) { std::cerr << "could not set environment variable:" << var << std::endl; return EXIT_FAILURE; } } } catch ( std::ifstream::failure e ) { std::cerr << "could not read environment file " << basename + ".env" << " [" << e.what() << "]" << std::endl; return EXIT_FAILURE; } } HINSTANCE hGetProcIDDLL = LoadLibrary( "qgis_app.dll" ); if ( !hGetProcIDDLL ) { std::cerr << "Could not load the qgis_app.dll" << std::endl; return EXIT_FAILURE; } int ( *realmain )( int, char *[] ) = ( int ( * )( int, char *[] ) ) GetProcAddress( hGetProcIDDLL, "main" ); if ( !realmain ) { std::cerr << "could not locate main function in qgis_app.dll" << std::endl; return EXIT_FAILURE; } return realmain( __argc, __argv ); }
// the main stub which calls realmain() aka, WZ's main startup routines int main(int argc, char *argv[]) { return realmain(argc, argv); }
int main(int argc, char *argv[]) { const char libcover[] = "libmpicover.so"; const char mainname[] = str(RENAME_MAIN); std::string bindir = vistle::getbindir(argc, argv); MPI_Init(&argc, &argv); int rank = -1; MPI_Comm_rank(MPI_COMM_WORLD, &rank); std::map<std::string, std::string> env; std::map<std::string, bool> envToSet; if (rank == 0) { std::vector<std::string> envvars; // system envvars.push_back("PATH"); envvars.push_back("LD_LIBRARY_PATH"); envvars.push_back("DYLD_LIBRARY_PATH"); envvars.push_back("DYLD_FRAMEWORK_PATH"); envvars.push_back("LANG"); // covise config envvars.push_back("COCONFIG"); envvars.push_back("COCONFIG_LOCAL"); envvars.push_back("COCONFIG_DEBUG"); envvars.push_back("COCONFIG_DIR"); envvars.push_back("COCONFIG_SCHEMA"); envvars.push_back("COVISE_CONFIG"); // cover envvars.push_back("COVER_PLUGINS"); envvars.push_back("COVER_TABLETPC"); envvars.push_back("COVISE_SG_DEBUG"); //envvars.push_back("COVISE_HOST"); envvars.push_back("COVISEDIR"); envvars.push_back("COVISE_PATH"); envvars.push_back("ARCHSUFFIX"); // OpenSceneGraph envvars.push_back("OSGFILEPATH"); envvars.push_back("OSG_FILE_PATH"); envvars.push_back("OSG_NOTIFY_LEVEL"); envvars.push_back("OSG_LIBRARY_PATH"); envvars.push_back("OSG_LD_LIBRARY_PATH"); for (auto v: envvars) { const char *val = getenv(v.c_str()); if (val) env[v] = val; } std::string covisedir = env["COVISEDIR"]; std::string archsuffix = env["ARCHSUFFIX"]; if (!covisedir.empty()) { if (FILE *fp = popen((covisedir+"/bin/print_covise_env").c_str(), "r")) { std::vector<char> buf(10000); while (fgets(buf.data(), buf.size(), fp)) { auto sep = std::find(buf.begin(), buf.end(), '='); if (sep != buf.end()) { std::string name = std::string(buf.begin(), sep); ++sep; auto end = std::find(sep, buf.end(), '\n'); std::string val = std::string(sep, end); //std::cerr << name << "=" << val << std::endl; env[name] = val; } //ld_library_path = buf.data(); //std::cerr << "read ld_lib: " << ld_library_path << std::endl; } pclose(fp); } } } std::string vistleplugin = bindir + "/../../../" + env["ARCHSUFFIX"] + "/lib/OpenCOVER/plugins/libVistlePlugin"; #ifdef __APPLE__ vistleplugin += ".so"; #else vistleplugin += ".so"; #endif env["VISTLE_PLUGIN"] = vistleplugin; //std::cerr << "Vistle plugin: " << vistleplugin << std::endl; std::string ldpath, dyldpath, dyldfwpath, covisepath; int numvars = env.size(); MPI_Bcast(&numvars, 1, MPI_INT, 0, MPI_COMM_WORLD); auto it = env.begin(); for (int i=0; i<numvars; ++i) { std::string name; std::string value; if (rank == 0) { name = it->first; value = it->second; } auto sync_string = [rank](std::string &s) { std::vector<char> buf; int len = -1; if (rank == 0) len = s.length()+1; MPI_Bcast(&len, 1, MPI_INT, 0, MPI_COMM_WORLD); buf.resize(len); if (rank == 0) strcpy(buf.data(), s.c_str()); MPI_Bcast(buf.data(), buf.size(), MPI_BYTE, 0, MPI_COMM_WORLD); s = buf.data(); }; sync_string(name); sync_string(value); #if 0 if (name == "COVISE_PATH") { // adapt in order to find VistlePlugin covisepath = bindir + "/../.."; if (!value.empty()) { covisepath += ":"; covisepath += value; } value = covisepath; } #endif setenv(name.c_str(), value.c_str(), 1 /* overwrite */); if (rank == 0) ++it; else env[name] = value; //std::cerr << name << " -> " << value << std::endl; } typedef int (*main_t)(int, char *[]); main_t realmain = NULL; int ret = 0; #if 0 std::string abslib = bindir + "/../../lib/" + libcover; #else std::string coviselibdir = env["COVISEDIR"] + "/" + env["ARCHSUFFIX"] + "/lib/"; std::string abslib = coviselibdir + libcover; #endif void *handle = dlopen(abslib.c_str(), RTLD_LAZY); if (!handle) { std::cerr << "failed to dlopen " << abslib << ": " << dlerror() << std::endl; ret = 1; goto finish; } realmain = (main_t)dlsym(handle, mainname); if (!realmain) { std::cerr << "could not find " << mainname << " in " << libcover << std::endl; ret = 1; goto finish; } ret = realmain(argc, argv); finish: if (handle) dlclose(handle); MPI_Finalize(); return 0; }