build emacs 30

on arch linux

  1. 安装依赖

    1
    
    sudo pacman -S cairo giflib gnutls gtk3 harfbuzz jansson libgccjit libjpeg-turbo libotf libpng libsm libtiff libwebp libxcb libxi libxml2 libxpm sqlite tree-sitter xcb-util git libxi xorgproto webkitgtk-6.0 webkit2gtk #icu libavif
  2. 构建准备

    1
    2
    3
    
    cd emacs
    git checkout emacs-30
    ./autogen.sh
  3. configure

    1
    
    ./configure --with-tree-sitter --with-native-compilation=aot --with-mailutils --with-pop --with-xml2 --with-xwidgets --with-x-toolkit=gtk3 # LDFLAGS="-Wl,-rpath,/usr/lib -Wl,-rpath-link,/usr/lib"
  4. get error: webkit2gtk version 太高

  5. make

    1
    
    make -j 8
  6. 错误:

    1
    2
    3
    4
    
    /usr/bin/ld: /usr/lib/pkgconfig/../../lib/libjavascriptcoregtk-4.0.so: undefined reference to `u_toupper_72'
    /usr/bin/ld: /usr/lib/pkgconfig/../../lib/libjavascriptcoregtk-4.0.so: undefined reference to `ucol_getKeywordValues_72'
    /usr/bin/ld: /usr/lib/pkgconfig/../../lib/libjavascriptcoregtk-4.0.so: undefined reference to `u_foldCase_72'
    /usr/bin/ld: /usr/lib/pkgconfig/../../lib/libjavascriptcoregtk-4.0.so: undefined reference to `ucal_close_72'
    • 这是因为上面安装的 webkit2gtk 版本和其他 package 版本依赖关系被打破的原因
    • 修复方法:重新安装系统要求的版本

      1
      
      sudo pacman -S webkit2gtk
  7. 继续 make

    1
    
    make -j 8
    • 可以正常编译
  8. 运行 emacs

    1
    
    GDK_BACKEND=x11 WEBKIT_DISABLE_COMPOSITING_MODE=1 ./src/emacs -q