te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>How do you select an external dependency version based on configuration with Bazel? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

How do you select an external dependency version based on configuration with Bazel? - Stack Overflow

programmeradmin3浏览0评论

I have a Bazel project that, depending on the runtime platform, requires a different version of a dependency. Each version of the dependency is bazel compatible, so I can use git_repository - but you cant do things like use select in repository rules. How would you do the equivalent of:

git_repository(
   name = "my_library",
   remote = "my_remote_location",
   commit = select(
       {
            ":value1":"sha-id-of-first-version",
            ":value2":"sha-id-of-second-version"
       }
   )
)

I have read that you can do something like grab both shas as seperate repos then use select like this:

...
deps = select({":value1":"@my_library_1//:...", "value2":"@my_library_2//:..."})
...

But I would really like to avoid having select statements like that sprinkled all across the BUILD.bazel files. There should be a way to assign to pick a version but apply the same repo name throughout - but I don't see how to do it, and my searches are turning up nothing.

I am currently stuck with WORKSPACE - if I could use bzlmod - there is probably a way to do this with repo extensions, etc.

Thanks in advance.

I have a Bazel project that, depending on the runtime platform, requires a different version of a dependency. Each version of the dependency is bazel compatible, so I can use git_repository - but you cant do things like use select in repository rules. How would you do the equivalent of:

git_repository(
   name = "my_library",
   remote = "my_remote_location",
   commit = select(
       {
            ":value1":"sha-id-of-first-version",
            ":value2":"sha-id-of-second-version"
       }
   )
)

I have read that you can do something like grab both shas as seperate repos then use select like this:

...
deps = select({":value1":"@my_library_1//:...", "value2":"@my_library_2//:..."})
...

But I would really like to avoid having select statements like that sprinkled all across the BUILD.bazel files. There should be a way to assign to pick a version but apply the same repo name throughout - but I don't see how to do it, and my searches are turning up nothing.

I am currently stuck with WORKSPACE - if I could use bzlmod - there is probably a way to do this with repo extensions, etc.

Thanks in advance.

Share Improve this question asked Feb 18 at 2:41 tenspd137 tenspd137 3931 silver badge13 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

You do need to define both possible external dependencies and choose at build time as you've already mentioned. You do not need to make that choice at each place of consumption (deps), you can define single alias with the choice used for actual attribute to decide and the alias' label where consumed.

There is one caveat to the example you've given though, you cannot alias to (actual) wildcard labels. You could write an alias for each exposed target... and arguably well controlled dependency management would also do depend on specific targets as needed. Or if the type of dependency allowed it, one could use a label of some target that effectively aggregates the bits (e.g. filegroup for generic files, or cc_library via deps for cc libraries).


For example a WORKSPACE file with:

git_repository(
    name = "my_library_var1",
    remote = "my_remote_location",
    commit = "sha-id-of-first-version",
)

git_repository(
    name = "my_library_var2",
    remote = "my_remote_location",
    commit = "sha-id-of-second-version",
)

And then a BUILD file:

alias (
    name = "my_library",
    actual = select(
        {
            "value1:": "@my_library_var1//:my_library",
            "value2:": "@my_library_var2//:my_library",
        },
    ),
    visibility = ["//visibility:public"],
)  

if e.g. under third_party/my_library/

Then for each consumer you could feed in:

...
    deps = [
        "//third_party/my_library",
    ],
...

For caveat in the second paragraph. If in your other repo you had two cc libraries: liba and libb, you could:

cc_library(
    name = "my_library",
    deps = ["liba", "libb"],
)

To use :my_library (like in the above example) in case you want to depend on both through a single label.

发布评论

评论列表(0)

  1. 暂无评论