source: trunk/Mars/macros/rootlogon.C @ 19206

Last change on this file since 19206 was 19206, checked in by tbretz, 10 months ago
Add include to include-paths (for simplified packaging -- less sub-directories), print 'error\!' in red instead of green.
File size: 6.8 KB
Line 
1/* ======================================================================== *\
2!
3! *
4! * This file is part of MARS, the MAGIC Analysis and Reconstruction
5! * Software. It is distributed to you in the hope that it can be a useful
6! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
7! * It is distributed WITHOUT ANY WARRANTY.
8! *
9! * Permission to use, copy, modify and distribute this software and its
10! * documentation for any purpose is hereby granted without fee,
11! * provided that the above copyright notice appear in all copies and
12! * that both that copyright notice and this permission notice appear
13! * in supporting documentation. It is provided "as is" without express
14! * or implied warranty.
15! *
16!
17!
18!   Author(s): Thomas Bretz, 12/2000 <mailto:tbretz@astro.uni-wuerzburg.de>
19!
20!   Copyright: MAGIC Software Development, 2000-2004
21!
22!
23\* ======================================================================== */
24
25///////////////////////////////////////////////////////////////////////////
26//
27// rootlogon.C
28// ===========
29//
30// This file is the startup script ("autoexec.bat") executed when root is
31// started. The definition which file to start is done in ".rootrc".
32// There are three files which are automatically processed by root at
33// startup: A systemwide .rootrc, one in your home directory and one
34// in the current directory.
35// So rootlogon.C is correctly executed if your start root from your
36// Mars directory.
37//
38// The script setupts some small environmental things and makes
39// sure that the Mars shared object (libmars.so) is loaded. This shared
40// object gives you access to all Mars features from within the root
41// interpreter.
42//
43// If libmars.so is not found in the current directory we search in the
44// directory given in "MARSSYS" environment variable.
45//
46///////////////////////////////////////////////////////////////////////////
47#include <iomanip>
48
49
50Bool_t isloaded()
51{
52    TString str = gSystem->GetLibraries("libmars.so");
53
54    return !str.IsNull();
55}
56
57void unload()
58{
59    if (!isloaded())
60        return;
61
62    cout << "Unloading 'libmars.so'... " << flush;
63    if (gSystem->Unload("libmars.so"))
64        cout << "error!" << endl;
65    else
66        cout << "done." << endl << endl;
67}
68
69bool load(TString &dir)
70{
71    if (isloaded())
72        return;
73
74    cout << "\033[33m\033[1m" << "Loading '" << dir << "libmars.so'... " << "\033[0m" << flush;
75
76    if (dir.IsNull())
77        dir = "./";
78
79    if (gSystem->Load(dir+"libmars.so")!=0)
80    {
81        cout << "\033[31m\033[1m" << "error!" << endl;
82        cout << "\033[0m" << endl;
83        return false;
84    }
85    else
86    {
87        MParContainer::Class()->IgnoreTObjectStreamer();
88        MArray::Class()->IgnoreTObjectStreamer();
89        cout << "\033[33m\033[1m" << "done." << endl;
90        cout << "\033[0m" << endl;
91        return true;
92    }
93}
94/*
95void make()
96{
97    unload();
98
99    if (gSystem->Exec("make"))
100    {
101        cout << "Error calling make..." << endl;
102        return;
103    }
104
105    load();
106}
107*/
108void rootlogon()
109{
110    // This is a workaround to make axis behave as they
111    // are UTC and not local time
112    //    gSystem->Setenv("TZ", "UTC");
113
114    cout << endl;
115
116    const Bool_t fileexist = !gSystem->AccessPathName("libmars.so", kFileExists);
117
118    TString dir = fileexist ? "" : gSystem->Getenv("MARSSYS");
119    if (!dir.IsNull())
120    {
121        cout << "\033[34m\033[1m" << "Searching Mars in " << dir << " (MARSSYS)" << "\033[0m" << endl << endl;
122
123        if (!dir.EndsWith("/"))
124            dir += "/";
125    }
126
127    if (!load(dir))
128        return;
129
130    MLog::RedirectErrorHandler(MLog::kColor);
131
132    // This initialized the thread factory. This is needed to supress
133    // an error which is displayed if the thread factory is initialized
134    // from another than the main thread (e.g. in the constructor
135    // of MStatusDisplay)
136    TThread::Self();
137
138    gInterpreter->AddIncludePath(dir+"macros");
139    gInterpreter->AddIncludePath(dir+"include");
140    gInterpreter->AddIncludePath(dir+"manalysis");
141    gInterpreter->AddIncludePath(dir+"mastro");
142    gInterpreter->AddIncludePath(dir+"mbase");
143    gInterpreter->AddIncludePath(dir+"mbadpixels");
144    gInterpreter->AddIncludePath(dir+"mcamera");
145    gInterpreter->AddIncludePath(dir+"mcalib");
146    gInterpreter->AddIncludePath(dir+"mcore");
147    gInterpreter->AddIncludePath(dir+"mdrs");
148    gInterpreter->AddIncludePath(dir+"mhcalib");
149    gInterpreter->AddIncludePath(dir+"mdata");
150    gInterpreter->AddIncludePath(dir+"mfbase");
151    gInterpreter->AddIncludePath(dir+"mfileio");
152    gInterpreter->AddIncludePath(dir+"mfilter");
153    gInterpreter->AddIncludePath(dir+"mgeom");
154    gInterpreter->AddIncludePath(dir+"mgui");
155    gInterpreter->AddIncludePath(dir+"mhbase");
156    gInterpreter->AddIncludePath(dir+"mhflux");
157    gInterpreter->AddIncludePath(dir+"mhft");
158    gInterpreter->AddIncludePath(dir+"mhist");
159    gInterpreter->AddIncludePath(dir+"mhistmc");
160    gInterpreter->AddIncludePath(dir+"mhvstime");
161    gInterpreter->AddIncludePath(dir+"mimage");
162    gInterpreter->AddIncludePath(dir+"mjobs");
163    gInterpreter->AddIncludePath(dir+"mjoptim");
164    gInterpreter->AddIncludePath(dir+"mjtrain");
165    gInterpreter->AddIncludePath(dir+"mmain");
166    gInterpreter->AddIncludePath(dir+"mmc");
167    gInterpreter->AddIncludePath(dir+"mmontecarlo");
168    gInterpreter->AddIncludePath(dir+"mmuon");
169    gInterpreter->AddIncludePath(dir+"mpedestal");
170    gInterpreter->AddIncludePath(dir+"mpointing");
171    gInterpreter->AddIncludePath(dir+"mranforest");
172    gInterpreter->AddIncludePath(dir+"mraw");
173    gInterpreter->AddIncludePath(dir+"mreflector");
174    gInterpreter->AddIncludePath(dir+"mreport");
175    gInterpreter->AddIncludePath(dir+"msignal");
176    gInterpreter->AddIncludePath(dir+"msql");
177    gInterpreter->AddIncludePath(dir+"mstarcam");
178    gInterpreter->AddIncludePath(dir+"mtools");
179    gInterpreter->AddIncludePath(dir+"mtrigger");
180    gInterpreter->AddIncludePath(dir+"melectronics");
181    gInterpreter->AddIncludePath(dir+"msim");
182    gInterpreter->AddIncludePath(dir+"msimreflector");
183    gInterpreter->AddIncludePath(dir+"msimcamera");
184    gInterpreter->AddIncludePath(dir+"mcorsika");
185    gInterpreter->AddIncludePath(dir+"mextralgo");
186
187    TString opt(gSystem->GetFlagsOpt());
188    TString dbg(gSystem->GetFlagsDebug());
189    TString lib(gSystem->GetLinkedLibs());
190
191    TString add = " -O5 -std=c++0x -Wall -Winit-self -fPIC -Wpointer-arith -Wcast-align -Woverloaded-virtual";
192    add += " -D__MARS__";
193    add += " -DHAVE_ZLIB";
194    add += " -DPACKAGE_NAME='\""+MARS::GetPackageName()+"\"'";
195    add += " -DPACKAGE_VERSION='\""+MARS::GetPackageName()+"\"'";
196    add += " -DREVISION='\""+MARS::GetRevision()+"\"'";
197
198    opt += add;
199    dbg += add;
200
201    lib += " -lnova -lz";
202
203    gSystem->SetLinkedLibs(lib);
204    gSystem->SetFlagsOpt(opt);
205    gSystem->SetFlagsDebug(dbg);
206
207
208    cout << "\033[32m" << "Welcome to the Mars Root environment." << "\033[0m" << endl;
209    cout << endl;
210}
Note: See TracBrowser for help on using the repository browser.