summaryrefslogtreecommitdiff
path: root/xmake/modules
diff options
context:
space:
mode:
authorruki <[email protected]>2021-09-16 20:55:57 +0800
committerGitHub <[email protected]>2021-09-16 20:55:57 +0800
commit388ee60e90ade5ff712314d96036bbb3e789a3ea (patch)
tree9ffed2624f209252129bb6052abea753941120ed /xmake/modules
parent646b616d40835ef4c882f15df1f15574af2cfe58 (diff)
parent8e41cd06d4f77d7a3f8544be7d719ea399412d93 (diff)
Merge pull request #1675 from xmake-io/mingw
improve mingw implib
Diffstat (limited to 'xmake/modules')
-rw-r--r--xmake/modules/core/tools/gcc.lua2
-rw-r--r--xmake/modules/core/tools/nvcc.lua4
-rw-r--r--xmake/modules/package/manager/apt/find_package.lua2
-rw-r--r--xmake/modules/package/manager/brew/find_package.lua4
-rw-r--r--xmake/modules/package/manager/conda/find_package.lua2
-rw-r--r--xmake/modules/package/manager/dub/find_package.lua2
-rw-r--r--xmake/modules/package/manager/pkgconfig/find_package.lua1
-rw-r--r--xmake/modules/package/manager/system/find_package.lua2
-rw-r--r--xmake/modules/package/manager/vcpkg/find_package.lua3
-rw-r--r--xmake/modules/package/manager/xmake/find_package.lua8
-rw-r--r--xmake/modules/target/action/install/windows.lua2
-rw-r--r--xmake/modules/target/action/uninstall/windows.lua2
12 files changed, 16 insertions, 18 deletions
diff --git a/xmake/modules/core/tools/gcc.lua b/xmake/modules/core/tools/gcc.lua
index 89b732ec9..713cd80aa 100644
--- a/xmake/modules/core/tools/gcc.lua
+++ b/xmake/modules/core/tools/gcc.lua
@@ -334,7 +334,7 @@ function linkargv(self, objectfiles, targetkind, targetfile, flags, opt)
-- add `-Wl,--out-implib,outputdir/libxxx.a` for xxx.dll on mingw/gcc
if targetkind == "shared" and is_plat("mingw") then
- table.insert(flags_extra, "-Wl,--out-implib," .. path.join(path.directory(targetfile), path.basename(targetfile) .. ".lib"))
+ table.insert(flags_extra, "-Wl,--out-implib," .. path.join(path.directory(targetfile), path.basename(targetfile) .. ".dll.a"))
end
-- init arguments
diff --git a/xmake/modules/core/tools/nvcc.lua b/xmake/modules/core/tools/nvcc.lua
index 1ca09401e..41093c502 100644
--- a/xmake/modules/core/tools/nvcc.lua
+++ b/xmake/modules/core/tools/nvcc.lua
@@ -259,9 +259,9 @@ function linkargv(self, objectfiles, targetkind, targetfile, flags)
end
-- add `-Wl,--out-implib,outputdir/libxxx.a` for xxx.dll on mingw/gcc
- if targetkind == "shared" and config.plat() == "mingw" then
+ if targetkind == "shared" and is_plat("mingw") then
table.insert(flags_extra, "-Xlinker")
- table.insert(flags_extra, "-Wl,--out-implib," .. path.join(path.directory(targetfile), path.basename(targetfile) .. ".lib"))
+ table.insert(flags_extra, "-Wl,--out-implib," .. path.join(path.directory(targetfile), path.basename(targetfile) .. ".dll.a"))
end
-- make link args
diff --git a/xmake/modules/package/manager/apt/find_package.lua b/xmake/modules/package/manager/apt/find_package.lua
index f27968c0e..3fee1034f 100644
--- a/xmake/modules/package/manager/apt/find_package.lua
+++ b/xmake/modules/package/manager/apt/find_package.lua
@@ -67,7 +67,7 @@ function main(name, opt)
result.linkdirs = result.linkdirs or {}
result.libfiles = result.libfiles or {}
table.insert(result.linkdirs, path.directory(line))
- table.insert(result.links, target.linkname(path.filename(line)))
+ table.insert(result.links, target.linkname(path.filename(line), {plat = opt.plat}))
table.insert(result.libfiles, path.join(path.directory(line), path.filename(line)))
end
end
diff --git a/xmake/modules/package/manager/brew/find_package.lua b/xmake/modules/package/manager/brew/find_package.lua
index 49db5a464..d5f679f7a 100644
--- a/xmake/modules/package/manager/brew/find_package.lua
+++ b/xmake/modules/package/manager/brew/find_package.lua
@@ -97,11 +97,11 @@ function main(name, opt)
if pkgdir then
local links = {}
for _, libfile in ipairs(os.files(path.join(pkgdir, "lib", "*.a"))) do
- table.insert(links, target.linkname(path.filename(libfile)))
+ table.insert(links, target.linkname(path.filename(libfile), {plat = opt.plat}))
end
for _, libfile in ipairs(os.files(path.join(pkgdir, "lib", opt.plat == "macosx" and "*.dylib" or "*.so"))) do
if not os.islink(libfile) then
- table.insert(links, target.linkname(path.filename(libfile)))
+ table.insert(links, target.linkname(path.filename(libfile), {plat = opt.plat}))
end
end
opt.links = links
diff --git a/xmake/modules/package/manager/conda/find_package.lua b/xmake/modules/package/manager/conda/find_package.lua
index 5d2634d63..747e1bc9b 100644
--- a/xmake/modules/package/manager/conda/find_package.lua
+++ b/xmake/modules/package/manager/conda/find_package.lua
@@ -124,7 +124,7 @@ function main(name, opt)
result.linkdirs = result.linkdirs or {}
result.libfiles = result.libfiles or {}
table.insert(result.linkdirs, path.join(packagedir, path.directory(line)))
- table.insert(result.links, target.linkname(path.filename(line)))
+ table.insert(result.links, target.linkname(path.filename(line), {plat = opt.plat}))
table.insert(result.libfiles, path.join(packagedir, path.directory(line), path.filename(line)))
end
diff --git a/xmake/modules/package/manager/dub/find_package.lua b/xmake/modules/package/manager/dub/find_package.lua
index 55ad2d6ef..8543a8bfb 100644
--- a/xmake/modules/package/manager/dub/find_package.lua
+++ b/xmake/modules/package/manager/dub/find_package.lua
@@ -67,7 +67,7 @@ function main(name, opt)
if pkgdir then
local links = {}
for _, libraryfile in ipairs(os.files(path.join(pkgdir, libpattern))) do
- table.insert(links, target.linkname(path.filename(libraryfile)))
+ table.insert(links, target.linkname(path.filename(libraryfile), {plat = opt.plat}))
end
local includedirs = {}
local dubjson = path.join(pkgdir, "dub.json")
diff --git a/xmake/modules/package/manager/pkgconfig/find_package.lua b/xmake/modules/package/manager/pkgconfig/find_package.lua
index a7dbf377a..ddc7efeb4 100644
--- a/xmake/modules/package/manager/pkgconfig/find_package.lua
+++ b/xmake/modules/package/manager/pkgconfig/find_package.lua
@@ -20,7 +20,6 @@
-- imports
import("lib.detect.pkgconfig")
-import("lib.detect.find_library")
import("package.manager.system.find_package", {alias = "find_package_from_system"})
-- find package from the pkg-config package manager
diff --git a/xmake/modules/package/manager/system/find_package.lua b/xmake/modules/package/manager/system/find_package.lua
index 9bb04566d..692241309 100644
--- a/xmake/modules/package/manager/system/find_package.lua
+++ b/xmake/modules/package/manager/system/find_package.lua
@@ -60,7 +60,7 @@ function _find_package_from_unixdirs(name, links, opt)
-- find library
local result = nil
for _, link in ipairs(links) do
- local libinfo = find_library(link, linkdirs)
+ local libinfo = find_library(link, linkdirs, {plat = opt.plat})
if libinfo then
result = result or {}
result.links = table.join(result.links or {}, libinfo.link)
diff --git a/xmake/modules/package/manager/vcpkg/find_package.lua b/xmake/modules/package/manager/vcpkg/find_package.lua
index e965ace73..8bb4de8e8 100644
--- a/xmake/modules/package/manager/vcpkg/find_package.lua
+++ b/xmake/modules/package/manager/vcpkg/find_package.lua
@@ -20,7 +20,6 @@
-- imports
import("lib.detect.find_file")
-import("lib.detect.find_library")
import("lib.detect.find_tool")
import("core.base.option")
import("core.project.config")
@@ -117,7 +116,7 @@ function main(name, opt)
result.linkdirs = result.linkdirs or {}
result.libfiles = result.libfiles or {}
table.insert(result.linkdirs, path.join(installdir, path.directory(line)))
- table.insert(result.links, target.linkname(path.filename(line)))
+ table.insert(result.links, target.linkname(path.filename(line), {plat = plat}))
table.insert(result.libfiles, path.join(installdir, path.directory(line), path.filename(line)))
end
end
diff --git a/xmake/modules/package/manager/xmake/find_package.lua b/xmake/modules/package/manager/xmake/find_package.lua
index 0b043cc2f..c594c8135 100644
--- a/xmake/modules/package/manager/xmake/find_package.lua
+++ b/xmake/modules/package/manager/xmake/find_package.lua
@@ -82,14 +82,14 @@ function _find_package_from_repo(name, opt)
for _, file in ipairs(os.files(path.join(installdir, libdir, "*"))) do
if file:endswith(".lib") or file:endswith(".a") then
found = true
- table.insert(links, target.linkname(path.filename(file)))
+ table.insert(links, target.linkname(path.filename(file), {plat = opt.plat}))
table.insert(libfiles, file)
end
end
if not found then
for _, file in ipairs(os.files(path.join(installdir, "lib", "*"))) do
if file:endswith(".so") or file:match(".+%.so%..+$") or file:endswith(".dylib") then -- maybe symlink to libxxx.so.1
- table.insert(links, target.linkname(path.filename(file)))
+ table.insert(links, target.linkname(path.filename(file), {plat = opt.plat}))
table.insert(libfiles, file)
end
end
@@ -124,7 +124,7 @@ function _find_package_from_repo(name, opt)
-- find library
for _, link in ipairs(links) do
- local libinfo = find_library(link, linkdirs)
+ local libinfo = find_library(link, linkdirs, {plat = opt.plat})
if libinfo then
if libinfo.kind == "shared" then
result.shared = true
@@ -241,7 +241,7 @@ function _find_package_from_packagedirs(name, opt)
-- find library
local result = nil
for _, link in ipairs(packageinfo:get("links")) do
- local libinfo = find_library(link, linkdirs)
+ local libinfo = find_library(link, linkdirs, {plat = opt.plat})
if libinfo then
result = result or {}
result.links = table.join(result.links or {}, libinfo.link)
diff --git a/xmake/modules/target/action/install/windows.lua b/xmake/modules/target/action/install/windows.lua
index 609e87389..87a7413ca 100644
--- a/xmake/modules/target/action/install/windows.lua
+++ b/xmake/modules/target/action/install/windows.lua
@@ -110,7 +110,7 @@ function install_shared(target, opt)
-- @see https://github.com/xmake-io/xmake/issues/714
local targetfile = target:targetfile()
local librarydir = path.join(target:installdir(), opt and opt.libdir or "lib")
- local targetfile_lib = path.join(path.directory(targetfile), path.basename(targetfile) .. ".lib")
+ local targetfile_lib = path.join(path.directory(targetfile), path.basename(targetfile) .. (target:is_plat("mingw") and ".dll.a" or ".lib"))
if os.isfile(targetfile_lib) then
os.mkdir(librarydir)
os.vcp(targetfile_lib, librarydir)
diff --git a/xmake/modules/target/action/uninstall/windows.lua b/xmake/modules/target/action/uninstall/windows.lua
index 236b045e3..2915966db 100644
--- a/xmake/modules/target/action/uninstall/windows.lua
+++ b/xmake/modules/target/action/uninstall/windows.lua
@@ -81,7 +81,7 @@ function uninstall_shared(target, opt)
-- @see https://github.com/xmake-io/xmake/issues/714
local targetfile = target:targetfile()
local librarydir = path.join(target:installdir(), opt and opt.libdir or "lib")
- os.vrm(path.join(librarydir, path.basename(targetfile) .. ".lib"))
+ os.vrm(path.join(librarydir, path.basename(targetfile) .. (target:is_plat("mingw") and ".dll.a" or ".lib")))
-- remove headers from the include directory
_uninstall_headers(target, opt)