فا نیکسی

D (Dlang)

Nixpkgs کامپایلرهای D متعددی مانند ldc و dmd را ارائه می‌دهد. این‌ها را می‌توان مانند هر بسته دیگری در زمان ساخت استفاده کرد.

با این حال، Nixpkgs یک کمک‌رسان ساخت برای کامپایل بسته‌ها با استفاده از مدیر بسته dub ارائه می‌دهد.

در ادامه یک نمونه آورده شده است:

{
  lib,
  buildDubPackage,
  fetchFromGitHub,
  ncurses,
  zlib,
}:

buildDubPackage rec {
  pname = "btdu";
  version = "0.5.1";

  src = fetchFromGitHub {
    owner = "CyberShadow";
    repo = "btdu";
    tag = "v${version}";
    hash = "sha256-3sSZq+5UJH02IO0Y1yL3BLHDb4lk8k6awb5ZysBQciE=";
  };

  # generated by dub-to-nix, see below
  dubLock = ./dub-lock.json;

  buildInputs = [
    ncurses
    zlib
  ];

  installPhase = ''
    runHook preInstall
    install -Dm755 btdu -t $out/bin
    runHook postInstall
  '';
}

توجه داشته باشید که باید فاز نصب (installPhase) را تعریف کنید، زیرا dub نمی‌داند فایل‌ها در $out باید کجا قرار گیرند.

همچنین توجه داشته باشید که اجرای dub test به صورت پیش‌فرض غیرفعال است. می‌توانید با تنظیم doCheck = true آن را فعال کنید.

فایل‌های قفل

Nixpkgs فرمت فایل قفل اختصاصی خود را برای وابستگی‌های dub دارد، زیرا فرمت «فایل قفل» رسمی dub (dub.selections.json) مبتنی بر هش نیست.

یک فایل قفل را می‌توان با استفاده از بسته کمک‌رسان dub-to-nix تولید کرد.

  • ابتدا، با اجرای nix-shell -p dub-to-nix بسته dub-to-nix را در نشست شل خود نصب کنید.
  • سپس به ریشه کد منبع برنامه‌ای که می‌خواهید بسته‌بندی کنید بروید.
  • در نهایت، dub-to-nix را اجرا کنید؛ این دستور فایل قفل را در stdout چاپ می‌کند. می‌توانید stdout را به یک فایل متنی هدایت (pipe) کنید یا صرفاً خروجی را به صورت دستی در یک فایل کپی کنید.

پارامترهای buildDubPackage

تابع buildDubPackage یک مجموعه ویژگی از پارامترها را می‌پذیرد که به stdenv.mkDerivation منتقل می‌شوند.

پارامترهای زیر مختص buildDubPackage هستند:

  • dubLock: یک فایل قفل تولیدشده توسط dub-to-nix از کد منبع بسته. می‌تواند مسیری به فایل باشد، یا یک مجموعه ویژگی که از قبل با lib.importJSON تجزیه شده است. مورد دوم زمانی مفید است که بسته از وابستگی‌های dub استفاده کند که هنوز در فایل قفل موجود نیستند (مثلاً اگر بسته به‌صورت دستی dub run some-dub-package را فراخوانی کند).
  • dubBuildType ? "release": نوع ساخت برای ارسال به dub build به عنوان مقداری برای پرچم --build=.
  • dubFlags ? []: پرچم‌هایی که به dub build و dub test ارسال می‌شوند.
  • dubBuildFlags ? []: پرچم‌هایی که به dub build ارسال می‌شوند.
  • dubTestFlags ? []: پرچم‌هایی که به dub test ارسال می‌شوند.
  • compiler ? ldc: کامپایلر D که باید توسط dub استفاده شود.