X Tutup
# Copyright (c) 2012-2014 The CEF Python authors. All rights reserved. # License: New BSD License. # Website: http://code.google.com/p/cefpython/ # Compile cefptython.rc to a .res object. # In setup.py the .res object is added to Extension."extra_objects". import os import sys import re import subprocess import shutil PYVERSION = str(sys.version_info[0])+str(sys.version_info[1]) # eg. "27" RC_EXE = r"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\rc.exe" RC_FILE = os.path.abspath(r"../cefpython.rc") RES_FILE_OUT = os.path.abspath(r"../cefpython.res") RES_FILE_MOVE = os.path.abspath(r"./cefpython.res") RC_PYD_NAME = r"cefpython_py27.pyd" def log(msg): print("[compile_rc.py] %s" % str(msg)) def main(): # Arguments if len(sys.argv) == 3 \ and sys.argv[1] == "-v" \ and re.search(r"^\d+\.\d+$", sys.argv[2]): version = sys.argv[2] else: log("Invalid version string or missing. Usage: compile_rc.py -v 31.0") exit(1) # Print paths log("version="+version) log("PYVERSION="+PYVERSION) log("RC_EXE="+RC_EXE) log("RC_FILE="+RC_FILE) log("RES_FILE_OUT="+RES_FILE_OUT) log("RES_FILE_MOVE="+RES_FILE_MOVE) log("RC_PYD_NAME="+RC_PYD_NAME) # Check paths assert os.path.exists(RC_EXE) assert os.path.exists(RC_FILE) # Change version numbers in .rc file with open(RC_FILE, "r") as f: contents = f.read() # FILEVERSION 31,1,0,0 # "FileVersion", "31.1.0.0" (contents, subn) = re.subn( r"\d+\.\d+\.\d+\.\d+", r"%s.0.0" % version, contents) assert subn == 2, "Replacing dots versions failed (rc file)" version_commas = re.sub(r"\.", r",", version) (contents, subn) = re.subn( r"\d+,\d+,\d+,\d+", r"%s,0,0" % version_commas, contents) assert subn == 2, "Replacing commas verions failed (rc file)" # Change pyd module name in .rc assert contents.find(RC_PYD_NAME) != -1, "pyd file name not found in .rc" assert RC_PYD_NAME.find("py27") != -1, "invalid pyd file name defined" new_pyd_name = RC_PYD_NAME.replace("py27", "py"+PYVERSION) contents = contents.replace(RC_PYD_NAME, new_pyd_name) # Save modified .rc file log("Saving modified %s" % RC_FILE) with open(RC_FILE, "w") as f: f.write(contents) log("Calling rc.exe to compile .rc file") # rc.exe usage: rc.exe /x file.rc # /x - ignore INCLUDE environment variable exit_status = subprocess.call([ RC_EXE, "/x", RC_FILE, ], shell=True) if exit_status != 0: raise Exception("Calling rc.exe failed") log("Moving .res object to setup/") shutil.move(RES_FILE_OUT, RES_FILE_MOVE) if __name__ == '__main__': main()
X Tutup