--!A cross-platform build utility based on Lua -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- http://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. -- -- Copyright (C) 2015-present, TBOOX Open Source Group. -- -- @author ruki -- @file xmake.lua -- -- @see https://github.com/xmake-io/xmake/issues/1896 rule("python.library") on_config(function (target) target:set("kind", "shared") target:set("prefixname", "") local soabi = target:extraconf("rules", "python.library", "soabi") if soabi then import("lib.detect.find_tool") local python = assert(find_tool("python3"), "python not found!") local result = try { function() return os.iorunv(python.program, {"-c", "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))"}) end} if result then result = result:trim() if result ~= "None" then target:set("extension", result) end end else if target:is_plat("windows") then target:set("extension", ".pyd") end end -- fix segmentation fault for macosx -- @see https://github.com/xmake-io/xmake/issues/2177#issuecomment-1209398292 if target:is_plat("macosx") then target:add("shflags", "-undefined dynamic_lookup", {force = true}) local pybind11 = target:pkg("pybind11") if pybind11 then local links = pybind11:get("links") if links then local links_without_python = {} for _, link in ipairs(links) do if not link:startswith("python") then table.insert(links_without_python, link) end end pybind11:set("links", links_without_python) end end end end)