הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
אם מישהו יגיד לי כמה CMake נפלא וכמה autotools גרוע אני...
לאחרונה אני סבלתי מבעיות בניה מוזרות, פתאום אחרי עריכת כמה קבצים היו לי כשלונות בבניה. בהתחלה לא הבנתי מדוע זה קורה לי. חשבתי אולי משהו השתנה ב־svn והוא לא מעדכן נכון את ה־timestamp או אולי אני עשיתי איזושהי שטות.
היום סוף סוף הבנתי מה הבעיה ועוד פעם, כמה אני שונא CMake.
"למזלי", התקנתי שלשום CMake 2.8.1 מקוד מקור, כדי לדבג בעיה קומפיליצה ששברה את הבניה שלי (שעבדה יפה עם 2.6, אגב גם באג או ליתר דיוק שינוי מדיניות).
אז נתחיל בקצרה:
זה פלט של הפקודה בעבודה עם CMake 2.6
$ grep application.h CMakeFiles/cppcms.dir/depend.make
CMakeFiles/cppcms.dir/src/application.cpp.o: /usr/include/cppcms/application.h
CMakeFiles/cppcms.dir/src/applications_pool.cpp.o: /usr/include/cppcms/application.h
CMakeFiles/cppcms.dir/src/http_context.cpp.o: /usr/include/cppcms/application.h
CMakeFiles/cppcms.dir/src/internal_file_server.cpp.o: /usr/include/cppcms/application.h
CMakeFiles/cppcms.dir/src/rpc_json.cpp.o: /usr/include/cppcms/application.h
CMakeFiles/cppcms.dir/src/service.cpp.o: /usr/include/cppcms/application.h
CMakeFiles/cppcms.dir/src/url_dispatcher.cpp.o: /usr/include/cppcms/application.h
וזה פלט של אותה פקודה לגמרה בעבודה עם CMake 2.8
$ grep application.h CMakeFiles/cppcms.dir/depend.make
CMakeFiles/cppcms.dir/src/application.cpp.o: ../cppcms/application.h
CMakeFiles/cppcms.dir/src/applications_pool.cpp.o: ../cppcms/application.h
CMakeFiles/cppcms.dir/src/http_context.cpp.o: ../cppcms/application.h
CMakeFiles/cppcms.dir/src/internal_file_server.cpp.o: ../cppcms/application.h
CMakeFiles/cppcms.dir/src/rpc_json.cpp.o: ../cppcms/application.h
CMakeFiles/cppcms.dir/src/service.cpp.o: ../cppcms/application.h
CMakeFiles/cppcms.dir/src/url_dispatcher.cpp.o: ../cppcms/application.h
ההבדל ברור? אם לא, אני אסביר.
למרות שדגלוני הקומפיילר אומרים באופן מפורש להסתכל בתיקיה ".." "בודק התלויות" של CMake (במרכאות כפולות ומכופלות) מתעקש להסתכל על ספריות המערכת למרות שזה לא נכון בעליל.
האמת? אני לא מבין כיצד KDE אימצו כלי כזה? אני מבין שיש ל־CMake לא מעט יתרונות, רק שהבעיה שאני יותר נלחם בו מאשר נעזר בו. האם תמיכה ב־MSVC שווה את זה?
אגב, autotools משתמש בקומפיילר עצמו כדי לבנות תלויות כך שהתלויות יוצאות מדויקות לגמרי.
טוב, נו... מספיק להתבכיין, נראה לי אצטרך לשדרג את ה־CMake שלי לגרסה האחרונה.
נ.ב.: ik_5, אפילו אל תגיב... אני יודע מראש מה אתה תרצה לומר
We con the word!
צפיה מהנה: http://www.youtube.com/watch?v=FOGG_osOoVg
Wikipp רץ על CppCMS 1.x.x !
בשעה טובה, המרתי את Wikipp לגרסת אלפה של CppCMS 1.x.x והיא רצה סוף־סוף ב"ייצור".
עוד שלב חשוב לשחרור גרסת בטא של CppCMS 1.x.x - שבו תוכננו מחדש ושוכתבתו מחצית מהרכיבים פנימיים שלו.
עדכנו אותי אם אתם נתקלים בבעיות.
ספריית Boost.Locale הוגשה לביקורת רשימית
בשעה טובה, הגשתי את הספריית לוקליזציה Boost.Locale לביקורת רשמית (formal review) של קהילת ה־Boost. אם היא תעבור אותה היא תתקבל כחלק רשמי של Boost.
קישורים:
אעדכן אתכם על התפתחויות בהמשך.
עדכון: זה רשמי -- Boost.Locale התווספה לרשימת הספריות הממתינות לביקורת. עכשיו צריך שמישהו מהקהילה יתנדב להיות מנהל הביקורת (review manager).
הוספת הקשר לתרגומי Gettext
אחת התכונות החסרות ביותר ב־gettext הייתה עד לא מזמן היא העדר אפשרות להעביר מידע על הקשר המילה. כך למשל, מילה "exchange" יכולה להיות מתורגמת ל"החלף" כשמדובר בחפצים ו"המר" כשמדובר בכסף. אבל אם שתי המילים מופיעות באותה תוכנה הדורשות תרגומים שונים בהקשרים שונים, ב־gettext לא הייתה שום דרך להבחין ביניהם.
החל מגרסה 0.15 התווספה התמיכה במה שנקרא הקשר. אם עד היום התרגום של מחרוזת "exchange" נעשה כ:
gettext("exchange");
אז הפונקציה pgettext מאפשרת להוסיף הקשר לתרגום:
pgettext("currency","exchange");
שיכולה להיות מתורגמת בצורה נכונה בכל הקשר. בקטלוג מחרוזות po הדוגמה הזו תופיע כ־
msgctxt "currency"
msgid "exchange"
msgstr "המר"
חשוב לזכור:
- צריך להשתמש ב־gettext עדכני
צריך להשתמש בכלי תרגום עדכניים שיודעים לעבוד עם msgctxt.
כך KBabel כלל לא תומך ב־msgctxt, poedit לא מציג מידע על הקשר. עד כמה שידוע לי, גרסאות עדכניות של lokalize ו־gtranslator תומכות בהקשרים במילוני gettext.
כמובן שגם Boost.Locale תומך בהקשרים של Gettext.