NixOS,从源代码构建软件包

时间:2018-03-10 13:32:04

标签: nixos

我认为NixOS很棒,但无法弄清楚如何从源代码构建一个包。 unkdestanding nix语言不是问题,但如何知道要在default.nix中放置什么来构建一个包。以gedit的nix表达式为例:

    { stdenv, intltool, fetchurl, enchant, isocodes
, pkgconfig, gtk3, glib
, bash, wrapGAppsHook, itstool, libsoup, libxml2
, gnome3, librsvg, gdk_pixbuf, file, gspell }:

stdenv.mkDerivation rec {
  inherit (import ./src.nix fetchurl) name src;

  propagatedUserEnvPkgs = [ gnome3.gnome_themes_standard ];

  nativeBuildInputs = [ pkgconfig wrapGAppsHook ];

  buildInputs = [ gtk3 glib intltool itstool enchant isocodes
                  gdk_pixbuf gnome3.defaultIconTheme librsvg libsoup
                  gnome3.libpeas gnome3.gtksourceview libxml2
                  gnome3.gsettings_desktop_schemas gnome3.dconf file gspell ];

  enableParallelBuilding = true;

  preFixup = ''
    gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ gnome3.libpeas gnome3.gtksourceview ]}")
  '';

  meta = with stdenv.lib; {
    homepage = https://wiki.gnome.org/Apps/Gedit;
    description = "Official text editor of the GNOME desktop environment";
    maintainers = gnome3.maintainers;
    license = licenses.gpl2;
    platforms = platforms.linux;
  };
}

¿有人能够达成这个解决方案吗?我肯定错过了什么。

1 个答案:

答案 0 :(得分:2)

毫无疑问,这样的包装定义对任何人来说都有点压倒性。当您了解各种属性的影响时,您的示例包变得非常简单。

根据我的经验,您可以得到如下的包装定义。我假设您暂时没有从特定于语言的存储库中打包。例如,您可以使用make构建的内容。

  1. mkDerivation
  2. 开始
  3. 观看构建失败
  4. 通过添加依赖项,额外命令,配置标志,补丁等来修复错误。
  5. 重复
  6. 所以,你有它,它的反复试验。使用所需构建工具的经验有很多帮助。

    一些提示: