كيفية بناء LibreOffice

From The Document Foundation Wiki
Jump to: navigation, search

هذه الصفحة توضح كيفية بناء نسخة التطوير الحالية من LibreOffice، استنادا إلى مخزن git المسمى 'core'، تم توثيق كيفية بناء الاصدارات القديمة مثل 3.3 و 3.4 هنا.


الإعداد

المتطلبات

الخطوة الأولى هي التأكد من أن لديك كافة المتطلبات اللازمة لمنصتك لبناء المنتج. هناك صفحات تفصل ماهي هذه التبعيات وكيفية تثبيتها على ويندوز، لينكس و ماك.


مساحة القرص

كحد أدنى، مع جميع مخازن git، و بناء وحزم المنتج، سوف تحتاج تقريبا ما بين 7 إلى 10 جيجابايت من مساحة القرص، يعتمد على منصة التشغيل، خيارات البناء وخيارات autogen التي استخدمتها، سوف تحتاج إلى بضعة جيجابايت أخرى إذا كنت قد اخترت "بناء تصحيح العلل".

ضع في الاعتبار إذا كنت تريد أكثر من بناء المنتج مره واحد للمتعة، فإنك على الأرجح تريد الحصول على أكثر من مجلد عمل (سوف نرى لاحقاً كيفية تطبيق ذلك). Workdir يسمح لك بالحصول على بيئة بناء منفصله بدون الحاجة لتكرار تاريخ الـ git، ولكن لازال سوف يكلفك من 6 إلى 9 جيجابايت لكل workdir.


الحصول على المصادر

في بقية هذه الدروس سوف نعمل في ~/git . بالطبع أنت حر في اختيار المجلد الذي تريد أن يكون نقطة البداية. الآن دعنا نعمل على تنزيل مخزن 'core' git:

$ mkdir git
$ cd git
$ git clone git://anongit.freedesktop.org/libreoffice/core libo
Cloning into libo...
Remote: Counting objects: 76845, done.
remote: Compressing objects: 100% (17328/17328), done.
remote: Total 76845 (delta 60786), reused 74045 (delta 58579)
Receiving objects: 100% (76845/76845), 15.82 MiB | 1.17 MiB/s, done.
Resolving deltas: 100% (60786/60786), done.
$ cd libo

"ملاحظة 1": إذا كان لديك وصول SSH، قد ترغب في الاستنساخ باستخدام هذا الأمر:

$ git clone ssh://<<username>>@git.freedesktop.org/git/libreoffice/core libo


"ملاحظة 2": بناء على موقعك، الوقت الخ.، استنساخ جميع مخازن git قد يكون بطيئاً، أو حتى قد يفشل بعد فترة من الوقت. لهذه الحالة, نقدم tarballs محدث أسبوعياً من المخازن. إذا واجهتك مشكلة مع howto أعلاه، قم بتنزيل الشفرة النصية "shell script" التالي libo_git_from_tar.sh وتشغيل، على سبيل المثال:

$ mkdir git
$ ./libo_git_from_tar.sh -d ./git/libo

الرجاء تشغيل ./libo_git_from_tar.sh --help للمزيد من المعلومات حول كيفية استخدامه.


التحقق من فرع الاصدار

بشكل افتراضي git يعطيك الفرع الرئيسي ‘master’ للاستنساخ الجديد. إذا اردت تغيير نسخة العمل إلى فرع الاصدار، قم بهذا (قبل تشغيل 'autogen.sh'):

$ git checkout -b libreoffice-3-5 origin/libreoffice-3-5

بعد استنساخك للمخازن الأخرى ( انظر إلى 'make fetch' أدناه)، افعل التالي لتبديلها إلى فرع الاصدار أيضاً:

$ ./g checkout -b libreoffice-3-5 origin/libreoffice-3-5


Autogen

الآن أنت بحاجة إلى ضبط البناء الخاص بك. يتم ذلك عن طريق تشغيل شفرة نصية يدعى 'autogen.sh'. هناك العديد من الخيارات التي يمكن أن تُعطى لتلك الشفرات النصية، يرجى الرجوع إلى هذه الصفحة التي تصف الخيارات للحصول على المعلومة.

