ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/unfoldEnv.py
Revision: 1.9
Committed: Mon May 26 16:29:23 2008 UTC (16 years, 11 months ago) by spiga
Content type: text/x-python
Branch: MAIN
CVS Tags: HEAD
Changes since 1.8: +0 -0 lines
State: FILE REMOVED
Log Message:
removed obsolte file

File Contents

# User Rev Content
1 farinafa 1.1 import os, sys, popen2
2    
3     # env to be preserved
4     preserveList = ['SCRAMRT_LOCALRT', 'LOCALRT', 'BASE_PATH', 'CMSSW_SEARCH_PATH', 'CMSSW_VERSION',
5     'CMSSW_BASE','CMSSW_RELEASE_BASE', 'CMSSW_DATA_PATH']
6    
7     reverseList = ['LD_LIBRARY_PATH', 'PATH', 'PYTHONPATH']
8    
9     # init
10     if 'CRAB_UNFOLD_ENV' in os.environ:
11     sys.exit(0)
12    
13     if 'CMSSW_BASE' not in os.environ:
14     # CMSSW env likely not set, nothing to do
15     print 'echo "CMSSW_BASE not set"'
16     sys.exit(-1)
17    
18 farinafa 1.8 # identify the shell kind
19     sout, sin, serr = popen2.popen3('echo $BASH')
20     l = sout.readlines()[0]
21     sout.close()
22     sin.close()
23     serr.close()
24    
25     if len(l)!=0: #'BASH' in os.environ:
26 farinafa 1.1 shKind = 'sh'
27 farinafa 1.8 else:
28     shKind = 'csh'
29 farinafa 1.1
30 farinafa 1.5 # -create -submit special case: first part # Fabio
31     cachedPath = os.environ['PATH']
32     cachedPyPath = os.environ['PYTHONPATH']
33 spiga 1.7
34     if '-create' in sys.argv or '-publish' in sys.argv:
35 farinafa 1.5 reverseList.remove('PATH')
36     reverseList.remove('PYTHONPATH')
37     preserveList = preserveList + ['PATH', 'PYTHONPATH']
38     #
39     #
40 spiga 1.7
41 farinafa 1.1 # extract the env setting introduced by scram
42     curDir = os.getcwd()
43     os.chdir(str(os.environ['CMSSW_BASE'])+'/src')
44     sout, sin, serr = popen2.popen3('echo `scramv1 runtime -%s`'%str(shKind))
45     os.chdir(curDir)
46     out = sout.readlines()[0]
47     err = serr.readlines()
48     sout.close()
49     sin.close()
50     serr.close()
51    
52     if len(err) != 0:
53     print 'echo "Error while summoning scramv1: %s"'%out
54     sys.exit(stat)
55    
56     out = out.replace('export ','').replace('=',' ').replace('setenv ', '')
57     outl = out.split(';')[:-1]
58    
59     pre_env = {}
60     drop_out_cmd = ''
61 farinafa 1.8 fakePath = '' # needed for source ordering in -create # Fabio
62    
63 farinafa 1.1 for e in outl:
64 farinafa 1.8 vl = e.strip()
65     k = str(vl.split(' ')[0])
66     v = str(vl.split(' ')[1].replace('"','')).split(':')
67    
68     if k == 'PATH':
69     fakePath = vl.split(' ')[1].replace('"','')
70    
71 farinafa 1.1 if 'SCRAMRT' not in k:
72     pre_env[k] = []+v
73     else:
74     drop_out_cmd = drop_out_cmd + 'unset %s;\n'%k
75    
76     # unfold the current env from the scram attributes
77     unfold_cmd = 'setenv CRAB_UNFOLD_ENV "1";\n'
78     if shKind == 'sh':
79     unfold_cmd = 'export CRAB_UNFOLD_ENV="1";\n'
80    
81 spiga 1.4 ## cache to reuse at creation Level .DS
82 farinafa 1.1 for v in os.environ:
83     if v in preserveList:
84     continue
85     if 'SCRAMRT' in v:
86     unfold_cmd = unfold_cmd + 'unset %s;\n'%v
87     continue
88     if v not in pre_env:
89     continue
90    
91     entry = ''+str(os.environ[v])
92     purgedList = [ i for i in entry.split(':') if i not in pre_env[v] ]
93     # manage reverseList special cases (ie move entries at the end of the env var)
94     if v in reverseList:
95     purgedList = purgedList + pre_env[v]
96    
97     if len(purgedList)==0:
98     unfold_cmd = unfold_cmd + 'unset %s;\n'%v
99     continue
100     entry = str(purgedList).replace('[','').replace(']','')
101     entry = entry.replace('\'','').replace(', ',':')
102    
103     if shKind == 'sh':
104     unfold_cmd = unfold_cmd + 'export %s="%s";\n'%(v, entry)
105     else:
106     unfold_cmd = unfold_cmd + 'setenv %s "%s";\n'%(v, entry)
107    
108     # export the environment
109     print drop_out_cmd + unfold_cmd
110 farinafa 1.5
111     #
112     # -create special case: second part
113     # reverse and export as AUXs both the PATH and the PYTHONPATH
114     # this value will be used by crab.py whenever both -create and -submit are used
115     #
116 spiga 1.7 if '-create' in sys.argv or '-publish' in sys.argv:
117 farinafa 1.8 # source order bug # Fabio
118     # reproduce a PATH as lcg->cmssw would produce and compare it with the cachedPath
119     # if they differs then override the cached path with the prepared one (brute force ordering)
120     #
121     fakePath = fakePath[:-len(':$SCRAMRT_PATH')]
122     newPath = fakePath + cachedPath.replace(fakePath,'')
123     if shKind == 'sh':
124     print 'export PATH="%s";\n'%newPath
125     else:
126     print 'setenv PATH "%s";\n'%newPath
127    
128 farinafa 1.5 # PATH
129     purgedList = [ i for i in cachedPath.split(':') if i not in pre_env['PATH'] ]
130     purgedList = purgedList + pre_env['PATH']
131     entry = str(purgedList).replace('[','').replace(']','').replace('\'','').replace(', ',':')
132     if shKind == 'sh':
133     print 'export AUX_SUBM_PATH="%s";\n'%entry
134     else:
135     print 'setenv AUX_SUBM_PATH "%s";\n'%entry
136     # PYTHONPATH
137     purgedList = [ i for i in cachedPyPath.split(':') if i not in pre_env['PYTHONPATH'] ]
138     purgedList = purgedList + pre_env['PYTHONPATH']
139     entry = str(purgedList).replace('[','').replace(']','').replace('\'','').replace(', ',':')
140     if shKind == 'sh':
141     print 'export AUX_SUBM_PY="%s";\n'%entry
142     else:
143     print 'setenv AUX_SUBM_PY "%s";\n'%entry
144    
145     #
146     #
147 farinafa 1.1 sys.exit(0)
148    
149