[分享] nix darwin mps-overlay 方便 macos 下构建 emacs-igc

igc 分支依赖的 mps darwin 版本还没没合并到 nixpkgs 主线中,于是把别人的 pull request 先做成一个 overlay 方便大家结合 emacs-overlay emacs-igc 本地构建使用。(诚挚感谢 deepseek-r1 )

# mps-overlay.nix

self: super: {
  mps = super.mps.overrideAttrs (oldAttrs: {
    # 更新meta信息添加darwin支持
    meta = oldAttrs.meta // {
      platforms = oldAttrs.meta.platforms ++ super.lib.platforms.darwin;
    };

    # 根据平台动态调整构建参数
    nativeBuildInputs = if super.stdenv.isDarwin then [ super.xcbuildHook ] else oldAttrs.nativeBuildInputs;

    sourceRoot = super.lib.optionalString super.stdenv.isDarwin "${oldAttrs.src.name}/code";

    xcbuildFlags = super.lib.optionals super.stdenv.isDarwin [
      "-configuration"
      "Release"
      "-project"
      "mps.xcodeproj"
      "OTHER_CFLAGS='-Wno-error=unused-but-set-variable'"
    ];

    installPhase = if super.stdenv.isDarwin then ''
      mkdir -p $out/lib
      cp "$TMPDIR/source/code/Products/Release/libmps.a" $out/lib/

      mkdir -p $out/include
      cp mps*.h $out/include/
    '' else oldAttrs.installPhase;

    # 保持Linux平台的原始补丁
    postPatch = super.lib.optionalString super.stdenv.isLinux ''
      substituteInPlace code/gc.gmk --replace-fail '-Werror ' ' '
      substituteInPlace code/gp.gmk --replace-fail '-Werror ' ' '
      substituteInPlace code/ll.gmk --replace-fail '-Werror ' ' '
    '';
  });
}
1 个赞