package("easyhook") set_homepage("https://easyhook.github.io") set_description("EasyHook - The reinvention of Windows API Hooking") set_license("MIT") add_urls("https://github.com/EasyHook/EasyHook/archive/refs/tags/$(version).tar.gz", {version = function (version) return version:gsub("%+", ".") end}) add_urls("https://github.com/EasyHook/EasyHook.git") add_versions("v2.7.7097+0", "d0a9f0026c2939234d6cb086a64234ad90ff5eb574fc09dd5d6e0b32e72221d1") add_patches("v2.7.7097+0", "patches/v2.7.7097+0/fix-build.patch", "b11b0dd74a224f23530ba1b8fe3c210d62f946868a67d0a07afba5501d572abb") add_configs("shared", {description = "Build shared library.", default = true, type = "boolean", readonly = true}) add_syslinks("psapi", "Aux_ulib") on_install("windows|!arm*", function (package) import("package.tools.msbuild") -- Debundle os.rm("EasyHookDll/AUX_ULIB_x64.LIB", "EasyHookDll/AUX_ULIB_x86.LIB") io.replace("EasyHookDll/EasyHookDll.vcxproj", "Aux_ulib_x86.lib", "Aux_ulib.lib", {plain = true}) io.replace("EasyHookDll/EasyHookDll.vcxproj", "Aux_ulib_x64.lib", "Aux_ulib.lib", {plain = true}) os.cp("Public/easyhook.h", package:installdir("include")) local arch = package:is_arch("x64") and "x64" or "Win32" if not package:has_runtime("MT", "MTd") then -- Allow MD, MDd io.replace("EasyHookDll/EasyHookDll.vcxproj", "MultiThreadedDebug", "MultiThreadedDebugDLL", {plain = true}) io.replace("EasyHookDll/EasyHookDll.vcxproj", "MultiThreaded", "MultiThreadedDLL", {plain = true}) end local mode = package:is_debug() and "netfx4-Debug" or "netfx4-Release" local configs = { "EasyHook.sln" } table.insert(configs, "/t:EasyHookDll") table.insert(configs, "/p:Configuration=" .. mode) table.insert(configs, "/p:Platform=" .. arch) table.insert(configs, "/p:BuildProjectReferences=false") msbuild.build(package, configs) os.cp("Build/*/*/**.lib", package:installdir("lib")) os.cp("Build/*/*/**.dll", package:installdir("bin")) end) on_test(function (package) assert(package:has_cfuncs("LhUpdateModuleInformation", {includes = "easyhook.h"})) end)