45#include "compiledata.h"
46#include "RConfigure.h"
118 return !strncmp(path,
proto, strlen(
proto)) ? path + strlen(
proto) : path;
127 Error(
"TSystem",
"only one instance of TSystem allowed");
217 if (!
fName.CompareTo(
"Generic"))
return kTRUE;
271 return rv ? len : -1;
360 catch (std::exception& exc) {
372 Warning(
"Run",
"instructed to abort");
379 catch (
const char *str) {
384 Warning(
"Run",
"handle uncaught exception, terminating");
425 return gROOT->IsInterrupted();
506 if (t->
IsSync() == mode) {
520 if (to && to->
IsAsync() && timeout > 0) {
696 SysError(
"GetFromPipe",
"cannot run command \"%s\"", scommand.
Data());
701 while (
line.Gets(pipe)) {
709 Error(
"GetFromPipe",
"command \"%s\" returned %d", scommand.
Data(),
r);
780 while ((helper = (
TSystem*) next()))
794 if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TSystem", path))) {
795 if (
h->LoadPlugin() == -1)
799 }
else if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TSystem", path))) {
800 if (
h->LoadPlugin() == -1)
802 helper = (
TSystem*)
h->ExecPlugin(0);
832 return (checkproto || checkdir);
895 return std::string();
911 return std::string();
951 if (
name[0] ==
'/' &&
name[1] ==
'\0')
954 if ((cp = (
char *)strrchr(
name,
'/')))
958 Error(
"BaseName",
"name = 0");
968 return dir[0] ==
'/';
994 while ( incPath.
Index(
" :") != -1 ) {
1001 incPath.
Prepend(fileLocation+
":.:");
1003 char *actual =
Which(incPath,realname);
1023 if (res.IsNull() || (res ==
"."))
1028 TTHREAD_TLS(
Ssiz_t) len = 0;
1029 TTHREAD_TLS(
char*) buf =
nullptr;
1030 if (res.Length() >= len) {
1031 if (buf)
delete [] buf;
1032 len = res.Length() + 50;
1033 buf =
new char [len];
1036 strncpy(buf, res.Data(), len);
1048 if (!pathname || !strchr(pathname,
'/'))
1051 auto pathlen = strlen(pathname);
1053 const char *
r = pathname + pathlen - 1;
1055 while ((
r > pathname) && (*
r ==
'/'))
1058 while ((
r > pathname) && (*
r !=
'/'))
1063 while ((
r > pathname) && (*
r ==
'/'))
1067 if ((
r == pathname) && (*
r !=
'/'))
1070 return TString(pathname,
r + 1 - pathname);
1116 TTHREAD_TLS_ARRAY(
char, kBufSize, xname);
1134 char xname[kBufSize];
1149 int n, ier, iter, lx, ncopy;
1150 char *inp, *out, *
x, *t, *buff;
1151 const char *
b, *
c, *
e;
1153 buff =
new char[kBufSize * 4];
1155 iter = 0; xname[0] = 0; inp = buff + kBufSize; out = inp + kBufSize;
1156 inp[-1] =
' '; inp[0] = 0; out[-1] =
' ';
1157 c = fname + strspn(fname,
" \t\f\r");
1160 strlcat(inp,
c, kBufSize);
1163 iter++;
c = inp; ier = 0;
1166 p =
nullptr;
e =
nullptr;
1167 if (
c[0] ==
'~' &&
c[1] ==
'/') {
1172 strlcpy(
x, p, kBufSize);
1179 }
else if (
c[0] ==
'~' &&
c[1] !=
'/') {
1180 n = strcspn(
c+1,
"/ ");
1181 assert((
n+1) < kBufSize &&
"This should have been prevented by the truncation 'strlcat(inp, c, kBufSize)'");
1183 (void)strlcpy(buff,
c+1,
n+1);
1188 strlcpy(
x, p, kBufSize);
1198 for ( ;
c[0];
c++) {
1200 p =
nullptr;
e =
nullptr;
1202 if (
c[0] ==
'.' &&
c[1] ==
'/' &&
c[-1] ==
' ') {
1204 strlcpy(buff, wd.c_str(), kBufSize);
1209 strlcpy(
x, p, kBufSize);
x += strlen(p);
c =
e-1;
continue;
1216 if (
c[1] ==
'(')
b++;
1217 if (
c[1] ==
'{')
b++;
1221 for (
e =
b; isalnum(
e[0]) ||
e[0] ==
'_';
e++) ;
1222 buff[0] = 0; strncat(buff,
b,
e-
b);
1225 for (t = buff; (t[0] = toupper(t[0])); t++) ;
1229 for (t = buff; (t[0] = tolower(t[0])); t++) ;
1232 if (!p && !strcmp(buff,
"cwd")) {
1234 strlcpy(buff, wd.c_str(), kBufSize);
1237 if (!p && !strcmp(buff,
"$")) {
1246 if (
c[1] &&
c[1]!=
'\\' &&
c[1]!=
';' &&
c[1]!=
'/')
1254 if (lp >= kBufSize) {
1256 strlcpy(
x, p, kBufSize);
1262 c = (
b==
c+1) ?
e-1 :
e;
1267 x[0] = 0; lx =
x - out;
1268 if (ier && iter < 3) { strlcpy(inp, out, kBufSize);
goto again; }
1269 ncopy = (lx >= kBufSize) ? kBufSize-1 : lx;
1270 xname[0] = 0; strncat(xname, out, ncopy);
1274 if (ier || ncopy != lx) {
1275 ::Error(
"TSystem::ExpandFileName",
"input: %s, output: %s", fname, xname);
1325 if (strlen(url.
GetHost()) > 0) {
1330 if (!strcmp(
a.GetHostName(),
b.GetHostName()) ||
1331 !strcmp(
a.GetHostAddress(),
b.GetHostAddress())) {
1335 if (strlen(url.
GetUser()) > 0) {
1418 int res =
GetPathInfo(path,
id, &lsize, flags, modtime);
1420 if (res == 0 &&
size) {
1422 Error(
"GetPathInfo",
"file %s > 2 GB, use GetPathInfo() with Long64_t size", path);
1566 FindFile(search, wfilString, mode);
1744 Error(
"ShowOutput",
"handle not specified");
1750 Error(
"ShowOutput",
"file '%s' cannot be read",
h->fFile.Data());
1756 if (!(
f = fopen(
h->fFile.Data(),
"r"))) {
1757 Error(
"ShowOutput",
"file '%s' cannot be open",
h->fFile.Data());
1762 off_t ltot = lseek(fileno(
f), (off_t) 0, SEEK_END);
1763 Int_t begin = (
h->fReadOffSet > 0 &&
h->fReadOffSet < ltot) ?
h->fReadOffSet : 0;
1764 lseek(fileno(
f), (off_t) begin, SEEK_SET);
1765 Int_t left = ltot - begin;
1768 const Int_t kMAXBUF = 16384;
1770 Int_t wanted = (left > kMAXBUF-1) ? kMAXBUF-1 : left;
1773 while ((len = read(fileno(
f), buf, wanted)) < 0 &&
1778 SysError(
"ShowOutput",
"error reading log file");
1784 fprintf(stderr,
"%s", buf);
1788 wanted = (left > kMAXBUF) ? kMAXBUF : left;
1790 }
while (len > 0 && left > 0);
1793 h->fReadOffSet = ltot;
1833 if (left == right)
return kTRUE;
1835 if (left==
nullptr || right==
nullptr)
return kFALSE;
1837 if ( (strcmp(right,left)==0) ) {
1843 char leftname[_MAX_PATH];
1844 char rightname[_MAX_PATH];
1845 _fullpath( leftname, left, _MAX_PATH );
1846 _fullpath( rightname, right, _MAX_PATH );
1847 return ((stricmp(leftname, rightname)==0));
1849 struct stat rightBuf;
1850 struct stat leftBuf;
1851 return ( ( 0 == stat( left, & leftBuf ) )
1852 && ( 0 == stat( right, & rightBuf ) )
1853 && ( leftBuf.st_dev == rightBuf.st_dev )
1854 && ( leftBuf.st_ino == rightBuf.st_ino )
1855 && ( leftBuf.st_size == rightBuf.st_size )
1856 && ( leftBuf.st_mtime == rightBuf.st_mtime )
1885 if (idx == 0 || libs[idx-1] ==
'/' || libs[idx-1] ==
'\\') {
1888 if (!
l.EndsWith(
".") && libs[idx]==
'.')
1891 while (idx < len && isdigit(libs[idx])) {
1894 if (libs[idx] ==
'.') {
1898 while (idx < len && libs[idx] !=
'.') {
1899 if (libs[idx] ==
' ' || idx+1 == len) {
1906 if (
l[
l.Length()-1] ==
'.') {
1907 l.Remove(
l.Length()-1);
1909 if (
l.BeginsWith(
"lib")) {
1910 l.Replace(0, 3,
"-l");
1912 if ((idx == 0 || libs[idx-1] ==
' ') &&
1913 (libs[idx+
l.Length()] ==
' ' || libs[idx+
l.Length()] == 0)) {
1929 const char *deplib = ((
TObjString*)tokens->
At(i))->GetName();
1930 if (strcmp(module,deplib)==0) {
1934 Info(
"Load",
"loading dependent library %s for library %s",
1936 if ((
ret =
Load(deplib,
"", system)) < 0) {
1962 Info(
"Load",
"loaded library %s, status %d", path,
ret);
1965 Error(
"Load",
"version mismatch, %s = %d, ROOT = %d",
1966 path,
v,
gROOT->GetVersionInt());
1974 if (!entry || !entry[0] ||
ret < 0)
return ret;
1990 if (!mapfile || !mapfile->
GetTable())
return 0;
1992 std::set<std::string> loadedlibs;
1993 std::set<std::string> failedlibs;
1997 while ((rec = (
TEnvRec*) iEnvRec())) {
2003 if (failedlibs.find(lib.
Data()) != failedlibs.end()) {
2015 if (loadedlibs.find(lib.
Data()) == loadedlibs.end()) {
2017 auto res =
gSystem->Load(lib);
2019 if (res == 0) ++nlibs;
2020 loadedlibs.insert(lib.
Data());
2022 failedlibs.insert(lib.
Data());
2101 if (!(regexp && regexp[0]))
2107 while (libs.
Tokenize(tok, from,
" ")) {
2108 if ((tok.
Index(pat, &ext) != 0) || (ext != tok.
Length()))
2110 std::cout << tok <<
"\n";
2119 TTHREAD_TLS_DECL(
TString, gLastErrorString);
2120 return gLastErrorString;
2192 if (libs.
Length() == 0) {
2198 static TString lastAddMissing;
2199 if ( lastLinked != slinked ) {
2201 static TRegexp separator(
"[^ \\t\\s]+");
2202 lastLinked = slinked;
2203 lastAddMissing.
Clear();
2206 start = index = end = 0;
2211 TString sub = slinked(index,end);
2212 if (sub[0]==
'-' && sub[1]==
'L') {
2227 }
else if (libs.
Length() != 0) {
2230 static TRegexp separator(
"[^ \\t\\s]+");
2232 start = index = end = 0;
2237 TString sub = slinked(index,end);
2238 if (sub[0]!=
'-' && sub[1]!=
'L') {
2248 if (regexp && *regexp) {
2249 static TRegexp separator(
"[^ \\t\\s]+");
2253 start = index = end = 0;
2258 s = libs(index,end);
2259 if ((isRegexp && s.
Index(user_re) !=
kNPOS) ||
2271#if defined(R__MACOSX)
2277 static TRegexp separator(
"[^ \\t\\s]+");
2278 static TRegexp dynload(
"/lib-dynload/");
2281 start = index = end = 0;
2286 TString s = libs2(index, end);
2516 target = tobedeleted;
2517 delete [] tobedeleted;
2522static TString R__Exec(
const char *cmd)
2526 FILE *
f =
gSystem->OpenPipe(cmd,
"r");
2533 while ((
x = fgetc(
f))!=EOF ) {
2534 if (
x==
'\n' ||
x==
'\r')
break;
2542static void R__FixLink(
TString &cmd)
2548 TString res = R__Exec(
"link 2>&1");
2550 if (res.
Contains(
"Microsoft (R) Incremental Linker"))
2554 res = R__Exec(
"cygpath . 2>&1");
2560 res = R__Exec(
"which cl.exe 2>&1|grep cl|sed 's,cl\\.exe$,link\\.exe,' 2>&1");
2562 res = R__Exec(
Form(
"cygpath -w '%s' 2>&1",res.
Data()));
2570#if defined(__CYGWIN__)
2572 if (path.
Length() > 2 && path[1]==
':') {
2590 bool needToUnlinkTempFile =
false;
2592 const char * stderrfile =
"/dev/null";
2599 const char *comspec =
gSystem->Getenv(
"COMSPEC");
2600 if (!comspec || !comspec[0]) {
2605 if (comspecStr.
EndsWith(
"cmd.exe")) {
2607 }
else if (comspecStr.
Contains(
"powershell.exe")) {
2608 stderrfile =
"$null";
2610 needToUnlinkTempFile =
true;
2611 stderrfile = depfilename +
".stderr.tmp";
2612 gSystem->PrependPathName(build_loc, stderrfile);
2616 TString bakdepfilename = depfilename +
".bak";
2619 TString touch =
"echo # > "; touch +=
"\"" + depfilename +
"\"";
2621 TString touch =
"echo > "; touch +=
"\"" + depfilename +
"\"";
2623 TString builddep =
"rmkdepend";
2625 builddep +=
" \"-f";
2626 builddep += depfilename;
2630 if ( build_loc.
Length() > (len+1) ) {
2631 builddep +=
" \"-p";
2632 if (build_loc[len] ==
'/' || build_loc[len+1] !=
'\\' ) {
2642 builddep +=
" \"-p";
2646 builddep +=
" -Y -- ";
2648 builddep +=
" \"-I"+rootsysInclude+
"\" ";
2649 builddep += includes;
2650 builddep += defines;
2651 builddep +=
" -- \"";
2652 builddep += filename;
2657 if ( library.
Length() > (len+1) ) {
2658 if (library[len] ==
'/' || library[len+1] !=
'\\' ) {
2659 targetname = library.
Data() + len + 1;
2661 targetname = library.
Data() + len + 2;
2664 targetname = library;
2667 targetname = library;
2672 builddep +=
"\" > ";
2673 builddep += stderrfile;
2674 builddep +=
" 2>&1 ";
2679#if defined(R__HAS_CLING_DICTVERSION)
2681 char *clingdictversion =
gSystem->Which(incPath,
"clingdictversion.h");
2682 if (clingdictversion) {
2685 delete [] clingdictversion;
2687 R__AddPath(adddictdep,rootsysInclude+
"/clingdictversion.h ");
2692 const char *dictHeaders[] = {
"RVersion.h",
"ROOT/RConfig.hxx",
"TClass.h",
2693 "TDictAttributeMap.h",
"TInterpreter.h",
"TROOT.h",
"TBuffer.h",
2694 "TMemberInspector.h",
"TError.h",
"RtypesImp.h",
"TIsAProxy.h",
2695 "TFileMergeInfo.h",
"TCollectionProxyInfo.h"};
2697 for (
unsigned int h=0;
h <
sizeof(dictHeaders)/
sizeof(dictHeaders[0]); ++
h)
2699 char *rootVersion =
gSystem->Which(incPath,dictHeaders[
h]);
2702 delete [] rootVersion;
2704 R__AddPath(adddictdep,rootsysInclude +
"/" + dictHeaders[
h]);
2711 char *rootCling =
gSystem->Which(
gSystem->Getenv(
"PATH"),
"rootcling");
2715 delete [] rootCling;
2718 adddictdep +=
" >> \""+depfilename+
"\"";
2720 TString addversiondep(
"echo ");
2721 addversiondep += libname + version_var_prefix +
" \"" +
ROOT_RELEASE +
"\" >> \""+depfilename+
"\"";
2730 if (depbuilt) depbuilt = !
gSystem->Exec(builddep);
2731 if (depbuilt) depbuilt = !
gSystem->Exec(adddictdep);
2732 if (depbuilt) depbuilt = !
gSystem->Exec(addversiondep);
2735 ::Warning(
"ACLiC",
"Failed to generate the dependency file for %s",
2738 if (needToUnlinkTempFile) {
2742 gSystem->Unlink(bakdepfilename);
2873 const char *library_specified,
2874 const char *build_dir,
2877 static const char *version_var_prefix =
"__ROOTBUILDVERSION=";
2888 keep = (strchr(opt,
'k')!=
nullptr);
2889 recompile = (strchr(opt,
'f')!=
nullptr);
2890 if (strchr(opt,
'O')!=
nullptr) {
2893 if (strchr(opt,
'g')!=
nullptr) {
2896 if (strchr(opt,
'c')!=
nullptr) {
2899 withInfo = strchr(opt,
's') ==
nullptr;
2900 verbose = strchr(opt,
'v') !=
nullptr;
2901 internalDebug = strchr(opt,
'd') !=
nullptr;
2904 TString rootbuild = ROOTBUILD;
2911#if defined(_MSC_VER) && defined(_DEBUG)
2922 if (build_dir && strlen(build_dir)) build_loc = build_dir;
2923 if (build_loc ==
".") {
2935 TString fromConfig =
gEnv->GetValue(
"ACLiC.IncludePaths",
"");
2936 incPath.
Append(fromConfig);
2939 auto posISysRoot = incPath.
Index(
" -isysroot \"");
2940 if (posISysRoot !=
kNPOS) {
2941 auto posISysRootEnd = incPath.
Index(
'"', posISysRoot + 12);
2942 if (posISysRootEnd !=
kNPOS) {
2945 incPath.
Insert(posISysRootEnd - 1,
"/usr/include/");
2946 incPath.
Replace(posISysRoot, 12,
":\"");
2949 while ( incPath.
Index(
" :") != -1 ) {
2956 TString expFileName(filename);
2958 expFileName =
gSystem->UnixPathName(expFileName);
2959 TString library = expFileName;
2962 const char *whichlibrary =
Which(incPath,library);
2964 library = whichlibrary;
2965 delete [] whichlibrary;
2967 ::Error(
"ACLiC",
"The file %s can not be found in the include path: %s",filename,incPath.
Data());
2971 if (
gSystem->AccessPathName(library)) {
2972 ::Error(
"ACLiC",
"The file %s can not be found.",filename);
2982 library =
gSystem->UnixPathName(library);
2983 TString filename_fullpath = library;
2990 if (library.
Length()>1 && isalpha(library[0]) && library[1]==
':') {
2991 file_dirname.
Prepend(library(0,2));
2993 TString file_location( file_dirname );
2994 incPath.
Prepend( file_location +
":" );
2999 libname_noext.
Remove(dot_pos);
3006 library.
Replace( dot_pos, library.
Length()-dot_pos, suffix);
3013 if (library_specified && strlen(library_specified) ) {
3015 libname =
BaseName( library_specified );
3016 library = library_specified;
3021 libname_noext = library_specified;
3024 library =
gSystem->UnixPathName(library);
3026 TString libname_ext ( libname );
3027 libname_ext +=
"." +
fSoExt;
3034 if (library.
Length()>1 && isalpha(library[0]) && library[1]==
':') {
3035 lib_dirname.
Prepend(library(0,2));
3038 if ( strncmp( &(lib_dirname[lib_dirname.
Length()-2]),
"/.", 2) == 0 ) {
3041 if ( strncmp( &(lib_dirname[lib_dirname.
Length()-2]),
"\\.", 2) == 0 ) {
3044 TString lib_location( lib_dirname );
3047 if (build_loc.
Length()==0) {
3048 build_loc = lib_location;
3051 TRegexp disk_finder (
"[A-z]:");
3053 if (pos==0) library.
Remove(pos,3);
3054 pos = lib_location.
Index( disk_finder );
3055 if (pos==0) lib_location.
Remove(pos,3);
3058 library = libname_ext;
3065 TString build_loc_store( build_loc );
3066 if (!flatBuildDir) {
3067 TString temp_lib_location = lib_location;
3072 mkdirFailed = (0 !=
mkdir(build_loc,
true));
3073 if (mkdirFailed && !canWriteBuild_loc) {
3076 build_loc = build_loc_store;
3078 }
else if (!mkdirFailed && dirmode!=0) {
3079 Chmod(build_loc,dirmode);
3083 library =
gSystem->UnixPathName(library);
3091 ::Info(
"ACLiC",
"script has already been loaded in interpreted mode");
3092 ::Info(
"ACLiC",
"unloading %s and compiling it", filename);
3108 TRegexp rel_inc(
" -I[^\"/\\\\$\\%-][^:\\s]+");
3110 pos = rel_inc.
Index(includes,&len);
3112 TString sub = includes(pos,len);
3119 includes.
Replace(pos,len,sub);
3120 pos = rel_inc.
Index(includes,&len);
3125 TRegexp rel_inc(
" -I\"[^/\\\\$\\%-][^:\\s]+");
3127 pos = rel_inc.
Index(includes,&len);
3129 TString sub = includes(pos,len);
3133 includes.
Replace(pos,len,sub);
3134 pos = rel_inc.
Index(includes,&len);
3147 TString fromConfig =
gEnv->GetValue(
"ACLiC.IncludePaths",
"");
3155 TRegexp rel_def(
"-D[^\\s\\t\\n\\r]*");
3157 pos = rel_def.
Index(cmd,&len);
3159 defines += cmd(pos,len);
3161 pos = rel_def.
Index(cmd,&len,pos+1);
3170 emergency_loc = (ug->
fUser).Data();
3190 Long_t lib_time, file_time;
3192 if ((
gSystem->GetPathInfo( library,
nullptr, (
Long_t*)
nullptr,
nullptr, &lib_time ) != 0) ||
3193 (
gSystem->GetPathInfo( expFileName,
nullptr, (
Long_t*)
nullptr,
nullptr, &file_time ) == 0 &&
3194 (lib_time < file_time))) {
3202 if (
gSystem->GetPathInfo( depfilename,
nullptr,(
Long_t*)
nullptr,
nullptr, &file_time ) != 0 ) {
3204 depdir = emergency_loc;
3205 depfilename =
BaseName(libname_noext);
3216 FILE * depfile = fopen(depfilename.
Data(),
"r");
3217 if (depfile==
nullptr) {
3225 TString version_var = libname + version_var_prefix;
3228 char *
line =
new char[sz];
3234 Bool_t hasversion =
false;
3236 while ((
c = fgetc(depfile)) != EOF) {
3239 while ((
c = fgetc(depfile)) != EOF) {
3246 if (current &&
line[current-1]==
'=' && strncmp(version_var.
Data(),
line,current)==0) {
3252 }
else if (isspace(
c) && !nested) {
3254 if (
line[current-1]!=
':') {
3262 }
else if (
gSystem->GetPathInfo(
line,
nullptr, (
Long_t*)
nullptr,
nullptr, &filetime ) == 0 ) {
3263 modified |= ( lib_time <= filetime );
3270 if (current==sz-1) {
3272 char *newline =
new char[sz];
3273 memcpy(newline,
line, current);
3277 if (
c==
'"') nested = !nested;
3286 recompile = modified;
3302 if (
gSystem->GetPathInfo( library,
nullptr, (
Long_t*)
nullptr,
nullptr, &lib_time ) == 0
3303 && (lib_time>load_time)) {
3308 if ( !recompile && reload ) {
3311 ::Info(
"ACLiC",
"%s has been modified and will be reloaded",
3325 gSystem->GetPathInfo( library,
nullptr, (
Long_t*)
nullptr,
nullptr, &lib_time );
3330 return !
gSystem->Load(library);
3334 ::Info(
"ACLiC",
"%s script has already been compiled and loaded",
3335 modified ?
"modified" :
"unmodified");
3342 ::Info(
"ACLiC",
"it will be regenerated and reloaded!");
3358 TString libmapfilename = libname;
3360 libmapfilename +=
".rootmap";
3361#if (defined(R__MACOSX) && !defined(MAC_OS_X_VERSION_10_5)) || defined(R__WIN32)
3366 Bool_t linkDepLibraries = !produceRootmap;
3368#if (defined(R__MACOSX) && !defined(MAC_OS_X_VERSION_10_5))
3369 Int_t linkLibs =
gEnv->GetValue(
"ACLiC.LinkLibs",2);
3370#elif defined(R__WIN32)
3371 Int_t linkLibs =
gEnv->GetValue(
"ACLiC.LinkLibs",3);
3373 Int_t linkLibs =
gEnv->GetValue(
"ACLiC.LinkLibs",1);
3375 produceRootmap = linkLibs & 0x2;
3376 linkDepLibraries = linkLibs & 0x1;
3380 bool useCxxModules =
3381#ifdef R__USE_CXXMODULES
3388 auto ForeachSharedLibDep = [](
const char *lib, std::function<
bool(
const char *)>
f) {
3389 using std::string, std::vector, std::istringstream, std::istream_iterator;
3390 string deps =
gInterpreter->GetSharedLibDeps(lib,
true);
3391 istringstream iss(deps);
3392 vector<string> libs{istream_iterator<std::string>{iss}, istream_iterator<string>{}};
3394 for (
auto I = libs.begin() + 1, E = libs.end();
I != E; ++
I)
3398 auto LoadLibrary = [useCxxModules, produceRootmap, ForeachSharedLibDep](
const TString &lib) {
3407 if (useCxxModules && !produceRootmap) {
3408 std::function<
bool(
const char *)> LoadLibF = [](
const char *dep) {
3411 ForeachSharedLibDep(lib, LoadLibF);
3421 gSystem->GetPathInfo( library,
nullptr, (
Long_t*)
nullptr,
nullptr, &lib_time );
3428 return LoadLibrary(library);
3433 if (!canWrite && recompile) {
3436 ::Warning(
"ACLiC",
"Could not create the directory: %s",
3439 ::Warning(
"ACLiC",
"%s is not writable!",
3442 if (emergency_loc == build_dir ) {
3443 ::Error(
"ACLiC",
"%s is the last resort location (i.e. temp location)",build_loc.
Data());
3446 ::Warning(
"ACLiC",
"Output will be written to %s",
3447 emergency_loc.
Data());
3448 return CompileMacro(expFileName, opt, library_specified, emergency_loc, dirmode);
3452 Info(
"ACLiC",
"creating shared library %s",library.
Data());
3458 TString dict = libname +
"_ACLiC_dict";
3462 static const int maxforbidden = 27;
3463 static const char *forbidden_chars[maxforbidden] =
3464 {
"+",
"-",
"*",
"/",
"&",
"%",
"|",
"^",
">",
"<",
3465 "=",
"~",
".",
"(",
")",
"[",
"]",
"!",
",",
"$",
3466 " ",
":",
"'",
"#",
"@",
"\\",
"\"" };
3467 for(
int ic = 0; ic < maxforbidden; ic++ ) {
3481 linkdef +=
"_ACLiC_linkdef.h";
3482 std::ofstream linkdefFile( linkdef, std::ios::out );
3483 linkdefFile <<
"// File Automatically generated by the ROOT Script Compiler "
3485 linkdefFile << std::endl;
3486 linkdefFile <<
"#ifdef __CLING__" << std::endl;
3487 linkdefFile << std::endl;
3488 linkdefFile <<
"#pragma link C++ nestedclasses;" << std::endl;
3489 linkdefFile <<
"#pragma link C++ nestedtypedefs;" << std::endl;
3490 linkdefFile << std::endl;
3494 const char * extensions[] = {
".h",
".hh",
".hpp",
".hxx",
".hPP",
".hXX" };
3497 for (i = 0; i < 6; i++ ) {
3501 extra_linkdef.
Append(extensions[i]);
3504 if (verboseLevel>4 && withInfo) {
3505 Info(
"ACLiC",
"including extra linkdef file: %s",
name);
3507 linkdefFile <<
"#include \"" <<
name <<
"\"" << std::endl;
3512 if (verboseLevel>5 && withInfo) {
3513 Info(
"ACLiC",
"looking for header in: %s",incPath.
Data());
3515 for (i = 0; i < 6; i++ ) {
3518 lookup.
Append(extensions[i]);
3521 linkdefFile <<
"#pragma link C++ defined_in "<<
gSystem->UnixPathName(
name)<<
";"<< std::endl;
3525 linkdefFile <<
"#pragma link C++ defined_in \""<<filename_fullpath <<
"\";" << std::endl;
3526 linkdefFile << std::endl;
3527 linkdefFile <<
"#endif" << std::endl;
3528 linkdefFile.close();
3533 mapfile +=
"_ACLiC_map";
3534 TString mapfilein = mapfile +
".in";
3535 TString mapfileout = mapfile +
".out";
3538 if (!useCxxModules) {
3539 if (
gInterpreter->GetSharedLibDeps(library) !=
nullptr) {
3541 needLoadMap =
kTRUE;
3545 std::ofstream mapfileStream( mapfilein, std::ios::out );
3548 TString sname =
"system.rootmap";
3551 if (
gSystem->AccessPathName(file)) {
3556 if (
gSystem->AccessPathName(file)) {
3563 mapfileStream << file << std::endl;
3566 mapfileStream << file << std::endl;
3567 mapfileStream <<
name << std::endl;
3569 for (i = 0; i <
gInterpreter->GetRootMapFiles()->GetEntriesFast(); i++) {
3570 mapfileStream << ((
TNamed*)
gInterpreter->GetRootMapFiles()->At(i))->GetTitle() << std::endl;
3574 mapfileStream.close();
3579 rcling +=
" \"--lib-list-prefix=";
3581 rcling +=
"\" -f \"";
3584 if (produceRootmap && !useCxxModules) {
3585 rcling +=
" -rml " + libname +
" -rmf \"" + libmapfilename +
"\" ";
3586 rcling.
Append(
"-DR__ACLIC_ROOTMAP ");
3590 TString fromConfig =
gEnv->GetValue(
"ACLiC.IncludePaths",
"");
3591 rcling.
Append(fromConfig);
3592 TString extraFlags =
gEnv->GetValue(
"ACLiC.ExtraRootclingFlags",
"");
3593 if (!extraFlags.
IsNull()) {
3596 rcling.
Append(extraFlags);
3602 if (useCxxModules && produceRootmap) {
3603 rcling +=
" -cxxmodule ";
3605 TString moduleName = libname +
"_ACLiC_dict";
3607 moduleName = moduleName.
Remove(0, 3);
3608 TString moduleMapName = moduleName +
".modulemap";
3609 TString moduleMapFullPath = build_loc +
"/" + moduleMapName;
3612 ::Info(
"ACLiC",
"File %s already exists!", moduleMapFullPath.
Data());
3616 std::ofstream moduleMapFile(moduleMapFullPath, std::ios::out);
3617 moduleMapFile <<
"module \"" << moduleName <<
"\" {" << std::endl;
3618 moduleMapFile <<
" header \"" << relative_path <<
"\"" << std::endl;
3619 moduleMapFile <<
" export *" << std::endl;
3620 moduleMapFile <<
" link \"" << libname_ext <<
"\"" << std::endl;
3621 moduleMapFile <<
"}" << std::endl;
3622 moduleMapFile.close();
3624 rcling.
Append(
" \"-moduleMapFile=" + moduleMapFullPath +
"\" ");
3632 if (verboseLevel>3) {
3633 ::Info(
"ACLiC",
"creating the dictionary files");
3634 if (verboseLevel>4)
::Info(
"ACLiC",
"%s", rcling.
Data());
3639 auto ExecAndReport = [](
TString cmd) ->
bool {
3643 ::Error(
"ACLiC",
"Executing '%s' failed with a core dump!", cmd.
Data());
3645 ::Error(
"ACLiC",
"Executing '%s' failed!", cmd.
Data());
3650 Bool_t result = ExecAndReport(rcling);
3658 std::ifstream liblist(mapfileout);
3660 while ( liblist >> libtoload ) {
3662 if (libtoload ==
"#") {
3664 std::string toskipcomment;
3665 std::getline(liblist,toskipcomment);
3668 if (libtoload != library && libtoload != libname && libtoload != libname_ext) {
3669 if (produceRootmap) {
3670 if (loadLib || linkDepLibraries ) {
3671 result =
gROOT->LoadClass(
"", libtoload) >= 0;
3677 if (!linkedlibs.
Contains(libtoload)) {
3679 depLibraries.
Append(
" ");
3681 depLibraries = depLibraries.
Strip();
3684 gROOT->LoadClass(
"", libtoload);
3687 unsigned char c = liblist.peek();
3688 if (
c==
'\n' ||
c==
'\r') {
3714 std::unique_ptr<TObjArray> tokens( linkLibrariesNoQuotes.
Tokenize(
" ") );
3715 for (
auto tokenObj : *tokens) {
3716 singleLibrary = ((
TObjString*)tokenObj)->GetString();
3718 if (collectingSingleLibraryNameTokens) {
3719 librariesWithQuotes.
Chop();
3720 librariesWithQuotes +=
"\" \"" + singleLibrary +
"\"";
3721 collectingSingleLibraryNameTokens =
kFALSE;
3723 librariesWithQuotes +=
" \"" + singleLibrary +
"\"";
3726 if (collectingSingleLibraryNameTokens) {
3727 librariesWithQuotes += singleLibrary +
" ";
3729 collectingSingleLibraryNameTokens =
kTRUE;
3730 librariesWithQuotes +=
" \"" + singleLibrary +
" ";
3736 linkLibraries.
Prepend(linkLibrariesNoQuotes);
3738 linkLibraries.
Prepend(librariesWithQuotes);
3745 cmd.
ReplaceAll(
"$SourceFiles",
"-D__ACLIC__ \"$SourceFiles\"");
3747 cmd.
ReplaceAll(
"$ObjectFiles",
"\"$ObjectFiles\"");
3750 cmd.
ReplaceAll(
"$SharedLib",
"\"$SharedLib\"");
3752 if (linkDepLibraries) {
3753 if (produceRootmap) {
3769 cmd.
ReplaceAll(
"$RPath",
"-Wl,-rpath," +
gROOT->GetSharedLibDir() +
" -Wl,-rpath," + build_loc);
3783 cmd.
ReplaceAll(
" && link ",
"&& link /DEBUG ");
3790 fakeMain +=
"_ACLiC_main";
3792 std::ofstream fakeMainFile( fakeMain, std::ios::out );
3793 fakeMainFile <<
"// File Automatically generated by the ROOT Script Compiler "
3795 fakeMainFile <<
"int main(char*argc,char**argvv) {};" << std::endl;
3796 fakeMainFile.close();
3807 exec +=
"_ACLiC_exec";
3808 testcmd.
ReplaceAll(
"$SourceFiles",
"-D__ACLIC__ \"$SourceFiles\"");
3810 testcmd.
ReplaceAll(
"$ObjectFiles",
"\"$ObjectFiles\"");
3814 testcmd.
ReplaceAll(
"$LinkedLibs",linkLibraries);
3822 R__FixLink(testcmd);
3828 TString cmdAllowUnresolved = cmd;
3831 cmdAllowUnresolved.
ReplaceAll(
"-dynamiclib",
"-dynamiclib -Wl,-w -Wl,-undefined,dynamic_lookup");
3833 if (verboseLevel > 3 && withInfo) {
3834 ::Info(
"ACLiC",
"compiling the dictionary and script files");
3836 ::Info(
"ACLiC",
"%s", cmdAllowUnresolved.
Data());
3838 Int_t success = ExecAndReport(cmdAllowUnresolved);
3840 if (produceRootmap) {
3841 gSystem->Unlink(libmapfilename);
3848 if (linkDepLibraries) {
3854 std::function<
bool(
const char *)> CollectF = [&depLibsFullPaths](
const char *dep) {
3856 if (!
gSystem->FindDynamicLibrary(LibFullPath,
true)) {
3857 ::Error(
"TSystem::CompileMacro",
"Cannot find library '%s'", dep);
3860 depLibsFullPaths +=
" " + LibFullPath;
3863 ForeachSharedLibDep(library, CollectF);
3866 relink_cmd += depLibsFullPaths;
3867 if (verboseLevel > 3 && withInfo) {
3868 ::Info(
"ACLiC",
"relinking against all dependencies");
3869 if (verboseLevel > 4)
3872 result = ExecAndReport(relink_cmd);
3877 gSystem->GetPathInfo( library,
nullptr, (
Long_t*)
nullptr,
nullptr, &lib_time );
3885 if (verboseLevel>3 && withInfo)
::Info(
"ACLiC",
"loading the shared library");
3887 result = LoadLibrary(library);
3892 if (verboseLevel>3 && withInfo) {
3893 ::Info(
"ACLiC",
"testing for missing symbols:");
3894 if (verboseLevel>4)
::Info(
"ACLiC",
"%s", testcmd.
Data());
3902 if (verboseLevel<=5 && !internalDebug) {
3908 gSystem->Unlink( mapfileout );
3912 if (verboseLevel>6) {
3979 if (!
gEnv)
return "";
4065 if (!
gEnv)
return "_linkdef";
4324 char *fname =
Strip(filename);
4326 filenameCopy = filenameCopy.
Strip();
4330 filenameCopy = filenameCopy.
Strip();
4335 int parenNestCount = 1;
4336 bool inString =
false;
4337 Ssiz_t posArgBegin = posArgEnd - 1;
4338 for (; parenNestCount && posArgBegin >= 0; --posArgBegin) {
4341 if (posArgBegin > 0 && filenameCopy[posArgBegin] ==
'\\' &&
4342 (posArgBegin == 1 || filenameCopy[posArgBegin - 1] !=
'\\')) {
4347 switch (filenameCopy[posArgBegin]) {
4356 case '"': inString = !inString;
break;
4359 if (parenNestCount || inString) {
4360 Error(
"SplitAclicMode",
"Cannot parse argument in %s", filename);
4362 arguments = filenameCopy(posArgBegin + 1, posArgEnd - 1);
4363 fname[posArgBegin + 1] = 0;
4371 s2 = strstr(fname,
">>");
4372 if (!s2) s2 = strstr(fname,
"2>");
4373 if (!s2) s2 = strchr(fname,
'>');
4374 s3 = strchr(fname,
'<');
4375 if (s2 && s3) s2 = s2<s3 ? s2 : s3;
4376 if (s3 && !s2) s2 = s3;
4387 while (s2 > fname && *s2 ==
' ') s2--;
4398 int len = strlen(fname);
4401 if (strchr(
"kfgOcsdv-", fname[len - 1])) {
4402 mode += fname[len - 1];
4408 Bool_t compile = len && fname[len - 1] ==
'+';
4409 Bool_t remove = compile && len > 1 && fname[len - 2] ==
'+';
4415 fname[strlen(fname)-2] = 0;
4418 fname[strlen(fname)-1] = 0;
4439 const char *extensions[] = {
".lib",
".exp",
".d",
".def",
".rootmap",
"_ACLiC_linkdef.h",
"_ACLiC_dict_rdict.pcm"};
4440 while ((lib = (
TNamed*)next())) {
4446 ::FreeLibrary(::GetModuleHandle(libname));
4451 for (
const char *ext : extensions) {
4452 target = libname + ext;
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
int Int_t
Signed integer 4 bytes (int).
int Ssiz_t
String size (currently int).
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
bool Bool_t
Boolean (0=false, 1=true) (bool).
constexpr Ssiz_t kNPOS
The equivalent of std::string::npos for the ROOT class TString.
long long Long64_t
Portable signed long integer 8 bytes.
const char Option_t
Option string (const char).
externTApplication * 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.
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
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
externconst char * gRootDir
externconst char * gProgName
externTFileHandler * gXDisplay
Bool_t R_ISREG(Int_t mode)
externconst char * gProgPath
ESocketBindOption
Options for binging the sockets created.
Bool_t R_ISDIR(Int_t mode)
externTVirtualMutex * gSystemMutex
#define R__LOCKGUARD2(mutex)
#define R__WRITE_LOCKGUARD(mutex)
#define R__READ_LOCKGUARD(mutex)
const char * GetValue() const
The TEnv class reads config files, by default named .rootrc.
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.
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.
void AbstractMethod(const char *method) const
Call this function within a function that you don't want to define as purely virtual,...
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.
TObject()
TObject constructor.
@ 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.
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...
virtual EStatus Handle(std::exception &exc)=0
static Int_t * ReAllocInt(Int_t *vp, size_t size, size_t oldsize)
Reallocate (i.e.
void ToLower()
Change string to lower-case.
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.
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.
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.
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 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.
static Int_t GetCryptoRandom(void *buf, Int_t len)
Return cryptographic random number Fill provided buffer with random values.
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 TString GetFromPipe(const char *command, Int_t *ret=nullptr, Bool_t redirectStderr=kFALSE)
Execute command and return output in TString.
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
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.
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 int AnnounceTcpService(int port, Bool_t reuse, int backlog, int tcpwindowsize=-1, ESocketBindOption socketBindOption=ESocketBindOption::kInaddrAny)
Announce TCP/IP service.
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 int AnnounceUdpService(int port, int backlog, ESocketBindOption socketBindOption=ESocketBindOption::kInaddrAny)
Announce UDP service.
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
TTimer(const TTimer &)=delete
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)
bool GetCryptoRandom(void *buf, unsigned int len)
Get random bytes from the operating system's cryptographic random number generator The requested numb...
externTVirtualRWMutex * gCoreMutex