ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/JSOC/build/buildprod.py
Revision: 1.10
Committed: Tue May 24 18:29:23 2016 UTC (7 years, 4 months ago) by arta
Content type: text/x-python
Branch: MAIN
CVS Tags: Ver_LATEST, NetDRMS_Ver_LATEST, NetDRMS_Ver_8-12, NetDRMS_Ver_8-11, NetDRMS_Ver_9-1, NetDRMS_Ver_9-0, NetDRMS_Ver_9-3, NetDRMS_Ver_9-2, NetDRMS_Ver_9-5, NetDRMS_Ver_9-4, NetDRMS_Ver_9-41, Ver_9-41, Ver_9-3, Ver_8-11, Ver_9-1, Ver_9-5, Ver_9-4, Ver_9-2, Ver_8-12, Ver_9-0, HEAD
Changes since 1.9: +9 -4 lines
Log Message:
Do that globalhs tag checking only if make globalhs is explicitly run. Do not do any tag checking otherwise, even though the build could case globalhs stuff to be made.

File Contents

# Content
1 #!/usr/bin/env python
2
3 from __future__ import print_function
4 import sys
5 import os
6 import pwd
7 from subprocess import check_output, check_call, call, Popen, CalledProcessError
8 sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), '../base/libs/py'))
9 from drmsCmdl import CmdlParser
10
11 PROD_ROOTDIR = '/home/jsoc/cvs/Development'
12 # PROD_ROOTDIR = '/tmp/arta'
13 WAYSTATION = 'waystation'
14 WAYSTATION_USER = 'arta'
15
16 RV_SUCCESS = 0
17 RV_ERROR_WRONGUSER = 1
18 RV_ERROR_ARGS = 2
19 RV_ERROR_MAKE = 3
20
21 # This class changes the current working directory, and restores the original working directory when
22 # the context is left.
23 class Chdir:
24 """Context manager for changing the current working directory"""
25 def __init__(self, newPath):
26 self.newPath = os.path.realpath(newPath)
27
28 def __enter__(self):
29 self.savedPath = os.path.realpath(os.getcwd())
30 os.chdir(self.newPath)
31 cdir = os.path.realpath(os.getcwd())
32 if cdir == self.newPath:
33 return 0
34 else:
35 return 1
36
37 def __exit__(self, etype, value, traceback):
38 os.chdir(self.savedPath)
39 cdir = os.path.realpath(os.getcwd())
40 if cdir == self.savedPath:
41 return 0
42 else:
43 return 1
44
45 optD = {}
46
47 try:
48 parser = CmdlParser(usage='%(prog)s [ -f ]')
49
50 # Optional
51 parser.add_argument('-f', '--full', help='Create/re-create all links and create/re-create all localization parameter files.', dest='full', action='store_true', default=False)
52
53 args = parser.parse_args()
54
55 optD['full'] = args.full
56
57 except Exception as exc:
58 if len(exc.args) != 2:
59 raise # Re-raise
60
61 etype = exc.args[0]
62 msg = exc.args[1]
63
64 if etype == 'CmdlParser-ArgUnrecognized' or etype == 'CmdlParser-ArgBadformat' or etype == 'CmdlParser':
65 raise Exception('getArgs', 'cl', 'Unable to parse command-line arguments. ' + msg + '\n' + parser.format_help())
66 else:
67 raise # Re-raise.
68
69 # Allow only arta to modify the files in the waystation.
70 if pwd.getpwuid(os.getuid())[0] != WAYSTATION_USER:
71 sys.exit(RV_ERROR_WRONGUSER)
72
73 # Turn off debug builds.
74 os.environ['JSOC_DEBUG'] = '0'
75
76 # Make sure the JSOCROOT is PROD_ROOTDIR + '/JSOC'
77 os.environ['JSOCROOT'] = PROD_ROOTDIR + '/JSOC'
78
79 try:
80 with Chdir(PROD_ROOTDIR + '/' + WAYSTATION + '/JSOC') as ret:
81 # os.chdir does NOT change the environment variable $PWD. But our make system relies on PWD being the current directory.
82 os.environ['PWD'] = os.path.realpath(os.getcwd())
83
84 # Set 'GLOBALHSTAGOVERRIDE'
85 if 'GLOBALHSTAGOVERRIDE' in os.environ:
86 del os.environ['GLOBALHSTAGOVERRIDE']
87 os.environ['GLOBALHSTAGOVERRIDE'] = 'globalhs'
88
89 if optD['full']:
90 cmdList = ['./configure']
91 else:
92 cmdList = ['./configure', '-d']
93 check_call(cmdList)
94
95 cmdList = ['/usr/bin/make']
96 check_call(cmdList)
97 cmdList = ['/usr/bin/make', 'dsds']
98 check_call(cmdList)
99 if optD['full']:
100 # Unset 'GLOBALHSTAGOVERRIDE'
101 if 'GLOBALHSTAGOVERRIDE' in os.environ:
102 del os.environ['GLOBALHSTAGOVERRIDE']
103
104 cmdList = ['/usr/bin/make', 'globalhs',]
105 check_call(cmdList)
106
107 cmdList = ['chgrp', '-Rh', 'jsoc', '.']
108 check_call(cmdList)
109 cmdList = ['chmod', '-R', 'g-w', '.']
110 check_call(cmdList)
111
112 sys.exit(RV_SUCCESS);
113 except CalledProcessError as exc:
114 if exc.output:
115 print('Error calling make: ' + exc.output, file=sys.stderr)
116 sys.exit(RV_ERROR_MAKE);
117 except ValueError:
118 print('Bad arguments to make: \n' + '\n'.join(cmdList[1:]))
119 sys.exit(RV_ERROR_MAKE);
120 except Exception as exc:
121 if len(exc.args) != 2:
122 raise # Re-raise
123
124 etype = exc.args[0]
125 msg = exc.args[1]
126
127 if etype != 'getArgs':
128 raise # Re-raise
129
130 print(msg, file=sys.stderr)