44#include "compiledata.h"
45#include "RConfigure.h"
117 return !strncmp(path,
proto, strlen(
proto)) ? path + strlen(
proto) : path;
126 Error(
"TSystem",
"only one instance of TSystem allowed");
266#ifdef R__SOLARIS_CC50
282#ifdef R__SOLARIS_CC50
359 catch (std::exception& exc) {
371 Warning(
"Run",
"instructed to abort");
378 catch (
const char *str) {
383 Warning(
"Run",
"handle uncaugth exception, terminating");
424 return gROOT->IsInterrupted();
505 if (t->
IsSync() == mode) {
519 if (to && to->
IsAsync() && timeout > 0) {
685 FILE *pipe =
OpenPipe(command,
"r");
687 SysError(
"GetFromPipe",
"cannot run command \"%s\"", command);
692 while (
line.Gets(pipe)) {
700 Error(
"GetFromPipe",
"command \"%s\" returned %d", command,
r);
766 while ((helper = (
TSystem*) next()))
780 if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TSystem", path))) {
781 if (
h->LoadPlugin() == -1)
785 }
else if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TSystem", path))) {
786 if (
h->LoadPlugin() == -1)
788 helper = (
TSystem*)
h->ExecPlugin(0);
818 return (checkproto || checkdir);
880 return std::string();
896 return std::string();
936 if (
name[0] ==
'/' &&
name[1] ==
'\0')
939 if ((cp = (
char *)strrchr(
name,
'/')))
943 Error(
"BaseName",
"name = 0");
953 return dir[0] ==
'/';
979 while ( incPath.
Index(
" :") != -1 ) {
986 incPath.
Prepend(fileLocation+
":.:");
988 char *actual =
Which(incPath,realname);
1008 if (res.IsNull() || (res ==
"."))
1014 static char *buf =
nullptr;
1015 if (res.Length() >= len) {
1016 if (buf)
delete [] buf;
1017 len = res.Length() + 50;
1018 buf =
new char [len];
1020 strncpy(buf, res.Data(), len);
1032 if (!pathname || !strchr(pathname,
'/'))
1035 auto pathlen = strlen(pathname);
1037 const char *
r = pathname + pathlen - 1;
1039 while ((
r > pathname) && (*
r ==
'/'))
1042 while ((
r > pathname) && (*
r !=
'/'))
1047 while ((
r > pathname) && (*
r ==
'/'))
1051 if ((
r == pathname) && (*
r !=
'/'))
1054 return TString(pathname,
r + 1 - pathname);
1099 TTHREAD_TLS_ARRAY(
char, kBufSize, xname);
1117 char xname[kBufSize];
1132 int n, ier, iter, lx, ncopy;
1133 char *inp, *out, *
x, *t, *buff;
1134 const char *
b, *
c, *
e;
1136 buff =
new char[kBufSize * 4];
1138 iter = 0; xname[0] = 0; inp = buff + kBufSize; out = inp + kBufSize;
1139 inp[-1] =
' '; inp[0] = 0; out[-1] =
' ';
1140 c = fname + strspn(fname,
" \t\f\r");
1143 strlcat(inp,
c, kBufSize);
1146 iter++;
c = inp; ier = 0;
1150 if (
c[0] ==
'~' &&
c[1] ==
'/') {
1155 strlcpy(
x, p, kBufSize);
1162 }
else if (
c[0] ==
'~' &&
c[1] !=
'/') {
1163 n = strcspn(
c+1,
"/ ");
1164 assert((
n+1) < kBufSize &&
"This should have been prevented by the truncation 'strlcat(inp, c, kBufSize)'");
1166 (
void)strlcpy(buff,
c+1,
n+1);
1171 strlcpy(
x, p, kBufSize);
1181 for ( ;
c[0];
c++) {
1185 if (
c[0] ==
'.' &&
c[1] ==
'/' &&
c[-1] ==
' ') {
1187 strlcpy(buff, wd.c_str(), kBufSize);
1192 strlcpy(
x, p, kBufSize);
x += strlen(p);
c =
e-1;
continue;
1199 if (
c[1] ==
'(')
b++;
1200 if (
c[1] ==
'{')
b++;
1204 for (
e =
b; isalnum(
e[0]) ||
e[0] ==
'_';
e++) ;
1205 buff[0] = 0; strncat(buff,
b,
e-
b);
1208 for (t = buff; (t[0] = toupper(t[0])); t++) ;
1212 for (t = buff; (t[0] = tolower(t[0])); t++) ;
1215 if (!p && !strcmp(buff,
"cwd")) {
1217 strlcpy(buff, wd.c_str(), kBufSize);
1220 if (!p && !strcmp(buff,
"$")) {
1229 if (
c[1] &&
c[1]!=
'\\' &&
c[1]!=
';' &&
c[1]!=
'/')
1237 if (lp >= kBufSize) {
1239 strlcpy(
x, p, kBufSize);
1245 c = (
b==
c+1) ?
e-1 :
e;
1250 x[0] = 0; lx =
x - out;
1251 if (ier && iter < 3) { strlcpy(inp, out, kBufSize);
goto again; }
1252 ncopy = (lx >= kBufSize) ? kBufSize-1 : lx;
1253 xname[0] = 0; strncat(xname, out, ncopy);
1257 if (ier || ncopy != lx) {
1258 ::Error(
"TSystem::ExpandFileName",
"input: %s, output: %s", fname, xname);
1308 if (strlen(url.
GetHost()) > 0) {
1313 if (!strcmp(
a.GetHostName(),
b.GetHostName()) ||
1314 !strcmp(
a.GetHostAddress(),
b.GetHostAddress())) {
1318 if (strlen(url.
GetUser()) > 0) {
1401 int res =
GetPathInfo(path,
id, &lsize, flags, modtime);
1403 if (res == 0 && size) {
1405 Error(
"GetPathInfo",
"file %s > 2 GB, use GetPathInfo() with Long64_t size", path);
1547 FindFile(search, wfilString, mode);
1725 Error(
"ShowOutput",
"handle not specified");
1731 Error(
"ShowOutput",
"file '%s' cannot be read",
h->fFile.Data());
1737 if (!(
f = fopen(
h->fFile.Data(),
"r"))) {
1738 Error(
"ShowOutput",
"file '%s' cannot be open",
h->fFile.Data());
1743 off_t ltot = lseek(fileno(
f), (off_t) 0, SEEK_END);
1744 Int_t begin = (
h->fReadOffSet > 0 &&
h->fReadOffSet < ltot) ?
h->fReadOffSet : 0;
1745 lseek(fileno(
f), (off_t) begin, SEEK_SET);
1746 Int_t left = ltot - begin;
1749 const Int_t kMAXBUF = 16384;
1751 Int_t wanted = (left > kMAXBUF-1) ? kMAXBUF-1 : left;
1754 while ((len = read(fileno(
f), buf, wanted)) < 0 &&
1759 SysError(
"ShowOutput",
"error reading log file");
1765 fprintf(stderr,
"%s", buf);
1769 wanted = (left > kMAXBUF) ? kMAXBUF : left;
1771 }
while (len > 0 && left > 0);
1774 h->fReadOffSet = ltot;
1814 if (left == right)
return kTRUE;
1816 if (left==0 || right==0)
return kFALSE;
1818 if ( (strcmp(right,left)==0) ) {
1824 char leftname[_MAX_PATH];
1825 char rightname[_MAX_PATH];
1826 _fullpath( leftname, left, _MAX_PATH );
1827 _fullpath( rightname, right, _MAX_PATH );
1828 return ((stricmp(leftname, rightname)==0));
1830 struct stat rightBuf;
1831 struct stat leftBuf;
1832 return ( ( 0 == stat( left, & leftBuf ) )
1833 && ( 0 == stat( right, & rightBuf ) )
1834 && ( leftBuf.st_dev == rightBuf.st_dev )
1835 && ( leftBuf.st_ino == rightBuf.st_ino )
1836 && ( leftBuf.st_size == rightBuf.st_size )
1837 && ( leftBuf.st_mtime == rightBuf.st_mtime )
1866 if (idx == 0 || libs[idx-1] ==
'/' || libs[idx-1] ==
'\\') {
1869 if (!
l.EndsWith(
".") && libs[idx]==
'.')
1872 while (idx < len && isdigit(libs[idx])) {
1875 if (libs[idx] ==
'.') {
1879 while (idx < len && libs[idx] !=
'.') {
1880 if (libs[idx] ==
' ' || idx+1 == len) {
1887 if (
l[
l.Length()-1] ==
'.') {
1888 l.Remove(
l.Length()-1);
1890 if (
l.BeginsWith(
"lib")) {
1891 l.Replace(0, 3,
"-l");
1893 if ((idx == 0 || libs[idx-1] ==
' ') &&
1894 (libs[idx+
l.Length()] ==
' ' || libs[idx+
l.Length()] == 0)) {
1911 if (strcmp(module,deplib)==0) {
1915 Info(
"Load",
"loading dependent library %s for library %s",
1917 if ((ret =
Load(deplib,
"", system)) < 0) {
1941 if (ret < 0) ret = -1;
1943 Info(
"Load",
"loaded library %s, status %d", path, ret);
1946 Error(
"Load",
"version mismatch, %s = %d, ROOT = %d",
1947 path,
v,
gROOT->GetVersionInt());
1955 if (!entry || !entry[0] || ret < 0)
return ret;
1971 if (!mapfile || !mapfile->
GetTable())
return 0;
1973 std::set<std::string> loadedlibs;
1974 std::set<std::string> failedlibs;
1978 while ((rec = (
TEnvRec*) iEnvRec())) {
1984 if (failedlibs.find(lib.
Data()) != failedlibs.end()) {
1996 if (loadedlibs.find(lib.
Data()) == loadedlibs.end()) {
2000 if (res == 0) ++nlibs;
2001 loadedlibs.insert(lib.
Data());
2003 failedlibs.insert(lib.
Data());
2072 TRegexp separator(
"[^ \\t\\s]+");
2074 Ssiz_t start = 0, index = 0, end = 0;
2078 Printf(
"Loaded shared libraries");
2079 Printf(
"=======================");
2081 while ((start < libs.
Length()) && (index !=
kNPOS)) {
2082 index = libs.
Index(separator, &end, start);
2084 s = libs(index, end);
2098 Printf(
"-----------------------");
2099 Printf(
"%d libraries loaded", i);
2100 Printf(
"=======================");
2108 TTHREAD_TLS_DECL(
TString, gLastErrorString);
2109 return gLastErrorString;
2181 if (libs.
Length() == 0) {
2187 static TString lastAddMissing;
2188 if ( lastLinked != slinked ) {
2190 static TRegexp separator(
"[^ \\t\\s]+");
2191 lastLinked = slinked;
2192 lastAddMissing.
Clear();
2194 Ssiz_t start, index, end;
2195 start = index = end = 0;
2197 while ((start < slinked.
Length()) && (index !=
kNPOS)) {
2198 index = slinked.
Index(separator,&end,start);
2200 TString sub = slinked(index,end);
2201 if (sub[0]==
'-' && sub[1]==
'L') {
2216 }
else if (libs.
Length() != 0) {
2219 static TRegexp separator(
"[^ \\t\\s]+");
2220 Ssiz_t start, index, end;
2221 start = index = end = 0;
2223 while ((start < slinked.
Length()) && (index !=
kNPOS)) {
2224 index = slinked.
Index(separator,&end,start);
2226 TString sub = slinked(index,end);
2227 if (sub[0]!=
'-' && sub[1]!=
'L') {
2237 if (regexp && *regexp) {
2238 static TRegexp separator(
"[^ \\t\\s]+");
2241 Ssiz_t start, index, end;
2242 start = index = end = 0;
2244 while ((start < libs.
Length()) && (index !=
kNPOS)) {
2245 index = libs.
Index(separator,&end,start);
2247 s = libs(index,end);
2248 if ((isRegexp && s.
Index(user_re) !=
kNPOS) ||
2260#if defined(R__MACOSX)
2266 static TRegexp separator(
"[^ \\t\\s]+");
2267 static TRegexp dynload(
"/lib-dynload/");
2269 Ssiz_t start, index, end;
2270 start = index = end = 0;
2272 while ((start < libs2.
Length()) && (index !=
kNPOS)) {
2273 index = libs2.
Index(separator, &end, start);
2275 TString s = libs2(index, end);
2505 target = tobedeleted;
2506 delete [] tobedeleted;
2511static TString R__Exec(
const char *cmd)
2522 while ((
x = fgetc(
f))!=EOF ) {
2523 if (
x==
'\n' ||
x==
'\r')
break;
2531static void R__FixLink(
TString &cmd)
2537 TString res = R__Exec(
"link 2>&1");
2539 if (res.
Contains(
"Microsoft (R) Incremental Linker"))
2543 res = R__Exec(
"cygpath . 2>&1");
2549 res = R__Exec(
"which cl.exe 2>&1|grep cl|sed 's,cl\\.exe$,link\\.exe,' 2>&1");
2551 res = R__Exec(
Form(
"cygpath -w '%s' 2>&1",res.
Data()));
2559#if defined(__CYGWIN__)
2561 if (path.
Length() > 2 && path[1]==
':') {
2580 const char * stderrfile =
"/dev/null";
2585 TString bakdepfilename = depfilename +
".bak";
2588 TString touch =
"echo # > "; touch +=
"\"" + depfilename +
"\"";
2590 TString touch =
"echo > "; touch +=
"\"" + depfilename +
"\"";
2592 TString builddep =
"rmkdepend";
2594 builddep +=
" \"-f";
2595 builddep += depfilename;
2599 if ( build_loc.
Length() > (len+1) ) {
2600 builddep +=
" \"-p";
2601 if (build_loc[len] ==
'/' || build_loc[len+1] !=
'\\' ) {
2611 builddep +=
" \"-p";
2615 builddep +=
" -Y -- ";
2617 builddep +=
" \"-I"+rootsysInclude+
"\" ";
2618 builddep += includes;
2619 builddep += defines;
2620 builddep +=
" -- \"";
2621 builddep += filename;
2626 if ( library.
Length() > (len+1) ) {
2627 if (library[len] ==
'/' || library[len+1] !=
'\\' ) {
2628 targetname = library.
Data() + len + 1;
2630 targetname = library.
Data() + len + 2;
2633 targetname = library;
2636 targetname = library;
2641 builddep +=
"\" > ";
2642 builddep += stderrfile;
2643 builddep +=
" 2>&1 ";
2648#if defined(R__HAS_CLING_DICTVERSION)
2650 char *clingdictversion =
gSystem->
Which(incPath,
"clingdictversion.h");
2651 if (clingdictversion) {
2654 delete [] clingdictversion;
2656 R__AddPath(adddictdep,rootsysInclude+
"/clingdictversion.h ");
2661 const char *dictHeaders[] = {
"RVersion.h",
"RConfig.h",
"TClass.h",
2662 "TDictAttributeMap.h",
"TInterpreter.h",
"TROOT.h",
"TBuffer.h",
2663 "TMemberInspector.h",
"TError.h",
"RtypesImp.h",
"TIsAProxy.h",
2664 "TFileMergeInfo.h",
"TCollectionProxyInfo.h"};
2666 for (
unsigned int h=0;
h <
sizeof(dictHeaders)/
sizeof(dictHeaders[0]); ++
h)
2671 delete [] rootVersion;
2673 R__AddPath(adddictdep,rootsysInclude +
"/" + dictHeaders[
h]);
2684 delete [] rootCling;
2687 adddictdep +=
" >> \""+depfilename+
"\"";
2689 TString addversiondep(
"echo ");
2690 addversiondep += libname + version_var_prefix +
" \"" +
ROOT_RELEASE +
"\" >> \""+depfilename+
"\"";
2699 if (depbuilt) depbuilt = !
gSystem->
Exec(builddep);
2700 if (depbuilt) depbuilt = !
gSystem->
Exec(adddictdep);
2701 if (depbuilt) depbuilt = !
gSystem->
Exec(addversiondep);
2704 ::Warning(
"ACLiC",
"Failed to generate the dependency file for %s",
2835 const char *library_specified,
2836 const char *build_dir,
2839 static const char *version_var_prefix =
"__ROOTBUILDVERSION=";
2850 keep = (strchr(opt,
'k')!=0);
2851 recompile = (strchr(opt,
'f')!=0);
2852 if (strchr(opt,
'O')!=0) {
2855 if (strchr(opt,
'g')!=0) {
2858 if (strchr(opt,
'c')!=0) {
2861 withInfo = strchr(opt,
's') ==
nullptr;
2862 verbose = strchr(opt,
'v') !=
nullptr;
2863 internalDebug = strchr(opt,
'd') !=
nullptr;
2866 TString rootbuild = ROOTBUILD;
2878 if (build_dir && strlen(build_dir)) build_loc = build_dir;
2879 if (build_loc ==
".") {
2892 incPath.
Append(fromConfig);
2895 auto posISysRoot = incPath.
Index(
" -isysroot \"");
2896 if (posISysRoot !=
kNPOS) {
2897 auto posISysRootEnd = incPath.
Index(
'"', posISysRoot + 12);
2898 if (posISysRootEnd !=
kNPOS) {
2901 incPath.
Insert(posISysRootEnd - 1,
"/usr/include/");
2902 incPath.
Replace(posISysRoot, 12,
":\"");
2905 while ( incPath.
Index(
" :") != -1 ) {
2912 TString expFileName(filename);
2915 TString library = expFileName;
2918 const char *whichlibrary =
Which(incPath,library);
2920 library = whichlibrary;
2921 delete [] whichlibrary;
2923 ::Error(
"ACLiC",
"The file %s can not be found in the include path: %s",filename,incPath.
Data());
2928 ::Error(
"ACLiC",
"The file %s can not be found.",filename);
2939 TString filename_fullpath = library;
2946 if (library.
Length()>1 && isalpha(library[0]) && library[1]==
':') {
2947 file_dirname.
Prepend(library(0,2));
2949 TString file_location( file_dirname );
2950 incPath.
Prepend( file_location +
":" );
2955 libname_noext.
Remove(dot_pos);
2962 library.
Replace( dot_pos, library.
Length()-dot_pos, suffix);
2969 if (library_specified && strlen(library_specified) ) {
2971 libname =
BaseName( library_specified );
2972 library = library_specified;
2981 TString libname_ext ( libname );
2982 libname_ext +=
"." +
fSoExt;
2989 if (library.
Length()>1 && isalpha(library[0]) && library[1]==
':') {
2990 lib_dirname.
Prepend(library(0,2));
2993 if ( strncmp( &(lib_dirname[lib_dirname.
Length()-2]),
"/.", 2) == 0 ) {
2996 if ( strncmp( &(lib_dirname[lib_dirname.
Length()-2]),
"\\.", 2) == 0 ) {
2999 TString lib_location( lib_dirname );
3002 if (build_loc.
Length()==0) {
3003 build_loc = lib_location;
3006 TRegexp disk_finder (
"[A-z]:");
3008 if (pos==0) library.
Remove(pos,3);
3009 pos = lib_location.
Index( disk_finder );
3010 if (pos==0) lib_location.
Remove(pos,3);
3019 TString build_loc_store( build_loc );
3020 if (!flatBuildDir) {
3025 mkdirFailed = (0 !=
mkdir(build_loc,
true));
3026 if (mkdirFailed && !canWriteBuild_loc) {
3029 build_loc = build_loc_store;
3031 }
else if (!mkdirFailed && dirmode!=0) {
3032 Chmod(build_loc,dirmode);
3044 ::Info(
"ACLiC",
"script has already been loaded in interpreted mode");
3045 ::Info(
"ACLiC",
"unloading %s and compiling it", filename);
3060 TRegexp rel_inc(
" -I[^\"/\\$%-][^:-]+");
3062 pos = rel_inc.
Index(includes,&len);
3064 TString sub = includes(pos,len);
3070 includes.
Replace(pos,len,sub);
3071 pos = rel_inc.
Index(includes,&len);
3076 TRegexp rel_inc(
" -I\"[^/\\$%-][^:-]+");
3078 pos = rel_inc.
Index(includes,&len);
3080 TString sub = includes(pos,len);
3084 includes.
Replace(pos,len,sub);
3085 pos = rel_inc.
Index(includes,&len);
3106 TRegexp rel_def(
"-D[^\\s\\t\\n\\r]*");
3108 pos = rel_def.
Index(cmd,&len);
3110 defines += cmd(pos,len);
3112 pos = rel_def.
Index(cmd,&len,pos+1);
3140 Long_t lib_time, file_time;
3144 (lib_time < file_time))) {
3154 depdir = emergency_loc;
3165 FILE * depfile = fopen(depfilename.
Data(),
"r");
3174 TString version_var = libname + version_var_prefix;
3177 char *
line =
new char[sz];
3183 Bool_t hasversion =
false;
3185 while ((
c = fgetc(depfile)) != EOF) {
3188 while ((
c = fgetc(depfile)) != EOF) {
3195 if (current &&
line[current-1]==
'=' && strncmp(version_var.
Data(),
line,current)==0) {
3201 }
else if (isspace(
c) && !nested) {
3203 if (
line[current-1]!=
':') {
3212 modified |= ( lib_time <= filetime );
3219 if (current==sz-1) {
3221 char *newline =
new char[sz];
3222 memcpy(newline,
line, current);
3226 if (
c==
'"') nested = !nested;
3235 recompile = modified;
3252 && (lib_time>load_time)) {
3257 if ( !recompile && reload ) {
3260 ::Info(
"ACLiC",
"%s has been modified and will be reloaded",
3283 ::Info(
"ACLiC",
"%s script has already been compiled and loaded",
3284 modified ?
"modified" :
"unmodified");
3291 ::Info(
"ACLiC",
"it will be regenerated and reloaded!");
3309 libmapfilename +=
".rootmap";
3310#if (defined(R__MACOSX) && !defined(MAC_OS_X_VERSION_10_5)) || defined(R__WIN32)
3315 Bool_t linkDepLibraries = !produceRootmap;
3317#if (defined(R__MACOSX) && !defined(MAC_OS_X_VERSION_10_5))
3319#elif defined(R__WIN32)
3324 produceRootmap = linkLibs & 0x2;
3325 linkDepLibraries = linkLibs & 0x1;
3329 bool useCxxModules =
3330#ifdef R__USE_CXXMODULES
3337 auto ForeachSharedLibDep = [](
const char *lib, std::function<
bool(
const char *)>
f) {
3338 using namespace std;
3339 string deps =
gInterpreter->GetSharedLibDeps(lib,
true);
3340 istringstream iss(deps);
3341 vector<string> libs{istream_iterator<std::string>{iss}, istream_iterator<string>{}};
3343 for (
auto I = libs.begin() + 1, E = libs.end();
I != E; ++
I)
3347 auto LoadLibrary = [useCxxModules, produceRootmap, ForeachSharedLibDep](
const TString &lib) {
3356 if (useCxxModules && !produceRootmap) {
3357 std::function<
bool(
const char *)> LoadLibF = [](
const char *dep) {
3360 ForeachSharedLibDep(lib, LoadLibF);
3377 return LoadLibrary(library);
3382 if (!canWrite && recompile) {
3385 ::Warning(
"ACLiC",
"Could not create the directory: %s",
3388 ::Warning(
"ACLiC",
"%s is not writable!",
3391 if (emergency_loc == build_dir ) {
3392 ::Error(
"ACLiC",
"%s is the last resort location (i.e. temp location)",build_loc.
Data());
3395 ::Warning(
"ACLiC",
"Output will be written to %s",
3396 emergency_loc.
Data());
3397 return CompileMacro(expFileName, opt, library_specified, emergency_loc, dirmode);
3401 Info(
"ACLiC",
"creating shared library %s",library.
Data());
3407 TString dict = libname +
"_ACLiC_dict";
3411 static const int maxforbidden = 27;
3412 static const char *forbidden_chars[maxforbidden] =
3413 {
"+",
"-",
"*",
"/",
"&",
"%",
"|",
"^",
">",
"<",
3414 "=",
"~",
".",
"(",
")",
"[",
"]",
"!",
",",
"$",
3415 " ",
":",
"'",
"#",
"@",
"\\",
"\"" };
3416 for(
int ic = 0; ic < maxforbidden; ic++ ) {
3431 linkdef +=
"_ACLiC_linkdef.h";
3432 std::ofstream linkdefFile( linkdef, std::ios::out );
3433 linkdefFile <<
"// File Automatically generated by the ROOT Script Compiler "
3435 linkdefFile << std::endl;
3436 linkdefFile <<
"#ifdef __CINT__" << std::endl;
3437 linkdefFile << std::endl;
3438 linkdefFile <<
"#pragma link C++ nestedclasses;" << std::endl;
3439 linkdefFile <<
"#pragma link C++ nestedtypedefs;" << std::endl;
3440 linkdefFile << std::endl;
3444 const char * extensions[] = {
".h",
".hh",
".hpp",
".hxx",
".hPP",
".hXX" };
3447 for (i = 0; i < 6; i++ ) {
3451 extra_linkdef.
Append(extensions[i]);
3454 if (verboseLevel>4 && withInfo) {
3455 Info(
"ACLiC",
"including extra linkdef file: %s",
name);
3457 linkdefFile <<
"#include \"" <<
name <<
"\"" << std::endl;
3462 if (verboseLevel>5 && withInfo) {
3463 Info(
"ACLiC",
"looking for header in: %s",incPath.
Data());
3465 for (i = 0; i < 6; i++ ) {
3468 lookup.
Append(extensions[i]);
3475 linkdefFile <<
"#pragma link C++ defined_in \""<<filename_fullpath <<
"\";" << std::endl;
3476 linkdefFile << std::endl;
3477 linkdefFile <<
"#endif" << std::endl;
3478 linkdefFile.close();
3483 mapfile +=
"_ACLiC_map";
3484 TString mapfilein = mapfile +
".in";
3485 TString mapfileout = mapfile +
".out";
3488 if (!useCxxModules) {
3489 if (
gInterpreter->GetSharedLibDeps(library) !=
nullptr) {
3491 needLoadMap =
kTRUE;
3495 std::ofstream mapfileStream( mapfilein, std::ios::out );
3498 TString sname =
"system.rootmap";
3511 mapfileStream <<
file << std::endl;
3513 mapfileStream <<
file << std::endl;
3514 mapfileStream <<
name << std::endl;
3516 for (i = 0; i <
gInterpreter->GetRootMapFiles()->GetEntriesFast(); i++) {
3521 mapfileStream.close();
3526 rcling +=
" -v0 \"--lib-list-prefix=";
3528 rcling +=
"\" -f \"";
3531 if (produceRootmap && !useCxxModules) {
3532 rcling +=
" -rml " + libname +
" -rmf \"" + libmapfilename +
"\" ";
3533 rcling.
Append(
"-DR__ACLIC_ROOTMAP ");
3538 rcling.
Append(fromConfig);
3540 if (!extraFlags.
IsNull()) {
3543 rcling.
Append(extraFlags);
3549 if (useCxxModules && produceRootmap) {
3550 rcling +=
" -cxxmodule ";
3552 TString moduleName = libname +
"_ACLiC_dict";
3554 moduleName = moduleName.
Remove(0, 3);
3555 TString moduleMapName = moduleName +
".modulemap";
3556 TString moduleMapFullPath = build_loc +
"/" + moduleMapName;
3559 ::Info(
"ACLiC",
"File %s already exists!", moduleMapFullPath.
Data());
3563 std::ofstream moduleMapFile(moduleMapFullPath, std::ios::out);
3564 moduleMapFile <<
"module \"" << moduleName <<
"\" {" << std::endl;
3565 moduleMapFile <<
" header \"" << relative_path <<
"\"" << std::endl;
3566 moduleMapFile <<
" export *" << std::endl;
3567 moduleMapFile <<
" link \"" << libname_ext <<
"\"" << std::endl;
3568 moduleMapFile <<
"}" << std::endl;
3569 moduleMapFile.close();
3571 rcling.
Append(
" \"-moduleMapFile=" + moduleMapFullPath +
"\" ");
3579 if (verboseLevel>3) {
3580 ::Info(
"ACLiC",
"creating the dictionary files");
3581 if (verboseLevel>4)
::Info(
"ACLiC",
"%s", rcling.
Data());
3586 auto ExecAndReport = [](
TString cmd) ->
bool {
3590 ::Error(
"ACLiC",
"Executing '%s' failed with a core dump!", cmd.
Data());
3592 ::Error(
"ACLiC",
"Executing '%s' failed!", cmd.
Data());
3597 Bool_t result = ExecAndReport(rcling);
3605 std::ifstream liblist(mapfileout);
3607 while ( liblist >> libtoload ) {
3609 if (libtoload ==
"#") {
3611 std::string toskipcomment;
3612 std::getline(liblist,toskipcomment);
3615 if (libtoload != library && libtoload != libname && libtoload != libname_ext) {
3616 if (produceRootmap) {
3617 if (loadLib || linkDepLibraries ) {
3618 result =
gROOT->LoadClass(
"", libtoload) >= 0;
3624 if (!linkedlibs.
Contains(libtoload)) {
3626 depLibraries.
Append(
" ");
3628 depLibraries = depLibraries.
Strip();
3631 gROOT->LoadClass(
"", libtoload);
3634 unsigned char c = liblist.peek();
3635 if (
c==
'\n' ||
c==
'\r') {
3661 for (
auto tokenObj : *linkLibrariesNoQuotes.
Tokenize(
" ")) {
3662 singleLibrary = ((
TObjString*)tokenObj)->GetString();
3664 if (collectingSingleLibraryNameTokens) {
3665 librariesWithQuotes.
Chop();
3666 librariesWithQuotes +=
"\" \"" + singleLibrary +
"\"";
3667 collectingSingleLibraryNameTokens =
kFALSE;
3669 librariesWithQuotes +=
" \"" + singleLibrary +
"\"";
3672 if (collectingSingleLibraryNameTokens) {
3673 librariesWithQuotes += singleLibrary +
" ";
3675 collectingSingleLibraryNameTokens =
kTRUE;
3676 librariesWithQuotes +=
" \"" + singleLibrary +
" ";
3682 linkLibraries.
Prepend(linkLibrariesNoQuotes);
3684 linkLibraries.
Prepend(librariesWithQuotes);
3691 cmd.
ReplaceAll(
"$SourceFiles",
"-D__ACLIC__ \"$SourceFiles\"");
3693 cmd.
ReplaceAll(
"$ObjectFiles",
"\"$ObjectFiles\"");
3696 cmd.
ReplaceAll(
"$SharedLib",
"\"$SharedLib\"");
3698 if (linkDepLibraries) {
3699 if (produceRootmap) {
3723 fakeMain +=
"_ACLiC_main";
3725 std::ofstream fakeMainFile( fakeMain, std::ios::out );
3726 fakeMainFile <<
"// File Automatically generated by the ROOT Script Compiler "
3728 fakeMainFile <<
"int main(char*argc,char**argvv) {};" << std::endl;
3729 fakeMainFile.close();
3740 exec +=
"_ACLiC_exec";
3741 testcmd.
ReplaceAll(
"$SourceFiles",
"-D__ACLIC__ \"$SourceFiles\"");
3743 testcmd.
ReplaceAll(
"$ObjectFiles",
"\"$ObjectFiles\"");
3747 testcmd.
ReplaceAll(
"$LinkedLibs",linkLibraries);
3755 R__FixLink(testcmd);
3761 if (verboseLevel>3 && withInfo) {
3762 ::Info(
"ACLiC",
"compiling the dictionary and script files");
3763 if (verboseLevel>4)
::Info(
"ACLiC",
"%s", cmd.
Data());
3765 Int_t success = ExecAndReport(cmd);
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 result = ExecAndReport(relink_cmd);
3807 if (verboseLevel>3 && withInfo)
::Info(
"ACLiC",
"loading the shared library");
3809 result = LoadLibrary(library);
3814 if (verboseLevel>3 && withInfo) {
3815 ::Info(
"ACLiC",
"testing for missing symbols:");
3816 if (verboseLevel>4)
::Info(
"ACLiC",
"%s", testcmd.
Data());
3824 if (verboseLevel<=5 && !internalDebug) {
3834 if (verboseLevel>6) {
3901 if (!
gEnv)
return "";
3987 if (!
gEnv)
return "_linkdef";
4240 char *fname =
Strip(filename);
4242 filenameCopy = filenameCopy.
Strip();
4246 filenameCopy = filenameCopy.
Strip();
4251 int parenNestCount = 1;
4252 bool inString =
false;
4253 Ssiz_t posArgBegin = posArgEnd - 1;
4254 for (; parenNestCount && posArgBegin >= 0; --posArgBegin) {
4257 if (posArgBegin > 0 && filenameCopy[posArgBegin] ==
'\\' &&
4258 (posArgBegin == 1 || filenameCopy[posArgBegin - 1] !=
'\\')) {
4263 switch (filenameCopy[posArgBegin]) {
4272 case '"': inString = !inString;
break;
4275 if (parenNestCount || inString) {
4276 Error(
"SplitAclicMode",
"Cannot parse argument in %s", filename);
4278 arguments = filenameCopy(posArgBegin + 1, posArgEnd - 1);
4279 fname[posArgBegin + 1] = 0;
4287 s2 = strstr(fname,
">>");
4288 if (!s2) s2 = strstr(fname,
"2>");
4289 if (!s2) s2 = strchr(fname,
'>');
4290 s3 = strchr(fname,
'<');
4291 if (s2 && s3) s2 = s2<s3 ? s2 : s3;
4292 if (s3 && !s2) s2 = s3;
4301 while (s2 && *s2 ==
' ') s2--;
4311 int len = strlen(fname);
4314 if (strchr(
"kfgOcsdv-", fname[len - 1])) {
4315 mode += fname[len - 1];
4321 Bool_t compile = len && fname[len - 1] ==
'+';
4322 Bool_t remove = compile && len > 1 && fname[len - 2] ==
'+';
4328 fname[strlen(fname)-2] = 0;
4331 fname[strlen(fname)-1] = 0;
4351 while ((lib = (
TNamed*)next())) {
The file contains utilities which are foundational and could be used across the core component of ROO...
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.
char * Form(const char *fmt,...)
char * Strip(const char *str, char c=' ')
Strip leading and trailing c (blanks by default) from a string.
void Printf(const char *fmt,...)
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
typedef void((*Func_t)())
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 TObject * FindObject(const char *name) const
Find an object in this collection using its name.
virtual void Delete(Option_t *option="")=0
Delete this object.
const char * GetValue() const
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.
The TNamed class is the base class for all named ROOT classes.
virtual const char * GetTitle() const
Returns title of object.
virtual const char * GetName() const
Returns name of object.
Int_t GetEntriesFast() const
TObject * At(Int_t idx) const
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.
Iterator of ordered collection.
TObject * Next()
Return next object in collection.
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...
virtual void Add(TObject *obj)
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 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.
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 all 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 FILE * TempFileName(TString &base, const char *dir=nullptr)
Create a secure temporary file by appending a unique 6 letter string to base.
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