Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support custom searchname for package tarballs #1343

Closed
xq114 opened this issue Apr 18, 2021 · 8 comments
Closed

support custom searchname for package tarballs #1343

xq114 opened this issue Apr 18, 2021 · 8 comments

Comments

@xq114
Copy link
Contributor

xq114 commented Apr 18, 2021

你在什么场景下需要该功能?

xmake-repo中搜索本地包用的名字默认从url里面取,但github的url末尾和实际下载下来的名字并不相同。例如下载地址是github.com/foo/bar/archives/v1.1.1.tar.gz,下载的tarball名为bar-1.1.1.tar.gz,但xmake默认的搜索文件名是v1.1.1.gz,如果有两个包是同一版本这个搜索就会出问题。

描述可能的解决方案

提供一个add_searchname接口对每一个url手动设置searchname

描述你认为的候选方案

add_urls("...", {version = function (version) ... end, searchname = function (version) ... end})

其他信息

最好可以对github做特殊适配,自动将v1.1.1.tar.gz转换成bar-1.1.1.tar.gz,不同于此规则的包再手动设置

@waruqi
Copy link
Member

waruqi commented Apr 18, 2021

那还不如直接设置 filename,如果有设置,存储下来的也是这个 filename,搜索也是。。

add_urls("...", {filename = "xxx"})
add_urls("...", {filename = function (version) ... end})

@waruqi waruqi added this to the v2.5.4 milestone Apr 18, 2021
@waruqi
Copy link
Member

waruqi commented Apr 18, 2021

其实之前是直接默认根据 packagename-version.extension 来拼的路径,只不过有些包 muslcc 这种,每个 url 还需要区分 arch ,所以后来重新改回了 从 url 中直接提取。。

而且自己拼的方式,很多 url 默认的filename 都会舍弃,导致search过程都要手动改名

我觉得更简单直接的方式,就是现有取 url 中 filename 的前提下,直接内部新增一个 packagename-version.extension
的 searchnames ,具体命名可以通过 repo info 查看

如果它存在,直接使用就行了,既能解决当前这个问题,也能避免改动 xmake-repo 中大量的 包定义,增加维护成本。

@waruqi
Copy link
Member

waruqi commented Apr 18, 2021

我改进过了,可以通过 xmake require --info zlib 看下 searchnames

优先找, packagename-version.extension,再从 filename(url) 找

github.com/bar/archives/v1.1.1.tar.gz

-> bar-v1.1.1.tar.gz
-> v1.1.1.tar.gz

@xq114
Copy link
Contributor Author

xq114 commented Apr 18, 2021

应该是bar-1.1.1.tar.gz,github会自动去掉前缀v

这里跟 github url 无关,根据 add_versions 选择的 version 。。自己内部规则拼接的,仅用于在 searchdirs 区分不同的 tar 包,避免冲突,具体名字请以 xrepo info zlib 里面的 searchnames 为准。。xmake 不会去解析 github url 实际的存储名,太耗时滞后。。

@xq114
Copy link
Contributor Author

xq114 commented Apr 18, 2021

这里跟 github url 无关,根据 add_versions 选择的 version 。。自己内部规则拼接的,仅用于在 searchdirs 区分不同的 tar 包,避免冲突,具体名字请以 xrepo info zlib 里面的 searchnames 为准。。xmake 不会去解析 github url 实际的存储名,太耗时滞后。。

不需要解析github url,github里面所有repo都是这样设置的,例如 https://github.com/xmake-io/xmake/archive/refs/tags/v2.5.3.tar.gz 下下来就是 xmake-2.5.3.tar.gz 。这个改一下会方便很多,各个github的包都直接下载就能用而无需xrepo info查找名称、手动改名、重新编译等等

@xq114
Copy link
Contributor Author

xq114 commented Apr 18, 2021

或者带v和不带v的版本都加到searchname里面

@waruqi
Copy link
Member

waruqi commented Apr 18, 2021

这需要特殊处理 github url,这种特定host的url的特殊处理我就不加了,这不是什么通用方案

尽管能解决的了 github url 问题,但gitlab gitee以及各种其他git url的archive url或者其他带有重定向的url,都有可能同样存在 v1.1.1.tar.gz这种无法区分包名的情况,不可能以后需要其他的url,都挨个硬编码特殊去处理

如果放到xmake-repo,维护起来也很蛋疼

所以只要知道大概规则就行了,name-version.ext 也不用每次去看 xrepo info

而且下载失败,也会自动提示 searchnames信息

@waruqi
Copy link
Member

waruqi commented Apr 19, 2021

这个先这样好了,只要能解决当前冲突问题就行了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants