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استفاده شود.