| META(5) | File Formats Manual | META(5) |
نام (NAME)
META - فایل توصیف پکیج در کتابخانه OCaml findlib
گرامر (GRAMMAR)
metafile ::= entry*
entry ::= assignment | addition | subpackage
subpackage ::= "package" pkgname '(' metafile ')'
assignment ::= variable_name [ formal_predicates ] '=' value
addition ::= variable_name [ formal_predicates ] '+=' value
formal_predicates ::= '(' formal_predicate { ',' formal_predicate } ')'
variable_name ::= name
formal_predicate ::= name | '-' name
name ::= [ 'A'-'Z' 'a'-'z' '0'-'9' '_' '.' ]+
pkgname ::= '"' (character but not '.')* '"'
value ::= '"' character* '"'
توضیحات (DESCRIPTION)
اگر دایرکتوری یک بسته حاوی فایلی با نام ثابت "META" باشد، مطابق آنچه در اینجا شرح داده شده تفسیر میشود. این فایل دنبالهای از ورودیهاست که از گرامر ارائهشده پیروی میکنند؛ هر ورودی یک متغیر را تحت شرایط خاصی که با فهرستی از گزارههای صوری مشخص میشود تعریف میکند، یا یک زیربسته (subpackage) را معرفی مینماید.
فهرستی از متغیرهای از پیش تعریفشده و فهرستی از گزارههای استاندارد وجود دارد. این متغیرها مواردی همچون بستههای مورد نیاز، توضیحات، اطلاعات نسخه، دایرکتوریها، فایلهای آرشیو و گزینههای پیونددهنده را تعریف میکنند. گزارهها شرایط بهکارگیری متغیرها را مشخص میسازند: اینکه آیا از کامپایلر بایتکد یا کامپایلر محلی (native) استفاده میشود، آیا یک toploop در برنامه کامپایل شده است یا خیر، جزئیات اجرای چندنخی (multi-threading)، و جزئیات پروفایلینگ (profiling).
جزئیات قالب فایل (DETAILS OF THE FILE FORMAT)
این فایل از دنبالهای از ورودیها تشکیل شده که باید به همان صورتی که در گرامر مشخص شده است شکل بگیرند. نشانههای واژگانی (lexical tokens) عبارتند از نامها، مقادیر و علائم نگارشی مانند '(', ',' و غیره. توجه داشته باشید که شکستن خطوط (linefeeds) نقش خاصی ایفا نمیکنند، یعنی تعریف یک ورودی میتواند در بیش از یک خط آورده شود یا چندین تعریف ممکن است در یک خط قرار گیرند. همچنین ممکن است کامنتهایی وجود داشته باشند که با '#' آغاز شده و تا پایان خط ادامه پیدا میکنند.
نامها دنبالهای از نویسههای A-Z، a-z، 0-9 یا _ هستند. نامهای حاوی حروف بزرگ و نامهایی که با ارقام شروع میشوند مجاز هستند اما توصیه نمیشوند.
مقادیر درون نقلقولهای دوتایی (double quotes) قرار میگیرند. مقادیر میتوانند حاوی هر نویسهای باشند. قبل از نویسههای " و \ باید از بکاسلش استفاده شود.
نامهای بستهها نباید حاوی نویسه '.' باشند زیرا این نویسه به عنوان جداکننده نامهای مرکب به کار میرود.
بستههای اصلی و زیربستهها (MAIN PACKAGES AND SUBPACKAGES)
بیرونیترین انتسابها و الحاقهای متغیر متعلق به بسته اصلی هستند. نام بسته اصلی درون META تعریف نمیشود؛ این نام یا نام دایرکتوری حاوی META است یا پسوند فایل META (در صورتی که نام فایل META به شکل META.name تشکیل شده باشد).
کلیدواژه package تعریف یک زیربسته را آغاز میکند. نباید دو تعریف از این نوع با نام یکسان وجود داشته باشد. در داخل پرانتزها، انتسابها و الحاقهای متغیر به زیربسته ارجاع دارند. یک زیربسته مجاز است حاوی زیربستههای بیشتری نیز باشد.
نام بستهای که پس از package میآید نام محلی نسبت به بسته اصلی است؛ یعنی نام بسته اصلی ذکر نمیشود. با این حال، در تمام جاهای دیگر، نام زیربسته باید با نام بسته حاوی آن و با علامت '.' پیشوندگذاری شود.
زیربستهها از بسته حاوی خود مستقل هستند، به جز اینکه زیربسته به همان دایرکتوری نصبی اشاره میکند که بسته حاوی آن اشاره دارد (یعنی مکان دایرکتوری نصب از بسته حاوی آن به ارث برده میشود).
معناشناسی تعاریف متغیرها (SEMANTICS OF VARIABLE DEFINITIONS)
به منظور تعیین مقدار یک متغیر، ابتدا تمام انتسابها بررسی میشوند و خاصترین انتساب انتخاب میگردد (اگر هیچ انتسابی وجود نداشته باشد، رشته خالی به عنوان مقدار در نظر گرفته خواهد شد). در گام دوم، تمام الحاقها یکی پس از دیگری به ترتیبی که در فایل آمدهاند بررسی میشوند و مقادیر تمام الحاقهای منطبق به مقدار فعلی اضافه میگردند. در ادامه توضیح داده میشود که کدام انتساب خاصترین است، کدام الحاقها واقعاً منطبق هستند، و جزئیات افزودن مقدار چگونه است.
خاصترین انتساب بر اساس مجموعهای از گزارههای واقعی (actual predicates) انتخاب میشود؛ یعنی مجموعهای از گزارهها که فرض میشود درست هستند. گزارههایی که در تعاریف انتسابها و الحاقها ظاهر میشوند «گزارههای صوری» (formal predicates) نامیده میشوند. این گزارهها ممکن است مثبت یا منفی باشند؛ گزارههای منفی با یک علامت '-' پیشوندگذاری میشوند. برای تعیین مقدار پس از ارزیابی انتسابها، قوانین زیر اعمال میشوند:
یک الحاق زمانی منطبق است که تمام گزارههای صوری مثبت در مجموعه گزارههای واقعی گنجانده شده باشند، و تمام گزارههای صوری منفی گنجانده نشده باشند.
مقدار یک الحاق به همراه یک فاصله خالی ضمنی به عنوان جداکننده، به مقدار فعلی افزوده میشود.
متغیرها (VARIABLES)
مجموعهای از متغیرها با معانی از پیش تعریفشده وجود دارند:
نام فایلها باید با فاصله خالی و/یا کاما از یکدیگر جدا شوند. در مرحله پیشپردازنده، فایلهای آرشیو به عنوان افزونه به فراخوانی پیشپردازنده (camlp4) ارسال میشوند. در مرحله پیونددهنده (-linkpkg)، فایلهای آرشیو پیوند داده میشوند. در مرحله کامپایلر، فایلهای آرشیو نادیده گرفته میشوند.
توجه داشته باشید که "archive" فقط باید برای فایلهای آرشیوی استفاده شود که قرار است در فایلهای اجرایی گنجانده شوند یا در toploop بارگذاری گردند. برای ماژولهایی که در زمان اجرا بارگذاری میشوند، متغیر جداگانه "plugin" وجود دارد.
تعریف متغیرهای اضافی امکانپذیر است اما در حال حاضر هیچ نرمافزاری برای تفسیر آنها وجود ندارد.
گزارهها (PREDICATES)
فهرستی از گزارههای استاندارد وجود دارد:
علاوه بر این گزارهها، برای هر بستهای که در نهایت انتخاب شود گزارههای بسته (package predicates) وجود دارند. البته این نوع از گزارهها نباید برای انتخاب متغیرهای "directory" و "requires" استفاده شوند، اما برای سایر متغیرها کاملاً معتبر هستند. گزارههای بسته به شکل "pkg_" به همراه نام بسته (به صورت کامل و واجد شرایط) هستند.
| The findlib package manager for OCaml | User Manual |