今天回忆如何找出Wayland+Weston所依赖的其它第三方软件。
说实话,具体采用了哪种方法,我真有点记不清了。大概有四种路子。
第一种,笨办法,但绝对有效,适用于所有软件移植。 先编译Wayland——注意是先编Wayland,不是Weston,因为Weston要用到Wayland。编译过程中会出现各种错误,比如找不到头文件xxx.h,那就根据xxx.h来判断它属于哪个软件包。当然,我们也要结合移植需求来判断:有些依赖可以通过屏蔽功能来绕过,如果绕不过,就需要移植。版本选择上,通常尽量挑与Wayland 1.2.1发布日期相近的版本,当然要比它稍早一些。当我们历经千难万险把软件编译通过(或者卡在链接阶段)时,系统会提示缺少某些符号,通过这些符号名称也能反查出所依赖的软件包。如果链接时没暴露完,下载到目标机上跑一下,运行时还会告诉你缺什么。这是个迭代过程——移植一个依赖软件时,还可能发现它又依赖别的软件,得重复上述过程。那又有什么办法,移植本身就是个卖苦力的活。
第二种,借助前面介绍的ArchLinux环境。 在ArchLinux下编译Wayland和Weston,安装时会提示需要哪些依赖包,这些就是我们也需要在VxWorks下移植的软件包。当然,这可能不是全部——文本模式的ArchLinux功能仍然比VxWorks丰富很多,VxWorks那边可能还需要额外补齐一些开源软件来弥补功能差异。另外,Arch提示的依赖版本通常较新,实际移植时还要根据Wayland 1.2.1的发布时间往回找对应的老版本。
第三种,阅读代码。 包括README、Makefile、configure等文件,里面通常会列出依赖信息。
第四种,上网查。 现在有AI了,问一问能拿到更完整更可靠的信息。
几番折腾下来,最终确定的第三方依赖库清单大概是这样:
zlib-1.2.13:通用的压缩库,Wayland和Weston都会用到
libpng-1.6.39:处理PNG图片格式,Weston的加载图标、壁纸等场景需要
pixman-0.30.2:像素操作库,做图像合成和渲染用的,Wayland和Weston都离不开它
cairo-1.12.14:2D图形绘制库,Weston用它来画很多东西
libjpeg-6.2.0.3:JPEG图片解码,跟libpng类似,Weston加载JPEG图片时用
freetype-2.3.2.3:字体渲染引擎,Weston里的文字显示靠它
libffi-2.99.9:Wayland的核心依赖,scanner的闭包回调机制要用到它
libxkbcommon-0.3.2:键盘映射处理库,Weston的输入子系统需要它来解析键盘按键
这里有个特殊情况需要单独说一下:VxWorks的WindML组件里其实已经包含了freetype和pixman的代码。freetype可以直接拿来用,移植起来没什么难度。但pixman就比较麻烦了——WindML自带的pixman是裁剪过的,功能不完整,而cairo等上层软件对pixman的功能依赖很深,WindML那个版本根本满足不了。所以最后还是自己重新移植了一套完整的pixman,不能用WindML自带的凑合。