+# -*- coding:utf-8 -*-
+
+# generate pyinstaller's spec file & modify .spec file
+# 2013/12/07 written by kei9
+
+import subprocess
+import tempfile
+import os
+import os.path
+import shutil
+
+BUNDLE_RESOURCES = [(r"view/mainframe.xrc", r"d:\\Git\\AmuletToolsMH4\\view\\mainframe.xrc"),
+ (r"view/gaugedialog.xrc", r"d:\\Git\\AmuletToolsMH4\\view\\gaugedialog.xrc")]
+MOVE_FILES = ["data.zip", "readme.txt"]
+
+
+SCRIPTFILE = "amulettool.py"
+APPNAME = "AmuletToolsMH4"
+
+MAKESPEC = "pyi-makespec"
+PYINSTALLER = "pyinstaller"
+
+SPECOPTIONS = ["--onefile", "--windowed", "--name=" + APPNAME]
+
+def get_insert_lines():
+ result = []
+ for item in BUNDLE_RESOURCES:
+ result.append(r'a.datas += [("{0}", "{1}", "DATA")]'.format(item[0], item[1]) + "\n")
+ return result
+
+if __name__ == "__main__":
+ cmd = [MAKESPEC] + SPECOPTIONS + [SCRIPTFILE]
+ print " ".join(cmd)
+ out = subprocess.check_output(cmd)
+ print out
+
+ # insert bundle data line to .spec
+ print "insert bundle resources to .spec file"
+ specfile = APPNAME + ".spec"
+ with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
+ tmpname = tmp_file.name
+ with open(specfile, "r") as f:
+ for line in f:
+ if line.startswith("pyz"):
+ for l in get_insert_lines():
+ tmp_file.write(l)
+ tmp_file.write(line)
+
+ os.remove(specfile)
+ os.rename(tmpname, specfile)
+
+ # conduct pyinstall
+ cmd = [PYINSTALLER, specfile]
+ print " ".join(cmd)
+ out = subprocess.check_output(cmd)
+ print out
+
+ # copy file to dist
+ file_dir = os.path.dirname(os.path.abspath(__file__))
+ for f in MOVE_FILES:
+ abs_path = os.path.abspath(f)
+ relative_path = os.path.relpath(abs_path, file_dir)
+ shutil.copy(abs_path, os.path.join("dist", relative_path))
+
+ print "Finished"