.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "dpkg-buildflags 1" .TH dpkg-buildflags 1 2026-03-06 1.23.7-dirty "dpkg suite" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" dpkg\-buildflags \- بازگرداندن پرچم‌های ساخت جهت استفاده در هنگام ساخت بسته‌ها .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" \&\fBdpkg\-buildflags\fR [\fIگزینه\fR...] [\fIدستور\fR] .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" ابزار \&\fBdpkg\-buildflags\fR ابزاری برای بازیابی پرچم‌های کامپایل جهت استفاده در زمان ساخت بسته‌های دبیان است. .PP پرچم‌های پیش‌فرض توسط توزیع‌کننده (vendor) تعریف می‌شوند، اما می‌توان آن‌ها را به چندین روش گسترش داد یا بازنویسی کرد: .IP 1. 4 در سطح کل سیستم با \fB/etc/dpkg/buildflags.conf\fR؛ .IP 2. 4 برای کاربر جاری با \fR\f(CB$XDG_CONFIG_HOME\fR\fB/dpkg/buildflags.conf\fR که در آن مقدار پیش‌فرض \fB\fR\f(CB$XDG_CONFIG_HOME\fR\fB\fR برابر با \fB\fR\f(CB$HOME\fR\fB/.config\fR است؛ .IP 3. 4 به صورت موقت توسط کاربر با استفاده از متغیرهای محیطی (بخش «محیط (ENVIRONMENT)» را ببینید)؛ .IP 4. 4 به صورت پویا توسط نگه‌دارندهٔ بسته با متغیرهای محیطی تنظیم‌شده از طریق \&\fBdebian/rules\fR (بخش «محیط (ENVIRONMENT)» را ببینید). .PP پرونده‌های پیکربندی می‌توانند شامل چهار نوع دستورالعمل (directive) باشند: .IP "\fBSET\fR \fIflag\fR \fIvalue\fR" 4 .IX Item "SET flag value" بازنویسی پرچم با نام \fIflag\fR برای داشتن مقدار \fIvalue\fR. .IP "\fBSTRIP\fR \fIflag\fR \fIvalue\fR" 4 .IX Item "STRIP flag value" حذف تمام پرچم‌های ساخت فهرست‌شده در \fIvalue\fR از پرچم با نام \fIflag\fR. از نسخهٔ dpkg 1.16.1 به بعد. .IP "\fBAPPEND\fR \fIflag\fR \fIvalue\fR" 4 .IX Item "APPEND flag value" گسترش پرچم با نام \fIflag\fR از طریق افزودن گزینه‌های داده‌شده در \fIvalue\fR به انتهای آن. در صورتی که مقدار فعلی پرچم خالی نباشد، یک فاصله به ابتدای مقدار اضافه‌شونده افزوده می‌شود. .IP "\fBPREPEND\fR \fIflag\fR \fIvalue\fR" 4 .IX Item "PREPEND flag value" گسترش پرچم با نام \fIflag\fR از طریق افزودن گزینه‌های داده‌شده در \fIvalue\fR به ابتدای آن. در صورتی که مقدار فعلی پرچم خالی نباشد، یک فاصله به انتهای مقدار اضافه‌شونده افزوده می‌شود. از نسخهٔ dpkg 1.16.1 به بعد. .PP پرونده‌های پیکربندی می‌توانند در خطوطی که با علامت هش (#) آغاز می‌شوند شامل توضیحات (کامنت) باشند. خطوط خالی نیز نادیده گرفته می‌شوند. .PP این برنامه در dpkg 1.15.7 معرفی شد. .SH "دستورها (COMMANDS)" .IX Header "COMMANDS" .IP \fB\-\-dump\fR 4 .IX Item "--dump" چاپ تمام پرچم‌های کامپایل و مقادیر آن‌ها در خروجی استاندارد. در هر خط یک پرچم چاپ می‌شود که با علامت مساوی از مقدار خود جدا شده است (\(lq\fIflag\fR=\fIvalue\fR\(rq). این رفتار پیش‌فرض است. .IP \fB\-\-list\fR 4 .IX Item "--list" چاپ فهرست پرچم‌های پشتیبانی‌شده توسط توزیع‌کنندهٔ فعلی (در هر خط یکی). برای اطلاعات بیشتر دربارهٔ آن‌ها بخش «پرچم‌های پشتیبانی‌شده (SUPPORTED FLAGS)» را ببینید. .IP \fB\-\-status\fR 4 .IX Item "--status" نمایش هرگونه اطلاعاتی که برای توضیح رفتار \&\fBdpkg\-buildflags\fR مفید باشد (از نسخهٔ dpkg 1.16.5 به بعد): متغیرهای محیطی مرتبط، توزیع‌کنندهٔ فعلی، وضعیت تمام پرچم‌های ویژگی‌ها. همچنین پرچم‌های کامپایلر حاصل را به همراه منشأ آن‌ها چاپ می‌کند. .Sp این دستور برای اجرا از درون \fBdebian/rules\fR در نظر گرفته شده است تا لاگ ساخت رد مشخصی از پرچم‌های ساخت مورد استفاده را نگه دارد. این می‌تواند برای عیب‌یابی مشکلات مرتبط با آن‌ها مفید باشد. .IP \fB\-\-export=\fR\fIformat\fR 4 .IX Item "--export=format" چاپ دستوراتی در خروجی استاندارد که می‌توانند برای صادر کردن تمام پرچم‌های کامپایل برای ابزاری خاص استفاده شوند. اگر مقدار \fIformat\fR داده نشود، \fBsh\fR فرض می‌شود. تنها پرچم‌های کامپایلی که با یک حرف بزرگ آغاز می‌شوند گنجانده می‌شوند، فرض بر این است که سایر پرچم‌ها برای محیط مناسب نیستند. قالب‌های پشتیبانی‌شده: .RS 4 .IP \fBsh\fR 4 .IX Item "sh" دستورات پوسته برای تنظیم و صادر کردن تمام پرچم‌های کامپایل در محیط. مقادیر پرچم‌ها درون نقل‌قول قرار می‌گیرند تا خروجی برای ارزیابی توسط یک پوسته آماده باشد. .IP \fBcmdline\fR 4 .IX Item "cmdline" آرگومان‌هایی برای ارسال به خط فرمان برنامهٔ ساخت جهت استفاده از تمام پرچم‌های کامپایل (از نسخهٔ dpkg 1.17.0 به بعد). مقادیر پرچم‌ها طبق نحو پوسته نقل‌قول می‌شوند. .IP \fBconfigure\fR 4 .IX Item "configure" این یک نام مستعار قدیمی (legacy) برای \fBcmdline\fR است. .IP \fBmake\fR 4 .IX Item "make" دستورالعمل‌های Make برای تنظیم و صادر کردن تمام پرچم‌های کامپایل در محیط. خروجی را می‌توان در یک قطعه‌کد Makefile نوشت و با استفاده از دستورالعمل \fBinclude\fR ارزیابی کرد. .RE .RS 4 .RE .IP "\fB\-\-get\fR \fIflag\fR" 4 .IX Item "--get flag" چاپ مقدار پرچم در خروجی استاندارد. اگر پرچم شناخته‌شده باشد با کد ۰ و در غیر این صورت با کد ۱ خارج می‌شود. .IP "\fB\-\-origin\fR \fIflag\fR" 4 .IX Item "--origin flag" چاپ منشأ مقداری که توسط \fB\-\-get\fR بازگردانده می‌شود. اگر پرچم شناخته‌شده باشد با کد ۰ و در غیر این صورت با کد ۱ خارج می‌شود. منشأ می‌تواند یکی از مقادیر زیر باشد: .RS 4 .IP \fBvendor\fR 4 .IX Item "vendor" پرچم اصلی تنظیم‌شده توسط توزیع‌کننده بازگردانده شده است؛ .IP \fBsystem\fR 4 .IX Item "system" پرچم توسط یک پیکربندی در سطح کل سیستم تنظیم یا اصلاح شده است؛ .IP \fBuser\fR 4 .IX Item "user" پرچم توسط یک پیکربندی ویژهٔ کاربر تنظیم یا اصلاح شده است؛ .IP \fBenv\fR 4 .IX Item "env" پرچم توسط یک پیکربندی ویژهٔ محیط تنظیم یا اصلاح شده است. .RE .RS 4 .RE .IP \fB\-\-query\fR 4 .IX Item "--query" چاپ هر اطلاعاتی که بتواند برای توضیح رفتار برنامه مفید باشد: توزیع‌کنندهٔ فعلی، متغیرهای محیطی مرتبط، نواحی ویژگی‌ها، وضعیت تمام پرچم‌های ویژگی، اینکه آیا یک ویژگی به عنوان پیش‌فرض توکار توسط کامپایلر مدیریت می‌شود یا خیر (از نسخهٔ dpkg 1.21.14 به بعد)، و پرچم‌های کامپایلر به همراه منشأ آن‌ها (از نسخهٔ dpkg 1.19.0 به بعد). .Sp به عنوان مثال: .Sp .Vb 3 \& Vendor: Debian \& Environment: \& DEB_CFLAGS_SET=\-O0 \-Wall \& \& Area: qa \& Features: \& bug=no \& canary=no \& Builtins: \& \& Area: hardening \& Features: \& pie=no \& Builtins: \& pie=yes \& \& Area: reproducible \& Features: \& timeless=no \& Builtins: \& \& Flag: CFLAGS \& Value: \-O0 \-Wall \& Origin: env \& \& Flag: CPPFLAGS \& Value: \-D_FORTIFY_SOURCE=2 \& Origin: vendor .Ve .IP "\fB\-\-query\-features\fR \fIarea\fR" 4 .IX Item "--query-features area" چاپ ویژگی‌های فعال‌شده برای یک ناحیهٔ مشخص (از نسخهٔ dpkg 1.16.2 به بعد). اگر این ویژگی (حتی اگر فقط در برخی معماری‌ها) به عنوان پیش‌فرض توکار توسط کامپایلر مدیریت شود، یک فیلد \fBBuiltin\fR چاپ می‌شود (از نسخهٔ dpkg 1.21.14 به بعد). برای جزئیات بیشتر دربارهٔ نواحی شناخته‌شده فعلی، بخش «نواحی ویژگی‌ها (FEATURE AREAS)» را ببینید. اگر ناحیه شناخته‌شده باشد با کد ۰ و در غیر این صورت با کد ۱ خارج می‌شود. .Sp خروجی در قالب RFC822 است، با یک بخش برای هر ویژگی. به عنوان مثال: .Sp .Vb 3 \& Feature: pie \& Enabled: yes \& Builtin: yes \& \& Feature: stackprotector \& Enabled: yes .Ve .IP \fB\-\-help\fR 4 .IX Item "--help" نمایش پیام راهنمای نحوهٔ استفاده و خروج. .IP \fB\-\-version\fR 4 .IX Item "--version" نمایش نسخه و خروج. .SH "پرچم‌های پشتیبانی‌شده (SUPPORTED FLAGS)" .IX Header "SUPPORTED FLAGS" .IP \fBASFLAGS\fR 4 .IX Item "ASFLAGS" گزینه‌های اسمبلر میزبان (host). مقدار پیش‌فرض: خالی. از نسخهٔ dpkg 1.21.0 به بعد. .IP \fBCFLAGS\fR 4 .IX Item "CFLAGS" گزینه‌های کامپایلر C میزبان. مقدار پیش‌فرض تنظیم‌شده توسط توزیع‌کننده شامل \fB\-g\fR و سطح بهینه‌سازی پیش‌فرض (معمولاً \fB\-O2\fR، یا \fB\-O0\fR اگر متغیر محیطی \fBDEB_BUILD_OPTIONS\fR مقدار \&\fInoopt\fR را تعریف کرده باشد) است. .IP \fBCPPFLAGS\fR 4 .IX Item "CPPFLAGS" گزینه‌های پیش‌پردازندهٔ C میزبان. مقدار پیش‌فرض: خالی. .IP \fBCXXFLAGS\fR 4 .IX Item "CXXFLAGS" گزینه‌های کامپایلر ++C میزبان. مشابه \fBCFLAGS\fR. .IP \fBOBJCFLAGS\fR 4 .IX Item "OBJCFLAGS" گزینه‌های کامپایلر Objective C میزبان. مشابه \fBCFLAGS\fR. از نسخهٔ dpkg 1.17.7 به بعد. .IP \fBOBJCXXFLAGS\fR 4 .IX Item "OBJCXXFLAGS" گزینه‌های کامپایلر ++Objective C میزبان. مشابه \fBCXXFLAGS\fR. از نسخهٔ dpkg 1.17.7 به بعد. .IP \fBDFLAGS\fR 4 .IX Item "DFLAGS" گزینه‌های کامپایلر D میزبان (ldc یا gdc). از نسخهٔ dpkg 1.20.6 به بعد. .IP \fBFFLAGS\fR 4 .IX Item "FFLAGS" گزینه‌های کامپایلر Fortran 77 میزبان. زیرمجموعه‌ای از \fBCFLAGS\fR. .IP \fBFCFLAGS\fR 4 .IX Item "FCFLAGS" گزینه‌های کامپایلر Fortran 9x میزبان. مشابه \fBFFLAGS\fR. از نسخهٔ dpkg 1.17.7 به بعد. .IP \fBLDFLAGS\fR 4 .IX Item "LDFLAGS" گزینه‌های ارسال‌شده به کامپایلر میزبان هنگام پیوند دادن (linking) پرونده‌های اجرایی یا اشیای اشتراکی (shared objects). .Sp \&\fBنکته\fR: ارسال مستقیم این متغیر به \fBld\fR\|(1) امن نیست، اما اگر در هر صورت لازم است این متغیر ارسال شود، این گزینه‌ها باید پالایش (sanitize) شوند تا فقط گزینه‌هایی که عملکرد آن‌ها تضمین شده است مجاز باشند. به‌طور کلی گزینه‌های \fB\-Wl\fR، \fB\-l\fR و \fB\-L\fR باید امن باشند، که در آن \fB\-Wl\fR حذف شده و \fB,\fR در آرگومان‌های آن با فاصله جایگزین می‌شود. اما اینکه آیا هر گزینهٔ پالایش‌شده‌ای برای ارسال امن است یا خیر، به معناشناسی مورد نظر در فراخوانی \fBld\fR\|(1) بستگی دارد. .Sp مقدار پیش‌فرض: خالی. .IP \fBASFLAGS_FOR_BUILD\fR 4 .IX Item "ASFLAGS_FOR_BUILD" گزینه‌های اسمبلر ساخت (build). مقدار پیش‌فرض: خالی. از نسخهٔ dpkg 1.22.1 به بعد. .IP \fBCFLAGS_FOR_BUILD\fR 4 .IX Item "CFLAGS_FOR_BUILD" گزینه‌های کامپایلر C ساخت. مقدار پیش‌فرض تنظیم‌شده توسط توزیع‌کننده شامل \fB\-g\fR و سطح بهینه‌سازی پیش‌فرض (معمولاً \fB\-O2\fR، یا \fB\-O0\fR اگر متغیر محیطی \fBDEB_BUILD_OPTIONS\fR مقدار \fInoopt\fR را تعریف کرده باشد) است. از نسخهٔ dpkg 1.22.1 به بعد. .IP \fBCPPFLAGS_FOR_BUILD\fR 4 .IX Item "CPPFLAGS_FOR_BUILD" گزینه‌های پیش‌پردازندهٔ C ساخت. مقدار پیش‌فرض: خالی. از نسخهٔ dpkg 1.22.1 به بعد. .IP \fBCXXFLAGS_FOR_BUILD\fR 4 .IX Item "CXXFLAGS_FOR_BUILD" گزینه‌های کامپایلر ++C ساخت. مشابه \fBCFLAGS_FOR_BUILD\fR. از نسخهٔ dpkg 1.22.1 به بعد. .IP \fBOBJCFLAGS_FOR_BUILD\fR 4 .IX Item "OBJCFLAGS_FOR_BUILD" گزینه‌های کامپایلر Objective C ساخت. مشابه \fBCFLAGS_FOR_BUILD\fR. از نسخهٔ dpkg 1.22.1 به بعد. .IP \fBOBJCXXFLAGS_FOR_BUILD\fR 4 .IX Item "OBJCXXFLAGS_FOR_BUILD" گزینه‌های کامپایلر ++Objective C ساخت. مشابه \fBCXXFLAGS_FOR_BUILD\fR. از نسخهٔ dpkg 1.22.1 به بعد. .IP \fBDFLAGS_FOR_BUILD\fR 4 .IX Item "DFLAGS_FOR_BUILD" گزینه‌های کامپایلر D ساخت (ldc یا gdc). از نسخهٔ dpkg 1.22.1 به بعد. .IP \fBFFLAGS_FOR_BUILD\fR 4 .IX Item "FFLAGS_FOR_BUILD" گزینه‌های کامپایلر Fortran 77 ساخت. زیرمجموعه‌ای از \fBCFLAGS_FOR_BUILD\fR. از نسخهٔ dpkg 1.22.1 به بعد. .IP \fBFCFLAGS_FOR_BUILD\fR 4 .IX Item "FCFLAGS_FOR_BUILD" گزینه‌های کامپایلر Fortran 9x ساخت. مشابه \fBFFLAGS_FOR_BUILD\fR. از نسخهٔ dpkg 1.22.1 به بعد. .IP \fBLDFLAGS_FOR_BUILD\fR 4 .IX Item "LDFLAGS_FOR_BUILD" گزینه‌های ارسال‌شده به کامپایلر ساخت هنگام پیوند دادن پرونده‌های اجرایی یا اشیای اشتراکی. .Sp \&\fBنکته\fR: ارسال مستقیم این متغیر به \fBld\fR\|(1) امن نیست، اما اگر در هر صورت لازم است این متغیر ارسال شود، این گزینه‌ها باید پالایش شوند تا تنها گزینه‌های شناخته‌شده و کارآمد مجاز باشند. به‌طور کلی گزینه‌های \fB\-Wl\fR، \fB\-l\fR و \fB\-L\fR باید امن باشند، که در آن \fB\-Wl\fR حذف شده و \fB,\fR در آرگومان‌های آن با فاصله جایگزین می‌شود. اما اینکه آیا هر گزینهٔ پالایش‌شده‌ای برای ارسال امن است یا خیر، به معناشناسی مورد نظر در فراخوانی \fBld\fR\|(1) بستگی دارد. .Sp مقدار پیش‌فرض: خالی. .Sp از نسخهٔ dpkg 1.22.1 به بعد. .PP در صورت نیاز در آینده ممکن است پرچم‌های جدیدی اضافه شوند (برای مثال جهت پشتیبانی از زبان‌های دیگر). .SH "نواحی ویژگی‌ها (FEATURE AREAS)" .IX Header "FEATURE AREAS" نواحی ویژگی‌ها در حال حاضر وابسته به توزیع‌کننده هستند و موارد شرح داده شده در زیر تنها در دبیان و مشتقات آن شناخته می‌شوند. .PP هر ویژگی در یک ناحیه را می‌توان در مقدار ناحیه در متغیرهای محیطی \fBDEB_BUILD_OPTIONS\fR و \fBDEB_BUILD_MAINT_OPTIONS\fR با علامت‌های اصلاح‌کنندهٔ \(oq\fB+\fR\(cq و \(oq\fB\-\fR\(cq فعال یا غیرفعال کرد. طبق نحو عمومی این متغیرها (توضیح داده شده در \fBdpkg\-buildpackage\fR\|(1))، می‌توان چندین ناحیهٔ ویژگی را با فاصله از یکدیگر مشخص کرد، به طوری که هر یک مشخص‌کننده‌های ویژگی را به عنوان پارامترهای اجباری پس از علامت مساوی (\(oq\fB=\fR\(cq) دریافت می‌کنند. مشخص‌کننده‌های ویژگی با کاما از هم جدا شده و از چپ به راست تحلیل می‌شوند، به طوری که تنظیمات درون همان مشخص‌کنندهٔ ویژگی موارد قبلی را بازنویسی می‌کنند، حتی اگر مشخص‌کننده‌های ویژگی در چندین تنظیم جداشده با فاصله برای یک ناحیه تقسیم شده باشند. .PP برای مثال، برای فعال کردن ویژگی \(lqpie\(rq و غیرفعال کردن ویژگی \(lqfortify\(rq در ناحیهٔ \fBhardening\fR می‌توانید این کار را در \fBdebian/rules\fR انجام دهید: .PP .Vb 1 \& export DEB_BUILD_MAINT_OPTIONS = hardening=+pie,\-fortify .Ve .PP ویژگی ویژهٔ \fBall\fR (معتبر در هر ناحیه‌ای) می‌تواند برای فعال یا غیرفعال کردن تمام ویژگی‌های یک ناحیه به طور هم‌زمان استفاده شود. بنابراین، غیرفعال کردن همه چیز در ناحیهٔ \fBhardening\fR و تنها فعال کردن \(lqformat\(rq و \(lqfortify\(rq می‌تواند با دستور زیر انجام شود: .PP .Vb 1 \& export DEB_BUILD_MAINT_OPTIONS = hardening=\-all,+format,+fortify .Ve .PP چندین ناحیهٔ ویژگی را می‌توان تنظیم کرد: .PP .Vb 1 \& export DEB_BUILD_MAINT_OPTIONS = hardening=+pie abi=+lfs .Ve .PP رفتار بازنویسی همان‌طور که برای ویژگی‌های خاص اعمال می‌شود برای ویژگی ویژهٔ \fBall\fR نیز صدق می‌کند، که این امر امکان ترکیب آن‌ها را فراهم می‌سازد. بنابراین برای فعال کردن \(lqlfs\(rq در ناحیهٔ \fBabi\fR، و فقط \(lqpie\(rq و \(lqfortify\(rq در ناحیهٔ \fBhardening\fR، اما \(lqformat\(rq تنها زمانی که CONDITION تعریف شده باشد، می‌توان بدین صورت عمل کرد: .PP .Vb 6 \& export DEB_BUILD_MAINT_OPTIONS = hardening=\-all,+pie,+format abi=+lfs \& … \& DEB_BUILD_MAINT_OPTIONS += hardening=+fortify \& ifdef CONDITION \& DEB_BUILD_MAINT_OPTIONS += hardening=\-format \& endif .Ve .SS abi .IX Subsection "abi" چندین گزینهٔ زمان کامپایل (با جزئیات در زیر) می‌توانند برای فعال‌سازی ویژگی‌هایی که می‌توانند ABI یک بسته را تغییر دهند استفاده شوند، اما به دلایل سازگاری عقروعطف (backwards compatibility) به صورت پیش‌فرض فعال نمی‌شوند مگر اینکه هماهنگ شده یا به صورت جداگانه بررسی شوند. .IP \fBlfs\fR 4 .IX Item "lfs" این تنظیم (از نسخهٔ dpkg 1.22.0؛ به صورت پیش‌فرض غیرفعال) پشتیبانی از پرونده‌های حجیم (Large File Support یا LFS) را در معماری‌های ۳۲ بیتی که ABI آن‌ها به صورت پیش‌فرض شامل LFS نیست، با افزودن \&\fB\-D_LARGEFILE_SOURCE \-D_FILE_OFFSET_BITS=64\fR به \fBCPPFLAGS\fR فعال می‌کند. .Sp هنگامی که این ویژگی فعال شود، مقدار همان ویژگی در ناحیهٔ ویژگی‌های \fBfuture\fR را بازنویسی خواهد کرد. .IP \fBtime64\fR 4 .IX Item "time64" این تنظیم (از نسخهٔ dpkg 1.22.0؛ به صورت پیش‌فرض فعال به جز برای i386 و hurd\-i386 از نسخهٔ dpkg 1.22.5 به بعد) پشتیبانی از time_t شصت و چهار بیتی را در معماری‌های ۳۲ بیتی که ABI آن‌ها به صورت پیش‌فرض فاقد آن است، با افزودن \fB\-D_TIME_BITS=64\fR به \fBCPPFLAGS\fR فعال می‌کند. این تنظیم به صورت خودکار ویژگی \fBlfs\fR را از ناحیهٔ ویژگی‌های \fBabi\fR فعال می‌سازد. .Sp اگر این تنظیم به صورت صریح فعال شود، در تمامی معماری‌ها از جمله i386 (به جز hurd\-i386 که هستهٔ آن فاقد رابط‌های time64 است) بدون توجه به پیش‌فرض سازگاری عقروعطف باینری فعال می‌شود. .Sp همچنین این ویژگی توسط gcc به طور پیش‌فرض روی معماری‌های دبیان armel، armhf، hppa، m68k، mips، mipsel، powerpc و sh4 فعال است، که در آن‌ها غیرفعال کردن ویژگی به جای آن عبارت \&\fB\-U_LARGEFILE_SOURCE \-U_FILE_OFFSET_BITS \-U_TIME_BITS\fR را به \fBCPPFLAGS\fR اضافه می‌کند. .SS future .IX Subsection "future" چندین گزینهٔ زمان کامپایل (با جزئیات در زیر) می‌توانند برای فعال‌سازی ویژگی‌هایی استفاده شوند که باید به صورت پیش‌فرض فعال باشند، اما به دلایل سازگاری عقروعطف امکان‌پذیر نیست. .IP \fBlfs\fR 4 .IX Item "lfs" این تنظیم (از نسخهٔ dpkg 1.19.0؛ به صورت پیش‌فرض غیرفعال) اکنون یک نام مستعار برای ویژگی \fBlfs\fR در ناحیهٔ \fBabi\fR است؛ به جای آن از مورد مذکور استفاده کنید. ویژگی ناحیهٔ \fBabi\fR این تنظیم را بازنویسی می‌کند. .SS qa .IX Subsection "qa" چندین گزینهٔ زمان کامپایل (با جزئیات در زیر) می‌توانند برای کمک به تشخیص مشکلات در کد منبع یا سیستم ساخت استفاده شوند. .IP \fBbug\-implicit\-func\fR 4 .IX Item "bug-implicit-func" این تنظیم (از نسخهٔ dpkg 1.22.3؛ به صورت پیش‌فرض فعال از نسخهٔ dpkg 1.22.6 به بعد) گزینهٔ \&\fB\-Werror=implicit\-function\-declaration\fR را به \fBCFLAGS\fR اضافه می‌کند. .IP \fBbug\fR 4 .IX Item "bug" این تنظیم (از نسخهٔ dpkg 1.17.4؛ به صورت پیش‌فرض غیرفعال) هر گزینهٔ هشداری را که کدهای منبع مشکل‌دار را به طور قابل اعتمادی تشخیص می‌دهد اضافه می‌کند. این هشدارها مهلک (fatal) هستند. تنها پرچم‌های پشتیبانی‌شده در حال حاضر \fBCFLAGS\fR و \fBCXXFLAGS\fR با پرچم‌های تنظیم‌شده روی \fB\-Werror=array\-bounds\fR، \fB\-Werror=clobbered\fR، \&\fB\-Werror=implicit\-function\-declaration\fR و \&\fB\-Werror=volatile\-register\-var\fR می‌باشند. .Sp این ویژگی در صورتی که گزینهٔ \fBbug\-implicit\-func\fR مشخص نشده باشد، \fB\-Werror=implicit\-function\-declaration\fR را از طریق آن مدیریت می‌کند. .IP \fBcanary\fR 4 .IX Item "canary" این تنظیم (از نسخهٔ dpkg 1.17.14؛ به صورت پیش‌فرض غیرفعال) گزینه‌های ساختگی قناری (canary) را به پرچم‌های ساخت اضافه می‌کند تا لاگ‌های ساخت را بتوان برای چگونگی انتشار پرچم‌های ساخت بررسی کرد و امکان یافتن هرگونه حذف تصادفی تنظیمات عادی پرچم‌های ساخت فراهم شود. تنها پرچم‌های پشتیبانی‌شده در حال حاضر \fBCPPFLAGS\fR، \fBCFLAGS\fR، \&\fBOBJCFLAGS\fR، \fBCXXFLAGS\fR و \fBOBJCXXFLAGS\fR با پرچم‌های تنظیم‌شده روی \fB\-D_\|_DEB_CANARY_\fR\fIflag\fR_\fIrandom\-id\fR\fB_\|_\fR، و \&\fBLDFLAGS\fR تنظیم‌شده روی \fB\-Wl,\-z,deb\-canary\-\fR\fIrandom\-id\fR هستند. .SS optimize .IX Subsection "optimize" چندین گزینهٔ زمان کامپایل (با جزئیات در زیر) می‌توانند برای کمک به بهینه‌سازی باینری نهایی استفاده شوند (از نسخهٔ dpkg 1.21.0 به بعد). \&\fBنکته\fR: فعال‌سازی \fBall\fR (همهٔ) این گزینه‌ها می‌تواند منجر به مصنوعات باینری غیرقابل بازتولید شود. .IP \fBlto\fR 4 .IX Item "lto" این تنظیم (از نسخهٔ dpkg 1.21.0؛ به صورت پیش‌فرض غیرفعال) بهینه‌سازی زمان پیوند (Link Time Optimization) را با افزودن \fB\-flto=auto \-ffat\-lto\-objects\fR به \&\fBCFLAGS\fR، \fBCXXFLAGS\fR، \fBOBJCFLAGS\fR، \fBOBJCXXFLAGS\fR، \&\fBFFLAGS\fR، \fBFCFLAGS\fR و \fBLDFLAGS\fR فعال می‌سازد. .SS sanitize .IX Subsection "sanitize" چندین گزینهٔ زمان کامپایل (با جزئیات در زیر) می‌توانند برای کمک به پاک‌سازی (sanitize) باینری نهایی در برابر خرابی‌های حافظه، نشت حافظه، استفاده پس از آزادسازی (use-after-free)، تداخلات داده‌ای ریس رشته‌ها (threading data races) و باگ‌های رفتار تعریف‌نشده استفاده شوند. \&\fBنکته\fR: این گزینه‌ها نباید \fBnot\fR برای ساخت‌های محیط عملیاتی (production) استفاده شوند، زیرا می‌توانند قابلیت اطمینان کد استاندارد را کاهش دهند و امنیت یا حتی کارایی را مختل کنند. .IP \fBaddress\fR 4 .IX Item "address" این تنظیم (از نسخهٔ dpkg 1.18.0؛ به صورت پیش‌فرض غیرفعال) گزینهٔ \&\fB\-fsanitize=address\fR را به \&\fBLDFLAGS\fR و \fB\-fsanitize=address \-fno\-omit\-frame\-pointer\fR را به \&\fBCFLAGS\fR و \fBCXXFLAGS\fR اضافه می‌کند. .IP \fBthread\fR 4 .IX Item "thread" این تنظیم (از نسخهٔ dpkg 1.18.0؛ به صورت پیش‌فرض غیرفعال) گزینهٔ \&\fB\-fsanitize=thread\fR را به \&\fBCFLAGS\fR، \fBCXXFLAGS\fR و \fBLDFLAGS\fR اضافه می‌کند. .IP \fBleak\fR 4 .IX Item "leak" این تنظیم (از نسخهٔ dpkg 1.18.0؛ به صورت پیش‌فرض غیرفعال) گزینهٔ \&\fB\-fsanitize=leak\fR را به \&\fBLDFLAGS\fR اضافه می‌کند. اگر ویژگی‌های \fBaddress\fR یا \fBthread\fR فعال باشند، این تنظیم به طور خودکار غیرفعال می‌شود چون این ویژگی‌ها متضمن آن هستند. .IP \fBundefined\fR 4 .IX Item "undefined" این تنظیم (از نسخهٔ dpkg 1.18.0؛ به صورت پیش‌فرض غیرفعال) گزینهٔ \&\fB\-fsanitize=undefined\fR را به \&\fBCFLAGS\fR، \fBCXXFLAGS\fR و \fBLDFLAGS\fR اضافه می‌کند. .SS hardening .IX Subsection "hardening" چندین گزینهٔ زمان کامپایل (با جزئیات در زیر) می‌توانند برای کمک به امن‌سازی (hardening) باینری نهایی در برابر حملات خرابی حافظه، یا ارائهٔ پیام‌های هشدار اضافی در زمان کامپایل استفاده شوند. به جز موارد ذکر شده در زیر، این گزینه‌ها برای معماری‌هایی که از آن‌ها پشتیبانی می‌کنند به صورت پیش‌فرض فعال هستند. .IP \fBformat\fR 4 .IX Item "format" این تنظیم (از نسخهٔ dpkg 1.16.1؛ به صورت پیش‌فرض فعال) گزینهٔ \&\fB\-Wformat \-Werror=format\-security\fR را به \fBCFLAGS\fR، \fBCXXFLAGS\fR، \fBOBJCFLAGS\fR و \fBOBJCXXFLAGS\fR اضافه می‌کند. این گزینه دربارهٔ استفاده‌های نادرست از رشته‌های قالب‌بندی هشدار می‌دهد و هنگامی که توابع قالب‌بندی به شیوه‌ای استفاده شوند که مشکلات امنیتی احتمالی ایجاد کند با شکست مواجه می‌شود. در حال حاضر، این تنظیم دربارهٔ فراخوانی‌های توابع \fBprintf\fR و \fBscanf\fR که در آن‌ها رشتهٔ قالب‌بندی یک رشتهٔ لفظی (literal) نیست و هیچ آرگومان قالب‌بندی وجود ندارد هشدار می‌دهد؛ مانند \&\fBprintf(foo);\fR به جای \fBprintf("%s", foo);\fR. اگر رشتهٔ قالب‌بندی از یک ورودی غیرقابل اعتماد آمده باشد و شامل \(oq%n\(cq باشد، این مورد می‌تواند یک حفرهٔ امنیتی باشد. .IP \fBfortify\fR 4 .IX Item "fortify" این تنظیم (از نسخهٔ dpkg 1.16.1؛ به صورت پیش‌فرض فعال) گزینهٔ \&\fB\-D_FORTIFY_SOURCE=2\fR را به \fBCPPFLAGS\fR اضافه می‌کند. در طول تولید کد، کامپایلر اطلاعات زیادی دربارهٔ اندازه‌های بافر (در صورت امکان) می‌داند و تلاش می‌کند تا فراخوانی‌های ناامن توابع با بافر با طول نامحدود را با توابع دارای طول محدود جایگزین کند. این قابلیت به‌ویژه برای کدهای قدیمی و فرسوده مفید است. علاوه بر این، رشته‌های قالب‌بندی موجود در حافظهٔ قابل نوشتن که شامل \(oq%n\(cq هستند مسدود می‌شوند. اگر برنامه‌ای به چنین رشتهٔ قالبی وابسته باشد، باید راهکاری جایگزین برای آن در نظر گرفته شود. .Sp توجه داشته باشید برای اینکه این گزینه اثری داشته باشد، کد منبع باید با \fB\-O1\fR یا بالاتر کامپایل شود. اگر متغیر محیطی \&\fBDEB_BUILD_OPTIONS\fR شامل \fInoopt\fR باشد، به دلیل هشدارهای جدیدی که توسط glibc نسخهٔ 2.16 و بالاتر صادر می‌شود، پشتیبانی از \fBfortify\fR غیرفعال خواهد شد. .IP \fBstackprotector\fR 4 .IX Item "stackprotector" این تنظیم (از نسخهٔ dpkg 1.16.1؛ در صورت عدم استفاده از stackprotectorstrong به صورت پیش‌فرض فعال است) گزینهٔ \fB\-fstack\-protector \-\-param=ssp\-buffer\-size=4\fR را به \fBCFLAGS\fR، \fBCXXFLAGS\fR، \fBOBJCFLAGS\fR، \fBOBJCXXFLAGS\fR، \&\fBFFLAGS\fR و \fBFCFLAGS\fR اضافه می‌کند. این امر بررسی‌های ایمنی در برابر رونویسی پشته (stack overwrite) را اضافه می‌کند. این ویژگی بسیاری از حملات بالقوهٔ تزریق کد را به وضعیت‌های توقف برنامه (abort) تبدیل می‌کند. در بهترین حالت، این گزینه آسیب‌پذیری‌های تزریق کد را به انکار سرویس (DoS) یا به مواردی بی‌اثر (بسته به برنامه) تبدیل می‌کند. .Sp این ویژگی نیازمند پیوند دادن به glibc (یا ارائه‌دهندهٔ دیگری از \&\fB_\|_stack_chk_fail\fR) است، بنابراین هنگام ساخت با \&\fB\-nostdlib\fR یا \fB\-ffreestanding\fR یا موارد مشابه باید غیرفعال شود. .IP \fBstackprotectorstrong\fR 4 .IX Item "stackprotectorstrong" این تنظیم (از نسخهٔ dpkg 1.17.11؛ به صورت پیش‌فرض فعال) گزینهٔ \&\fB\-fstack\-protector\-strong\fR را به \fBCFLAGS\fR، \fBCXXFLAGS\fR، \fBOBJCFLAGS\fR، \fBOBJCXXFLAGS\fR، \&\fBFFLAGS\fR و \fBFCFLAGS\fR اضافه می‌کند. این یک نوع قوی‌تر از \fBstackprotector\fR است، اما بدون افت عملکرد قابل توجه. .Sp غیرفعال کردن \fBstackprotector\fR این تنظیم را نیز غیرفعال می‌کند. .Sp این ویژگی همان نیازمندی‌های \fBstackprotector\fR را دارد، و علاوه بر آن به gcc نسخهٔ 4.9 یا بالاتر نیاز دارد. .IP \fBstackclash\fR 4 .IX Item "stackclash" این تنظیم (از نسخهٔ dpkg 1.22.0؛ به صورت پیش‌فرض فعال) گزینهٔ \&\fB\-fstack\-clash\-protection\fR را در معماری‌های \fBamd64\fR، \fBarm64\fR، \fBarmhf\fR و \fBarmel\fR به \&\fBCFLAGS\fR، \fBCXXFLAGS\fR، \fBOBJCFLAGS\fR، \fBOBJCXXFLAGS\fR، \&\fBFFLAGS\fR و \fBFCFLAGS\fR اضافه می‌کند. این ویژگی کدی برای جلوگیری از حملات به سبک تداخل پشته (stack clash) اضافه می‌کند. .IP \fBbranch\fR 4 .IX Item "branch" این تنظیم (از نسخهٔ dpkg 1.22.0؛ به صورت پیش‌فرض فعال) گزینهٔ \fB\-fcf\-protection\fR را روی \fBamd64\fR و \fB\-mbranch\-protection=standard\fR را روی \fBarm64\fR به \&\fBCFLAGS\fR، \fBCXXFLAGS\fR، \fBOBJCFLAGS\fR، \fBOBJCXXFLAGS\fR، \&\fBFFLAGS\fR و \fBFCFLAGS\fR اضافه می‌کند. این ویژگی حفاظت از شاخه را به فراخوانی‌های غیرمستقیم، پرش‌ها و بازگشت‌ها اضافه می‌کند تا معتبر بودن آن‌ها در زمان اجرا بررسی شود. .IP \fBrelro\fR 4 .IX Item "relro" این تنظیم (از نسخهٔ dpkg 1.16.1؛ به صورت پیش‌فرض فعال) گزینهٔ \&\fB\-Wl,\-z,relro\fR را به \fBLDFLAGS\fR اضافه می‌کند. در هنگام بارگذاری برنامه، چندین بخش حافظهٔ ELF باید توسط پیونددهنده نوشته شوند. این گزینه به بارگذار علامت می‌دهد که این بخش‌ها را پیش از واگذاری کنترل به برنامه، به حالت فقط‌خواندنی درآورد. به‌ویژه این ویژگی از حملات رونویسی GOT جلوگیری می‌کند. اگر این گزینه غیرفعال شود، \&\fBbindnow\fR نیز غیرفعال خواهد شد. .IP \fBbindnow\fR 4 .IX Item "bindnow" این تنظیم (از نسخهٔ dpkg 1.16.1؛ به صورت پیش‌فرض غیرفعال) گزینهٔ \&\fB\-Wl,\-z,now\fR را به \fBLDFLAGS\fR اضافه می‌کند. در هنگام بارگذاری برنامه، تمام نمادهای پویا حل می‌شوند و امکان علامت‌گذاری کل PLT به عنوان فقط‌خواندنی (به دلیل \fBrelro\fR در بالا) فراهم می‌شود. اگر \fBrelro\fR فعال نباشد، این گزینه نمی‌تواند فعال شود. .IP \fBpie\fR 4 .IX Item "pie" این تنظیم (از نسخهٔ dpkg 1.16.1؛ بدون پیش‌فرض سراسری از نسخهٔ dpkg 1.18.23 به بعد، چرا که اکنون به صورت پیش‌فرض توسط gcc در معماری‌های دبیان amd64، arm64، armel، armhf، hurd\-i386، i386، mips، mipsel، mips64el، powerpc، ppc64، ppc64el، riscv64، s390x، sparc و sparc64 فعال است) گزینه‌های لازم را برای فعال یا غیرفعال کردن PIE از طریق پرونده‌های مشخصات (specs) کامپایلر gcc اضافه می‌کند، بسته به اینکه gcc در آن معماری خودش پرچم‌ها را تزریق می‌کند یا خیر. هنگامی که این تنظیم فعال باشد و gcc پرچم‌ها را تزریق کند، چیزی اضافه نمی‌کند. هنگامی که این تنظیم فعال باشد و gcc پرچم‌ها را تزریق نکند، گزینهٔ \&\fB\-fPIE\fR (از طریق \fI/usr/share/dpkg/pie\-compiler.specs\fR) را به \fBCFLAGS\fR، \&\fBCXXFLAGS\fR، \fBOBJCFLAGS\fR، \fBOBJCXXFLAGS\fR، \&\fBFFLAGS\fR و \fBFCFLAGS\fR، و گزینهٔ \&\fB\-fPIE \-pie\fR (از طریق \fI/usr/share/dpkg/pie\-link.specs\fR) را به \fBLDFLAGS\fR اضافه می‌کند. هنگامی که این تنظیم غیرفعال باشد و gcc پرچم‌ها را تزریق کند، گزینهٔ \&\fB\-fno\-PIE\fR (از طریق \fI/usr/share/dpkg/no\-pie\-compile.specs\fR) را به \fBCFLAGS\fR، \&\fBCXXFLAGS\fR، \fBOBJCFLAGS\fR، \fBOBJCXXFLAGS\fR، \&\fBFFLAGS\fR و \fBFCFLAGS\fR، و گزینهٔ \&\fB\-fno\-PIE \-no\-pie\fR (از طریق \fI/usr/share/dpkg/no\-pie\-link.specs\fR) را به \&\fBLDFLAGS\fR اضافه می‌کند. .Sp اجرایی مستقل از موقعیت (Position Independent Executable یا PIE) برای بهره‌برداری از تصادفی‌سازی چیدمان فضای آدرس (Address Space Layout Randomization یا ASLR) که توسط برخی نسخه‌های هسته پشتیبانی می‌شود، مورد نیاز است. در حالی که ASLR از پیش می‌تواند برای نواحی داده در پشته و هیپ (brk و mmap) اعمال شود، نواحی کد باید به صورت مستقل از موقعیت کامپایل شوند. کتابخانه‌های اشتراکی از پیش این کار را انجام می‌دهند (\fB\-fPIC\fR)، بنابراین به طور خودکار از ASLR بهره‌مند می‌شوند، اما نواحی باینری text. برای به دست آوردن ASLR باید به عنوان PIE ساخته شوند. هنگامی که این اتفاق می‌افتد، حملات ROP (برنامه‌نویسی مبتنی بر بازگشت) بسیار دشوارتر می‌شوند زیرا در هنگام حملهٔ خرابی حافظه هیچ مکان ثابتی برای جهش وجود ندارد. .Sp قابلیت PIE با \fB\-fPIC\fR سازگار نیست، بنابراین به طور کلی هنگام ساخت اشیای اشتراکی باید دقت شود. اما از آنجا که پرچم‌های PIE صادرشده از طریق پرونده‌های مشخصات gcc تزریق می‌شوند، تنظیم بدون قید و شرط آن‌ها بدون توجه به نوع شیء در حال کامپایل یا پیوند باید همیشه امن باشد. .Sp کتابخانه‌های ایستا می‌توانند توسط برنامه‌ها یا سایر کتابخانه‌های اشتراکی استفاده شوند. بسته به پرچم‌های استفاده‌شده برای کامپایل تمام اشیا در یک کتابخانهٔ ایستا، این کتابخانه‌ها توسط مجموعه‌های متفاوتی از اشیا قابل استفاده خواهند بود: .RS 4 .IP none 4 .IX Item "none" نمی‌تواند در یک برنامهٔ PIE و همچنین در یک کتابخانهٔ اشتراکی پیوند داده شود. .IP \fB\-fPIE\fR 4 .IX Item "-fPIE" می‌تواند در هر برنامه‌ای پیوند داده شود، اما نه در یک کتابخانهٔ اشتراکی (توصیه‌شده). .IP \fB\-fPIC\fR 4 .IX Item "-fPIC" می‌تواند در هر برنامه و کتابخانهٔ اشتراکی پیوند داده شود. .RE .RS 4 .Sp اگر نیازی به تنظیم دستی این پرچم‌ها با دور زدن تزریق مشخصات gcc وجود داشته باشد، موارد متعددی باید در نظر گرفته شوند. ارسال بدون قید و شرط و صریح \fB\-fPIE\fR، \fB\-fpie\fR یا \fB\-pie\fR به یک سیستم ساخت که از libtool استفاده می‌کند امن است زیرا این پرچم‌ها هنگام ساخت کتابخانه‌های اشتراکی حذف خواهند شد. در غیر این صورت، در پروژه‌هایی که هم برنامه و هم کتابخانه‌های اشتراکی را می‌سازند، ممکن است لازم باشد مطمئن شوید که هنگام ساخت کتابخانه‌های اشتراکی، \fB\-fPIC\fR همیشه به عنوان آخرین گزینه به پرچم‌های کامپایل مانند \fBCFLAGS\fR ارسال شود (تا هرگونه \fB\-PIE\fR قبلی را بازنویسی کند)، و \fB\-shared\fR به عنوان آخرین گزینه به پرچم‌های پیوند مانند \&\fBLDFLAGS\fR ارسال شود (تا هرگونه \fB\-pie\fR قبلی را بازنویسی کند). \&\fBنکته\fR: این کار نباید با سازوکار پیش‌فرض مشخصات gcc مورد نیاز باشد. .Sp علاوه بر این، از آنجا که PIE از طریق یک ثبات عمومی پیاده‌سازی می‌شود، برخی معماری‌های با کمبود ثبات (البته به جز i386 از زمان بهینه‌سازی‌های پیاده‌سازی‌شده در gcc >= 5) می‌توانند در بارهای کاری برنامه‌هایی که بخش کد متنی سنگینی دارند تا ۱۵٪ افت کارایی داشته باشند؛ اکثر بارهای کاری کمتر از ۱٪ افت مشاهده می‌کنند. معماری‌های دارای ثبات‌های عمومی بیشتر (مانند amd64) جریمهٔ بدترین حالت به این بالایی را تجربه نمی‌کنند. .RE .SS reproducible .IX Subsection "reproducible" گزینه‌های زمان کامپایل که در زیر به تفصیل آمده‌اند می‌توانند برای کمک به بهبود بازتولیدپذیری ساخت (build reproducibility) یا ارائهٔ پیام‌های هشدار اضافی در هنگام کامپایل استفاده شوند. به جز موارد ذکر شده در زیر، این گزینه‌ها برای معماری‌هایی که از آن‌ها پشتیبانی می‌کنند به صورت پیش‌فرض فعال هستند. .IP \fBtimeless\fR 4 .IX Item "timeless" این تنظیم (از نسخهٔ dpkg 1.17.14؛ به صورت پیش‌فرض فعال) گزینهٔ \&\fB\-Wdate\-time\fR را به \fBCPPFLAGS\fR اضافه می‌کند. این امر باعث ایجاد هشدار در هنگام استفاده از ماکروهای \fB_\|_TIME_\|_\fR، \fB_\|_DATE_\|_\fR و \&\fB_\|_TIMESTAMP_\|_\fR می‌شود. .IP \fBfixfilepath\fR 4 .IX Item "fixfilepath" این تنظیم (از نسخهٔ dpkg 1.19.1؛ به صورت پیش‌فرض فعال) گزینهٔ \&\fB\-ffile\-prefix\-map=\fR\fIBUILDPATH\fR\fB=.\fR را به \fBCFLAGS\fR، \fBCXXFLAGS\fR، \fBOBJCFLAGS\fR، \fBOBJCXXFLAGS\fR، \&\fBFFLAGS\fR و \fBFCFLAGS\fR اضافه می‌کند، که در آن \fBBUILDPATH\fR برابر با دایرکتوری سطح بالای بستهٔ در حال ساخت تنظیم می‌شود. این اثر باعث حذف مسیر ساخت از هر پروندهٔ تولیدشده می‌شود. .Sp اگر هر دو گزینهٔ \fBfixdebugpath\fR و \fBfixfilepath\fR تنظیم شده باشند، این گزینه اولویت دارد زیرا یک ابرمجموعه از گزینهٔ اول است. .Sp \&\fBنکته\fR: اگر فرایند ساخت، پرچم‌های ساخت را درون اشیای ساخته‌شده نهایی ذخیره کند، بسته غیرقابل بازتولید خواهد شد. و در حالی که غیرفعال کردن این گزینه ممکن است برخی از اشیا را مجدداً بازتولیدپذیر کند، این کار نیازمند غیرفعال کردن \fBfixdebugpath\fR نیز خواهد بود که ممکن است اشیای نمادهای اشکال‌زدایی تولیدشده را غیرقابل بازتولید کند. راهکار ایده‌آل این است که ذخیره‌سازی پرچم‌های ساخت متوقف شود. .IP \fBfixdebugpath\fR 4 .IX Item "fixdebugpath" این تنظیم (از نسخهٔ dpkg 1.18.5؛ به صورت پیش‌فرض فعال) گزینهٔ \&\fB\-fdebug\-prefix\-map=\fR\fIBUILDPATH\fR\fB=.\fR را به \fBCFLAGS\fR، \fBCXXFLAGS\fR، \fBOBJCFLAGS\fR، \fBOBJCXXFLAGS\fR، \&\fBFFLAGS\fR و \fBFCFLAGS\fR اضافه می‌کند، که در آن \fBBUILDPATH\fR برابر با دایرکتوری سطح بالای بستهٔ در حال ساخت تنظیم شده است. این اثر باعث حذف مسیر ساخت از تمام نمادهای اشکال‌زدایی تولیدشده می‌شود. .Sp \&\fBنکته\fR: این ویژگی دارای ویژگی‌های بازتولیدپذیری مشابه با \fBfixfilepath\fR است. .SH "محیط (ENVIRONMENT)" .IX Header "ENVIRONMENT" دو دسته از متغیرهای محیطی وجود دارند که عملیات مشابهی را انجام می‌دهند؛ دستهٔ اول (DEB_\fIflag\fR_\fIop\fR) هرگز نباید در درون \&\fBdebian/rules\fR استفاده شود. این دسته برای هر کاربری است که می‌خواهد بستهٔ منبع را با پرچم‌های ساخت متفاوتی دوباره بسازد. دستهٔ دوم (DEB_\fIflag\fR_MAINT_\fIop\fR) تنها باید در \fBdebian/rules\fR توسط نگه‌دارندگان بسته برای تغییر پرچم‌های ساخت نهایی استفاده شود. .IP \fBDEB_\fR\fIflag\fR\fB_SET\fR 4 .IX Item "DEB_flag_SET" .PD 0 .IP "\fBDEB_\fR\fIflag\fR\fB_MAINT_SET\fR (از نسخهٔ dpkg 1.16.1)" 4 .IX Item "DEB_flag_MAINT_SET (since dpkg 1.16.1)" .PD این متغیر می‌تواند برای تحمیل مقدار بازگردانده‌شده برای \&\fIflag\fR داده‌شده استفاده شود. .IP "\fBDEB_\fR\fIflag\fR\fB_STRIP\fR (از نسخهٔ dpkg 1.16.1)" 4 .IX Item "DEB_flag_STRIP (since dpkg 1.16.1)" .PD 0 .IP "\fBDEB_\fR\fIflag\fR\fB_MAINT_STRIP\fR (از نسخهٔ dpkg 1.16.1)" 4 .IX Item "DEB_flag_MAINT_STRIP (since dpkg 1.16.1)" .PD این متغیر می‌تواند برای ارائهٔ فهرستی از گزینه‌ها (جداشده با فاصله) استفاده شود که از مجموعهٔ پرچم‌های بازگردانده‌شده برای \&\fIflag\fR داده‌شده حذف خواهند شد. .IP \fBDEB_\fR\fIflag\fR\fB_APPEND\fR 4 .IX Item "DEB_flag_APPEND" .PD 0 .IP "\fBDEB_\fR\fIflag\fR\fB_MAINT_APPEND\fR (از نسخهٔ dpkg 1.16.1)" 4 .IX Item "DEB_flag_MAINT_APPEND (since dpkg 1.16.1)" .PD این متغیر می‌تواند برای افزودن گزینه‌های تکمیلی به انتهای مقدار بازگردانده‌شده برای \fIflag\fR داده‌شده استفاده شود. .IP "\fBDEB_\fR\fIflag\fR\fB_PREPEND\fR (از نسخهٔ dpkg 1.16.1)" 4 .IX Item "DEB_flag_PREPEND (since dpkg 1.16.1)" .PD 0 .IP "\fBDEB_\fR\fIflag\fR\fB_MAINT_PREPEND\fR (از نسخهٔ dpkg 1.16.1)" 4 .IX Item "DEB_flag_MAINT_PREPEND (since dpkg 1.16.1)" .PD این متغیر می‌تواند برای افزودن گزینه‌های تکمیلی به ابتدای مقدار بازگردانده‌شده برای \fIflag\fR داده‌شده استفاده شود. .IP \fBDEB_BUILD_OPTIONS\fR 4 .IX Item "DEB_BUILD_OPTIONS" .PD 0 .IP "\fBDEB_BUILD_MAINT_OPTIONS\fR (از نسخهٔ dpkg 1.16.1)" 4 .IX Item "DEB_BUILD_MAINT_OPTIONS (since dpkg 1.16.1)" .PD این متغیرها می‌توانند توسط کاربر یا نگه‌دارنده برای غیرفعال/فعال کردن ویژگی‌های مختلف نواحی که بر پرچم‌های ساخت تأثیر می‌گذارند استفاده شوند. متغیر \fBDEB_BUILD_MAINT_OPTIONS\fR هر تنظیمی را در نواحی ویژگی‌های \&\fBDEB_BUILD_OPTIONS\fR بازنویسی می‌کند. برای جزئیات بیشتر بخش «نواحی ویژگی‌ها (FEATURE AREAS)» را ببینید. .Sp برخی از پروفایل‌های ساخت ممکن است در حال حاضر نیازمند آن باشند که همتای آن‌ها نیز در گزینه‌های ساخت گنجانده شود، فهرست چنین پروفایل‌های ساختی وابسته به توزیع‌کننده است. برای اطلاعات بیشتر دربارهٔ پروفایل‌های ساخت، \fBdpkg\-buildpackage\fR\|(1) را ببینید. .IP \fBDEB_VENDOR\fR 4 .IX Item "DEB_VENDOR" این تنظیم، توزیع‌کنندهٔ فعلی را تعریف می‌کند. اگر تنظیم نشده باشد، توزیع‌کنندهٔ فعلی را با خواندن \&\fB/etc/dpkg/origins/default\fR شناسایی خواهد کرد. .IP \fBDEB_BUILD_PATH\fR 4 .IX Item "DEB_BUILD_PATH" این متغیر مسیر ساخت را (از نسخهٔ dpkg 1.18.8 به بعد) برای استفاده در ویژگی‌هایی مانند \fBfixdebugpath\fR تنظیم می‌کند تا توسط فراخواننده قابل کنترل باشد. این متغیر در حال حاضر مختص دبیان و مشتقات آن است. .IP \fBDEB_HOST_ARCH\fR 4 .IX Item "DEB_HOST_ARCH" معماری میزبان (host) را تنظیم می‌کند. این امر بر پرچم‌های ساخت صادرشده تأثیر می‌گذارد، که معمولاً در هنگام کامپایل متقابل (cross-compiling) که در آن \fBDEB_HOST_ARCH\fR با \fBDEB_BUILD_ARCH\fR متفاوت است، کاربرد دارد. .IP \fBDPKG_COLORS\fR 4 .IX Item "DPKG_COLORS" حالت رنگ را تنظیم می‌کند (از نسخهٔ dpkg 1.18.5 به بعد). مقادیر پذیرفته‌شده در حال حاضر عبارتند از: \fBauto\fR (پیش‌فرض)، \fBalways\fR و \&\fBnever\fR. .IP \fBDPKG_NLS\fR 4 .IX Item "DPKG_NLS" در صورت تنظیم، برای تصمیم‌گیری در مورد فعال‌سازی پشتیبانی از زبان مادری (NLS)، که به عنوان پشتیبانی بین‌المللی‌سازی (یا i18n) نیز شناخته می‌شود، استفاده خواهد شد (از نسخهٔ dpkg 1.19.0 به بعد). مقادیر پذیرفته‌شده عبارتند از: \fB0\fR و \fB1\fR (پیش‌فرض). .SH "فایل‌ها (FILES)" .IX Header "FILES" .SS "پرونده‌های پیکربندی (Configuration files)" .IX Subsection "Configuration files" .IP \fB/etc/dpkg/buildflags.conf\fR 4 .IX Item "/etc/dpkg/buildflags.conf" پروندهٔ پیکربندی در سطح کل سیستم. .ie n .IP "\fR\fB$XDG_CONFIG_HOME\fR\fB/dpkg/buildflags.conf\fR یا" 4 .el .IP "\fR\f(CB$XDG_CONFIG_HOME\fR\fB/dpkg/buildflags.conf\fR یا" 4 .IX Item "$XDG_CONFIG_HOME/dpkg/buildflags.conf or" .PD 0 .ie n .IP \fR\fB$HOME\fR\fB/.config/dpkg/buildflags.conf\fR 4 .el .IP \fR\f(CB$HOME\fR\fB/.config/dpkg/buildflags.conf\fR 4 .IX Item "$HOME/.config/dpkg/buildflags.conf" .PD پروندهٔ پیکربندی کاربر. .SS "پشتیبانی بسته‌بندی (Packaging support)" .IX Subsection "Packaging support" .IP \fB/usr/share/dpkg/buildflags.mk\fR 4 .IX Item "/usr/share/dpkg/buildflags.mk" قطعه‌کد Makefile که تمام پرچم‌های پشتیبانی‌شده توسط \fBdpkg\-buildflags\fR را در متغیرها بارگذاری می‌کند (و در صورت تمایل صادر می‌نماید) (از نسخهٔ dpkg 1.16.1 به بعد). .IP \fB/usr/share/dpkg/buildtools.mk\fR 4 .IX Item "/usr/share/dpkg/buildtools.mk" قطعه‌کد Makefile که ابزارهای مناسب میزبان و ساخت را درون متغیرها تنظیم می‌کند (و در صورت تمایل آن‌ها را صادر می‌نماید) (از نسخهٔ dpkg 1.19.0 به بعد). .SH "مثال‌ها (EXAMPLES)" .IX Header "EXAMPLES" برای ارسال پرچم‌های ساخت به یک دستور ساخت درون یک Makefile: .Sp .Vb 1 \& $(MAKE) $(shell dpkg\-buildflags \-\-export=cmdline) \& \& ./configure $(shell dpkg\-buildflags \-\-export=cmdline) .Ve .PP برای تنظیم پرچم‌های ساخت در یک اسکریپت شل یا قطعه‌کد پوسته، می‌توان از \fBeval\fR برای تفسیر خروجی و صادر کردن پرچم‌ها در محیط استفاده کرد: .Sp .Vb 1 \& eval "$(dpkg\-buildflags \-\-export=sh)" && make .Ve .PP یا برای تنظیم پارامترهای مکانی (positional) جهت ارسال به یک دستور: .Sp .Vb 2 \& eval "set \-\- $(dpkg\-buildflags \-\-export=cmdline)" \& for dir in a b c; do (cd $dir && ./configure "$@" && make); done .Ve .SS "استفاده در debian/rules (Usage in debian/rules)" .IX Subsection "Usage in debian/rules" باید \fBdpkg\-buildflags\fR را فراخوانی کنید یا \fBbuildflags.mk\fR را از پروندهٔ \fBdebian/rules\fR بگنجانید تا پرچم‌های ساخت لازم برای ارسال به سیستم ساخت به دست آیند. توجه داشته باشید که نسخه‌های قدیمی‌تر \fBdpkg\-buildpackage\fR (پیش از dpkg 1.16.1) این پرچم‌ها را به طور خودکار صادر می‌کردند. با این حال، نباید به این موضوع اتکا کنید، زیرا این کار باعث اختلال در فراخوانی دستی \fBdebian/rules\fR می‌شود. .PP برای بسته‌هایی با سیستم‌های ساخت مشابه autoconf، می‌توانید گزینه‌های مربوطه را مستقیماً به configure یا \fBmake\fR\|(1) همان‌طور که در بالا نشان داده شد ارسال کنید. .PP برای سایر سیستم‌های ساخت، یا هنگامی که نیاز به کنترل دقیق‌تری در مورد اینکه کدام پرچم‌ها به کجا ارسال شوند دارید، می‌توانید از \fB\-\-get\fR استفاده کنید. یا می‌توانید به جای آن \fBbuildflags.mk\fR را بگنجانید، که وظیفهٔ فراخوانی \&\fBdpkg\-buildflags\fR و ذخیرهٔ پرچم‌های ساخت در متغیرهای make را بر عهده دارد. .PP اگر می‌خواهید تمام پرچم‌های ساخت را به متغیرهای محیطی صادر کنید (جایی که بتوانند توسط سیستم ساخت شما دریافت شوند): .Sp .Vb 2 \& DPKG_EXPORT_BUILDFLAGS = 1 \& include /usr/share/dpkg/buildflags.mk .Ve .PP برای کنترل بیشتر روی آنچه صادر می‌شود، می‌توانید متغیرها را به صورت دستی صادر کنید (زیرا هیچ‌کدام به صورت پیش‌فرض صادر نمی‌شوند): .Sp .Vb 2 \& include /usr/share/dpkg/buildflags.mk \& export CPPFLAGS CFLAGS LDFLAGS .Ve .PP و البته می‌توانید پرچم‌ها را به صورت دستی به دستورها ارسال کنید: .Sp .Vb 3 \& include /usr/share/dpkg/buildflags.mk \& build\-arch: \& $(CC) \-o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .Ve