site-lib(5) File Formats Manual site-lib(5)

site-lib - مکان پوشه‌های بسته‌ها در findlib

...somewhere in the filesystem hierarchy...
   |
   \ 
     site-lib
     |
     +- (optional) stublibs
     +- (optional) postinstall
     +- (optional) postremove
     |
     +- 
package1

     |  |
     |  +- META
     |  +- 
archive files

     |  +- 
interface definitions

     |
     +- 
package2

     +
     :
     :
     \
        
packageN

هر نصب از «findlib» دارای یک مکان پیش‌فرض برای دایرکتوری‌های بسته‌ها است، که معمولاً پوشه‌ای با نام «site-lib» می‌باشد. این مکان را می‌توان از طریق متغیرهای پیکربندی path (جهت جستجوی بسته‌ها) و destdir (جهت نصب بسته‌های جدید) تنظیم کرد؛ به findlib.conf(5) مراجعه کنید.

نام یک بسته، همان نام پوشه بسته است. به عنوان مثال، اگر destdir=/usr/local/lib/ocaml/site-lib باشد، بسته p در زیرپوشه /usr/local/lib/ocaml/site-lib/p نصب خواهد شد. این زیرپوشه باید شامل فایل META و تمامی فایل‌های دیگر متعلق به آن بسته باشد. نام بسته‌ها نباید حاوی نویسه '.' باشد.

متغیر destdir دایرکتوری را برای بسته‌های جدید مشخص می‌کند. شما تنها می‌توانید یک دایرکتوری از این دست در یک زمان داشته باشید؛ اما البته می‌توانید این دایرکتوری را در findlib.conf تغییر دهید. دستور ocamlfind install بسته‌های جدید را در این پوشه قرار می‌دهد؛ توصیه می‌شود برای نصب از این دستور استفاده کنید زیرا تضمین می‌کند که ساختار و چیدمان پوشه درست باشد.

برای جستجوی بسته‌ها، findlib (تنها) از متغیر path استفاده می‌کند که می‌تواند نام چندین مکان را برای جستجو در بر داشته باشد.

برای سیستم‌هایی با پشتیبانی از DLL، دایرکتوری دیگری ممکن است وجود داشته باشد: stublibs. در صورت وجود، findlib کتابخانه‌های DLL را در این دایرکتوری که میان تمام بسته‌ها در همان مکان site-lib مشترک است نصب می‌کند. Findlib با استفاده از فایل‌های ویژه‌ای با پسوند «.owner» به خاطر می‌سپارد که کدام DLL متعلق به کدام بسته است؛ برای نمونه برای DLL با نام "dllpcre.so" فایل دیگری به نام "dllpcre.so.owner" حاوی رشته "pcre" وجود دارد، بنابراین findlib متوجه می‌شود که بسته "pcre" مالک این DLL است. ممکن نیست که یک DLL متعلق به چند بسته باشد.

اگر پوشه stublibs وجود نداشته باشد، DLLها مانند هر فایل دیگری به طور عادی در پوشه‌های بسته‌ها نصب می‌شوند.

برای نیازهای خاص، ممکن است یک اسکریپت postinstall و/یا postremove در پوشه site-lib نصب شود. این اسکریپت‌ها به ترتیب پس از نصب یا حذف یک بسته فراخوانی می‌شوند.

...somewhere in the filesystem hierarchy...
   |
   \ 
     site-lib
     |
     +- (optional) stublibs
     +- (optional) postinstall
     +- (optional) postremove
     |
     +- 
package1

     |  |
     |  +- 
archive files

     |  +- 
interface definitions

     |
     +- 
package2

     +
     :
     :
     \
  :     
packageN

  |
  \
    metaregistry
    |
    +- META.package1
    +- META.package2
    +
    :
    \
       META.packageN

این یک چیدمان پوشه‌ای جایگزین است که تمام فایل‌های META را در یک دایرکتوری جمع‌آوری می‌کند. می‌توانید با تنظیم path به مکان مطلق metaregistry این چیدمان را پیکربندی کنید. Findlib تشخیص می‌دهد که فایل‌های META در این دایرکتوری وجود دارند و از آن‌ها استفاده می‌کند؛ نیازی به گنجاندن site-lib در متغیر path نیست.

برای اینکه این چیدمان کار کند، فایل‌های META باید حاوی یک دستورالعمل directory باشند که به پوشه بسته مربوطه که در زیر site-lib قرار دارد اشاره کند.

دستور ocamlfind install با این چیدمان نیز سازگار است. متغیر destdir باید حاوی مکان مطلق site-lib باشد، و متغیر metadir باید مکان مطلق metaregistry را در بر گیرد. توجه داشته باشید که ocamlfind install به طور خودکار یک دستورالعمل directory را به فایل META اضافه می‌کند، بنابراین نیازی نیست که آن را به صورت دستی اضافه کنید.

The findlib package manager for OCaml User Manual