2023年5月

出于兼容性考虑,还是编译一份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

其中有几个地方要修改一下:

  1. 复制一份pkgconfig的tepl-6.pctepl-5.pc,msys2没有这个包;
  2. 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,重新执行ninjaninja install即可完成安装。安装完大小接近1个G,如果需要精简空间,可以参考remove_useless_stuff函数,改改路径前缀执行,最终能把大小控制在400MB以内。(经典的gedit 2.30展开安装也才80MB左右,通货膨胀严重啊)

因为这里不打算发行,就不按照原始脚本用wix进行后续打包工作了。