--!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 installcmd.lua -- -- imports import("core.project.config") -- get dotnet program function _get_dotnet(target) return target:tool("cs") or "dotnet" end -- get build configuration from mode function _get_configuration() local mode = config.mode() or "release" if mode:lower() == "debug" then return "Debug" end return "Release" end -- install csharp target for xpack using dotnet publish function main(target, batchcmds, opt) local package = opt.package if not package then return end local installdir = package:installdir() if not installdir then return end -- get output directory based on target kind -- on windows, shared libraries (dll) should also go to bindir local outputdir if target:is_binary() or (target:is_shared() and target:is_plat("windows", "mingw")) then outputdir = package:installdir("bin") else outputdir = package:installdir("lib") end -- run dotnet publish to a temporary publish directory, then copy to install directory local publishdir = path.join(target:autogendir(), "rules", "csharp", "publish") local csprojfile = target:data("csharp.csproj") local argv = {"publish"} if csprojfile then table.insert(argv, csprojfile) end table.join2(argv, {"--nologo", "--configuration", _get_configuration(), "--output", publishdir}) local dotnet = _get_dotnet(target) batchcmds:vrunv(dotnet, argv) -- copy published files to output directory batchcmds:mkdir(outputdir) batchcmds:cp(path.join(publishdir, "**"), outputdir, {rootdir = publishdir}) -- install extra files (add_installfiles) local srcfiles, dstfiles = target:installfiles(installdir) if srcfiles and dstfiles then for idx, srcfile in ipairs(srcfiles) do batchcmds:cp(srcfile, dstfiles[idx]) end end end