import os,re,glob #---------------------------------# # removefilespattern # #---------------------------------# def removefilespattern(dir,pat): for f in glob.glob(dir+'/'+pat): os.popen('rm '+f) return ################################### #---------------------------------# # parsedir # #---------------------------------# def parsedir(startDir): directories = [startDir] dir = [startDir] while len(directories)>0: directory = directories.pop() for name in os.listdir(directory): fullpath = os.path.join(directory,name) if os.path.isdir(fullpath): directories.append(fullpath) # It's a directory, store it. dir.append(fullpath) return dir ################################### #---------------------------------# # parsedirabs # #---------------------------------# def parsedirabs(startDir): directories = [startDir] dir = [os.path.abspath(startDir)] while len(directories)>0: directory = directories.pop() for name in os.listdir(directory): fullpath = os.path.join(directory,name) if os.path.isdir(fullpath): directories.append(fullpath) # It's a directory, store it. dir.append(os.path.abspath(fullpath)) return dir ################################### #---------------------------------# # dirdepth # #---------------------------------# def dirdepth(dir): p = re.compile('[a-z]+') print p.search(dir) return ################################### #---------------------------------# # parsefiles # #---------------------------------# def parsefiles(dir): file = [] for name in os.listdir(dir): fullpath = os.path.join(dir,name) if os.path.isfile(fullpath) == True and os.path.isdir(fullpath) == False: file.append(name) return file ################################### #---------------------------------# # parsedirpat # #---------------------------------# def parsedirpat(dir,pat): file = [] for name in glob.glob(dir+'/'+pat): file.append(name) return file ################################### #---------------------------------# # VARS # #---------------------------------# #Dont Change libfile = 'libModules.a' #Change if needed gdc = '/opt/gdc/bin/gdc' ar = '/usr/bin/ar' projecthome = '/home/fmanuel/projects/test/' #Absolute targetentrypoint = '/home/fmanuel/projects/test/main.d' ################################### ################################### #---------------------------------# # cmd0 # #---------------------------------# def cmd0(inp,out): cmd = gdc+' -c '+inp+'.d -o '+out+'.o -I '+projecthome os.popen(cmd) return cmd ################################### #---------------------------------# # cmd1 # #---------------------------------# def cmd1(inp): cmd = ar+' rcs '+libfile+' '+inp os.popen(cmd) return cmd ################################### #---------------------------------# # cmd2 # #---------------------------------# def cmd2(main,target): cmd = gdc+' '+main+' -o '+target+' -I '+projecthome+' -L '+projecthome+' -lModules' os.popen(cmd) return cmd ################################### removefilespattern(projecthome+"/",'*.a') # Build object files on every dir objfiles = [] for d in parsedirabs(projecthome): removefilespattern(d,'*.o') print "DIR: "+d files = parsedirpat(d,'*.d') for f in files: if f <> targetentrypoint: nf = os.path.splitext(f) print cmd0(nf[0],nf[0]) objfiles.append(nf[0]+".o") str = ' ' objfiles_str = str.join(objfiles) print cmd1(objfiles_str) print cmd2('main.d','main')