44#include "compiledata.h"
45#include "RConfigure.h"
119 return !strncmp(path,
proto, strlen(
proto)) ? path + strlen(
proto) : path;
128 Error(
"TSystem",
"only one instance of TSystem allowed");
346 catch (std::exception& exc) {
358 Warning(
"Run",
"instructed to abort");
365 catch (
const char *str) {
370 Warning(
"Run",
"handle uncaught exception, terminating");
411 return gROOT->IsInterrupted();
506 if (to && to->
IsAsync() && timeout > 0) {
672 FILE *pipe =
OpenPipe(command,
"r");
674 SysError(
"GetFromPipe",
"cannot run command \"%s\"", command);
679 while (
line.Gets(pipe)) {
687 Error(
"GetFromPipe",
"command \"%s\" returned %d", command,
r);
755 while ((helper = (
TSystem*) next()))
769 if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TSystem", path))) {
770 if (
h->LoadPlugin() == -1)
774 }
else if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TSystem", path))) {
775 if (
h->LoadPlugin() == -1)
777 helper = (
TSystem*)
h->ExecPlugin(0);
807 return (checkproto || checkdir);
869 return std::string();
885 return std::string();
925 if (
name[0] ==
'/' &&
name[1] ==
'\0')
928 if ((cp = (
char *)strrchr(
name,
'/')))
932 Error(
"BaseName",
"name = 0");
942 return dir[0] ==
'/';
968 while ( incPath.
Index(
" :") != -1 ) {
975 incPath.
Prepend(fileLocation+
":.:");
977 char *actual =
Which(incPath,realname);
997 if (res.IsNull() || (res ==
"."))
1003 TTHREAD_TLS(
char*) buf =
nullptr;
1004 if (res.Length() >=
len) {
1005 if (buf)
delete [] buf;
1006 len = res.Length() + 50;
1007 buf =
new char [
len];
1010 strncpy(buf, res.Data(),
len);
1022 if (!pathname || !strchr(pathname,
'/'))
1025 auto pathlen = strlen(pathname);
1027 const char *
r = pathname + pathlen - 1;
1029 while ((
r > pathname) && (*
r ==
'/'))
1032 while ((
r > pathname) && (*
r !=
'/'))
1037 while ((
r > pathname) && (*
r ==
'/'))
1041 if ((
r == pathname) && (*
r !=
'/'))
1044 return TString(pathname,
r + 1 - pathname);
1089 TTHREAD_TLS_ARRAY(
char, kBufSize, xname);
1107 char xname[kBufSize];
1122 int n, ier, iter, lx, ncopy;
1123 char *inp, *out, *
x, *t, *buff;
1124 const char *
b, *
c, *
e;
1126 buff =
new char[kBufSize * 4];
1128 iter = 0; xname[0] = 0; inp = buff + kBufSize; out = inp + kBufSize;
1129 inp[-1] =
' '; inp[0] = 0; out[-1] =
' ';
1130 c = fname + strspn(fname,
" \t\f\r");
1133 strlcat(inp,
c, kBufSize);
1136 iter++;
c = inp; ier = 0;
1139 p =
nullptr;
e =
nullptr;
1140 if (
c[0] ==
'~' &&
c[1] ==
'/') {
1145 strlcpy(
x,
p, kBufSize);
1152 }
else if (
c[0] ==
'~' &&
c[1] !=
'/') {
1153 n = strcspn(
c+1,
"/ ");
1154 assert((
n+1) < kBufSize &&
"This should have been prevented by the truncation 'strlcat(inp, c, kBufSize)'");
1156 (void)strlcpy(buff,
c+1,
n+1);
1161 strlcpy(
x,
p, kBufSize);
1171 for ( ;
c[0];
c++) {
1173 p =
nullptr;
e =
nullptr;
1175 if (
c[0] ==
'.' &&
c[1] ==
'/' &&
c[-1] ==
' ') {
1177 strlcpy(buff, wd.c_str(), kBufSize);
1182 strlcpy(
x,
p, kBufSize);
x += strlen(
p);
c =
e-1;
continue;
1189 if (
c[1] ==
'(')
b++;
1190 if (
c[1] ==
'{')
b++;
1194 for (
e =
b; isalnum(
e[0]) ||
e[0] ==
'_';
e++) ;
1195 buff[0] = 0; strncat(buff,
b,
e-
b);
1198 for (t = buff; (t[0] = toupper(t[0])); t++) ;
1202 for (t = buff; (t[0] = tolower(t[0])); t++) ;
1205 if (!
p && !strcmp(buff,
"cwd")) {
1207 strlcpy(buff, wd.c_str(), kBufSize);
1210 if (!
p && !strcmp(buff,
"$")) {
1219 if (
c[1] &&
c[1]!=
'\\' &&
c[1]!=
';' &&
c[1]!=
'/')
1227 if (lp >= kBufSize) {
1229 strlcpy(
x,
p, kBufSize);
1235 c = (
b==
c+1) ?
e-1 :
e;
1240 x[0] = 0; lx =
x - out;
1241 if (ier && iter < 3) { strlcpy(inp, out, kBufSize);
goto again; }
1242 ncopy = (lx >= kBufSize) ? kBufSize-1 : lx;
1243 xname[0] = 0; strncat(xname, out, ncopy);
1247 if (ier || ncopy != lx) {
1248 ::Error(
"TSystem::ExpandFileName",
"input: %s, output: %s", fname, xname);
1298 if (strlen(url.
GetHost()) > 0) {
1303 if (!strcmp(
a.GetHostName(),
b.GetHostName()) ||
1304 !strcmp(
a.GetHostAddress(),
b.GetHostAddress())) {
1308 if (strlen(url.
GetUser()) > 0) {
1391 int res =
GetPathInfo(path,
id, &lsize, flags, modtime);
1393 if (res == 0 &&
size) {
1395 Error(
"GetPathInfo",
"file %s > 2 GB, use GetPathInfo() with Long64_t size", path);
1717 Error(
"ShowOutput",
"handle not specified");
1723 Error(
"ShowOutput",
"file '%s' cannot be read",
h->fFile.Data());
1729 if (!(
f = fopen(
h->fFile.Data(),
"r"))) {
1730 Error(
"ShowOutput",
"file '%s' cannot be open",
h->fFile.Data());
1735 off_t ltot = lseek(fileno(
f), (off_t) 0, SEEK_END);
1736 Int_t begin = (
h->fReadOffSet > 0 &&
h->fReadOffSet < ltot) ?
h->fReadOffSet : 0;
1737 lseek(fileno(
f), (off_t) begin, SEEK_SET);
1738 Int_t left = ltot - begin;
1741 const Int_t kMAXBUF = 16384;
1743 Int_t wanted = (left > kMAXBUF-1) ? kMAXBUF-1 : left;
1746 while ((
len = read(fileno(
f), buf, wanted)) < 0 &&
1751 SysError(
"ShowOutput",
"error reading log file");
1757 fprintf(stderr,
"%s", buf);
1761 wanted = (left > kMAXBUF) ? kMAXBUF : left;
1763 }
while (
len > 0 && left > 0);
1766 h->fReadOffSet = ltot;
1806 if (left == right)
return kTRUE;
1808 if (left==
nullptr || right==
nullptr)
return kFALSE;
1810 if ( (strcmp(right,left)==0) ) {
1816 char leftname[_MAX_PATH];
1817 char rightname[_MAX_PATH];
1818 _fullpath( leftname, left, _MAX_PATH );
1819 _fullpath( rightname, right, _MAX_PATH );
1820 return ((stricmp(leftname, rightname)==0));
1822 struct stat rightBuf;
1823 struct stat leftBuf;
1824 return ( ( 0 == stat( left, & leftBuf ) )
1825 && ( 0 == stat( right, & rightBuf ) )
1826 && ( leftBuf.st_dev == rightBuf.st_dev )
1827 && ( leftBuf.st_ino == rightBuf.st_ino )
1828 && ( leftBuf.st_size == rightBuf.st_size )
1829 && ( leftBuf.st_mtime == rightBuf.st_mtime )
1858 if (idx == 0 || libs[idx-1] ==
'/' || libs[idx-1] ==
'\\') {
1861 if (!
l.EndsWith(
".") && libs[idx]==
'.')
1864 while (idx <
len && isdigit(libs[idx])) {
1867 if (libs[idx] ==
'.') {
1871 while (idx <
len && libs[idx] !=
'.') {
1872 if (libs[idx] ==
' ' || idx+1 ==
len) {
1879 if (
l[
l.Length()-1] ==
'.') {
1880 l.Remove(
l.Length()-1);
1882 if (
l.BeginsWith(
"lib")) {
1883 l.Replace(0, 3,
"-l");
1885 if ((idx == 0 || libs[idx-1] ==
' ') &&
1886 (libs[idx+
l.Length()] ==
' ' || libs[idx+
l.Length()] == 0)) {
1903 if (strcmp(module,deplib)==0) {
1907 Info(
"Load",
"loading dependent library %s for library %s",
1909 if ((ret =
Load(deplib,
"", system)) < 0) {
1933 if (ret < 0) ret = -1;
1935 Info(
"Load",
"loaded library %s, status %d", path, ret);
1938 Error(
"Load",
"version mismatch, %s = %d, ROOT = %d",
1939 path,
v,
gROOT->GetVersionInt());
1947 if (!entry || !entry[0] || ret < 0)
return ret;
1963 if (!mapfile || !mapfile->
GetTable())
return 0;
1965 std::set<std::string> loadedlibs;
1966 std::set<std::string> failedlibs;
1970 while ((rec = (
TEnvRec*) iEnvRec())) {
1971 TString libs = rec->GetValue();
1976 if (failedlibs.find(lib.
Data()) != failedlibs.end()) {
1988 if (loadedlibs.find(lib.
Data()) == loadedlibs.end()) {
1992 if (res == 0) ++nlibs;
1993 loadedlibs.insert(lib.
Data());
1995 failedlibs.insert(lib.
Data());
2074 if (!(regexp && regexp[0]))
2080 while (libs.
Tokenize(tok, from,
" ")) {
2081 if ((tok.
Index(pat, &ext) != 0) || (ext != tok.
Length()))
2083 std::cout << tok <<
"\n";
2092 TTHREAD_TLS_DECL(
TString, gLastErrorString);
2093 return gLastErrorString;
2165 if (libs.
Length() == 0) {
2171 static TString lastAddMissing;
2172 if ( lastLinked != slinked ) {
2174 static TRegexp separator(
"[^ \\t\\s]+");
2175 lastLinked = slinked;
2176 lastAddMissing.
Clear();
2179 start =
index = end = 0;
2185 if (sub[0]==
'-' && sub[1]==
'L') {
2200 }
else if (libs.
Length() != 0) {
2203 static TRegexp separator(
"[^ \\t\\s]+");
2205 start =
index = end = 0;
2211 if (sub[0]!=
'-' && sub[1]!=
'L') {
2221 if (regexp && *regexp) {
2222 static TRegexp separator(
"[^ \\t\\s]+");
2226 start =
index = end = 0;
2231 s = libs(
index,end);
2232 if ((isRegexp && s.
Index(user_re) !=
kNPOS) ||
2244#if defined(R__MACOSX)
2250 static TRegexp separator(
"[^ \\t\\s]+");
2251 static TRegexp dynload(
"/lib-dynload/");
2254 start =
index = end = 0;
2490 delete [] tobedeleted;
2495static TString R__Exec(
const char *cmd)
2506 while ((
x = fgetc(
f))!=EOF ) {
2507 if (
x==
'\n' ||
x==
'\r')
break;
2515static void R__FixLink(
TString &cmd)
2521 TString res = R__Exec(
"link 2>&1");
2523 if (res.
Contains(
"Microsoft (R) Incremental Linker"))
2527 res = R__Exec(
"cygpath . 2>&1");
2533 res = R__Exec(
"which cl.exe 2>&1|grep cl|sed 's,cl\\.exe$,link\\.exe,' 2>&1");
2535 res = R__Exec(
Form(
"cygpath -w '%s' 2>&1",res.
Data()));
2543#if defined(__CYGWIN__)
2545 if (path.
Length() > 2 && path[1]==
':') {
2564 const char * stderrfile =
"/dev/null";
2569 TString bakdepfilename = depfilename +
".bak";
2572 TString touch =
"echo # > "; touch +=
"\"" + depfilename +
"\"";
2574 TString touch =
"echo > "; touch +=
"\"" + depfilename +
"\"";
2576 TString builddep =
"rmkdepend";
2578 builddep +=
" \"-f";
2579 builddep += depfilename;
2584 builddep +=
" \"-p";
2585 if (build_loc[
len] ==
'/' || build_loc[
len+1] !=
'\\' ) {
2595 builddep +=
" \"-p";
2599 builddep +=
" -Y -- ";
2601 builddep +=
" \"-I"+rootsysInclude+
"\" ";
2602 builddep += includes;
2603 builddep += defines;
2604 builddep +=
" -- \"";
2611 if (library[
len] ==
'/' || library[
len+1] !=
'\\' ) {
2612 targetname = library.
Data() +
len + 1;
2614 targetname = library.
Data() +
len + 2;
2617 targetname = library;
2620 targetname = library;
2625 builddep +=
"\" > ";
2626 builddep += stderrfile;
2627 builddep +=
" 2>&1 ";
2632#if defined(R__HAS_CLING_DICTVERSION)
2634 char *clingdictversion =
gSystem->
Which(incPath,
"clingdictversion.h");
2635 if (clingdictversion) {
2638 delete [] clingdictversion;
2640 R__AddPath(adddictdep,rootsysInclude+
"/clingdictversion.h ");
2645 const char *dictHeaders[] = {
"RVersion.h",
"ROOT/RConfig.hxx",
"TClass.h",
2646 "TDictAttributeMap.h",
"TInterpreter.h",
"TROOT.h",
"TBuffer.h",
2647 "TMemberInspector.h",
"TError.h",
"RtypesImp.h",
"TIsAProxy.h",
2648 "TFileMergeInfo.h",
"TCollectionProxyInfo.h"};
2650 for (
unsigned int h=0;
h <
sizeof(dictHeaders)/
sizeof(dictHeaders[0]); ++
h)
2655 delete [] rootVersion;
2657 R__AddPath(adddictdep,rootsysInclude +
"/" + dictHeaders[
h]);
2668 delete [] rootCling;
2671 adddictdep +=
" >> \""+depfilename+
"\"";
2673 TString addversiondep(
"echo ");
2674 addversiondep += libname + version_var_prefix +
" \"" +
ROOT_RELEASE +
"\" >> \""+depfilename+
"\"";
2683 if (depbuilt) depbuilt = !
gSystem->
Exec(builddep);
2684 if (depbuilt) depbuilt = !
gSystem->
Exec(adddictdep);
2685 if (depbuilt) depbuilt = !
gSystem->
Exec(addversiondep);
2688 ::Warning(
"ACLiC",
"Failed to generate the dependency file for %s",
2825 const char *library_specified,
2826 const char *build_dir,
2829 static const char *version_var_prefix =
"__ROOTBUILDVERSION=";
2840 keep = (strchr(opt,
'k')!=
nullptr);
2841 recompile = (strchr(opt,
'f')!=
nullptr);
2842 if (strchr(opt,
'O')!=
nullptr) {
2845 if (strchr(opt,
'g')!=
nullptr) {
2848 if (strchr(opt,
'c')!=
nullptr) {
2851 withInfo = strchr(opt,
's') ==
nullptr;
2852 verbose = strchr(opt,
'v') !=
nullptr;
2853 internalDebug = strchr(opt,
'd') !=
nullptr;
2856 TString rootbuild = ROOTBUILD;
2868 if (build_dir && strlen(build_dir)) build_loc = build_dir;
2869 if (build_loc ==
".") {
2882 incPath.
Append(fromConfig);
2885 auto posISysRoot = incPath.
Index(
" -isysroot \"");
2886 if (posISysRoot !=
kNPOS) {
2887 auto posISysRootEnd = incPath.
Index(
'"', posISysRoot + 12);
2888 if (posISysRootEnd !=
kNPOS) {
2891 incPath.
Insert(posISysRootEnd - 1,
"/usr/include/");
2892 incPath.
Replace(posISysRoot, 12,
":\"");
2895 while ( incPath.
Index(
" :") != -1 ) {
2905 TString library = expFileName;
2908 const char *whichlibrary =
Which(incPath,library);
2910 library = whichlibrary;
2911 delete [] whichlibrary;
2913 ::Error(
"ACLiC",
"The file %s can not be found in the include path: %s",
filename,incPath.
Data());
2929 TString filename_fullpath = library;
2936 if (library.
Length()>1 && isalpha(library[0]) && library[1]==
':') {
2937 file_dirname.
Prepend(library(0,2));
2939 TString file_location( file_dirname );
2940 incPath.
Prepend( file_location +
":" );
2945 libname_noext.
Remove(dot_pos);
2952 library.
Replace( dot_pos, library.
Length()-dot_pos, suffix);
2959 if (library_specified && strlen(library_specified) ) {
2961 libname =
BaseName( library_specified );
2962 library = library_specified;
2971 TString libname_ext ( libname );
2972 libname_ext +=
"." +
fSoExt;
2979 if (library.
Length()>1 && isalpha(library[0]) && library[1]==
':') {
2980 lib_dirname.
Prepend(library(0,2));
2983 if ( strncmp( &(lib_dirname[lib_dirname.
Length()-2]),
"/.", 2) == 0 ) {
2986 if ( strncmp( &(lib_dirname[lib_dirname.
Length()-2]),
"\\.", 2) == 0 ) {
2989 TString lib_location( lib_dirname );
2992 if (build_loc.
Length()==0) {
2993 build_loc = lib_location;
2996 TRegexp disk_finder (
"[A-z]:");
2998 if (pos==0) library.
Remove(pos,3);
2999 pos = lib_location.
Index( disk_finder );
3000 if (pos==0) lib_location.
Remove(pos,3);
3009 TString build_loc_store( build_loc );
3010 if (!flatBuildDir) {
3015 mkdirFailed = (0 !=
mkdir(build_loc,
true));
3016 if (mkdirFailed && !canWriteBuild_loc) {
3019 build_loc = build_loc_store;
3021 }
else if (!mkdirFailed && dirmode!=0) {
3022 Chmod(build_loc,dirmode);
3034 ::Info(
"ACLiC",
"script has already been loaded in interpreted mode");
3051 TRegexp rel_inc(
" -I[^\"/\\\\$\\%-][^:\\s]+");
3053 pos = rel_inc.
Index(includes,&
len);
3063 pos = rel_inc.
Index(includes,&
len);
3068 TRegexp rel_inc(
" -I\"[^/\\\\$\\%-][^:\\s]+");
3070 pos = rel_inc.
Index(includes,&
len);
3077 pos = rel_inc.
Index(includes,&
len);
3098 TRegexp rel_def(
"-D[^\\s\\t\\n\\r]*");
3102 defines += cmd(pos,
len);
3104 pos = rel_def.
Index(cmd,&
len,pos+1);
3132 Long_t lib_time, file_time;
3136 (lib_time < file_time))) {
3146 depdir = emergency_loc;
3157 FILE * depfile = fopen(depfilename.
Data(),
"r");
3158 if (depfile==
nullptr) {
3166 TString version_var = libname + version_var_prefix;
3169 char *
line =
new char[sz];
3175 Bool_t hasversion =
false;
3177 while ((
c = fgetc(depfile)) != EOF) {
3180 while ((
c = fgetc(depfile)) != EOF) {
3187 if (current &&
line[current-1]==
'=' && strncmp(version_var.
Data(),
line,current)==0) {
3193 }
else if (isspace(
c) && !nested) {
3195 if (
line[current-1]!=
':') {
3204 modified |= ( lib_time <= filetime );
3211 if (current==sz-1) {
3213 char *newline =
new char[sz];
3214 memcpy(newline,
line, current);
3218 if (
c==
'"') nested = !nested;
3227 recompile = modified;
3244 && (lib_time>load_time)) {
3249 if ( !recompile && reload ) {
3252 ::Info(
"ACLiC",
"%s has been modified and will be reloaded",
3275 ::Info(
"ACLiC",
"%s script has already been compiled and loaded",
3276 modified ?
"modified" :
"unmodified");
3283 ::Info(
"ACLiC",
"it will be regenerated and reloaded!");
3301 libmapfilename +=
".rootmap";
3302#if (defined(R__MACOSX) && !defined(MAC_OS_X_VERSION_10_5)) || defined(R__WIN32)
3307 Bool_t linkDepLibraries = !produceRootmap;
3309#if (defined(R__MACOSX) && !defined(MAC_OS_X_VERSION_10_5))
3311#elif defined(R__WIN32)
3316 produceRootmap = linkLibs & 0x2;
3317 linkDepLibraries = linkLibs & 0x1;
3321 bool useCxxModules =
3322#ifdef R__USE_CXXMODULES
3329 auto ForeachSharedLibDep = [](
const char *lib, std::function<
bool(
const char *)>
f) {
3330 using namespace std;
3331 string deps =
gInterpreter->GetSharedLibDeps(lib,
true);
3332 istringstream iss(deps);
3333 vector<string> libs{istream_iterator<std::string>{iss}, istream_iterator<string>{}};
3335 for (
auto I = libs.begin() + 1, E = libs.end();
I != E; ++
I)
3339 auto LoadLibrary = [useCxxModules, produceRootmap, ForeachSharedLibDep](
const TString &lib) {
3348 if (useCxxModules && !produceRootmap) {
3349 std::function<
bool(
const char *)> LoadLibF = [](
const char *dep) {
3352 ForeachSharedLibDep(lib, LoadLibF);
3369 return LoadLibrary(library);
3374 if (!canWrite && recompile) {
3377 ::Warning(
"ACLiC",
"Could not create the directory: %s",
3380 ::Warning(
"ACLiC",
"%s is not writable!",
3383 if (emergency_loc == build_dir ) {
3384 ::Error(
"ACLiC",
"%s is the last resort location (i.e. temp location)",build_loc.
Data());
3387 ::Warning(
"ACLiC",
"Output will be written to %s",
3388 emergency_loc.
Data());
3389 return CompileMacro(expFileName, opt, library_specified, emergency_loc, dirmode);
3393 Info(
"ACLiC",
"creating shared library %s",library.
Data());
3399 TString dict = libname +
"_ACLiC_dict";
3403 static const int maxforbidden = 27;
3404 static const char *forbidden_chars[maxforbidden] =
3405 {
"+",
"-",
"*",
"/",
"&",
"%",
"|",
"^",
">",
"<",
3406 "=",
"~",
".",
"(",
")",
"[",
"]",
"!",
",",
"$",
3407 " ",
":",
"'",
"#",
"@",
"\\",
"\"" };
3408 for(
int ic = 0; ic < maxforbidden; ic++ ) {
3423 linkdef +=
"_ACLiC_linkdef.h";
3424 std::ofstream linkdefFile( linkdef, std::ios::out );
3425 linkdefFile <<
"// File Automatically generated by the ROOT Script Compiler "
3427 linkdefFile << std::endl;
3428 linkdefFile <<
"#ifdef __CINT__" << std::endl;
3429 linkdefFile << std::endl;
3430 linkdefFile <<
"#pragma link C++ nestedclasses;" << std::endl;
3431 linkdefFile <<
"#pragma link C++ nestedtypedefs;" << std::endl;
3432 linkdefFile << std::endl;
3436 const char * extensions[] = {
".h",
".hh",
".hpp",
".hxx",
".hPP",
".hXX" };
3439 for (i = 0; i < 6; i++ ) {
3443 extra_linkdef.
Append(extensions[i]);
3446 if (verboseLevel>4 && withInfo) {
3447 Info(
"ACLiC",
"including extra linkdef file: %s",
name);
3449 linkdefFile <<
"#include \"" <<
name <<
"\"" << std::endl;
3454 if (verboseLevel>5 && withInfo) {
3455 Info(
"ACLiC",
"looking for header in: %s",incPath.
Data());
3457 for (i = 0; i < 6; i++ ) {
3460 lookup.
Append(extensions[i]);
3467 linkdefFile <<
"#pragma link C++ defined_in \""<<filename_fullpath <<
"\";" << std::endl;
3468 linkdefFile << std::endl;
3469 linkdefFile <<
"#endif" << std::endl;
3470 linkdefFile.close();
3475 mapfile +=
"_ACLiC_map";
3476 TString mapfilein = mapfile +
".in";
3477 TString mapfileout = mapfile +
".out";
3480 if (!useCxxModules) {
3481 if (
gInterpreter->GetSharedLibDeps(library) !=
nullptr) {
3483 needLoadMap =
kTRUE;
3487 std::ofstream mapfileStream( mapfilein, std::ios::out );
3490 TString sname =
"system.rootmap";
3503 mapfileStream << file << std::endl;
3505 mapfileStream << file << std::endl;
3506 mapfileStream <<
name << std::endl;
3508 for (i = 0; i <
gInterpreter->GetRootMapFiles()->GetEntriesFast(); i++) {
3513 mapfileStream.close();
3518 rcling +=
" -v0 \"--lib-list-prefix=";
3520 rcling +=
"\" -f \"";
3523 if (produceRootmap && !useCxxModules) {
3524 rcling +=
" -rml " + libname +
" -rmf \"" + libmapfilename +
"\" ";
3525 rcling.
Append(
"-DR__ACLIC_ROOTMAP ");
3530 rcling.
Append(fromConfig);
3532 if (!extraFlags.
IsNull()) {
3535 rcling.
Append(extraFlags);
3541 if (useCxxModules && produceRootmap) {
3542 rcling +=
" -cxxmodule ";
3544 TString moduleName = libname +
"_ACLiC_dict";
3546 moduleName = moduleName.
Remove(0, 3);
3547 TString moduleMapName = moduleName +
".modulemap";
3548 TString moduleMapFullPath = build_loc +
"/" + moduleMapName;
3551 ::Info(
"ACLiC",
"File %s already exists!", moduleMapFullPath.
Data());
3555 std::ofstream moduleMapFile(moduleMapFullPath, std::ios::out);
3556 moduleMapFile <<
"module \"" << moduleName <<
"\" {" << std::endl;
3557 moduleMapFile <<
" header \"" << relative_path <<
"\"" << std::endl;
3558 moduleMapFile <<
" export *" << std::endl;
3559 moduleMapFile <<
" link \"" << libname_ext <<
"\"" << std::endl;
3560 moduleMapFile <<
"}" << std::endl;
3561 moduleMapFile.close();
3563 rcling.
Append(
" \"-moduleMapFile=" + moduleMapFullPath +
"\" ");
3571 if (verboseLevel>3) {
3572 ::Info(
"ACLiC",
"creating the dictionary files");
3573 if (verboseLevel>4)
::Info(
"ACLiC",
"%s", rcling.
Data());
3578 auto ExecAndReport = [](
TString cmd) ->
bool {
3582 ::Error(
"ACLiC",
"Executing '%s' failed with a core dump!", cmd.
Data());
3584 ::Error(
"ACLiC",
"Executing '%s' failed!", cmd.
Data());
3597 std::ifstream liblist(mapfileout);
3599 while ( liblist >> libtoload ) {
3601 if (libtoload ==
"#") {
3603 std::string toskipcomment;
3604 std::getline(liblist,toskipcomment);
3607 if (libtoload != library && libtoload != libname && libtoload != libname_ext) {
3608 if (produceRootmap) {
3609 if (loadLib || linkDepLibraries ) {
3616 if (!linkedlibs.
Contains(libtoload)) {
3618 depLibraries.
Append(
" ");
3620 depLibraries = depLibraries.
Strip();
3623 gROOT->LoadClass(
"", libtoload);
3626 unsigned char c = liblist.peek();
3627 if (
c==
'\n' ||
c==
'\r') {
3653 std::unique_ptr<TObjArray> tokens( linkLibrariesNoQuotes.
Tokenize(
" ") );
3654 for (
auto tokenObj : *tokens) {
3655 singleLibrary = ((
TObjString*)tokenObj)->GetString();
3657 if (collectingSingleLibraryNameTokens) {
3658 librariesWithQuotes.
Chop();
3659 librariesWithQuotes +=
"\" \"" + singleLibrary +
"\"";
3660 collectingSingleLibraryNameTokens =
kFALSE;
3662 librariesWithQuotes +=
" \"" + singleLibrary +
"\"";
3665 if (collectingSingleLibraryNameTokens) {
3666 librariesWithQuotes += singleLibrary +
" ";
3668 collectingSingleLibraryNameTokens =
kTRUE;
3669 librariesWithQuotes +=
" \"" + singleLibrary +
" ";
3675 linkLibraries.
Prepend(linkLibrariesNoQuotes);
3677 linkLibraries.
Prepend(librariesWithQuotes);
3684 cmd.
ReplaceAll(
"$SourceFiles",
"-D__ACLIC__ \"$SourceFiles\"");
3686 cmd.
ReplaceAll(
"$ObjectFiles",
"\"$ObjectFiles\"");
3689 cmd.
ReplaceAll(
"$SharedLib",
"\"$SharedLib\"");
3691 if (linkDepLibraries) {
3692 if (produceRootmap) {
3717 fakeMain +=
"_ACLiC_main";
3719 std::ofstream fakeMainFile( fakeMain, std::ios::out );
3720 fakeMainFile <<
"// File Automatically generated by the ROOT Script Compiler "
3722 fakeMainFile <<
"int main(char*argc,char**argvv) {};" << std::endl;
3723 fakeMainFile.close();
3734 exec +=
"_ACLiC_exec";
3735 testcmd.
ReplaceAll(
"$SourceFiles",
"-D__ACLIC__ \"$SourceFiles\"");
3737 testcmd.
ReplaceAll(
"$ObjectFiles",
"\"$ObjectFiles\"");
3741 testcmd.
ReplaceAll(
"$LinkedLibs",linkLibraries);
3749 R__FixLink(testcmd);
3755 TString cmdAllowUnresolved = cmd;
3758 cmdAllowUnresolved.
ReplaceAll(
"-dynamiclib",
"-dynamiclib -Wl,-w -Wl,-undefined,dynamic_lookup");
3760 if (verboseLevel > 3 && withInfo) {
3761 ::Info(
"ACLiC",
"compiling the dictionary and script files");
3763 ::Info(
"ACLiC",
"%s", cmdAllowUnresolved.
Data());
3765 Int_t success = ExecAndReport(cmdAllowUnresolved);
3767 if (produceRootmap) {
3775 if (linkDepLibraries) {
3781 std::function<
bool(
const char *)> CollectF = [&depLibsFullPaths](
const char *dep) {
3784 ::Error(
"TSystem::CompileMacro",
"Cannot find library '%s'", dep);
3787 depLibsFullPaths +=
" " + LibFullPath;
3790 ForeachSharedLibDep(library, CollectF);
3793 relink_cmd += depLibsFullPaths;
3794 if (verboseLevel > 3 && withInfo) {
3795 ::Info(
"ACLiC",
"relinking against all dependencies");
3796 if (verboseLevel > 4)
3799 result = ExecAndReport(relink_cmd);
3812 if (verboseLevel>3 && withInfo)
::Info(
"ACLiC",
"loading the shared library");
3814 result = LoadLibrary(library);
3819 if (verboseLevel>3 && withInfo) {
3820 ::Info(
"ACLiC",
"testing for missing symbols:");
3821 if (verboseLevel>4)
::Info(
"ACLiC",
"%s", testcmd.
Data());
3829 if (verboseLevel<=5 && !internalDebug) {
3839 if (verboseLevel>6) {
3906 if (!
gEnv)
return "";
3992 if (!
gEnv)
return "_linkdef";
4251 filenameCopy = filenameCopy.
Strip();
4255 filenameCopy = filenameCopy.
Strip();
4260 int parenNestCount = 1;
4261 bool inString =
false;
4262 Ssiz_t posArgBegin = posArgEnd - 1;
4263 for (; parenNestCount && posArgBegin >= 0; --posArgBegin) {
4266 if (posArgBegin > 0 && filenameCopy[posArgBegin] ==
'\\' &&
4267 (posArgBegin == 1 || filenameCopy[posArgBegin - 1] !=
'\\')) {
4272 switch (filenameCopy[posArgBegin]) {
4281 case '"': inString = !inString;
break;
4284 if (parenNestCount || inString) {
4285 Error(
"SplitAclicMode",
"Cannot parse argument in %s",
filename);
4287 arguments = filenameCopy(posArgBegin + 1, posArgEnd - 1);
4288 fname[posArgBegin + 1] = 0;
4296 s2 = strstr(fname,
">>");
4297 if (!s2) s2 = strstr(fname,
"2>");
4298 if (!s2) s2 = strchr(fname,
'>');
4299 s3 = strchr(fname,
'<');
4300 if (s2 && s3) s2 = s2<s3 ? s2 : s3;
4301 if (s3 && !s2) s2 = s3;
4310 while (s2 && *s2 ==
' ') s2--;
4320 int len = strlen(fname);
4323 if (strchr(
"kfgOcsdv-", fname[
len - 1])) {
4331 Bool_t remove = compile &&
len > 1 && fname[
len - 2] ==
'+';
4333 if (
mode.Length()) {
4337 fname[strlen(fname)-2] = 0;
4340 fname[strlen(fname)-1] = 0;
4361 const char *extensions[] = {
".lib",
".exp",
".d",
".def",
".rootmap",
"_ACLiC_linkdef.h",
"_ACLiC_dict_rdict.pcm"};
4362 while ((lib = (
TNamed*)next())) {
4368 ::FreeLibrary(::GetModuleHandle(libname));
4373 for (
const char *ext : extensions) {
The file contains utilities which are foundational and could be used across the core component of ROO...
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
R__EXTERN TApplication * gApplication
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t target
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
Option_t Option_t TPoint TPoint const char mode
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
char * Strip(const char *str, char c=' ')
Strip leading and trailing c (blanks by default) from a string.
char * StrDup(const char *str)
Duplicate the string str.
static Int_t gLibraryVersionIdx
TVirtualMutex * gSystemMutex
void AssignAndDelete(TString &target, char *tobedeleted)
static void R__WriteDependencyFile(const TString &build_loc, const TString &depfilename, const TString &filename, const TString &library, const TString &libname, const TString &extension, const char *version_var_prefix, const TString &includes, const TString &defines, const TString &incPath)
static bool R__MatchFilename(const char *left, const char *right)
Figure out if left and right points to the same object in the file system.
static void R__AddPath(TString &target, const TString &path)
static Int_t * gLibraryVersion
static Int_t gLibraryVersionMax
R__EXTERN const char * gProgName
R__EXTERN TVirtualMutex * gSystemMutex
Bool_t R_ISREG(Int_t mode)
Bool_t R_ISDIR(Int_t mode)
R__EXTERN TSystem * gSystem
#define R__LOCKGUARD2(mutex)
#define R__WRITE_LOCKGUARD(mutex)
#define R__READ_LOCKGUARD(mutex)
virtual void StopIdleing()
Called when system stops idleing.
virtual void StartIdleing()
Called when system starts idleing.
virtual TObject * Remove(TObject *obj)=0
virtual bool UseRWLock(Bool_t enable=true)
Set this collection to use a RW lock upon access, making it thread safe.
TObject * FindObject(const char *name) const override
Find an object in this collection using its name.
void Delete(Option_t *option="") override=0
Delete this object.
The TEnv class reads config files, by default named .rootrc.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
THashList * GetTable() const
This class represents an Internet Protocol (IP) address.
TObject * Next() override
Return next object in the list. Returns 0 when no more objects in list.
TObject * FindObject(const char *name) const override
Find an object in this list using its name.
void Add(TObject *obj) override
TObject * Remove(TObject *obj) override
Remove object from the list.
void Delete(Option_t *option="") override
Remove all objects from the list AND delete all heap based objects.
The TNamed class is the base class for all named ROOT classes.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
Int_t GetEntriesFast() const
TObject * At(Int_t idx) const override
Collectable string class.
Mother of all ROOT objects.
void AbstractMethod(const char *method) const
Use this method to implement an "abstract" method that you don't want to leave purely abstract.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual UInt_t GetUniqueID() const
Return the unique object id.
virtual void SysError(const char *method, const char *msgfmt,...) const
Issue system error message.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
@ kInvalidObject
if object ctor succeeded but object should not be used
@ kMustCleanup
if object destructor must call RecursiveRemove()
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
TProcessEventTimer(Long_t delay)
Create async event processor timer. Delay is in milliseconds.
Bool_t ProcessEvents()
Process events if timer did time out.
static const TString & GetBinDir()
Get the binary directory in the installation. Static utility function.
static const TString & GetIncludeDir()
Get the include directory in the installation. Static utility function.
static Int_t ConvertVersionCode2Int(Int_t code)
Convert version code to an integer, i.e. 331527 -> 51507.
static const TString & GetRootSys()
Get the rootsys directory in the installation. Static utility function.
static Int_t RootVersionCode()
Return ROOT version code as defined in RVersion.h.
static const TString & GetEtcDir()
Get the sysconfig directory in the installation. Static utility function.
static const TString & GetLibDir()
Get the library directory in the installation. Static utility function.
Regular expression class.
Ssiz_t Index(const TString &str, Ssiz_t *len, Ssiz_t start=0) const
Find the first occurrence of the regexp in string and return the position, or -1 if there is no match...
void Add(TObject *obj) override
virtual EStatus Handle(std::exception &exc)=0
static Int_t * ReAllocInt(Int_t *vp, size_t size, size_t oldsize)
Reallocate (i.e.
int CompareTo(const char *cs, ECaseCompare cmp=kExact) const
Compare a string to char *cs2.
TString & Insert(Ssiz_t pos, const char *s)
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
void Clear()
Clear string without changing its capacity.
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
Ssiz_t First(char c) const
Find first occurrence of a character c.
const char * Data() const
TString & ReplaceAll(const TString &s1, const TString &s2)
Ssiz_t Last(char c) const
Find last occurrence of a character c.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Prepend(const char *cs)
TString & Remove(Ssiz_t pos)
TString & Append(const char *cs)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
Abstract base class defining a generic interface to the underlying Operating System.
virtual void NotifyApplicationCreated()
Hook to tell TSystem that the TApplication object has been created.
virtual const char * GetBuildNode() const
Return the build node name.
virtual int Umask(Int_t mask)
Set the process file creation mode mask.
virtual int SendBuf(int sock, const void *buffer, int length)
Send a buffer headed by a length indicator.
virtual int GetServiceByName(const char *service)
Get port # of internet service.
virtual Bool_t IsFileInIncludePath(const char *name, char **fullpath=nullptr)
Return true if 'name' is a file that can be found in the ROOT include path or the current directory.
virtual void Unload(const char *module)
Unload a shared library.
virtual FILE * TempFileName(TString &base, const char *dir=nullptr, const char *suffix=nullptr)
Create a secure temporary file by appending a unique 6 letter string to base.
virtual const char * GetMakeSharedLib() const
Return the command line use to make a shared library.
virtual int AnnounceUdpService(int port, int backlog)
Announce UDP service.
TSeqCollection * fFileHandler
virtual void AddFileHandler(TFileHandler *fh)
Add a file handler to the list of system file handlers.
TString & GetLastErrorString()
Return the thread local storage for the custom last error message.
virtual void AddLinkedLibs(const char *linkedLib)
Add linkedLib to already set linked libs.
virtual Int_t RedirectOutput(const char *name, const char *mode="a", RedirectHandle_t *h=nullptr)
Redirect standard output (stdout, stderr) to the specified file.
virtual const char * GetBuildCompilerVersion() const
Return the build compiler version.
virtual void ResetSignal(ESignals sig, Bool_t reset=kTRUE)
If reset is true reset the signal handler for the specified signal to the default handler,...
virtual TInetAddress GetSockName(int sock)
Get Internet Protocol (IP) address of host and port #.
virtual int GetFsInfo(const char *path, Long_t *id, Long_t *bsize, Long_t *blocks, Long_t *bfree)
Get info about a file system: fs type, block size, number of blocks, number of free blocks.
virtual Func_t DynFindSymbol(const char *module, const char *entry)
Find specific entry point in specified library.
virtual const char * GetLinkedLibs() const
Return the list of library linked to this executable.
void Beep(Int_t freq=-1, Int_t duration=-1, Bool_t setDefault=kFALSE)
Beep for duration milliseconds with a tone of frequency freq.
virtual void IgnoreInterrupt(Bool_t ignore=kTRUE)
If ignore is true ignore the interrupt signal, else restore previous behaviour.
virtual void Syslog(ELogLevel level, const char *mess)
Send mess to syslog daemon.
virtual int Symlink(const char *from, const char *to)
Create a symbolic link from file1 to file2.
virtual void SetAclicMode(EAclicMode mode)
AclicMode indicates whether the library should be built in debug mode or optimized.
static void ResetErrno()
Static function resetting system error number.
virtual UInt_t LoadAllLibraries()
Load all libraries known to ROOT via the rootmap system.
virtual void * GetDirPtr() const
virtual void SetObjExt(const char *objExt)
Set object files extension, should be either .o, .obj, etc.
virtual void SetLinkdefSuffix(const char *suffix)
The 'suffix' will be appended to the name of a script loaded by ACLiC and used to locate any eventual...
TSeqCollection * fHelpers
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
virtual const char * GetBuildDir() const
Return the path of the build directory.
virtual void Openlog(const char *name, Int_t options, ELogFacility facility)
Open connection to system log daemon.
static Int_t GetErrno()
Static function returning system error number.
virtual void AddIncludePath(const char *includePath)
Add a directory to the already set include path.
virtual int Chmod(const char *file, UInt_t mode)
Set the file permission bits. Returns -1 in case or error, 0 otherwise.
virtual Int_t GetEffectiveGid()
Returns the effective group id.
virtual ~TSystem()
Delete the OS interface.
virtual void SetDisplay()
Set DISPLAY environment variable based on utmp entry. Only for UNIX.
virtual const char * DirName(const char *pathname)
Return the directory name in pathname.
virtual void FreeDirectory(void *dirp)
Free a directory.
virtual void SetFlagsOpt(const char *)
FlagsOpt should contain the options to pass to the C++ compiler in order to compile the library in op...
void RemoveOnExit(TObject *obj)
Objects that should be deleted on exit of the OS interface.
TSeqCollection * fStdExceptionHandler
virtual char * GetServiceByPort(int port)
Get name of internet service.
virtual void * OpenDirectory(const char *name)
Open a directory. Returns 0 if directory does not exist.
virtual int GetPid()
Get process id.
virtual int RecvBuf(int sock, void *buffer, int length)
Receive a buffer headed by a length indicator.
virtual int CopyFile(const char *from, const char *to, Bool_t overwrite=kFALSE)
Copy a file.
virtual Long_t NextTimeOut(Bool_t mode)
Time when next timer of mode (synchronous=kTRUE or asynchronous=kFALSE) will time-out (in ms).
virtual int SetSockOpt(int sock, int kind, int val)
Set socket option.
virtual const char * Getenv(const char *env)
Get environment variable.
virtual TStdExceptionHandler * RemoveStdExceptionHandler(TStdExceptionHandler *eh)
Remove an exception handler from list of exception handlers.
virtual const char * GetIncludePath()
Get the list of include path.
virtual int AcceptConnection(int sock)
Accept a connection.
virtual Int_t GetAclicProperties() const
Return the ACLiC properties field.
virtual TString SplitAclicMode(const char *filename, TString &mode, TString &args, TString &io) const
This method split a filename of the form:
virtual void ShowOutput(RedirectHandle_t *h)
Display the content associated with the redirection described by the opaque handle 'h'.
virtual char * ConcatFileName(const char *dir, const char *name)
Concatenate a directory and a file name. User must delete returned string.
virtual UserGroup_t * GetGroupInfo(Int_t gid)
Returns all group info in the UserGroup_t structure.
virtual void CleanCompiledMacros()
Remove the shared libs produced by the CompileMacro() function, together with their rootmaps,...
virtual Bool_t IsPathLocal(const char *path)
Returns TRUE if the url in 'path' points to the local file system.
virtual const char * FindFile(const char *search, TString &file, EAccessMode mode=kFileExists)
Find location of file in a search path.
virtual int mkdir(const char *name, Bool_t recursive=kFALSE)
Make a file system directory.
virtual int MakeDirectory(const char *name)
Make a directory.
TString fBuildCompilerVersionStr
virtual const char * ExpandFileName(const char *fname)
Expand a pathname getting rid of special shell characters like ~.
TSystem(const TSystem &)=delete
virtual TInetAddress GetPeerName(int sock)
Get Internet Protocol (IP) address of remote host and port #.
virtual TTime Now()
Get current time in milliseconds since 0:00 Jan 1 1995.
virtual Int_t Exec(const char *shellcmd)
Execute a command.
virtual int GetSysInfo(SysInfo_t *info) const
Returns static system info, like OS type, CPU type, number of CPUs RAM size, etc into the SysInfo_t s...
virtual int GetMemInfo(MemInfo_t *info) const
Returns ram and swap memory usage info into the MemInfo_t structure.
virtual EAclicMode GetAclicMode() const
AclicMode indicates whether the library should be built in debug mode or optimized.
virtual const char * GetLinkedLibraries()
Get list of shared libraries loaded at the start of the executable.
virtual void SetIncludePath(const char *includePath)
IncludePath should contain the list of compiler flags to indicate where to find user defined header f...
virtual TFileHandler * RemoveFileHandler(TFileHandler *fh)
Remove a file handler from the list of file handlers.
virtual int Load(const char *module, const char *entry="", Bool_t system=kFALSE)
Load a shared library.
virtual void ListSymbols(const char *module, const char *re="")
List symbols in a shared library.
virtual void DoBeep(Int_t=-1, Int_t=-1) const
virtual int GetCpuInfo(CpuInfo_t *info, Int_t sampleTime=1000) const
Returns cpu load average and load info into the CpuInfo_t structure.
virtual void ListLibraries(const char *regexp="")
List the loaded shared libraries.
virtual FILE * OpenPipe(const char *command, const char *mode)
Open a pipe.
virtual void SetMakeSharedLib(const char *directives)
Directives should contain the description on how to compile and link a shared lib.
int GetPathInfo(const char *path, Long_t *id, Long_t *size, Long_t *flags, Long_t *modtime)
Get info about a file: id, size, flags, modification time.
virtual void InnerLoop()
Inner event loop.
virtual const char * PrependPathName(const char *dir, TString &name)
Concatenate a directory and a file name.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
virtual int OpenConnection(const char *server, int port, int tcpwindowsize=-1, const char *protocol="tcp")
Open a connection to another host.
virtual const char * GetDirEntry(void *dirp)
Get a directory entry. Returns 0 if no more entries.
virtual void IgnoreSignal(ESignals sig, Bool_t ignore=kTRUE)
If ignore is true ignore the specified signal, else restore previous behaviour.
virtual void Run()
System event loop.
virtual int GetSockOpt(int sock, int kind, int *val)
Get socket option.
virtual void ExitLoop()
Exit from event loop.
virtual Bool_t ChangeDirectory(const char *path)
Change directory.
virtual std::string GetHomeDirectory(const char *userName=nullptr) const
Return the user's home directory.
virtual int AnnounceTcpService(int port, Bool_t reuse, int backlog, int tcpwindowsize=-1)
Announce TCP/IP service.
virtual const char * UnixPathName(const char *unixpathname)
Convert from a local pathname to a Unix pathname.
virtual int RecvRaw(int sock, void *buffer, int length, int flag)
Receive exactly length bytes into buffer.
virtual Bool_t Init()
Initialize the OS interface.
virtual void AddTimer(TTimer *t)
Add timer to list of system timers.
virtual int GetProcInfo(ProcInfo_t *info) const
Returns cpu and memory used by this process into the ProcInfo_t structure.
virtual const char * GetBuildCompilerVersionStr() const
Return the build compiler version identifier string.
virtual void DispatchOneEvent(Bool_t pendingOnly=kFALSE)
Dispatch a single event.
virtual int Rename(const char *from, const char *to)
Rename a file.
virtual int ClosePipe(FILE *pipe)
Close the pipe.
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
virtual void AddSignalHandler(TSignalHandler *sh)
Add a signal handler to list of system signal handlers.
virtual const char * GetDynamicPath()
Return the dynamic path (used to find shared libraries).
TSeqCollection * fSignalHandler
virtual const char * GetMakeExe() const
Return the command line use to make an executable.
virtual const char * FindDynamicLibrary(TString &lib, Bool_t quiet=kFALSE)
Find a dynamic library using the system search paths.
virtual void SetFlagsDebug(const char *)
FlagsDebug should contain the options to pass to the C++ compiler in order to compile the library in ...
virtual void Exit(int code, Bool_t mode=kTRUE)
Exit the application.
virtual Int_t GetGid(const char *group=nullptr)
Returns the group's id. If group = 0, returns current user's group.
virtual void SetMakeExe(const char *directives)
Directives has the same syntax as the argument of SetMakeSharedLib but is used to create an executabl...
TSeqCollection * fCompiled
virtual TString GetFromPipe(const char *command)
Execute command and return output in TString.
TString fBuildCompilerVersion
TSystem * FindHelper(const char *path, void *dirptr=nullptr)
Create helper TSystem to handle file and directory operations that might be special for remote file a...
virtual const char * GetFlagsDebug() const
Return the debug flags.
virtual const char * HostName()
Return the system's host name.
Int_t fNfd
Signals that were trapped.
virtual void Unsetenv(const char *name)
Unset environment variable.
virtual Bool_t IsAbsoluteFileName(const char *dir)
Return true if dir is an absolute pathname.
virtual void AddDynamicPath(const char *pathname)
Add a new directory to the dynamic path.
virtual Int_t Select(TList *active, Long_t timeout)
Select on active file descriptors (called by TMonitor).
TSeqCollection * fOnExitList
virtual const char * GetObjExt() const
Get the object file extension.
virtual int AnnounceUnixService(int port, int backlog)
Announce unix domain service.
virtual Int_t GetUid(const char *user=nullptr)
Returns the user's id. If user = 0, returns current user's id.
virtual Int_t GetEffectiveUid()
Returns the effective user id.
virtual const char * GetLinkdefSuffix() const
Return the linkdef suffix chosen by the user for ACLiC.
virtual void SetDynamicPath(const char *pathname)
Set the dynamic path to a new value.
virtual void Sleep(UInt_t milliSec)
Sleep milliSec milli seconds.
virtual int CompileMacro(const char *filename, Option_t *opt="", const char *library_name="", const char *build_dir="", UInt_t dirmode=0)
This method compiles and loads a shared library containing the code from the file "filename".
virtual const char * WorkingDirectory()
Return working directory.
virtual void AddStdExceptionHandler(TStdExceptionHandler *eh)
Add an exception handler to list of system exception handlers.
virtual char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path.
virtual TInetAddress GetHostByName(const char *server)
Get Internet Protocol (IP) address of host.
virtual void SetProgname(const char *name)
Set the application name (from command line, argv[0]) and copy it in gProgName.
virtual int SendRaw(int sock, const void *buffer, int length, int flag)
Send exactly length bytes from buffer.
virtual Int_t SetFPEMask(Int_t mask=kDefaultMask)
Set which conditions trigger a floating point exception.
virtual const char * GetBuildCompiler() const
Return the build compiler.
virtual void CloseConnection(int sock, Bool_t force=kFALSE)
Close socket connection.
virtual const char * GetLibraries(const char *regexp="", const char *option="", Bool_t isRegexp=kTRUE)
Return a space separated list of loaded shared libraries.
void SetErrorStr(const char *errstr)
Set the system error string.
virtual TSignalHandler * RemoveSignalHandler(TSignalHandler *sh)
Remove a signal handler from list of signal handlers.
virtual void SetSoExt(const char *soExt)
Set shared library extension, should be either .so, .sl, .a, .dll, etc.
virtual void Closelog()
Close connection to system log daemon.
virtual void Setenv(const char *name, const char *value)
Set environment variable.
virtual const char * GetBuildArch() const
Return the build architecture.
virtual int Link(const char *from, const char *to)
Create a link from file1 to file2.
virtual void SigAlarmInterruptsSyscalls(Bool_t)
virtual const char * HomeDirectory(const char *userName=nullptr)
Return the user's home directory.
virtual void SetLinkedLibs(const char *linkedLibs)
LinkedLibs should contain the library directory and list of libraries needed to recreate the current ...
virtual std::string GetWorkingDirectory() const
Return working directory.
virtual void SetBuildDir(const char *build_dir, Bool_t isflat=kFALSE)
Set the location where ACLiC will create libraries and use as a scratch area.
static const char * StripOffProto(const char *path, const char *proto)
Strip off protocol string from specified path.
virtual void Abort(int code=0)
Abort the application.
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
virtual const char * GetSoExt() const
Get the shared library extension.
virtual int Utime(const char *file, Long_t modtime, Long_t actime)
Set the a files modification and access times.
virtual const char * GetError()
Return system error string.
virtual TTimer * RemoveTimer(TTimer *t)
Remove timer from list of system timers.
virtual TString GetDirName(const char *pathname)
Return the directory name in pathname.
virtual Int_t GetFPEMask()
Return the bitmap of conditions that trigger a floating point exception.
virtual int Unlink(const char *name)
Unlink, i.e.
virtual void StackTrace()
Print a stack trace.
virtual UserGroup_t * GetUserInfo(Int_t uid)
Returns all user info in the UserGroup_t structure.
virtual void ResetSignals()
Reset signals handlers to previous behaviour.
virtual const char * TempDirectory() const
Return a user configured or systemwide directory to create temporary files in.
virtual const char * GetFlagsOpt() const
Return the optimization flags.
virtual Bool_t ConsistentWith(const char *path, void *dirptr=nullptr)
Check consistency of this helper with the one required by 'path' or 'dirptr'.
char * DynamicPathName(const char *lib, Bool_t quiet=kFALSE)
Find a dynamic library called lib using the system search paths.
Basic time type with millisecond precision.
Handles synchronous and a-synchronous timer events.
virtual void TurnOn()
Add the timer to the system timer list.
void Reset()
Reset the timer.
Bool_t IsInterruptingSyscalls() const
This class represents a WWW compatible URL.
const char * GetUser() const
const char * GetHost() const
const char * GetProtocol() const
TVersionCheck(int versionCode)
Register version of plugin library.
This class implements a mutex interface.
std::string GetCurrentDir()
std::string MakePathRelative(const std::string &path, const std::string &base, bool isBuildingROOT=false)
R__EXTERN TVirtualRWMutex * gCoreMutex