make_all.py.html | |
Source file: make_all.py | |
Directory: /home/rjl/git/rjleveque/clawpack-4.x/python | |
Converted: Tue Jul 26 2011 at 12:59:07 using clawcode2html | |
This documentation file will not reflect any later changes in the source file. |
""" Performs 'make all' in each directory with a setrun.py file. Usually this makes .plots and .htmls but might be overwritten by a different set of things in the Makefile, for example if a reference solution must be created. Sends output and errors to separate files to simplify looking for errors. """ import os,sys,glob try: import subprocess except: print '*** Error: require subprocess module from Python 2.4 or greater' raise ImportError() def make_all(rootdir, cleanup=True): if rootdir==[]: # if called from command line with no argument clawdir = os.path.expandvars('$CLAW') rootdir = clawdir else: # called with an argument, try to use this for rootdir: rootdir = rootdir[0] rootdir = os.path.abspath(rootdir) print "Will try to 'source make_all.sh' or 'make all' in every subdirectory of " print " ", rootdir #ans = raw_input("Ok? ") ans = 'y' if ans.lower() not in ['y','yes']: print "Aborting." sys.exit() fname_output = 'make_all_output.txt' fout = open(fname_output, 'w') fout.write("ALL OUTPUT FROM RUNNING EXAMPLES\n\n") fname_errors = 'make_all_errors.txt' ferr = open(fname_errors, 'w') ferr.write("ALL ERRORS FROM RUNNING EXAMPLES\n\n") # Set environment variable to allow downloading topography for # GeoClaw examples: os.environ['CLAW_TOPO_DOWNLOAD'] = 'True' #os.chdir(rootdir) goodlist = [] badlist = [] # Traverse directories depth-first (topdown=False) to insure e.g. that code in # book/chap21/radialdam/1drad is run before code in book/chap21/radialdam for (dirpath, subdirs, files) in os.walk(rootdir,topdown=False): currentdir = os.path.abspath(os.getcwd()) os.chdir(os.path.abspath(dirpath)) rootdirpath = os.path.join(os.path.split(rootdir)[1],dirpath) if os.path.isfile('make_all.sh'): fout.write("\n=============================================\n") fout.write(rootdirpath) fout.write("\n=============================================\n") ferr.write("\n=============================================\n") ferr.write(rootdirpath) ferr.write("\n=============================================\n") # flush I/O buffers: fout.flush() ferr.flush() print "Executing commands in make_all.sh in ",rootdirpath try: os.system('make clobber') except: pass all_ok = run_make_all(ferr) if all_ok: print " Successful completion" goodlist.append(dirpath) else: print " *** Errors encountered: see ", fname_errors badlist.append(dirpath) if cleanup: os.system("make clean; rm -rf _output") elif os.path.isfile('setrun.py'): fout.write("\n=============================================\n") fout.write(rootdirpath) fout.write("\n=============================================\n") ferr.write("\n=============================================\n") ferr.write(rootdirpath) ferr.write("\n=============================================\n") # flush I/O buffers: fout.flush() ferr.flush() try: os.system('make clobber') except: pass print "Running 'make all' in ",rootdirpath job = subprocess.Popen(['make','all'], \ stdout=fout, stderr=ferr) return_code = job.wait() if return_code == 0: print " Successful completion" goodlist.append(dirpath) else: print " *** Errors encountered: see ", fname_errors badlist.append(dirpath) if cleanup: os.system("make clean; rm -rf _output") os.chdir(currentdir) print ' ' print 'Ran Clawpack and created output in directories:' for d in goodlist: print ' ',d print ' ' if len(badlist) > 0: print 'Errors encountered in the following directories:' for d in badlist: print ' ',d print ' ' fout.close() ferr.close() print 'For all output see ', fname_output print 'For all errors see ', fname_errors def run_make_all(ferr): lines = open('make_all.sh','r').readlines() all_ok = True for line in lines: line = line.strip() if (len(line)==0) or (line[0]=='#'): pass # ignore blank lines or comments else: print 'Executing: ',line return_code = os.system(line) if return_code != 0: errmsg = "return_code = %s from executing '%s'" \ % (return_code,line) print errmsg ferr.write(errmsg) all_ok = False return all_ok if __name__=='__main__': make_all(sys.argv[1:])