فهرست منبع

boost: add fetch for ubuntu (#5695)

star9029 9 ماه پیش
والد
کامیت
cc43a27c82
4فایلهای تغییر یافته به همراه105 افزوده شده و 25 حذف شده
  1. 1 25
      packages/b/boost/cmake/install.lua
  2. 73 0
      packages/b/boost/fetch.lua
  3. 29 0
      packages/b/boost/libs.lua
  4. 2 0
      packages/b/boost/xmake.lua

+ 1 - 25
packages/b/boost/cmake/install.lua

@@ -11,31 +11,7 @@ end
 -- Only get package dep version in on_install
 function _add_links(package)
     local prefix = _mangle_link_string(package)
-
-    local sub_libs_map = {
-        test = {"prg_exec_monitor", "unit_test_framework"},
-        serialization = {"wserialization", "serialization"},
-        fiber = {"fiber", "fiber_numa"},
-        log = {"log", "log_setup"},
-        stacktrace = {
-            "stacktrace_noop",
-            "stacktrace_backtrace",
-            "stacktrace_addr2line",
-            "stacktrace_basic",
-            "stacktrace_windbg",
-            "stacktrace_windbg_cached",
-        },
-    }
-
-    if package:config("python") then
-        local py_ver = assert(package:dep("python"):version(), "Can't get python version")
-        py_ver = py_ver:major() .. py_ver:minor()
-        -- TODO: detect numpy
-        sub_libs_map["python"] = {
-            "python" .. py_ver,
-            "numpy" .. py_ver,
-        }
-    end
+    local sub_libs_map = libs.get_sub_libs(package)
 
     libs.for_each(function (libname)
         if not package:config(libname) then

+ 73 - 0
packages/b/boost/fetch.lua

@@ -0,0 +1,73 @@
+import("lib.detect.find_library")
+import("lib.detect.find_tool")
+import("core.base.semver")
+
+function _get_python_libs()
+    local opt = {version = true}
+    local result = find_tool("python3", opt)
+    if not result then
+        result = find_tool("python", opt)
+    end
+
+    local libs = {}
+    local version = result.version
+    if version then
+        local py_ver = semver.new(version)
+        py_ver = py_ver:major() .. py_ver:minor()
+        table.insert(libs, "python" .. py_ver)
+        table.insert(libs, "numpy" .. py_ver)
+    end
+    return libs
+end
+
+function _add_info(linkinfo, result)
+    if linkinfo then
+        table.insert(result.linkdirs, linkinfo.linkdir)
+        table.insert(result.libfiles, linkinfo.filename)
+        table.insert(result.links, linkinfo.link)
+    end
+end
+
+function main(package, opt)
+    if opt.system then
+        import("libs", {rootdir = package:scriptdir()})
+
+        local paths = {
+            "/usr/lib",
+            "/usr/lib64",
+            "/usr/local/lib",
+            "/usr/lib/x86_64-linux-gnu",
+        }
+        
+        local result = {
+            libfiles = {},
+            linkdirs = {},
+            links = {},
+        }
+
+        local opt = {
+            plat = package:plat(),
+            kind = package:config("shared") and "shared" or "static",
+        }
+
+        local sub_libs_map = libs.get_sub_libs(package)
+        sub_libs_map["python"] = _get_python_libs()
+        table.insert(sub_libs_map.test, "test_exec_monitor")
+
+        libs.for_each(function (libname)
+            local sub_libs = sub_libs_map[libname]
+            if sub_libs then
+                for _, sub_libname in ipairs(sub_libs) do
+                    local linkinfo = find_library("boost_" .. sub_libname, paths, opt)
+                    _add_info(linkinfo, result)
+                end
+            else
+                local linkinfo = find_library("boost_" .. libname, paths, opt)
+                _add_info(linkinfo, result)
+            end
+        end)
+
+        result.linkdirs = table.unique(result.linkdirs)
+        return result
+    end
+end

+ 29 - 0
packages/b/boost/libs.lua

@@ -189,3 +189,32 @@ function for_each_lib_deps(lambda)
         lambda(libname, deps)
     end
 end
+
+function get_sub_libs(package)
+    local sub_libs_map = {
+        test = {"prg_exec_monitor", "unit_test_framework"},
+        serialization = {"wserialization", "serialization"},
+        fiber = {"fiber", "fiber_numa"},
+        log = {"log", "log_setup"},
+        stacktrace = {
+            "stacktrace_noop",
+            "stacktrace_backtrace",
+            "stacktrace_addr2line",
+            "stacktrace_basic",
+            "stacktrace_windbg",
+            "stacktrace_windbg_cached",
+        },
+    }
+
+    if package:config("python") then
+        local py_ver = assert(package:dep("python"):version(), "Can't get python version")
+        py_ver = py_ver:major() .. py_ver:minor()
+        -- TODO: detect numpy
+        sub_libs_map["python"] = {
+            "python" .. py_ver,
+            "numpy" .. py_ver,
+        }
+    end
+
+    return sub_libs_map
+end

+ 2 - 0
packages/b/boost/xmake.lua

@@ -63,6 +63,8 @@ package("boost")
         add_syslinks("pthread", "dl")
     end
 
+    on_fetch("fetch")
+
     if on_check then
         on_check(function (package)
             if not package:is_plat("macosx", "linux", "windows", "bsd", "mingw", "cross") then