2010年11月26日

[CMake] 將 AutoTools 的 config.h.in 轉成 CMake 用的

AutoTools 常用的 config.h.in 若要轉成給 CMake 用的, 其實可以先用 script 粗略轉過. 例如下面的 ACConfig2CMakeConfig:



import sys
import getopt

def ACConfig2CMakeConfig(fNameIn = './config.h.in',
                         fNameOut = './config.h_cmake.in'):
    f_ac = open(fNameIn, 'r')
    f_cmake = open(fNameOut, 'w')

    for line in f_ac:
        #print line,
        item = line.split()
        if (len(item) > 1):
            if (item[0] == '#undef'):
                f_cmake.write("#cmakedefine ")
                f_cmake.write(item[1])
                f_cmake.write(" @")
                f_cmake.write(item[1])
                f_cmake.write("@\n")
            else:
                f_cmake.write(line)
        else:
            f_cmake.write(line)

    f_ac.close()
    f_cmake.close()


class Usage(Exception):
    def __init__(self, msg):
        self.msg = msg


def main(argv=None):
    if argv is None:
        argv = sys.argv
    try:
        try:
            opts, args = getopt.getopt(argv[1:], "h", ["help"])
        except getopt.error, msg:
             raise Usage(msg)
        if len(args) == 2:
            ACConfig2CMakeConfig(args[0], args[1])
        elif len(args) == 1:
            #raise Usage(argv[0] + " fileName_in fileName_out")
            print >>sys.stderr,  "Usage: " + argv[0] + " fileName_in fileName_out"
            print >>sys.stderr,  "Default: " + args[0] + " -> ./config.h_cmake.in"
            ACConfig2CMakeConfig(args[0])
        else:
            #raise Usage(argv[0] + " fileName_in fileName_out")
            print >>sys.stderr,  "Usage: " + argv[0] + " fileName_in fileName_out"
            print >>sys.stderr,  "Default: ./config.h.in -> ./config.h_cmake.in"
            ACConfig2CMakeConfig()
    except Usage, err:
        print >>sys.stderr, err.msg
        print >>sys.stderr, "for help use --help"
        return 2


if __name__ == "__main__":
    sys.exit(main())

沒有留言: