Saturday, June 28, 2014

Libtool: Library version info

سلام

چنانچه در محیط لینوکس از ابزارهای Auto همچون Autoconf و Automake جهت خودکار کردن فرآیند تولید خود استفاده میکنید، لازم است از قاعده تعریف شماره ویرایش (Version) کتابخانه‌ها در libtool آگاه بوده و شیوه ویرایش گذاری خود را با آن مطابقت دهید.
شیوه تعریف شماره ویرایش برای کتابخانه فرضی test به این شرح است:

libtest_la_LDFLAGS= -version-info c:r:a

c: نشانگر Current به معنای شماره ویرایش فعلی رابط (Interface)  کتابخانه است.
r: به معنای شماره revision یا شماره بازبینی است
a: نشانگر age یا نسل است.

نحوه انجام تغییرات در اعداد از یک ویرایش به ویرایش دیگر به این شکل است:
  1. چنانچه کتابخانه نسبت به کتابخانه قبلی تغییری در رابط (Interface) ندارد و صرفا نحوه پیاده‌سازی تغییر کرده و یا باگی رفع شده است، عدد r یکی اضافه میشود.
  2. در غیر اینصورت در تمامی موارد r صفر میشود و عدد c یکی اضافه میشود و برای a دو احتمال وجود دارد
    1. چنانچه رابط کتابخانه تغییر کرده است اما با ویرایش قبلی سازگار است (پشتیبانی میکند) عدد a یکی اضافه میشود.
    2. چنانچه رابط کتابخانه به شکلی تغییر کرده که ویرایش قبلی را پشتیبانی نمیکند، عدد a به صفر تغییر میکند
با این فرمول، هنگامی که کتابخانه‌ای به صورت c.r.a ویرایش گذاری شود، بدین معنا است که تمامی Interfaceهای از ویرایش c-a تا c را پشتیبانی میکند. کتابخانه حاصل از این ویرایش به این شکل نامگذاری خواهد شد:
libtest.so.$((c - a).a.r

تلفیق با شیوه major.minor.micro

با توجه به اینکه عادتی در ویرایش گذاری برنامه‌ها با ترکیب سه عدد major.minor.micro‌ وجود دارد، میتوان با فرمول زیر بین این دو استاندارد مطابقت ایجاد کرد:
c = major + minor
r = micro
a = minor
شروط حاکم بر نحوه تغییر این اعداد به این شکل است:
  1. چنانچه کتابخانه نسبت به کتابخانه قبلی تغییر رابط ندارد، و صرفا نحوه پیاده‌سازی تغییر کرده است و یا اینکه باگی رفع شده است، عدد micro یک عدد اضافه میشود.
  2. چنانچه رابط کتابخانه تغییر کرده است اما با ویرایش قبلی سازگاری دارد (عدم تغییر در پارامترهای ورودی و یا هر گونه تغییر ساختاری دیگر)، و صرفا مواردی به رابط اضافه شده است، عدد minor یک عدد اضافه میشود و عدد micro صفر میشود.
  3. چنانچه تغییرات در رابط کتابخانه با ویرایش قبلی سازگاری ندارد، عدد major یک عدد اضافه میشود و اعداد micro و minor صفر میشوند.

No comments: