-
-
Notifications
You must be signed in to change notification settings - Fork 814
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
add installdir
property to fetched packages
#3106
Comments
package:installdir 这个主要是给 xmake 仓库包用的,指向 xmake 包安装根目录,fetch 的包,一般都是找的系统库,尽管默认系统库大都在 /usr 或者 /usr/local 下,但不一定严格按照这个根目录来,也有可能是 /usr/include 和 /usr/lib64/ 分散在其他子目录等。。 不一定靠谱的,而且其实 xmake 内置从中去分析提取 installdir,也是不可靠的,不是 100% 准确,也只能根据获取到的 linkdirs/includedirs 去大概分析,不会比用户自己分析 靠谱多少 自己按需根据 includedirs linkdirs 分析下就好了 |
那在on_fetch里面探测呢?这个功能对系统包不重要,系统包只要知道能用就可以,但对用户自行安装的包很重要 |
比如这个 #2473 |
用户自己编译安装的,如果装到系统路径了,那就是系统包,走 pkg-config 能找到就能用,没必要。如果没 pc 文件,也会自动回退到从 /usr 去尝试找,即使 on_fetch 自己做探测,既然都装到系统库了,探测时候,尝试从 /usr/ 等路径探测后,返回 includedirs 和 linkdirs 就行了。。 |
就以vtk为例,这个包必须要在编译时动态生成header参与编译才能正常运行,这时候就需要到rule里面去获取vtk的安装目录,找安装目录的.cmake文件;只有 includedirs 和 linkdirs 是不够的 |
如果仅仅 includedirs 和 linkdirs 不够,那就是处于近似 sdk 的模式了,得走 detect/sdks/find_vtk.lua 去进一步获取更多详细的定制化信息。 |
不过现在 on_fetch 的 results 里面,是可以设置任何其他 key/values 的,然后走 rule target:pkg("xxx"):get("key") 也是能够取到的。。 另外也可以设置 results.__installdir ,然后 target:pkg("xxx"):installdir() 也能取到,当然,目前还没文档化,也没对外导出,因为我自己也没完全想好,如何更好更加规范可扩展的去处理它,所以暂时不建议自己在包里面用 |
不写sdk里是为了一致性,如果fetch的本地包也有installdirs,写rule的时候就不用去管到底是不是xmake安装的了 |
对于非 on_fetch 的系统库,本地包,即使 fetch 到了,也不会有 installdir, 比如 pkg-config apt pacman 的包,xmake 探测的 installdir 也不一定准,目前不会去加这个 ,所以这个可能是空的。。rule 里面依赖这个,不完全可靠,除非是 rule + package/on_fetch 强绑定,on_fetch 里面返回 installdir 才行。。但这种就要规范化了,目前我还没想好如何规范这块,所以只能xmake 内部用。。 |
刚改了下,将 另外,我额外加了个 package("xxx")
on_fetch(function (package)
return {includedirs = "", links = "", installdir = "/tmp", extras = {foo = ""}}
end) |
你在什么场景下需要该功能?
在on_fetch查找本地包时目前得到的结果仅有includedirs/linkdirs/links等参数,然而在编写处理各种包的rule时,通常都需要package:installdir这一参数,但对于本地fetch的包这一参数缺失了。由于includedir/linkdir都是乱序,从中获取包的安装位置也并不方便,容易出错。
描述可能的解决方案
在on_fetch、add_extsources等方式获取的本地包中加入installdir这一信息(系统包管理器安装的包installdir=/usr)
描述你认为的候选方案
No response
其他信息
No response
The text was updated successfully, but these errors were encountered: