--!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, Xmake Open Source Community. -- -- @author ruki -- @file config.lua -- -- imports import("core.project.depend") import("generator.csproj", {rootdir = os.scriptdir(), alias = "generate_csproj"}) function main(target) -- compute csproj path local csprojfile = path.join(target:autogendir(), "rules", "csharp", target:name() .. ".csproj") local dependfile = target:dependfile(csprojfile) -- collect source files and dep csproj paths as depend values local sourcefiles = target:sourcefiles() local depcsproj = {} for _, dep in ipairs(target:orderdeps()) do local depcsproj_path = dep:data("csharp.csproj") if depcsproj_path then table.insert(depcsproj, depcsproj_path) end end -- generate csproj incrementally depend.on_changed(function () generate_csproj(target, csprojfile) end, {dependfile = dependfile, files = sourcefiles, values = depcsproj}) target:data_set("csharp.csproj", csprojfile) -- add native shared library search paths for P/Invoke for _, dep in ipairs(target:orderdeps()) do if dep:is_shared() and not dep:rule("csharp.build") then if is_host("windows") then target:add("runenvs", "PATH", dep:targetdir()) elseif is_host("macosx") then target:add("runenvs", "DYLD_LIBRARY_PATH", dep:targetdir()) else target:add("runenvs", "LD_LIBRARY_PATH", dep:targetdir()) end end end end