Windows下编译新版gedit
出于兼容性考虑,还是编译一份32位版的,哪都能用。
装包:
pacman -S mingw-w64-i686-gtk3 pkg-config mingw-w64-i686-amtk mingw-w64-i686-tepl mingw-w64-i686-libpeas mingw-w64-i686-gobject-introspection mingw-w64-i686-gspell mingw-w64-i686-vala mingw-w64-i686-itstool mingw-w64-i686-desktop-file-utils
其中有几个地方要修改一下:
- 复制一份pkgconfig的
tepl-6.pc
到tepl-5.pc
,msys2没有这个包; - meson改了API导致语法不兼容,可以选择装meson的时候指定版本为0.59(参见meson.build),或者把
data/meson.build
文件第七行删掉。
配置:
git checkout gnome-3-38-fix-build
MSYS2_ENV_CONV_EXCL='PKG_CONFIG_PATH' meson
其中MSYS2_ENV_CONV_EXCL
是针对MSYS2会自动改变环境变量的分隔符而加的。MSYS2装的pkgconfig只认冒号分隔符,但是MSYS2会自动转成分号,这样pkgconfig就只认PKG_CONFIG_DIR
中的最后一个,导致pc文件找不到。
编译完成之后,在MSYS里设置好XDG_DATA_DIRS
就可以使用了。界面和Linux下完全一样,win的标题栏都没了。然而非常诡异的一点是,如果试图把dll文件复制到gedit一起打包的话,会发现根本启动不起来,两者只能单独分开,然后通过PATH
联系起来,就tm离谱。在3.36版本之前是有win32打包脚本的,不过之后被移除了,可以去git历史里面去看,然而我执行又是各种报错= =
===
第二天更新
又看了眼,发现相比于把dll复制到install目标文件夹里,官方脚本里的配置方式是把gedit install到现有的mingw环境中。那么一种可行的方式是,先用pacman装好需要的库,然后把编译好的gedit install到这个chroot环境中。假设安装到E:\gedit\mingw32
目录,那么根据make-gedit-installer
脚本,可以有如下操作:
pushd /e/gedit
mkdir -p var/lib/pacman
mkdir -p var/log
mkdir -p tmp
pacman -Syu --root `pwd`
pacman -S mingw-w64-i686-gtk3 ... # 后面的库略
这个地方的mingw32
文件夹是不可少的,主要是因为msys2为了做环境隔离,设立了多个子文件夹。后续可以把这个mingw32
文件夹单独提出来,重命名后自由使用。
还有一种偷懒的方法是,先直接用pacman装gedit,再卸掉这个包,剩下来的就是依赖环境了
然后再用meson去reconfigure gedit,指定prefix为E:\\gedit\\mingw32
,重新执行ninja
和ninja install
即可完成安装。安装完大小接近1个G,如果需要精简空间,可以参考remove_useless_stuff
函数,改改路径前缀执行,最终能把大小控制在400MB以内。(经典的gedit 2.30展开安装也才80MB左右,通货膨胀严重啊)
因为这里不打算发行,就不按照原始脚本用wix进行后续打包工作了。