#! /usr/bin/env python import os import signal import sys class GLOBALS: def __init__ (self): self.pri = os.environ.get ("SRT_PRIVATE_CONTEXT") self.pub = os.environ.get ("SRT_PUBLIC_CONTEXT") self.srt_subdir = os.environ.get ("SRT_SUBDIR") self.arch = "" if len(sys.argv) > 1: self.arch = sys.argv[1] if self.arch == "": self.arch = self.srt_subdir self.archdirs = ["bin", "shbin", "codegen", "lib", "shlib", "rcpdb", "results", "tmp"] self.verbose = 0 if self.verbose: print "globals.pri:", self.pri print "globals.pub:", self.pub print "globals.srt_subdir:", self.srt_subdir print "globals.arch:", self.arch class SYSTEM: def __init__ (self): global globals globals = GLOBALS () # ignore hangups signal.signal (signal.SIGHUP, signal.SIG_IGN) def run (self): dir_trim_pos = len (globals.pub) curdir = globals.pub dirstack = [curdir] lst = os.listdir (curdir) lst.sort () filestack = [lst] if globals.arch == "NULL": printflgstack = [1] else: printflgstack = [0] level = 1 while len (dirstack): if globals.verbose: print "Unstacking ..." curdir = dirstack[-1] del dirstack[-1] lst = filestack[-1] del filestack[-1] printflg = printflgstack[-1] del printflgstack[-1] level = level - 1 archdir = 0 if (level == 1) and (os.path.basename (curdir) in globals.archdirs): archdir = 1 if globals.verbose: print "level:", level print "curdir:", curdir print "archdir:", archdir print "lst:", lst while len(lst): file = lst[0] del lst[0] fullname = os.path.join (curdir, file) islink = os.path.islink (fullname) isdir = os.path.isdir (fullname) # be very careful, must test for # a symbolic link before checking # for a directory if islink or (not isdir): if printflg: print "." + fullname[dir_trim_pos:] # We no longer need this. rcpdb is just like the others now # AMJ 22 Sept 05 # We must print the rcpdb symlinks in the bin tarfile. #if not printflg \ # and islink \ # and archdir \ # and (os.path.basename (curdir) == "rcpdb") \ # and (globals.arch != "NULL") and (globals.arch == file): # print "." + fullname[dir_trim_pos:] continue # We are handling a subdirectory from this point on. if archdir: if globals.arch == "NULL": continue if globals.arch != file: continue if globals.verbose: print "Stacking ..." dirstack.append(curdir) filestack.append(lst) printflgstack.append(printflg) if archdir: printflg = 1 level = level + 1 curdir = fullname archdir = 0 if (level == 1) and (os.path.basename (curdir) in globals.archdirs): archdir = 1 lst = os.listdir (curdir) lst.sort () if globals.verbose: print "level:", level print "curdir:", curdir print "archdir:", archdir print "lst:", lst if __name__ == "__main__": # we are a script top = SYSTEM () top.run () else: # we are a module global globals globals = GLOBALS () # ignore hangups signal.signal (signal.SIGHUP, signal.SIG_IGN)