#!/usr/bin/python import os, sys, shutil, re, textwrap COMPILER = "i586-pc-msdosdjgpp-gcc" SRC_DIR = "src" BIN_DIR = "bin" BIN_NAME = "love.exe" EMBED_DIR = "src/embed" TEMPSRC_DIR = ".tempsrc" CFLAGS = ["-O2", "-Wall", "-s", "-Wno-misleading-indentation"] DLIBS = ["m"] DEFINES = ["DMT_ABORT_NULL", "LUA_COMPAT_ALL"] INCLUDES = ["src", TEMPSRC_DIR] def fmt(fmt, var): for k in var: fmt = fmt.replace("{%s}" % str(k), var[k]) return fmt def listdir(path): return [os.path.join(dp, f) for dp, dn, fn in os.walk(path) for f in fn] def make_c_include(name, data): name = re.sub("[^a-z0-9]", "_", name.lower()) res = "static const char " + name + "[] = {" for c in data: res += str(ord(c)) + ", " res = res.rstrip(", ") + "};" return name, textwrap.fill(res, width=79) def main(): os.chdir(sys.path[0]) if not os.path.exists(BIN_DIR): os.makedirs(BIN_DIR) if not os.path.exists(TEMPSRC_DIR): os.makedirs(TEMPSRC_DIR) embedded_files = listdir(EMBED_DIR) for filename in embedded_files: name = os.path.basename(filename) name, text = make_c_include(name, open(filename).read()) open("%s/%s.h" % (TEMPSRC_DIR, name), "wb").write(text) cfiles = filter(lambda x: x.endswith((".c", ".C")), listdir(SRC_DIR)) cmd = fmt( "{compiler} {flags} {defines} {includes} -o {outfile} {srcfiles} {libs} {argv}", { "compiler": COMPILER, "flags": " ".join(CFLAGS), "defines": " ".join(map(lambda x: "-D " + x, DEFINES)), "includes": " ".join(map(lambda x: "-I " + x, INCLUDES)), "outfile": BIN_DIR + "/" + BIN_NAME, "srcfiles": " ".join(cfiles), "libs": " ".join(map(lambda x: "-l" + x, DLIBS)), "argv": " ".join(sys.argv[1:]), }, ) print("compiling...") print(" {}".format(cmd)) res = os.system(cmd) print("deleting temporary files...") if os.path.exists(TEMPSRC_DIR): shutil.rmtree(TEMPSRC_DIR) print("done" + (" with errors" if res else "")) if __name__ == "__main__": main()