#!/usr/bin/env python
import getopt, sys, os
from stat import *

def usage():
    print "Usage: " + sys.argv[0] + "[-f] [-d] [-c] [file1.fsm] [file2.fsm] ..."
    print "   -f (--force): force remake of finite state machine"
    print "   -d (--debug): include debug output into generated text"
    print "   -v (--verbose): include debug output into generated text"
    print "   -c (--fsmc): file name for fsmc compiler"

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], "fdvc:", ["force", "debug", "verbose", "fsmc="])
    except getopt.GetoptError:
        # print help information and exit:
        usage()
        sys.exit( 2 )
        
    debug = None
    verbose = None
    force = None
    fsmc = "fsmc"

    for o,a in opts:
        if o in ("-d", "--debug"):
            debug = 1
        if o in ("-v", "--verbose"):
            verbose = 1
        if o in ("-f", "--force"):
            force = 1
        if o in ("-c", "--fsmc" ):
            fsmc = a

##     if debug:
##         print "Debug"
##     if verbose:
##         print "Verbose"
##     if force:
##         print "Force"
    
    if not args:
        try:
            args = os.listdir( os.getcwd() )
        except OSError, (errno, strerror):
            if verbose: print "No automatas to generate: " + strerror
            sys.exit( 2 )
    for i in args:
        root, ext = os.path.splitext(i)
        if ext == ".fsm":
            make_header = fsmc + " " + i + " -o " + root + ".h"
            make_body   = fsmc + " " + i + " -i " + root + ".h -o " + root + ".cpp"
            if debug:
                make_header += " -d"
                make_body   += " -d"

            if force or not os.access(root + ".h", os.F_OK) or (os.stat(i)[ST_MTIME] > os.stat(root + ".h")[ST_MTIME]):
                if verbose: print make_header
                os.system( make_header )

            if force or not os.access(root + ".cpp", os.F_OK) or (os.stat(i)[ST_MTIME] > os.stat(root + ".cpp")[ST_MTIME]):
                if verbose: print make_body
                os.system( make_body   )
        
if __name__ == "__main__":
    main()
