diff --git a/winbuild/build_prepare.py b/winbuild/build_prepare.py index 8d0ad9b80..454d80f41 100644 --- a/winbuild/build_prepare.py +++ b/winbuild/build_prepare.py @@ -51,7 +51,6 @@ header = [ cmd_set("INCLIB", "{lib_dir}"), cmd_set("LIB", "{lib_dir}"), cmd_append("PATH", "{bin_dir}"), - "@echo on", ] # dependencies @@ -124,14 +123,14 @@ deps = { "name": "freetype", "url": "https://download.savannah.gnu.org/releases/freetype/freetype-2.10.1.tar.gz", # noqa: E501 "filename": "freetype-2.10.1.tar.gz", + "patch": { + r"builds\windows\vc2010\freetype.vcxproj": { + # freetype setting is /MD for .dll and /MT for .lib, we need /MD + "MultiThreaded": "MultiThreadedDLL", + }, + }, "build": [ cmd_rmdir("objs"), - # freetype setting is /MD for .dll and /MT for .lib, we need /MD - cmd_patch_replace( - r"builds\windows\vc2010\freetype.vcxproj", - "MultiThreaded<", - "MultiThreadedDLL<" - ), cmd_msbuild(r"builds\windows\vc2010\freetype.sln", "Release Static", "Clean"), # TODO failing on GHA # noqa: E501 cmd_msbuild(r"builds\windows\vc2010\freetype.sln", "Release Static", "Build"), cmd_xcopy("include", "{inc_dir}"), @@ -141,15 +140,21 @@ deps = { }, "lcms2-2.9": { "name": "lcms2", - "url": SF_MIRROR + "/project/lcms/lcms/2.8/lcms2-2.9.tar.gz", + "url": SF_MIRROR + "/project/lcms/lcms/2.9/lcms2-2.9.tar.gz", "filename": "lcms2-2.9.tar.gz", + "patch": { + r"Projects\VC2017\lcms2_static\lcms2_static.vcxproj": { + # lcms2-2.8\VC2015 setting is /MD for x86 and /MT for x64, we need /MD always + "MultiThreaded": "MultiThreadedDLL", + # retarget to default msvc + "v141": "$(DefaultPlatformToolset)", + # retarget to latest SDK 10.0 + "8.1": "10.0", + }, + }, "build": [ cmd_rmdir("Lib"), cmd_rmdir(r"Projects\VC{vs_ver}\Release"), - # lcms2-2.8\VC2015 setting is /MD for x86 and /MT for x64, we need /MD always - cmd_patch_replace( - r"Projects\VC2017\lcms2.sln", "MultiThreaded<", "MultiThreadedDLL<" - ), cmd_msbuild(r"Projects\VC{vs_ver}\lcms2.sln", "Release", "Clean"), cmd_msbuild(r"Projects\VC{vs_ver}\lcms2.sln", "Release", "lcms2_static"), cmd_xcopy("include", "{inc_dir}"), @@ -337,8 +342,17 @@ def build_dep(name): extract_dep(dep["url"], dep["filename"]) + for patch_file, patch_list in dep.get("patch", {}).items(): + patch_file = os.path.join(build_dir, name, patch_file) + with open(patch_file, "r") as f: + text = f.read() + for patch_from, patch_to in patch_list.items(): + text = text.replace(patch_from, patch_to) + with open(patch_file, "w") as f: + f.write(text) + lines = [ - "echo Building {name} ({dir})...".format(name=dep["name"], dir=name), + "@echo Building {name} ({dir})...".format(name=dep["name"], dir=name), "cd /D %s" % os.path.join(build_dir, name), *prefs["header"], *dep.get("build", []), @@ -444,7 +458,7 @@ if __name__ == "__main__": dicts = [vs2017, arch_prefs, python_prefs, config] for x in dicts: prefs.update(x) - prefs["header"] = sum((x.get("header", []) for x in dicts), header) + prefs["header"] = sum((x.get("header", []) for x in dicts), header) + ["@echo on"] del prefs["name"] build_dep_all() diff --git a/winbuild/commands.py b/winbuild/commands.py index 2fbbc9b1a..f78a596f1 100644 --- a/winbuild/commands.py +++ b/winbuild/commands.py @@ -94,18 +94,3 @@ def cmd_msbuild( "/m", ] ).format(**locals()) - - -# patch tools - - -def cmd_patch_replace(file, src, dst): - return " ".join( - [ - "echo", - "(Get-Content '{file}')", - '-replace "{src}", "{dst}"', - "^| Out-File -encoding ASCII '{file}'", - "> temp.ps1\r\npowershell .\\temp.ps1", - ] - ).format(**locals())