view codeOptimizer.py @ 0:28b636105ed6

Working version of codeOptimizer. -Still needs to implement more finegrained control per file basis. -CXXFLAGS are hardcoded.
author Tom Fredrik Blenning Klaussen <bfg@blenning.no>
date Sat, 15 Sep 2012 20:34:39 +0200
parents
children a1224150b8f6
line wrap: on
line source

#!/usr/bin/env python -O

import sys, string, os, subprocess

from Compilable import Compilable
from DepGraph import DepGraph



def isHppfile(name):
    if name.endswith(".hpp"):
        return True
    if name.endswith(".h"):
        return True
    return False

def isCppfile(name):
    if name.endswith(".cpp"):
        return True
    return False


infiles = sys.argv[1:]

cppfiles = {}
unknown = []

flags = '-DHAS_BOOST -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_XML_LIB -DQT_SQL_LIB -O3 -Wall -I/opt/local/include -I/Users/bfg/QtSDK/Desktop/Qt/4.8.1/gcc/include -F/Users/bfg/QtSDK/Desktop/Qt/4.8.1/gcc/lib -I/Users/bfg/QtSDK/Desktop/Qt/4.8.1/gcc/include/QtOpenGL -I/Users/bfg/QtSDK/Desktop/Qt/4.8.1/gcc/include/QtXml -I/Users/bfg/QtSDK/Desktop/Qt/4.8.1/gcc/include/QtSql -I/Users/bfg/projects/dedupe'

for file in infiles:
    if isHppfile(file) or isCppfile(file):
        c = Compilable(file)
        c.setFlags(flags)
        cppfiles[file] = c
    else:
        unknown.append(file)

if len(unknown) > 0:
    str = ", "
    raise SystemExit(str.join(unknown)  + " are of unknown filetype")

files = cppfiles

depgraph = DepGraph()

for file in files:
    depgraph.add(files[file])

for file in files:
    depgraph.addDependency(files[file], files[file].dependencies())

files = depgraph.directedGraph()

for file in files:
    if not file.worksWithoutModifications():
        print file.path
        raise SystemExit(str.join(file.path)  + " does not compile at all")

for file in files:
    removable = file.removeRemovableIncludes()
    if removable:
        print 'Removable lines in ' + file.path
        for r in removable:
            print str(r) + ' : ' + file.lines[r].rstrip()
            
    replacable = file.replaceIncludes()
    if replacable:
        print 'Replacable lines in ' + file.path
        for r in replacable:
            print str(r) + ' : ' + file.lines[r].rstrip()