بعد تشغيل autogen.sh لأول مرة، يمكنك أيضا الحصول على قائمة من الخيارات عن طريق تشغيل:

$ ./autogen.sh
[long output]
$ ./autogen.sh --help
'configure' configures LibreOffice 3.3 to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
[....]

الخيارات تختلف، اعتماداً على التوزيعة والمنصة الخاصة بك. إليك بعض الأمثلة:

$ ./autogen.sh --with-num-cpus=6 --with-max-jobs=6 --without-junit # used on linux
$ ./autogen.sh --with-max-jobs=8 --with-num-cpus=8 # used on MacOS
$ ./autogen.sh --without-help --without-myspell-dicts # without external repositories (only core)


بناء

البناء الأول

في المرة الأولى التي يتم فيها استدعاء make، سوف تقوم بتنزيل مخازن git الأخرى اللازمة (إن وجدت) وغيرها من الحزم الخارجية.

بناء المنتج يمكن أن يستغرق (8\عدد_النواة) من الساعات على المعالجات الحديثة المعقولة، وأكثر بكثير على Windows.

$ make

بالإضافة لما سبق، قد ترغب في استخدام make 2>&1 | tee build.log -- هذا الأمر يستخدم لحفظ مخرجات make في ملف (build.log)، وبالتالي يمكنك العودة إليه لاحقاً للتحقق إذا لزم الأمر. عند استنساخ git جديد، التنزيل وتنفيذ make قد يستغرق بعض الوقت. لتجنب انهاء العملية بالخطأ، يمكنك استخدام nohup make على النحو التالي: nohup make & والذي قد يزعجك nohup: ignoring input and appending output to `nohup.out. بعد ذلك يمكنك التحقق من التقدّم باستخدام tail -f nohup.out.

إذا فشل البناء، تحقق من استيفاء جميع المتطلبات المذكوره في أعلى هذه الصفحة.


ابدأ ماكنت قد بنيت

لتشغيل الـLibreOffice الذي بنيت، نفذ

$ make dev-install

في المخرجات سوف تظهر كيفية بدء تشغيل البرنامج. عادة ماتكون هكذا ../libo/install/program/soffice، والتي تأتي من Makefile.


إعادة البناء و البناء الجزئي

إعادة البناء

إذا قمت بتعديل المصادر، أو قمت بسحب آخر التحديثات إلى مخزن git الخاص بك، تستطيع إعادة البناء ببساطة عن طريق تشغيل:

$ make

في بعض الأحيان، غالباً بسبب أن ملف الترويسة "header file" قد تم حذفه أو تغيير اسمه، فمن اللازم عمل إعادة بناء كاملة.

$ make clean && make


بناء جزئي

بطبيعة الحال، وبسبب الوقت المستغرق، فإن إعادة البناء بالكامل ليس الخيار الأول. عند حدوث مشكلة في وحدة معينة، يمكنك إعادة بناء تلك الوحدة فقط.

$ make <module>.clean
$ make <module>

ولوحدات dmake تحتاج إلى 'deliver' بعد القيام ببناء ناجح.

$ make <module>.deliver


فشل البناء .. ماذا يمكنني أن أفعل؟

استخدام فرع تطوير حديث يعني أنك، في أكثر الأحيان، قد تواجه مقاطعة. الأمور لن تعمل تماما كما هو متوقع.

وفيما يلي رسالة تدل على فشل بناء:


Making:    libslideshowtestlx.so
slideshow deliver
Module 'slideshow' delivered successfully. 2 files copied, 2 files unchanged

-----------------------------------------------------------------------
        Oh dear - something failed during the build - sorry !
  For more help with debugging build errors, please see the section in:
            [[Development]]

  internal build errors:

ERROR: error 65280 occurred while making /lo/libo/connectivity/source/cpool

 it seems that the error is inside 'connectivity', please re-run build
 inside this module to isolate the error and/or test your fix:
-----------------------------------------------------------------------
[...]
make: *** [all] Error 1

ملاحظة: لا ترسل رسالة الخطأ السابقة إلى القائمة البريدية. فكل ما تقوله الرسالة أن بناء الوحدة 'connectivity' قد فشل لأسباب غير معروفة إلى الآن. انظر إلى الملف المسمى build_error.log. فهو يحوي سجلات عن الوحدات التي فشلت.

انظر إلى جزئية البناء الجزئي لمعرفة كيفية اعادة بناء وحدة معينة.

وأخيرا، إذا لم يكن هناك خيارات أخرى، يمكنك استئناف عملية الترجمة " compilation" من الصفر في المجلد الجذر:

$ make clean && make


نصائح للبناء

make fetch

عند قيامك بالبناء لأول مره، سوف يتم تزيل عدد من الـ tarballs الخارجية قبل البدء بعملية البناء الحقيقة. إذا أردت البناء بدون اتصال بالإنترنت، نفذ التالي:

$ make fetch

هذا الأمر يقوم بتنزيل مخازن git الأخرى وحزم tar.gz اللازمة قبل القيام بعملية البناء. إذا لم تقم بذلك يدوياً، فإن make سوف يفعل ذلك في كل الأحوال، ولكن تشغيل make fetch لأول مره يسمح لك بمراقبة نشاط التنزيل.


البناء المسهب وبناء تصحيح العلل

بناء مُسهب

إذا كنت ترغب في الحصول خلال البناء على مخرجات بالتفاصيل:

$ make verbose=t


الحصول على مخرجات تصحيح العلل

إذا كنت تريد الحصول على مخرجات استدعاءات OSL_TRACE() ورسائل تصحيح العلل الأخرى:

$ make -s dbglevel=2

مع نظام البناء القديم:

$ build debug=t dbglevel=2


الحصول على رموز تصحيح العلل

إذا أردت تمكين الرموز للتنميط ، تصحيح العلل باستخدام gdb .. الخ، ولكن لا تريد تشغيل مخرجات تصحيح العلل أو تغيير اعدادات المترجم المثلى، شغل التالي:

$ make -s ENABLE_SYMBOLS=true

مع نظام البناء القديم:

$ build -- ENVCFLAGS+=-g

بناء تصحيح العلل الجزئي

ينبغي عليك القيام ببناء تصحيح العلل للوحدة، لرؤية المزيد من رسائل تصحيح العلل أثناء تشغيل الـLibreOffice، يمكنك اضافة debug=build كمعطى للبناء، مثل:

$ make -s clean
$ make -s debug=true

بناء الجملة مشابه لنظام البناء القديم:

$ rm -r $INPATH
$ build debug=true


الأداء

بناء LibreOffice يستغرق وقتا طويلاً. الوقت المستغرق بالضبط يعتمد على قهوة جهازك. ولكن هناك أدوات يمكنك استخدامها لتسريع الأمور.


ccache

ccache هي أداة تقوم بتخزين نتائج ترجمة c\c++ في مخبأ "cache" لإعادة استخدامها لاحقاً. لن يعمل ذلك على تسريع عملية البناء الأولي (بل على النقيض من ذلك قد يبطئ عملية البناء)، ولكن سوف يعمل على تسريع إعادة البناء بشكل كبير. إن كنت تخطط لبعض التعديل في LibreOffice فهذه الأداة تستحق الاقتناء. بشكل افتراضي، سيتم تمكين ccache تلقائياً إذا وجد في نظامك. للحصول على أفضل النتائج، قم بزيادة حجم المخبأ أو قم بتمكين ضغط المخبأ.

لمزيد من المعلومات، نفذ "man ccache".

لاحظ أن حجم المخبأ الافتراضي هو 1 جيجابايت وذلك أقل بكثير من المطلوب لتحقيق الفائدة المرجوة من المخبأ خلال بناء LibreOffice. للبناء بدون رموز تصحيح العلل تحتاج على الأقل إلى مخبأ بحجم 8 جيجابايت، وللبناء مع رموز تصحيح العلل وغيرها تحتاج على أقل إلى 32 جيجابايت كبداية. تستطيع تعيين الحجم عن طريق تنفيذ التالي:

 ccache --max-size 32G 


ccache يدعم الضغط، والذي هو بالطبع فكرة جيدة ، خصوصاً إذا كنت تستخدم وسائط تخزين صغيرة أو بيطئة. يمكنك تمكين الضغط عن طريق إضافة التالي إلى .bashrc أو مايعادلها:

 export CCACHE_COMPRESS=1 


distcc / Icecream

إذا كنت في بيئة حيث يمكنك الوصول إلى عدة أجهزة تحتوي على دورات احتياطية من وحدة المعالجة المركزية، يمكنك إلقاء نظرة على distcc و icecream، وهي أدوات البناء الموزع "distributed build".

LibreOffice يدعم Icecream، كل ما عليك فعله هو إضافة --enable-icecream إلى ./autogen.sh، وعملية الضبط سوف تحدد مسبقاً عدد الوظائف للاستخدام، أيضاً سوف تحاول إيجاد مترجم "gcc" icecream المتضمن في /opt/icecream/bin . إذا كان مترجم "gcc" icecream موجود في مكان آخر، فضلا استخدم --with-gcc-home=/path/to/your/icecream/bin لتغيير المكان.


--with-max-jobs / --with-num-cpus

يمكن تشغيل عدة مهام من عملية البناء في نفس الوقت. يتم التحكم بالموازاة الكلية عن طريق معطى الـAutogen --with-max-jobs و الموازاة داخل مهمة فرعية عن طريق --with-num-cpus.

إذا كان لديك ذاكرة كافية، فإن أسرع وقت للبناء يمكن ايجاده عن طريق استخدام:

--with-max-jobs=n --with-num-cpus=n "حيث n هي عدد النواة"

أو

--with-max-jobs=2 --with-num-cpus=n "إذا كان لديك نواة واحدة فقط"

القيمة الافتراضية لـ --with-max-jobs هي 1، والقيمة الافتراضية لـ --with-num-cpus هي (عدد النواة\عدد وحدات المعالجة المركزية) في نظامك. لاحظ أن صافي التأثير مضاعف، وبالتالي مزامنة العمليات عائدة إلى منتجاتها.


أعلام المترجم

بعض أعلام المترجم، أبرزها تحسين الأداء و معلومات تصحيح العلل، تعمل على تمكين ميزات اضافية للمترجم، وذلك يجعل البناء يستغرق وقتاً أطول. إذا كنت لا تحتاج إلى هذه الميزات وتريد أن يكون البناء بأسرع وقت ممكن، يمكن تعطيلها عن طريق إعداد CFLAGS/CXXFLAGS للمترجم "gcc" عند تشغيل make:

$ CFLAGS='-O0 -g0' CXXFLAGS='-O0 -g0' make

لاحظ أنه في التطوير عادة تريد ضبط البناء مع على الأقل --enable-symbols، والتي تعمل على تشغيل معلومات تصحيح العلل، لذلك لا يمكن تطبيق هذا بشكل عام.


أوقات تقريبية

يستغرق البناء الأولي في Gentoo مع معالج Athlon 435 X3 و ccache وبدون جافا أو epm تقريبا ساعة ونصف. عمليات البناء اللاحقة تستغرق مابين دقيقتين إلى 10 دقائق (اعتماداً على عدد الملفات المعدلة أو المضافة وتعقيدها).


بعض الأوامر المفيدة الأخرى التي يمكنك استخدامها في البناء (GNU make فقط)

لمعرفة الخيارات المتاحة الأخرى خلال البناء الجزئي للوحدة، شغل:

$ make help

لاحظ أن هذا يختلف عن تشغيل make -h، الذي يسرد أوامر GNU make.


البناء في Windows مع Visual Studio Express و Cygwin

البناء على Windows مع Cygwin خاص قليلا، فلا يمكن تطبيق جميع المعلومات الواردة هنا. تم جمع بعض الملاحظات على هذا البناء هنا.

إذا واجهك انقطاع غامض في البناء أو تعليق في النظام، فقد تكون قمت بتشغيل تطبيق يتداخل مع Cygwin، لمزيد من التفاصيل انظر [1].


تمكين Mozilla

اعتباراً من 11 يونيو 2012، تم تعطيل موزيلا بشكل افتراضي لأن المستخدمين على منصات متعددة قد واجهوا مشاكل أثناء البناء بدون اضافة خيار --disable-mozilla. إذا كنت تريد اختبار، تجربة أو استخدام أي من الميزات الموجودة في شفرة موزيلا يجب عليك تمكين موزيلا عن طريق استخدام الخيار --enable-mozilla. الأشخاص الذين أبلغوا عن المشاكل كانوا يستخدمون أجهزة تحتوي على نظام أوبنتو، ويندوز و ماك.


مثبِّت متعدد اللغات في ويندوز

من أجل بناء المثبت متعدد اللغات على ويندوز، أولا يجب عليك اكمال البناء حتى النهاية، ثم القيام بالتالي:

  cd instsetoo_native/util
  dmake openoffice_<locale>,<locale>,....   (comma separated list of locales)


حيث يمكنك تحديد الإعدادات الاقليمية التي تريد تضمينها في المثبت. لا تنسى أن تستخدم الخيار --with-lang="<locale> <locale> ... " في البناء، وذلك من أجل إتاحة تلك الإعدادات الاقليمية أثناء البناء.


مجلد العمل المتعدد

إذا كنت تريد العمل في الفرع الرئيسي، وفرع الاصدار الحالي في نفس الوقت، تستطيع مشاركة مخزن git، و tarballs من مصدر خارجي (لاحظ أن التوفير قد يكون مهم جدا، خصوصا إذا كنت تستخدم المخزن الضخم l10n). علماً بأنه لا ينصح بالتبديل بين الفروع داخل نفس مجلد العمل- متطلبات بناء الـLibreOffice لاتزال غير مكتملة إلى حد ما، وذلك يجعلك تضطر إلى عمل "إعادة ترجمة" جديدة في كل مره تقوم بالتبديل بين الفروع. إذا كنت تستطيع تحمل مساحة القرص والصيانة للبنية التسلسلية الشجرية " trees" المنفصلة، فهذه هي الطريقة المثلى.


الإعداد

إعداد البناء لأول مرة موضح في الأعلى. و لإعداد البناء للمرة الثانية و في المرات الأخرى، نفذ التالي لاستنساخ مخزن النواة الأولي "initial core repo":


$ /other/libo/bin/git-new-workdir /other/libo /dir/to/be/created my-libo-branch

سوف تلاحظ عملية الاستنساخ أسرع بكثير. بعد ذلك، الإعداد لمجلد عمل جديد باستخدام خياري الضبط (أو autogen.sh) الإضافيين:

$ ./autogen.sh ... --with-linked-git=/other/libo/clone --with-external-tar=/other/libo/src
$ ./g checkout my-libo-branch

مرة أخرى، سوف تلاحظ أن عملية الاستنساخ أسرع بكثير. يجب عليك استخدام مسار مطلق "absolute path" للخيار --with-external-tar. بعد ذلك، يمكنك المضي قدما في البناء كحالة بناء مجلد عمل واحد.


rpm not found/ant not found/no package gnome-vfs-2.0

لإصلاح الخطأ "rpm not found"، نفذ:

--disable-epm، حيث أن autogen يتوقع وجود dpkg أو rpm في النظام.


و لإصلاح الخطأ "ant not found"، نفذ:

--without-java


اعتبارا من LibreOffice 3.6، لبناء UNO SDK تحتاج إلى Doxygen مثبت بحيث تستطيع انشاء وثائق HTML لواجهة C++ UNO.

أحد الخيارات لثبيت Doxygen هو موقعه وتأكد من وجود doxygen تنفيذي في PATH، أو حدد موقعه عن طريق مفتاح الضبط --with-doxygen=pathname. خيار آخر، عن طريق ضبط --without-doxygen، في هذه الحالة وثائق HTML لواجهة C++ UNO سوف تكون مفقودة من UNO SDK الذي يجري بناؤه. خيار ثالث، هو ضبط --disable-odk، في هذه الحالة لايتم بناء UNO SDK على الإطلاق.


ملاحظة: تثبيت حزمة 'libgnomevfs2-dev' في الأوبنتو يدوياً يعمل على اصلاح الخطأ "No package 'gnome-vfs-2.0' found".


$ sudo apt-get install libgnomevfs2-dev