53 #include "compiledata.h" 54 #include "RConfigure.h" 75 gROOT->SetInterrupt(kFALSE);
109 if (gSystem &&
name[0] !=
'-' && strcmp(
name,
"Generic"))
110 Error(
"TSystem",
"only one instance of TSystem allowed");
115 fStdExceptionHandler = 0;
148 fOnExitList->Delete();
152 if (fSignalHandler) {
153 fSignalHandler->Delete();
158 fFileHandler->Delete();
162 if (fStdExceptionHandler) {
163 fStdExceptionHandler->Delete();
203 fBuildArch = BUILD_ARCH;
204 fBuildCompiler = COMPILER;
205 fBuildCompilerVersion = COMPILERVERS;
206 fBuildNode = BUILD_NODE;
207 fFlagsDebug = CXXDEBUG;
209 fIncludePath = INCLUDEPATH;
210 fLinkedLibs = LINKEDLIBS;
214 fMakeSharedLib = MAKESHAREDLIB;
218 if (
gEnv && fBeepDuration == 0 && fBeepFreq == 0) {
219 fBeepDuration =
gEnv->
GetValue(
"Root.System.BeepDuration", 100);
220 fBeepFreq =
gEnv->
GetValue(
"Root.System.BeepFreq", 440);
222 if (!fName.CompareTo(
"Generic"))
return kTRUE;
251 GetLastErrorString() = errstr;
259 if (
GetErrno() == 0 && GetLastErrorString() !=
"")
260 return GetLastErrorString();
272 #ifdef R__SOLARIS_CC50 288 #ifdef R__SOLARIS_CC50 301 if (fOnExitList == 0)
303 if (fOnExitList->FindObject(obj) == 0)
304 fOnExitList->
Add(obj);
336 fBeepDuration = duration;
339 if (fBeepDuration < 0 || fBeepFreq < 0)
return;
340 if (freq < 0) freq = fBeepFreq;
341 if (duration < 0) duration = fBeepDuration;
342 DoBeep(freq, duration);
365 catch (std::exception& exc) {
366 TIter next(fStdExceptionHandler);
377 Warning(
"Run",
"instructed to abort");
384 catch (
const char *str) {
389 Warning(
"Run",
"handle uncaugth exception, terminating");
428 DispatchOneEvent(
kTRUE);
430 return gROOT->IsInterrupted();
480 if (ti && fTimers && (fTimers->FindObject(ti) == 0))
503 if (!fTimers)
return -1;
511 if (t->
IsSync() == mode) {
525 if (to && to->
IsAsync() && timeout > 0) {
527 SigAlarmInterruptsSyscalls(
kTRUE);
529 SigAlarmInterruptsSyscalls(
kFALSE);
541 if (h && fSignalHandler && (fSignalHandler->FindObject(h) == 0))
542 fSignalHandler->Add(h);
563 if (h && fFileHandler && (fFileHandler->FindObject(h) == 0))
564 fFileHandler->Add(h);
620 if (eh && fStdExceptionHandler && (fStdExceptionHandler->FindObject(eh) == 0))
621 fStdExceptionHandler->Add(eh);
630 if (fStdExceptionHandler)
691 FILE *pipe = OpenPipe(command,
"r");
693 SysError(
"GetFromPipe",
"cannot run command \"%s\"", command);
698 while (line.
Gets(pipe)) {
704 Int_t r = ClosePipe(pipe);
706 Error(
"GetFromPipe",
"command \"%s\" returned %d", command, r);
767 TIter next(fHelpers);
768 while ((helper = (
TSystem*) next()))
780 if ((h =
gROOT->GetPluginManager()->FindHandler(
"TSystem", path))) {
785 }
else if ((h =
gROOT->GetPluginManager()->FindHandler(
"TSystem", path))) {
792 fHelpers->Add(helper);
813 if (GetDirPtr() && GetDirPtr() == dirptr)
816 return (checkproto || checkdir);
878 return std::string();
894 return std::string();
908 TString dirname = DirName(safeName);
915 int res = mkdir(dirname,
kTRUE);
923 return MakeDirectory(name);
934 if (name[0] ==
'/' && name[1] ==
'\0')
937 if ((cp = (
char*)strrchr(name,
'/')))
941 Error(
"BaseName",
"name = 0");
951 return dir[0] ==
'/';
965 if (!name || !name[0])
return kFALSE;
970 TString realname = SplitAclicMode(name, aclicMode, arguments, io);
972 TString fileLocation = DirName(realname);
977 while ( incPath.
Index(
" :") != -1 ) {
984 incPath.
Prepend(fileLocation+
":.:");
986 char *actual = Which(incPath,realname);
1005 if (pathname && strchr(pathname,
'/')) {
1009 static char *buf = 0;
1010 int pathlen = strlen(pathname);
1011 if (pathlen > len) {
1014 buf =
new char [len+1];
1016 strcpy(buf, pathname);
1018 char *
r = buf+pathlen-1;
1020 while ( r>buf && *(r)==
'/') { --
r; }
1022 while ( r>buf && *(r)!=
'/') { --
r; }
1025 while ( r>buf && *(r)==
'/') { --
r; }
1028 if (r==buf && *(r)!=
'/') {
1054 PrependPathName(dir, nameString);
1081 TTHREAD_TLS_ARRAY(
char, kBufSize, xname);
1083 Bool_t res = ExpandFileName(fname, xname, kBufSize);
1099 char xname[kBufSize];
1101 Bool_t res = ExpandFileName(fname.
Data(), xname, kBufSize);
1114 int n, ier, iter, lx, ncopy;
1115 char *inp, *out, *
x, *t, buff[kBufSize*4];
1116 const char *
b, *c, *
e;
1119 iter = 0; xname[0] = 0; inp = buff + kBufSize; out = inp + kBufSize;
1120 inp[-1] =
' '; inp[0] = 0; out[-1] =
' ';
1121 c = fname + strspn(fname,
" \t\f\r");
1124 strlcat(inp, c, kBufSize);
1127 iter++; c = inp; ier = 0;
1131 if (c[0] ==
'~' && c[1] ==
'/') {
1132 std::string hd = GetHomeDirectory();
1136 strlcpy(x, p, kBufSize);
1143 }
else if (c[0] ==
'~' && c[1] !=
'/') {
1144 n = strcspn(c+1,
"/ ");
1146 strncat(buff, c+1, n);
1147 std::string hd = GetHomeDirectory(buff);
1151 strlcpy(x, p, kBufSize);
1161 for ( ; c[0]; c++) {
1165 if (c[0] ==
'.' && c[1] ==
'/' && c[-1] ==
' ') {
1166 std::string wd = GetWorkingDirectory();
1167 strlcpy(buff, wd.c_str(), kBufSize);
1172 strlcpy(x, p, kBufSize); x += strlen(p); c = e-1;
continue;
1179 if (c[1] ==
'(') b++;
1180 if (c[1] ==
'{') b++;
1184 for (e = b; isalnum(e[0]) || e[0] ==
'_'; e++) ;
1185 buff[0] = 0; strncat(buff, b, e-b);
1188 for (t = buff; (t[0] = toupper(t[0])); t++) ;
1192 for (t = buff; (t[0] = tolower(t[0])); t++) ;
1195 if (!p && !strcmp(buff,
"cwd")) {
1196 std::string wd = GetWorkingDirectory();
1197 strlcpy(buff, wd.c_str(), kBufSize);
1200 if (!p && !strcmp(buff,
"$")) {
1201 snprintf(buff,kBufSize*4,
"%d", GetPid());
1209 if (c[1] && c[1]!=
'\\' && c[1]!=
';' && c[1]!=
'/')
1217 if (lp >= kBufSize) {
1219 strlcpy(x, p, kBufSize);
1225 c = (b==c+1) ? e-1 : e;
1230 x[0] = 0; lx = x - out;
1231 if (ier && iter < 3) { strlcpy(inp, out, kBufSize);
goto again; }
1232 ncopy = (lx >= kBufSize) ? kBufSize-1 : lx;
1233 xname[0] = 0; strncat(xname, out, ncopy);
1235 if (ier || ncopy != lx) {
1236 ::Error(
"TSystem::ExpandFileName",
"input: %s, output: %s", fname, xname);
1286 if (strlen(url.
GetHost()) > 0) {
1296 if (strlen(url.
GetUser()) > 0) {
1375 int res = GetPathInfo(path,
id, &lsize, flags, modtime);
1377 if (res == 0 && size) {
1379 Error(
"GetPathInfo",
"file %s > 2 GB, use GetPathInfo() with Long64_t size", path);
1405 int res = GetPathInfo(path, buf);
1521 FindFile(search, wfilString, mode);
1522 if (wfilString.
IsNull())
return 0;
1698 Error(
"ShowOutput",
"handle not specified");
1704 Error(
"ShowOutput",
"file '%s' cannot be read", h->
fFile.
Data());
1710 if (!(f = fopen(h->
fFile.
Data(),
"r"))) {
1711 Error(
"ShowOutput",
"file '%s' cannot be open", h->
fFile.
Data());
1716 off_t ltot = lseek(fileno(f), (off_t) 0, SEEK_END);
1718 lseek(fileno(f), (off_t) begin, SEEK_SET);
1719 Int_t left = ltot - begin;
1722 const Int_t kMAXBUF = 16384;
1724 Int_t wanted = (left > kMAXBUF-1) ? kMAXBUF-1 : left;
1727 while ((len =
read(fileno(f), buf, wanted)) < 0 &&
1732 SysError(
"ShowOutput",
"error reading log file");
1738 fprintf(stderr,
"%s", buf);
1742 wanted = (left > kMAXBUF) ? kMAXBUF : left;
1744 }
while (len > 0 && left > 0);
1787 if (left == right)
return kTRUE;
1789 if (left==0 || right==0)
return kFALSE;
1791 if ( (strcmp(right,left)==0) ) {
1797 char leftname[_MAX_PATH];
1798 char rightname[_MAX_PATH];
1799 _fullpath( leftname, left, _MAX_PATH );
1800 _fullpath( rightname, right, _MAX_PATH );
1801 return ((stricmp(leftname, rightname)==0));
1803 struct stat rightBuf;
1804 struct stat leftBuf;
1805 return ( ( 0 == stat( left, & leftBuf ) )
1806 && ( 0 == stat( right, & rightBuf ) )
1807 && ( leftBuf.st_dev == rightBuf.st_dev )
1808 && ( leftBuf.st_ino == rightBuf.st_ino )
1809 && ( leftBuf.st_size == rightBuf.st_size )
1810 && ( leftBuf.st_mtime == rightBuf.st_mtime )
1828 TString libs( GetLibraries() );
1829 TString moduleBasename( BaseName(module) );
1839 if (idx == 0 || libs[idx-1] ==
'/' || libs[idx-1] ==
'\\') {
1842 if (!l.
EndsWith(
".") && libs[idx]==
'.')
1845 while (idx < len && isdigit(libs[idx])) {
1848 if (libs[idx] ==
'.') {
1852 while (idx < len && libs[idx] !=
'.') {
1853 if (libs[idx] ==
' ' || idx+1 == len) {
1860 if (l[l.
Length()-1] ==
'.') {
1866 if ((idx == 0 || libs[idx-1] ==
' ') &&
1867 (libs[idx+l.
Length()] ==
' ' || libs[idx+l.
Length()] == 0)) {
1873 char *path = DynamicPathName(module);
1881 libmapfilename = path;
1882 idx = libmapfilename.
Last(
'.');
1884 libmapfilename.
Remove(idx);
1886 libmapfilename +=
".rootmap";
1888 if (
gDebug > 0)
Info(
"Load",
"loading %s", libmapfilename.
Data());
1890 deplibs =
gInterpreter->GetSharedLibDeps(moduleBasename);
1897 if (strcmp(module,deplib)==0) {
1901 Info(
"Load",
"loading dependent library %s for library %s",
1903 if ((ret = Load(deplib,
"", system)) < 0) {
1913 const char *dirname = DirName(path);
1927 if (ret < 0) ret = -1;
1929 Info(
"Load",
"loaded library %s, status %d", path, ret);
1932 Error(
"Load",
"version mismatch, %s = %d, ROOT = %d",
1933 path, v,
gROOT->GetVersionInt());
1937 gLibraryVersionIdx--;
1941 if (!entry || !entry[0] || ret < 0)
return ret;
1943 Func_t
f = DynFindSymbol(module, entry);
1956 if (FindDynamicLibrary(sLib, quiet))
1988 if ((path = DynamicPathName(module))) {
2008 TString libs = GetLibraries(regexp);
2009 TRegexp separator(
"[^ \\t\\s]+");
2011 Ssiz_t start = 0, index = 0, end = 0;
2015 Printf(
"Loaded shared libraries");
2016 Printf(
"=======================");
2018 while ((start < libs.
Length()) && (index !=
kNPOS)) {
2019 index = libs.
Index(separator, &end, start);
2021 s = libs(index, end);
2035 Printf(
"-----------------------");
2036 Printf(
"%d libraries loaded", i);
2037 Printf(
"=======================");
2045 TTHREAD_TLS_DECL(
TString, gLastErrorString);
2046 return gLastErrorString;
2054 return const_cast<TSystem*
>(
this)->GetLastErrorString();
2100 if ((linked = GetLinkedLibraries())) {
2101 if (fLinkedLibs != LINKEDLIBS) {
2105 if (custom == fLinkedLibs) {
2115 slinked.
Append(fLinkedLibs);
2120 if (libs.
Length() == 0) {
2126 static TString lastAddMissing;
2127 if ( lastLinked != slinked ) {
2129 static TRegexp separator(
"[^ \\t\\s]+");
2130 lastLinked = slinked;
2131 lastAddMissing.
Clear();
2133 Ssiz_t start, index, end;
2134 start = index = end = 0;
2136 while ((start < slinked.
Length()) && (index !=
kNPOS)) {
2137 index = slinked.
Index(separator,&end,start);
2139 TString sub = slinked(index,end);
2140 if (sub[0]==
'-' && sub[1]==
'L') {
2155 }
else if (libs.
Length() != 0) {
2158 static TRegexp separator(
"[^ \\t\\s]+");
2159 Ssiz_t start, index, end;
2160 start = index = end = 0;
2162 while ((start < slinked.
Length()) && (index !=
kNPOS)) {
2163 index = slinked.
Index(separator,&end,start);
2165 TString sub = slinked(index,end);
2166 if (sub[0]!=
'-' && sub[1]!=
'L') {
2176 if (regexp && *regexp) {
2177 static TRegexp separator(
"[^ \\t\\s]+");
2180 Ssiz_t start, index, end;
2181 start = index = end = 0;
2183 while ((start < libs.
Length()) && (index !=
kNPOS)) {
2184 index = libs.
Index(separator,&end,start);
2186 s = libs(index,end);
2187 if ((isRegexp && s.
Index(user_re) !=
kNPOS) ||
2189 if (!fListLibs.IsNull())
2190 fListLibs.Append(
" ");
2191 fListLibs.Append(s);
2199 #if defined(R__MACOSX) 2205 static TRegexp separator(
"[^ \\t\\s]+");
2206 static TRegexp dynload(
"/lib-dynload/");
2208 Ssiz_t start, index, end;
2209 start = index = end = 0;
2211 while ((start < libs2.
Length()) && (index !=
kNPOS)) {
2212 index = libs2.
Index(separator, &end, start);
2214 TString s = libs2(index, end);
2222 fListLibs = maclibs;
2226 #if defined(R__MACOSX) && !defined(MAC_OS_X_VERSION_10_5) 2231 static TRegexp separator(
"[^ \\t\\s]+");
2232 static TRegexp user_so(
"\\.so$");
2234 Ssiz_t start, index, end;
2235 start = index = end = 0;
2237 while ((start < libs2.
Length()) && (index !=
kNPOS)) {
2238 index = libs2.
Index(separator, &end, start);
2242 TString s = libs2(index, end);
2245 if ( GetPathInfo( s, 0, (
Long_t*)0, 0, 0 ) != 0 ) {
2255 fListLibs = maclibs;
2477 target = tobedeleted;
2478 delete [] tobedeleted;
2483 static TString R__Exec(
const char *cmd)
2494 while ((x = fgetc(f))!=EOF ) {
2495 if (x==
'\n' || x==
'\r')
break;
2503 static void R__FixLink(
TString &cmd)
2509 TString res = R__Exec(
"link 2>&1");
2511 if (res.
Contains(
"Microsoft (R) Incremental Linker"))
2515 res = R__Exec(
"cygpath . 2>&1");
2521 res = R__Exec(
"which cl.exe 2>&1|grep cl|sed 's,cl\\.exe$,link\\.exe,' 2>&1");
2523 res = R__Exec(
Form(
"cygpath -w '%s' 2>&1",res.
Data()));
2537 if (path.
Length() > 2 && path[1]==
':') {
2557 const char * stderrfile =
"/dev/null";
2562 TString bakdepfilename = depfilename +
".bak";
2565 TString touch =
"echo # > "; touch +=
"\"" + depfilename +
"\"";
2567 TString touch =
"echo > "; touch +=
"\"" + depfilename +
"\"";
2569 TString builddep =
"rmkdepend";
2571 builddep +=
" \"-f";
2572 builddep += depfilename;
2573 builddep +=
"\" -o_" + extension +
"." + gSystem->
GetSoExt() +
" ";
2576 if ( build_loc.
Length() > (len+1) ) {
2577 builddep +=
" \"-p";
2578 if (build_loc[len] ==
'/' || build_loc[len+1] !=
'\\' ) {
2588 builddep +=
" \"-p";
2592 builddep +=
" -Y -- ";
2594 builddep +=
" \"-I"+rootsysInclude+
"\" ";
2595 builddep += includes;
2596 builddep += defines;
2597 builddep +=
" -- \"";
2598 builddep += filename;
2603 if ( library.
Length() > (len+1) ) {
2604 if (library[len] ==
'/' || library[len+1] !=
'\\' ) {
2605 targetname = library.
Data() + len + 1;
2607 targetname = library.
Data() + len + 2;
2610 targetname = library;
2613 targetname = library;
2618 builddep +=
"\" > ";
2619 builddep += stderrfile;
2620 builddep +=
" 2>&1 ";
2625 #if defined(R__HAS_CLING_DICTVERSION) 2627 char *clingdictversion = gSystem->
Which(incPath,
"clingdictversion.h");
2628 if (clingdictversion) {
2631 delete [] clingdictversion;
2633 R__AddPath(adddictdep,rootsysInclude+
"/clingdictversion.h ");
2638 const char *dictHeaders[] = {
"RVersion.h",
"RConfig.h",
"TClass.h",
2639 "TDictAttributeMap.h",
"TInterpreter.h",
"TROOT.h",
"TBuffer.h",
2640 "TMemberInspector.h",
"TError.h",
"RtypesImp.h",
"TIsAProxy.h",
2641 "TFileMergeInfo.h",
"TCollectionProxyInfo.h"};
2643 for (
unsigned int h=0;
h <
sizeof(dictHeaders)/
sizeof(dictHeaders[0]); ++
h)
2645 char *rootVersion = gSystem->
Which(incPath,dictHeaders[
h]);
2649 delete [] rootVersion;
2651 R__AddPath(adddictdep,rootsysInclude +
"/" + dictHeaders[h]);
2657 char *rootCling = gSystem->
Which(gSystem->
Getenv(
"PATH"),
"rootcling");
2661 delete [] rootCling;
2664 adddictdep +=
" >> \""+depfilename+
"\"";
2666 TString addversiondep(
"echo ");
2667 addversiondep += libname + version_var_prefix +
" \"" +
ROOT_RELEASE +
"\" >> \""+depfilename+
"\"";
2676 if (depbuilt) depbuilt = !gSystem->
Exec(builddep);
2677 if (depbuilt) depbuilt = !gSystem->
Exec(adddictdep);
2678 if (depbuilt) depbuilt = !gSystem->
Exec(addversiondep);
2681 ::Warning(
"ACLiC",
"Failed to generate the dependency file for %s",
2685 gSystem->
Unlink(stderrfile);
2687 gSystem->
Unlink(bakdepfilename);
2812 const char *library_specified,
2813 const char *build_dir,
2816 static const char *version_var_prefix =
"__ROOTBUILDVERSION=";
2827 keep = (strchr(opt,
'k')!=0);
2828 recompile = (strchr(opt,
'f')!=0);
2829 if (strchr(opt,
'O')!=0) {
2832 if (strchr(opt,
'g')!=0) {
2835 if (strchr(opt,
'c')!=0) {
2838 withInfo = strchr(opt,
's') == 0;
2839 verbose = strchr(opt,
'v') != 0;
2840 internalDebug = strchr(opt,
'd') != 0;
2843 TString rootbuild = ROOTBUILD;
2851 Bool_t flatBuildDir = (fAclicProperties & kFlatBuildDir) || (strchr(opt,
'-')!=0);
2854 TString build_loc = ExpandFileName(GetBuildDir());
2855 if (build_dir && strlen(build_dir)) build_loc = build_dir;
2856 if (build_loc ==
".") {
2857 build_loc = WorkingDirectory();
2858 }
else if (build_loc.
Length() && (!IsAbsoluteFileName(build_loc)) ) {
2859 AssignAndDelete( build_loc , ConcatFileName( WorkingDirectory(), build_loc ) );
2865 TString incPath = GetIncludePath();
2869 incPath.
Append(fromConfig);
2872 while ( incPath.
Index(
" :") != -1 ) {
2876 incPath.
Prepend(WorkingDirectory());
2879 TString expFileName(filename);
2880 ExpandPathName( expFileName );
2881 TString library = expFileName;
2882 if (! IsAbsoluteFileName(library) )
2884 const char *whichlibrary = Which(incPath,library);
2886 library = whichlibrary;
2887 delete [] whichlibrary;
2889 ::Error(
"ACLiC",
"The file %s can not be found in the include path: %s",filename,incPath.
Data());
2894 ::Error(
"ACLiC",
"The file %s can not be found.",filename);
2904 TString filename_fullpath = library;
2906 TString file_dirname = DirName( filename_fullpath );
2911 if (library.
Length()>1 && isalpha(library[0]) && library[1]==
':') {
2912 file_dirname.
Prepend(library(0,2));
2914 TString file_location( file_dirname );
2915 incPath.
Prepend( file_location +
":" );
2919 extension.
Replace( 0, dot_pos+1, 0 , 0);
2920 TString libname_noext = library;
2921 if (dot_pos>=0) libname_noext.
Remove( dot_pos );
2925 TString(
"_") + extension +
"." + fSoExt );
2927 TString libname ( BaseName( libname_noext ) );
2930 if (library_specified && strlen(library_specified) ) {
2932 libname = BaseName( library_specified );
2933 library = library_specified;
2934 ExpandPathName( library );
2935 if (! IsAbsoluteFileName(library) ) {
2936 AssignAndDelete( library , ConcatFileName( WorkingDirectory(), library ) );
2938 library =
TString(library) +
"." + fSoExt;
2941 TString libname_ext ( libname );
2942 libname_ext +=
"." + fSoExt;
2944 TString lib_dirname = DirName( library );
2949 if (library.
Length()>1 && isalpha(library[0]) && library[1]==
':') {
2950 lib_dirname.
Prepend(library(0,2));
2953 if ( strncmp( &(lib_dirname[lib_dirname.
Length()-2]),
"/.", 2) == 0 ) {
2956 if ( strncmp( &(lib_dirname[lib_dirname.
Length()-2]),
"\\.", 2) == 0 ) {
2959 TString lib_location( lib_dirname );
2962 if (build_loc.
Length()==0) {
2963 build_loc = lib_location;
2966 TRegexp disk_finder (
"[A-z]:");
2968 if (pos==0) library.
Remove(pos,3);
2969 pos = lib_location.
Index( disk_finder );
2970 if (pos==0) lib_location.
Remove(pos,3);
2979 TString build_loc_store( build_loc );
2980 if (!flatBuildDir) {
2981 AssignAndDelete( build_loc, ConcatFileName( build_loc, lib_location) );
2985 mkdirFailed = (0 != mkdir(build_loc,
true));
2986 if (mkdirFailed && !canWriteBuild_loc) {
2989 build_loc = build_loc_store;
2991 }
else if (!mkdirFailed && dirmode!=0) {
2992 Chmod(build_loc,dirmode);
3004 ::Info(
"ACLiC",
"script has already been loaded in interpreted mode");
3005 ::Info(
"ACLiC",
"unloading %s and compiling it", filename);
3015 TString includes = GetIncludePath();
3020 TRegexp rel_inc(
" -I[^\"/\\$%-][^:-]+");
3022 pos = rel_inc.
Index(includes,&len);
3024 TString sub = includes(pos,len);
3030 includes.
Replace(pos,len,sub);
3031 pos = rel_inc.
Index(includes,&len);
3036 TRegexp rel_inc(
" -I\"[^/\\$%-][^:-]+");
3038 pos = rel_inc.
Index(includes,&len);
3040 TString sub = includes(pos,len);
3044 includes.
Replace(pos,len,sub);
3045 pos = rel_inc.
Index(includes,&len);
3065 TString cmd = GetMakeSharedLib();
3066 TRegexp rel_def(
"-D[^\\s\\t\\n\\r]*");
3068 pos = rel_def.
Index(cmd,&len);
3070 defines += cmd(pos,len);
3072 pos = rel_def.
Index(cmd,&len,pos+1);
3084 emergency_loc = TempDirectory();
3095 AssignAndDelete( depfilename, ConcatFileName(depdir, BaseName(libname_noext)) );
3096 depfilename +=
"_" + extension +
".d";
3100 Long_t lib_time, file_time;
3104 (lib_time < file_time))) {
3114 depdir = emergency_loc;
3115 AssignAndDelete( depfilename, ConcatFileName(depdir, BaseName(libname_noext)) );
3116 depfilename +=
"_" + extension +
".d";
3118 R__WriteDependencyFile(build_loc, depfilename, filename_fullpath, library, libname, extension, version_var_prefix, includes, defines, incPath);
3125 FILE * depfile = fopen(depfilename.
Data(),
"r");
3134 TString version_var = libname + version_var_prefix;
3137 char *
line =
new char[sz];
3143 Bool_t hasversion =
false;
3145 while ((c = fgetc(depfile)) != EOF) {
3148 while ((c = fgetc(depfile)) != EOF) {
3155 if (current && line[current-1]==
'=' && strncmp(version_var.
Data(),
line,current)==0) {
3161 }
else if (isspace(c) && !nested) {
3163 if (line[current-1]!=
':') {
3172 modified |= ( lib_time <= filetime );
3179 if (current==sz-1) {
3181 char *newline =
new char[sz];
3182 strcpy(newline,line);
3186 if (c==
'"') nested = !nested;
3195 recompile = modified;
3203 || strlen(GetLibraries(library,
"D",
kFALSE)) != 0 ) {
3212 && (lib_time>load_time)) {
3217 if ( !recompile && reload ) {
3220 ::Info(
"ACLiC",
"%s has been modified and will be reloaded",
3228 fCompiled->Remove(libinfo);
3239 return !gSystem->
Load(library);
3243 ::Info(
"ACLiC",
"%s script has already been compiled and loaded",
3244 modified ?
"modified" :
"unmodified");
3251 ::Info(
"ACLiC",
"it will be regenerated and reloaded!");
3258 fCompiled->Remove(libinfo);
3268 AssignAndDelete( libmapfilename, ConcatFileName( build_loc, libname ) );
3269 libmapfilename +=
".rootmap";
3270 #if (defined(R__MACOSX) && !defined(MAC_OS_X_VERSION_10_5)) || defined(R__WIN32) 3275 Bool_t linkDepLibraries = !produceRootmap;
3277 #if (defined(R__MACOSX) && !defined(MAC_OS_X_VERSION_10_5)) 3279 #elif defined(R__WIN32) 3284 produceRootmap = linkLibs & 0x2;
3285 linkDepLibraries = linkLibs & 0x1;
3302 return !gSystem->
Load(library);
3307 if (!canWrite && recompile) {
3310 ::Warning(
"ACLiC",
"Could not create the directory: %s",
3313 ::Warning(
"ACLiC",
"%s is not writable!",
3316 if (emergency_loc == build_dir ) {
3317 ::Error(
"ACLiC",
"%s is the last resort location (i.e. temp location)",build_loc.
Data());
3320 ::Warning(
"ACLiC",
"Output will be written to %s",
3321 emergency_loc.
Data());
3322 return CompileMacro(expFileName, opt, library_specified, emergency_loc, dirmode);
3326 Info(
"ACLiC",
"creating shared library %s",library.
Data());
3329 R__WriteDependencyFile(build_loc, depfilename, filename_fullpath, library, libname, extension, version_var_prefix, includes, defines, incPath);
3332 TString dict = libname +
"_ACLiC_dict";
3336 static const int maxforbidden = 27;
3337 static const char *forbidden_chars[maxforbidden] =
3338 {
"+",
"-",
"*",
"/",
"&",
"%",
"|",
"^",
">",
"<",
3339 "=",
"~",
".",
"(",
")",
"[",
"]",
"!",
",",
"$",
3340 " ",
":",
"'",
"#",
"@",
"\\",
"\"" };
3341 for(
int ic = 0; ic < maxforbidden; ic++ ) {
3356 linkdef +=
"_ACLiC_linkdef.h";
3357 std::ofstream linkdefFile( linkdef, std::ios::out );
3358 linkdefFile <<
"// File Automatically generated by the ROOT Script Compiler " 3360 linkdefFile << std::endl;
3361 linkdefFile <<
"#ifdef __CINT__" << std::endl;
3362 linkdefFile << std::endl;
3363 linkdefFile <<
"#pragma link C++ nestedclasses;" << std::endl;
3364 linkdefFile <<
"#pragma link C++ nestedtypedefs;" << std::endl;
3365 linkdefFile << std::endl;
3369 const char * extensions[] = {
".h",
".hh",
".hpp",
".hxx",
".hPP",
".hXX" };
3372 for (i = 0; i < 6; i++ ) {
3374 TString extra_linkdef = BaseName( libname_noext );
3375 extra_linkdef.
Append(GetLinkdefSuffix());
3376 extra_linkdef.
Append(extensions[i]);
3377 name = Which(incPath,extra_linkdef);
3379 if (verboseLevel>4 && withInfo) {
3380 Info(
"ACLiC",
"including extra linkdef file: %s",name);
3382 linkdefFile <<
"#include \"" << name <<
"\"" << std::endl;
3387 if (verboseLevel>5 && withInfo) {
3388 Info(
"ACLiC",
"looking for header in: %s",incPath.
Data());
3390 for (i = 0; i < 6; i++ ) {
3392 TString lookup = BaseName( libname_noext );
3393 lookup.
Append(extensions[i]);
3394 name = Which(incPath,lookup);
3396 linkdefFile <<
"#pragma link C++ defined_in "<<name<<
";"<< std::endl;
3400 linkdefFile <<
"#pragma link C++ defined_in \""<<filename_fullpath <<
"\";" << std::endl;
3401 linkdefFile << std::endl;
3402 linkdefFile <<
"#endif" << std::endl;
3403 linkdefFile.close();
3409 mapfile +=
"_ACLiC_map";
3410 TString mapfilein = mapfile +
".in";
3411 TString mapfileout = mapfile +
".out";
3416 needLoadMap =
kTRUE;
3419 std::ofstream mapfileStream( mapfilein, std::ios::out );
3435 mapfileStream << file << std::endl;
3437 mapfileStream << file << std::endl;
3438 mapfileStream << name << std::endl;
3440 for (i = 0; i <
gInterpreter->GetRootMapFiles()->GetEntriesFast(); i++) {
3445 mapfileStream.close();
3450 rcling +=
" -v0 \"--lib-list-prefix=";
3452 rcling +=
"\" -f \"";
3454 if (produceRootmap) {
3455 rcling +=
" -rml " + libname +
" -rmf \"" + libmapfilename +
"\" ";
3457 rcling.
Append(GetIncludePath()).
Append(
" -D__ACLIC__ ");
3458 if (produceRootmap) {
3459 rcling.
Append(
"-DR__ACLIC_ROOTMAP ");
3469 if (verboseLevel>3) {
3470 ::Info(
"ACLiC",
"creating the dictionary files");
3471 if (verboseLevel>4)
::Info(
"ACLiC",
"%s", rcling.
Data());
3475 Int_t dictResult = gSystem->
Exec(rcling);
3477 if (dictResult==139)
::Error(
"ACLiC",
"Dictionary generation failed with a core dump!");
3486 TString linkedlibs = GetLibraries(
"",
"S");
3489 std::ifstream liblist(mapfileout);
3491 while ( liblist >> libtoload ) {
3493 if (libtoload ==
"#") {
3495 std::string toskipcomment;
3496 std::getline(liblist,toskipcomment);
3499 if (libtoload != library && libtoload != libname && libtoload != libname_ext) {
3500 if (produceRootmap) {
3501 if (loadLib || linkDepLibraries ) {
3502 result =
gROOT->LoadClass(
"", libtoload) >= 0;
3508 if (!linkedlibs.
Contains(libtoload)) {
3510 depLibraries.
Append(
" ");
3511 depLibraries.
Append(GetLibraries(libtoload,
"DSL",
kFALSE));
3512 depLibraries = depLibraries.
Strip();
3515 gROOT->LoadClass(
"", libtoload);
3518 unsigned char c = liblist.peek();
3519 if (c==
'\n' || c==
'\r') {
3540 TString linkLibrariesNoQuotes(GetLibraries(
"",
"SDL"));
3545 for (
auto tokenObj : *linkLibrariesNoQuotes.
Tokenize(
" ")) {
3546 singleLibrary = ((
TObjString*)tokenObj)->GetString();
3547 if (!AccessPathName(singleLibrary) || singleLibrary[0]==
'-') {
3548 if (collectingSingleLibraryNameTokens) {
3549 librariesWithQuotes.
Chop();
3550 librariesWithQuotes +=
"\" \"" + singleLibrary +
"\"";
3551 collectingSingleLibraryNameTokens =
kFALSE;
3553 librariesWithQuotes +=
" \"" + singleLibrary +
"\"";
3556 if (collectingSingleLibraryNameTokens) {
3557 librariesWithQuotes += singleLibrary +
" ";
3559 collectingSingleLibraryNameTokens =
kTRUE;
3560 librariesWithQuotes +=
" \"" + singleLibrary +
" ";
3565 linkLibraries.
Prepend(librariesWithQuotes);
3571 cmd.
ReplaceAll(
"$SourceFiles",
"-D__ACLIC__ \"$SourceFiles\"");
3573 cmd.
ReplaceAll(
"$ObjectFiles",
"\"$ObjectFiles\"");
3576 cmd.
ReplaceAll(
"$SharedLib",
"\"$SharedLib\"");
3578 if (linkDepLibraries) {
3579 if (produceRootmap) {
3602 fakeMain +=
"_ACLiC_main";
3604 std::ofstream fakeMainFile( fakeMain, std::ios::out );
3605 fakeMainFile <<
"// File Automatically generated by the ROOT Script Compiler " 3607 fakeMainFile <<
"int main(char*argc,char**argvv) {};" << std::endl;
3608 fakeMainFile.close();
3619 exec +=
"_ACLiC_exec";
3620 testcmd.
ReplaceAll(
"$SourceFiles",
"-D__ACLIC__ \"$SourceFiles\"");
3622 testcmd.
ReplaceAll(
"$ObjectFiles",
"\"$ObjectFiles\"");
3626 testcmd.
ReplaceAll(
"$LinkedLibs",linkLibraries);
3634 R__FixLink(testcmd);
3639 if (verboseLevel>3 && withInfo) {
3640 ::Info(
"ACLiC",
"compiling the dictionary and script files");
3641 if (verboseLevel>4)
::Info(
"ACLiC",
"%s", cmd.
Data());
3643 Int_t compilationResult = gSystem->
Exec( cmd );
3644 if (compilationResult) {
3645 if (compilationResult==139)
::Error(
"ACLiC",
"Compilation failed with a core dump!");
3647 if (produceRootmap) {
3648 gSystem->
Unlink(libmapfilename);
3651 result = !compilationResult;
3666 if (verboseLevel>3 && withInfo)
::Info(
"ACLiC",
"loading the shared library");
3667 if (loadLib) result = !gSystem->
Load(library);
3668 else result =
kTRUE;
3671 if (verboseLevel>3 && withInfo) {
3672 ::Info(
"ACLiC",
"testing for missing symbols:");
3673 if (verboseLevel>4)
::Info(
"ACLiC",
"%s", testcmd.
Data());
3675 gSystem->
Exec(testcmd);
3681 if (verboseLevel<=5 && !internalDebug) {
3683 gSystem->
Unlink( dicth );
3684 gSystem->
Unlink( dictObj );
3685 gSystem->
Unlink( linkdef );
3686 gSystem->
Unlink( mapfilein );
3687 gSystem->
Unlink( mapfileout );
3688 gSystem->
Unlink( fakeMain );
3691 if (verboseLevel>6) {
3695 gSystem->
Exec(rcling);
3696 gSystem->
Exec( cmd );
3697 gSystem->
Exec(testcmd);
3709 return fAclicProperties;
3725 return fBuildCompiler;
3733 return fBuildCompilerVersion;
3749 if (fBuildDir.Length()==0) {
3750 if (!
gEnv)
return "";
3790 return fMakeSharedLib;
3807 fListPaths = fIncludePath;
3808 fListPaths.Append(
" ").Append(
gInterpreter->GetIncludePath());
3827 if (fLinkdefSuffix.Length()==0) {
3828 if (!
gEnv)
return "_linkdef";
3831 return fLinkdefSuffix;
3865 fBuildDir = build_dir;
3866 if (isflat) fAclicProperties |= (kFlatBuildDir &
kBitMask);
3867 else fAclicProperties &= ~(kFlatBuildDir &
kBitMask);
3876 fFlagsDebug = flags;
3913 fMakeExe = directives;
3965 fMakeSharedLib = directives;
3975 fIncludePath +=
" ";
3976 fIncludePath += includePath;
3987 fLinkedLibs += linkedLib;
4009 fIncludePath = includePath;
4020 fLinkedLibs = linkedLibs;
4042 fLinkdefSuffix = suffix;
4074 char *fname =
Strip(filename);
4076 char *arg = strchr(fname,
'(');
4078 while (arg && *arg && (arg > fname && *(arg-1) ==
'$') && *(arg+1))
4079 arg = strchr(arg+1,
'(');
4080 if (arg && arg > fname) {
4093 s2 = strstr(fname,
">>");
4094 if (!s2) s2 = strstr(fname,
"2>");
4095 if (!s2) s2 = strchr(fname,
'>');
4096 s3 = strchr(fname,
'<');
4097 if (s2 && s3) s2 = s2<s3 ? s2 : s3;
4098 if (s3 && !s2) s2 = s3;
4107 while (s2 && *s2 ==
' ') s2--;
4117 int len = strlen(fname);
4120 if (strchr(
"kfgOcsdv-", fname[len - 1])) {
4121 mode += fname[len - 1];
4127 Bool_t compile = len && fname[len - 1] ==
'+';
4128 Bool_t remove = compile && len > 1 && fname[len - 2] ==
'+';
4134 fname[strlen(fname)-2] = 0;
4137 fname[strlen(fname)-1] = 0;
4146 if (arg) arguments += arg;
4147 else arguments =
"";
4158 TIter next(fCompiled);
4160 while ((lib = (
TNamed*)next())) {
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
virtual void SysError(const char *method, const char *msgfmt,...) const
Issue system error message.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
virtual void Add(TObject *obj)
virtual UInt_t GetUniqueID() const
Return the unique object id.
double read(const std::string &file_name)
reading
virtual Bool_t IsAbsoluteFileName(const char *dir)
Return true if dir is an absolute pathname.
virtual int GetPid()
Get process id.
virtual int GetCpuInfo(CpuInfo_t *info, Int_t sampleTime=1000) const
Returns cpu load average and load info into the CpuInfo_t structure.
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
virtual void Syslog(ELogLevel level, const char *mess)
Send mess to syslog daemon.
virtual const char * GetFlagsOpt() const
Return the optimization flags.
int GetErrno()
return errno
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
virtual const char * GetBuildCompilerVersion() const
Return the build compiler version.
virtual Bool_t IsPathLocal(const char *path)
Returns TRUE if the url in 'path' points to the local file system.
const char * GetHostAddress() const
Returns the IP address string "%d.%d.%d.%d".
Bool_t ProcessEvents()
Process events if timer did time out.
virtual const char * WorkingDirectory()
Return working directory.
virtual void StackTrace()
Print a stack trace.
void Reset()
Reset the timer.
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 NotifyApplicationCreated()
Hook to tell TSystem that the TApplication object has been created.
Collectable string class.
virtual const char * GetLinkedLibs() const
Return the list of library linked to this executable.
const char * GetHostName() const
virtual int Link(const char *from, const char *to)
Create a link from file1 to file2.
virtual TString SplitAclicMode(const char *filename, TString &mode, TString &args, TString &io) const
This method split a filename of the form: ~~~ {.cpp} [path/]macro.C[+|++[k|f|g|O|c|s|d|v|-]][(args)]...
virtual void SetFlagsOpt(const char *)
FlagsOpt should contain the options to pass to the C++ compiler in order to compile the library in op...
virtual const char * GetLinkedLibraries()
Get list of shared libraries loaded at the start of the executable.
void RemoveOnExit(TObject *obj)
Objects that should be deleted on exit of the OS interface.
virtual Int_t SetFPEMask(Int_t mask=kDefaultMask)
Set which conditions trigger a floating point exception.
This class represents a WWW compatible URL.
TString & ReplaceAll(const TString &s1, const TString &s2)
virtual const char * GetBuildNode() const
Return the build node name.
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.
Bool_t TestBit(UInt_t f) const
const char * GetProtocol() const
static Int_t RootVersionCode()
Return ROOT version code as defined in RVersion.h.
virtual TString GetFromPipe(const char *command)
Execute command and return output in TString.
This class represents an Internet Protocol (IP) address.
virtual int MakeDirectory(const char *name)
Make a directory.
virtual void AddSignalHandler(TSignalHandler *sh)
Add a signal handler to list of system signal handlers.
virtual const char * HomeDirectory(const char *userName=0)
Return the user's home directory.
virtual void CloseConnection(int sock, Bool_t force=kFALSE)
Close socket connection.
Regular expression class.
This class implements a mutex interface.
virtual Bool_t ChangeDirectory(const char *path)
Change directory.
TVersionCheck(int versionCode)
Register version of plugin library.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
virtual UserGroup_t * GetGroupInfo(Int_t gid)
Returns all group info in the UserGroup_t structure.
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 void SetMakeExe(const char *directives)
Directives has the same syntax as the argument of SetMakeSharedLib but is used to create an executabl...
Int_t LoadPlugin()
Load the plugin library for this handler.
virtual void Remove()
Remove std::exception handler from system handler list.
virtual int Load(const char *module, const char *entry="", Bool_t system=kFALSE)
Load a shared library.
virtual void AddStdExceptionHandler(TStdExceptionHandler *eh)
Add an exception handler to list of system exception handlers.
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 int GetMemInfo(MemInfo_t *info) const
Returns ram and swap memory usage info into the MemInfo_t structure.
static void R__AddPath(TString &target, const TString &path)
virtual const char * DirName(const char *pathname)
Return the directory name in pathname.
virtual TTimer * RemoveTimer(TTimer *t)
Remove timer from list of system timers.
static const TString & GetRootSys()
Get the rootsys directory in the installation. Static utility function.
virtual const char * GetSoExt() const
Get the shared library extension.
virtual char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path.
virtual void SetMakeSharedLib(const char *directives)
Directives should contain the description on how to compile and link a shared lib.
virtual int AnnounceUdpService(int port, int backlog)
Announce UDP service.
virtual FILE * OpenPipe(const char *command, const char *mode)
Open a pipe.
virtual const char * GetFlagsDebug() const
Return the debug flags.
TString & Prepend(const char *cs)
R__EXTERN TApplication * gApplication
TObject * At(Int_t idx) const
virtual void ResetSignals()
Reset signals handlers to previous behaviour.
virtual void IgnoreInterrupt(Bool_t ignore=kTRUE)
If ignore is true ignore the interrupt signal, else restore previous behaviour.
Basic time type with millisecond precision.
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.
virtual TInetAddress GetPeerName(int sock)
Get Internet Protocol (IP) address of remote host and port #.
static const TString & GetIncludeDir()
Get the include directory in the installation. Static utility function.
virtual int SendRaw(int sock, const void *buffer, int length, int flag)
Send exactly length bytes from buffer.
virtual TFileHandler * RemoveFileHandler(TFileHandler *fh)
Remove a file handler from the list of file handlers.
Bool_t R_ISREG(Int_t mode)
virtual char * GetServiceByPort(int port)
Get name of internet service.
virtual int mkdir(const char *name, Bool_t recursive=kFALSE)
Make a file system directory.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
TVirtualMutex * gSystemMutex
virtual const char * FindFile(const char *search, TString &file, EAccessMode mode=kFileExists)
Find location of file in a search path.
virtual const char * UnixPathName(const char *unixpathname)
Convert from a Unix pathname to a local pathname.
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
static Int_t GetErrno()
Static function returning system error number.
Bool_t IsInterruptingSyscalls() const
virtual int Rename(const char *from, const char *to)
Rename a file.
virtual const char * GetLinkdefSuffix() const
Return the linkdef suffix chosen by the user for ACLiC.
const char * GetHost() const
virtual const char * GetDirEntry(void *dirp)
Get a directory entry. Returns 0 if no more entries.
virtual int Unlink(const char *name)
Unlink, i.e. remove, a file.
virtual std::string GetHomeDirectory(const char *userName=0) const
Return the user's home directory.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
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 FILE * TempFileName(TString &base, const char *dir=0)
Create a secure temporary file by appending a unique 6 letter string to base.
virtual void Sleep(UInt_t milliSec)
Sleep milliSec milli seconds.
The TNamed class is the base class for all named ROOT classes.
TObject * Next()
Return next object in collection.
virtual const char * GetDynamicPath()
Return the dynamic path (used to find shared libraries).
void Clear()
Clear string without changing its capacity.
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 * Getenv(const char *env)
Get environment variable.
virtual void ListLibraries(const char *regexp="")
List all loaded shared libraries.
virtual const char * GetMakeExe() const
Return the command line use to make an executable.
virtual void SetDisplay()
Set DISPLAY environment variable based on utmp entry. Only for UNIX.
TString & Append(const char *cs)
virtual const char * PrependPathName(const char *dir, TString &name)
Concatenate a directory and a file name.
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
virtual EAclicMode GetAclicMode() const
AclicMode indicates whether the library should be built in debug mode or optimized.
virtual void ExitLoop()
Exit from event loop.
virtual UserGroup_t * GetUserInfo(Int_t uid)
Returns all user info in the UserGroup_t structure.
virtual int RecvRaw(int sock, void *buffer, int length, int flag)
Receive exactly length bytes into buffer.
Ssiz_t First(char c) const
Find first occurrence of a character c.
virtual ~TSystem()
Delete the OS interface.
virtual void Unload(const char *module)
Unload a shared library.
virtual const char * TempDirectory() const
Return a user configured or systemwide directory to create temporary files in.
static Int_t gLibraryVersionMax
virtual Bool_t ConsistentWith(const char *path, void *dirptr=0)
Check consistency of this helper with the one required by 'path' or 'dirptr'.
virtual TInetAddress GetHostByName(const char *server)
Get Internet Protocol (IP) address of host.
void Error(const char *location, const char *msgfmt,...)
virtual void Closelog()
Close connection to system log daemon.
virtual const char * GetBuildCompiler() const
Return the build compiler.
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
TString & GetLastErrorString()
Return the thread local storage for the custom last error message.
const char * GetUser() const
static Int_t * gLibraryVersion
virtual EStatus Handle(std::exception &exc)=0
virtual void AddDynamicPath(const char *pathname)
Add a new directory to the dynamic path.
virtual const char * GetBuildArch() const
Return the build architecture.
virtual TTime Now()
Get current time in milliseconds since 0:00 Jan 1 1995.
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
virtual void Setenv(const char *name, const char *value)
Set environment variable.
virtual TStdExceptionHandler * RemoveStdExceptionHandler(TStdExceptionHandler *eh)
Remove an exception handler from list of exception handlers.
void ResetErrno()
reset errno
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)
virtual Bool_t Init()
Initialize the OS interface.
if object ctor succeeded but object should not be used
virtual const char * GetLibraries(const char *regexp="", const char *option="", Bool_t isRegexp=kTRUE)
Return a space separated list of loaded shared libraries.
Long_t ExecPlugin(int nargs, const T &... params)
virtual Int_t GetValue(const char *name, Int_t dflt)
Returns the integer value for a resource.
virtual int AcceptConnection(int sock)
Accept a connection.
Bool_t Gets(FILE *fp, Bool_t chop=kTRUE)
Read one line from the stream, including the , or until EOF.
void AssignAndDelete(TString &target, char *tobedeleted)
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
virtual void SetDynamicPath(const char *pathname)
Set the dynamic path to a new value.
virtual int AnnounceTcpService(int port, Bool_t reuse, int backlog, int tcpwindowsize=-1)
Announce TCP/IP service.
virtual const char * GetBuildDir() const
Return the path of the build directory.
virtual Long_t NextTimeOut(Bool_t mode)
Time when next timer of mode (synchronous=kTRUE or asynchronous=kFALSE) will time-out (in ms)...
static Int_t ConvertVersionCode2Int(Int_t code)
Convert version code to an integer, i.e. 331527 -> 51507.
Int_t GetEntriesFast() const
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
char * Form(const char *fmt,...)
virtual int Umask(Int_t mask)
Set the process file creation mode mask.
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.
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
virtual Int_t GetAclicProperties() const
Return the ACLiC properties field.
virtual int SendBuf(int sock, const void *buffer, int length)
Send a buffer headed by a length indicator.
Handles synchronous and a-synchronous timer events.
virtual void ListSymbols(const char *module, const char *re="")
List symbols in a shared library.
virtual Int_t Exec(const char *shellcmd)
Execute a command.
virtual void StopIdleing()
Called when system stops idleing.
virtual int Utime(const char *file, Long_t modtime, Long_t actime)
Set the a files modification and access times.
char * Strip(const char *str, char c=' ')
Strip leading and trailing c (blanks by default) from a string.
virtual void Abort(int code=0)
Abort the application.
virtual void InnerLoop()
Inner event loop.
virtual const char * GetMakeSharedLib() const
Return the command line use to make a shared library.
virtual void SetSoExt(const char *soExt)
Set shared library extension, should be either .so, .sl, .a, .dll, etc.
virtual void Unsetenv(const char *name)
Unset environment variable.
if object destructor must call RecursiveRemove()
virtual void FreeDirectory(void *dirp)
Free a directory.
virtual int ClosePipe(FILE *pipe)
Close the pipe.
virtual void Run()
System event loop.
char * StrDup(const char *str)
Duplicate the string str.
#define R__LOCKGUARD2(mutex)
virtual int OpenConnection(const char *server, int port, int tcpwindowsize=-1, const char *protocol="tcp")
Open a connection to another host.
virtual int SetSockOpt(int sock, int kind, int val)
Set socket option.
virtual Int_t Select(TList *active, Long_t timeout)
Select on active file descriptors (called by TMonitor).
virtual const char * FindDynamicLibrary(TString &lib, Bool_t quiet=kFALSE)
Find a dynamic library using the system search paths.
virtual Int_t RedirectOutput(const char *name, const char *mode="a", RedirectHandle_t *h=0)
Redirect standard output (stdout, stderr) to the specified file.
TString & Remove(Ssiz_t pos)
virtual int Chmod(const char *file, UInt_t mode)
Set the file permission bits. Returns -1 in case or error, 0 otherwise.
virtual TSignalHandler * RemoveSignalHandler(TSignalHandler *sh)
Remove a signal handler from list of signal handlers.
virtual void StartIdleing()
Called when system starts idleing.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
virtual Int_t GetEffectiveUid()
Returns the effective user id.
virtual const char * GetIncludePath()
Get the list of include path.
virtual Func_t DynFindSymbol(const char *module, const char *entry)
Find specific entry point in specified library.
virtual const char * HostName()
Return the system's host name.
virtual int Symlink(const char *from, const char *to)
Create a symbolic link from file1 to file2.
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...
Ssiz_t Last(char c) const
Find last occurrence of a character c.
char * DynamicPathName(const char *lib, Bool_t quiet=kFALSE)
Find a dynamic library called lib using the system search paths.
virtual void Remove()
Remove signal handler from system signal handler list.
virtual const char * ExpandFileName(const char *fname)
Expand a pathname getting rid of special shell characters like ~.
static const TString & GetEtcDir()
Get the sysconfig directory in the installation. Static utility function.
virtual void SetProgname(const char *name)
Set the application name (from command line, argv[0]) and copy it in gProgName.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
virtual Int_t GetGid(const char *group=0)
Returns the group's id. If group = 0, returns current user's group.
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 DispatchOneEvent(Bool_t pendingOnly=kFALSE)
Dispatch a single event.
virtual void CleanCompiledMacros()
Remove the shared libs produced by the CompileMacro() function.
virtual TInetAddress GetSockName(int sock)
Get Internet Protocol (IP) address of host and port #.
virtual Int_t GetUid(const char *user=0)
Returns the user's id. If user = 0, returns current user's id.
virtual void Remove()
Remove file event handler from system file handler list.
virtual void AddLinkedLibs(const char *linkedLib)
Add linkedLib to already set linked libs.
virtual void SetAclicMode(EAclicMode mode)
AclicMode indicates whether the library should be built in debug mode or optimized.
Mother of all ROOT objects.
virtual void SetObjExt(const char *objExt)
Set object files extension, should be either .o, .obj, etc.
virtual Bool_t IsFileInIncludePath(const char *name, char **fullpath=0)
Return true if 'name' is a file that can be found in the ROOT include path or the current directory...
virtual const char * GetTitle() const
Returns title of object.
virtual int RecvBuf(int sock, void *buffer, int length)
Receive a buffer headed by a length indicator.
virtual void Openlog(const char *name, Int_t options, ELogFacility facility)
Open connection to system log daemon.
Bool_t R_ISDIR(Int_t mode)
virtual int GetServiceByName(const char *service)
Get port # of internet service.
virtual int AnnounceUnixService(int port, int backlog)
Announce unix domain service.
static const TString & GetLibDir()
Get the library directory in the installation. Static utility function.
virtual void AddTimer(TTimer *t)
Add timer to list of system timers.
virtual void ShowOutput(RedirectHandle_t *h)
Display the content associated with the redirection described by the opaque handle 'h'...
virtual void SetLinkedLibs(const char *linkedLibs)
LinkedLibs should contain the library directory and list of libraries needed to recreate the current ...
virtual Int_t GetEffectiveGid()
Returns the effective group id.
virtual void Exit(int code, Bool_t mode=kTRUE)
Exit the application.
virtual std::string GetWorkingDirectory() const
Return working directory.
virtual int GetProcInfo(ProcInfo_t *info) const
Returns cpu and memory used by this process into the ProcInfo_t structure.
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
virtual int CopyFile(const char *from, const char *to, Bool_t overwrite=kFALSE)
Copy a file.
virtual void * OpenDirectory(const char *name)
Open a directory. Returns 0 if directory does not exist.
Iterator of ordered collection.
virtual void AddIncludePath(const char *includePath)
Add includePath to the already set include path.
TSystem * FindHelper(const char *path, void *dirptr=0)
Create helper TSystem to handle file and directory operations that might be special for remote file a...
virtual void AddFileHandler(TFileHandler *fh)
Add a file handler to the list of system file handlers.
static void ResetErrno()
Static function resetting system error number.
static const TString & GetBinDir()
Get the binary directory in the installation. Static utility function.
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
void SetErrorStr(const char *errstr)
Set the system error string.
virtual const char * GetName() const
Returns name of object.
virtual int GetSockOpt(int sock, int kind, int *val)
Get socket option.
Abstract base class defining a generic interface to the underlying Operating System.
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...
virtual Int_t GetFPEMask()
Return the bitmap of conditions that trigger a floating point exception.
static Int_t gLibraryVersionIdx
void AbstractMethod(const char *method) const
Use this method to implement an "abstract" method that you don't want to leave purely abstract...
virtual char * ConcatFileName(const char *dir, const char *name)
Concatenate a directory and a file name. User must delete returned string.
virtual const char * GetObjExt() const
Get the object file extension.
virtual const char * GetError()
Return system error string.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
static Int_t * ReAllocInt(Int_t *vp, size_t size, size_t oldsize)
Reallocate (i.e.
virtual void SetIncludePath(const char *includePath)
IncludePath should contain the list of compiler flags to indicate where to find user defined header f...
virtual const char * GetTitle() const
Returns title of object.
const char * Data() const
virtual void IgnoreSignal(ESignals sig, Bool_t ignore=kTRUE)
If ignore is true ignore the specified signal, else restore previous behaviour.