X Tutup
# Copyright (c) 2012-2014 The CEF Python authors. All rights reserved. # License: New BSD License. # Website: http://code.google.com/p/cefpython/ # Create a setup package. import sys import os import re import platform import shutil import glob import sysconfig import subprocess import struct PACKAGE_NAME = "cefpython3" # Bits BITS = platform.architecture()[0] assert (BITS == "32bit" or BITS == "64bit") if BITS == "32bit": LINUX_BITS = "linux32" else: LINUX_BITS = "linux64" # Architecture and OS postfixes ARCH32 = (8 * struct.calcsize('P') == 32) ARCH64 = (8 * struct.calcsize('P') == 64) OS_POSTFIX = ("win" if platform.system() == "Windows" else "linux" if platform.system() == "Linux" else "mac" if platform.system() == "Darwin" else "unknown") OS_POSTFIX2 = "unknown" if OS_POSTFIX == "win": OS_POSTFIX2 = "win32" if ARCH32 else "win64" elif OS_POSTFIX == "mac": OS_POSTFIX2 = "mac32" if ARCH32 else "mac64" elif OS_POSTFIX == "linux": OS_POSTFIX2 = "linux32" if ARCH32 else "linux64" # Directories INSTALLER_DIR = os.path.dirname(os.path.abspath(__file__)) LINUX_DIR = os.path.abspath(os.path.join(INSTALLER_DIR, "..")) SRC_DIR = os.path.abspath(os.path.join(LINUX_DIR, "..")) CEFPYTHON_DIR = os.path.abspath(os.path.join(SRC_DIR, "..")) BUILD_DIR = os.path.abspath(os.path.join(CEFPYTHON_DIR, "build")) CEF_BINARY = os.path.abspath(os.path.join(BUILD_DIR, "cef_"+OS_POSTFIX2)) CEFPYTHON_BINARY = os.path.abspath(os.path.join(BUILD_DIR, "cefpython_"+OS_POSTFIX2)) # Check directories assert os.path.exists(CEF_BINARY) assert os.path.exists(CEFPYTHON_BINARY) README_FILE = os.getcwd()+r"/README.txt" INIT_TEMPLATE = os.getcwd()+r"/__init__.py.template" SETUP_TEMPLATE = os.getcwd()+r"/setup.py.template" # SETUP_CFG_TEMPLATE = os.getcwd()+r"/setup.cfg.template" def str_format(string, dictionary): orig_string = string for key, value in dictionary.items(): string = string.replace("%("+key+")s", value) if string == orig_string: raise Exception("Nothing to format") if re.search(r"%\([a-zA-Z0-9_]+\)s", string): raise Exception("Not all strings formatted") return string def main(): args = ' '.join(sys.argv) match = re.search(r"\d+\.\d+", args) if match: version = match.group(0) else: print("Usage make-setup.py {version}") sys.exit(1) template_vars = dict() template_vars["APP_VERSION"] = version template_vars["PLATFORM"] = sysconfig.get_platform() template_vars["PY_VERSION_DIGITS_ONLY"] = ( str(sys.version_info.major) + str(sys.version_info.minor)) # e.g. "27" or "34" print("Reading template: %s" % README_FILE) f = open(README_FILE) README_CONTENT = f.read() f.close() print("Reading template: %s" % INIT_TEMPLATE) f = open(INIT_TEMPLATE) INIT_CONTENT = str_format(f.read(), template_vars) f.close() print("Reading template: %s" % SETUP_TEMPLATE) f = open(SETUP_TEMPLATE) SETUP_CONTENT = str_format(f.read(), template_vars) f.close() # print("Reading template: %s" % SETUP_CFG_TEMPLATE) # f = open(SETUP_CFG_TEMPLATE) # SETUP_CFG_CONTENT = str_format(f.read(), template_vars) # f.close() setup_dir = (INSTALLER_DIR + "/" + PACKAGE_NAME+"-" + template_vars["APP_VERSION"] + "-" + OS_POSTFIX2 + "-setup") print("Creating setup dir: "+setup_dir) os.mkdir(setup_dir) package_dir = setup_dir+"/"+PACKAGE_NAME print("Creating package dir") os.mkdir(package_dir) print("Copying License file") shutil.copy("../../../License", package_dir) print("Creating README.txt from template") with open(setup_dir+"/README.txt", "w") as f: f.write(README_CONTENT) print("Creating setup.py from template") with open(setup_dir+"/setup.py", "w") as f: f.write(SETUP_CONTENT) # print("Creating setup.cfg from template") # with open(setup_dir+"/setup.cfg", "w") as f: # f.write(SETUP_CFG_CONTENT) print("Copying binaries to package dir") # Copy Kivy old_binaries_dir = os.path.abspath(INSTALLER_DIR+"/../binaries_"+BITS+"/") ret = os.system("cp -rf "+old_binaries_dir+"/kivy_.py "+package_dir) assert ret == 0 ret = os.system("cp -rf "+old_binaries_dir+"/kivy-select-boxes/ " + package_dir) assert ret == 0 # Copy binaries ret = os.system("cp -rf "+CEF_BINARY+"/*.txt "+package_dir) assert ret == 0 ret = os.system("cp -rf "+CEF_BINARY+"/bin/* "+package_dir) assert ret == 0 ret = os.system("cp -rf "+CEFPYTHON_BINARY+"/* "+package_dir) assert ret == 0 os.chdir(package_dir) print("Removing .log files from the package dir") os.system("rm *.log") # assert ret == 0 - if there are no .log files this assert would fail. os.chdir(INSTALLER_DIR) print("Creating __init__.py from template") with open(package_dir+"/__init__.py", "w") as f: f.write(INIT_CONTENT) print("Creating examples dir in package dir") os.mkdir(package_dir+"/examples/") print("Copying root examples/ directory") ret = os.system("rm ../../../examples/*.log") ret = os.system("cp -r ../../../examples/* "+package_dir+"/examples/") assert ret == 0 print("Moving kivy-select-boxes dir to examples dir") assert os.path.exists(package_dir+"/kivy-select-boxes") shutil.move(package_dir+"/kivy-select-boxes", package_dir+"/examples/kivy-select-boxes") print("Creating wx dir in package dir") os.mkdir(package_dir+"/wx/") print("Moving example scripts from package dir to examples dir") examples = glob.glob(package_dir+"/*.py") for example in examples: # Ignore: cefpython_py27.py - dummy API script if os.path.basename(example).startswith("cefpython_"): continue # Ignore: __init__.py if os.path.basename(example).startswith("__"): continue os.rename(example, package_dir+"/examples/"+os.path.basename(example)) ret = os.system("mv "+package_dir+"/*.html "+package_dir+"/examples/") # assert ret == 0 ret = os.system("mv "+package_dir+"/*.js "+package_dir+"/examples/") # assert ret == 0 ret = os.system("mv "+package_dir+"/*.css "+package_dir+"/examples/") # assert ret == 0 print("Copying wx/ to package dir") wx_subpackage_dir = os.path.abspath(INSTALLER_DIR+"/../../cefpython3.wx/") ret = os.system("cp -rf " + wx_subpackage_dir + "/* " + package_dir + "/wx/") assert ret == 0 # print("Moving wx examples from wx/examples to examples/wx") # shutil.move(package_dir+"/wx/examples", package_dir+"/wx/wx/") # shutil.move(package_dir+"/wx/wx/", package_dir+"/examples/") print("Copying package dir examples to setup dir") ret = os.system("cp -rf "+package_dir+"/examples/ "+setup_dir+"/examples/") assert ret == 0 # Create empty debug.log files so that package uninstalls cleanly # in case examples were launched. Issue 149. debug_log_dirs = [package_dir, package_dir+"/examples/", # package_dir+"/examples/wx/" ] for curdir in debug_log_dirs: print("Creating empty debug.log in %s" % curdir) with open(curdir+"/debug.log", "w") as f: f.write("") # Set write permissions so that Wheel package files have it # right. So that examples may be run from package directory. subprocess.call("chmod 666 %s/debug.log" % curdir, shell=True) print("Setup Package created successfully.") if __name__ == "__main__": main()
X Tutup