| | 1 | = Как да тестваме = |
| | 2 | |
| | 3 | За да бъде един превод добър и изпипан, непременно трябва да се тества самата преведена програма. Често информацията във файла е оскъдна, за да се прецени точния род, смисъл или предназначение на даден низ. Справката с изходния код е безценна помощ, но и оттам не винаги (и не всеки) може да прецени за какво става въпрос. |
| | 4 | |
| | 5 | Понеже (почти) винаги се превежда все още неиздадена версия на програмата, тестването на превода със стара версия (например инсталация на пакет от дистрибуцията) не е ефективен. При корекция на дублирани ускорители трябва да се имат предвид и низовете, които се ползват от вградените библиотеки като GTK+. Например, ако един диалогов прозорец има три бутона -- OK, Cancel и Foo, то преводите на първите два се наследяват от GTK+. Затова е най-добре да не се тества превода на дадена програма в изолация, а в контекста на цялото издание на GNOME. |
| | 6 | |
| | 7 | Има няколко начина да се сдобиете с изходния код на GNOME: |
| | 8 | |
| | 9 | * Компилиране на нестабилни версии от [http://download.gnome.org download.gnome.org]. Недостатъкът тук е неравната борба със зависимостите между модулите и факта, че последните промени в хранилището няма как да са отразени. |
| | 10 | |
| | 11 | * [http://projects.gnome.org/garnome/ GARNOME] решава проблема със зависимостите, като модулите се компилират и инсталират в точно определен ред. За жалост този проект не се поддържа активно. |
| | 12 | |
| | 13 | * Компилиране от [http://git.gnome.org хранилищата] на GNOME. Пак се налага разрешаване на зависимостите, както и повтаряне на команди за около 200 модула. |
| | 14 | |
| | 15 | * [http://library.gnome.org/devel/jhbuild/ JHBuild] е автоматизирана система за компилиране на GNOME (и други модули) директно от хранилищата. Това е най-лесният начин да се сдобиете с актуално (нестабилно!) издание на GNOME, което се обновява лесно. |
| | 16 | |
| | 17 | == Първи стъпки с JHBuild == |
| | 18 | |
| | 19 | (Оттук нататък обясненията са ориентирани към Дебиан или дистрибуции, деривати на Дебиан. При другите дистрибуции процедурата е същата, но имената на пакетите може да се различават.) |
| | 20 | |
| | 21 | Инсталирайте GCC, GNU make, заглавните файлове на GNU libc (в Дебиан пакета се казва libc-dev, но е най-лесно направо да се инсталира build-essential), autoconf, automake, libtool и Git. |
| | 22 | |
| | 23 | {{{ |
| | 24 | $ sudo aptitude install build-essential autoconf automake libtool git-core |
| | 25 | }}} |
| | 26 | |
| | 27 | Изберете директория, където да се съхранява изходния код и я създайте, ако не съществува. |
| | 28 | |
| | 29 | {{{ |
| | 30 | $ mkdir -p ~/src/gnome/trunk |
| | 31 | }}} |
| | 32 | |
| | 33 | Изтеглете изходния код на JHBuild. |
| | 34 | |
| | 35 | {{{ |
| | 36 | $ cd ~/src/gnome/trunk |
| | 37 | $ git clone git://git.gnome.org/jhbuild |
| | 38 | }}} |
| | 39 | |
| | 40 | Компилирайте и инсталирайте JHBuild. Добре е да го инсталирате на място, което е в стандартния път (променливата на обкръжението PATH), например /usr/local или $HOME. |
| | 41 | |
| | 42 | {{{ |
| | 43 | $ cd jhbuild |
| | 44 | $ ./autogen.sh --prefix $HOME |
| | 45 | $ make |
| | 46 | $ make install |
| | 47 | }}} |
| | 48 | |
| | 49 | При горния избор на --prefix се уверете, че $HOME/bin е в пътя. |
| | 50 | |
| | 51 | {{{ |
| | 52 | $echo $PATH |
| | 53 | /home/yavor/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games |
| | 54 | }}} |
| | 55 | |
| | 56 | Ако не е, добавяте тези редове в ~/.bash_profile (или ~/.profile ако ползвате GDM): |
| | 57 | |
| | 58 | {{{ |
| | 59 | if [ -d ~/bin ] ; then |
| | 60 | PATH=~/bin:"${PATH}" |
| | 61 | fi |
| | 62 | }}} |
| | 63 | |
| | 64 | След излизането и влизането в системата би трябвало всичко да е наред: |
| | 65 | |
| | 66 | {{{ |
| | 67 | $ which jhbuild |
| | 68 | /home/yavor/bin/jhbuild |
| | 69 | }}} |
| | 70 | |
| | 71 | Изпълнете следната команда |
| | 72 | |
| | 73 | {{{ |
| | 74 | $ jhbuild sanitycheck |
| | 75 | }}} |
| | 76 | |
| | 77 | и инсталирайте всички липсващи пакети (без старите версии на Automake). |
| | 78 | |
| | 79 | Следващата стъпка е съставянето на свой собствен конфигурационен файл ~/.jhbuildrc, който съдържа списък с модулите, специфични опции за някои от тях и важни променливи. Подбирането на модулите е тънка работа. По принцип е добре да компилирате колкото се може по-малко модули -- така хем ще пестите време, хем няма да инсталирате второ копие на дадена програма или библиотека. Колкото по-модерна е дистрибуцията, толкова повече модули може да преизползвате, като инсталирате готови пакети. Първият примерен ~/.jhbuildrc е за GNOME 2.28 и Debian Squeeze. |
| | 80 | |
| | 81 | {{{ |
| | 82 | # -*- mode: python -*- |
| | 83 | |
| | 84 | # Дали да се ползват локално инсталирани (неофициални) описания на модули. |
| | 85 | # Може да си създадете собствен такъв, който не е дефиниран в JHBuild и |
| | 86 | # даже не е за пакет на GNOME. |
| | 87 | use_local_modulesets = True |
| | 88 | |
| | 89 | repos['git.gnome.org'] = 'git://git.gnome.org/' |
| | 90 | |
| | 91 | # Променете спрямо целевата версия на GNOME. |
| | 92 | moduleset = 'gnome-2.28' |
| | 93 | |
| | 94 | # Списък с модули за компилиране. Ако превеждате модули, които не са |
| | 95 | # в официално издание на GNOME (напр. Rhythmbox, GIMP и т.н.), може да |
| | 96 | # ги добавите тук. |
| | 97 | modules = [ 'meta-gnome-desktop', 'meta-gnome-proposed', 'gedit-plugins', |
| | 98 | 'epiphany-extensions', 'gst-plugins-bad', 'gst-plugins-ugly' ] |
| | 99 | |
| | 100 | # Модули, които да не се компилират, а да се използва пакет от дистрибуцията. |
| | 101 | # В Дебиан пакетите за библиотеки завършват с -dev (напр. libxml2-dev), в |
| | 102 | # други дистрибуции като Федора завършват с -devel. |
| | 103 | skip = [ 'libxml2', 'libgpg-error', 'libgcrypt', 'libxslt', 'expat', |
| | 104 | 'fontconfig', 'pixman', 'dbus', 'dbus-glib', 'audiofile', |
| | 105 | 'desktop-file-utils', 'libdaemon', 'dbus-python', 'avahi', |
| | 106 | 'libvolume_id', 'hal', 'icon-naming-utils', 'libtasn1', 'liboil', |
| | 107 | 'startup-notification', 'gnutls', 'sqlite3', 'mozilla', 'enchant', |
| | 108 | 'libproxy', 'libunique', 'gnome-disk-utility', 'nspr', 'nss', |
| | 109 | 'libical', 'libgsf', 'iso-codes', 'libsndfile', 'speex', 'pulseaudio', |
| | 110 | 'libcanberra', 'poppler', 'libggz', 'ggz-client-libs', |
| | 111 | 'libmusicbrainz', 'autogen', 'perl-net-dbus' ] |
| | 112 | |
| | 113 | # Основен път към хранилищата. |
| | 114 | checkoutroot = os.path.expanduser('~/src/gnome/trunk') |
| | 115 | |
| | 116 | # Директория за инсталация. Добре е да не е в $PATH. |
| | 117 | prefix = '/home/yavor/gnome-trunk' |
| | 118 | |
| | 119 | # Допълнителни опциии за някои пакети към ./configure или ./autogen.sh. |
| | 120 | |
| | 121 | # Не ни трябват статични библиотеки, а е добре да си имаме документацийка. |
| | 122 | # Внимание: --enable-gtk-doc забавя значително компилацията. Ако не ви е нужна |
| | 123 | # документация към библиотеките, задайте --disable-gtk-doc. |
| | 124 | autogenargs='--disable-static --enable-gtk-doc' |
| | 125 | |
| | 126 | # -Wno-error е за модули, при които разработчиците са задали -Werror и всяко |
| | 127 | # предупреждение на компилатора се счита за фатална грешка. |
| | 128 | module_autogenargs['devhelp'] = autogenargs + ' CFLAGS=-Wno-error' |
| | 129 | module_autogenargs['nautilus'] = autogenargs + ' CFLAGS=-Wno-error' |
| | 130 | |
| | 131 | # Потребителското ръководство на Glade не се инсталира по подразбиране. |
| | 132 | module_autogenargs['glade3'] = autogenargs + ' --enable-user-manual' |
| | 133 | |
| | 134 | # Това ни трябва за да тестваме всички низове касаещи LDAP в e-d-s. |
| | 135 | module_autogenargs['evolution-data-server'] = autogenargs + ' --with-openldap=yes' |
| | 136 | |
| | 137 | # --enable-python е за приставките на Питон. --disable-nm е без поддръжка на |
| | 138 | # NetworkManager (иначе трябва да се инсталира). За LDFLAGS е нужно малко повече |
| | 139 | # обяснение... Когато някои от зависимите библиотеки са инсталирани в /usr/lib или |
| | 140 | # /usr/local/lib, и те се свързват динамично с по-стара версия на GLib (например |
| | 141 | # в този случай GLib 2.20.4), се получава неприятен момент с "unresolved symbols": |
| | 142 | # свързващата програма се опитва да разреши някои нови символи на GLib, които използва |
| | 143 | # програмата спрямо старото копие на GLib в /usr/lib, понеже libtool го добавя към |
| | 144 | # командния ред за свързване като зависимост на някоя друга библиотека. Рядко се |
| | 145 | # налага, и спокойно може да махнете LDFLAGS когато обновите системата с по-нова |
| | 146 | # версия на проблематичната библиотека (тогава тя ще съдържа липсващите символи). |
| | 147 | module_autogenargs['evolution'] = autogenargs + ' --with-openldap --enable-python --disable-nm \ |
| | 148 | LDFLAGS=-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so' |
| | 149 | |
| | 150 | module_autogenargs['gnome-games'] = autogenargs + ' LDFLAGS="-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so \ |
| | 151 | -Wl,/home/yavor/gnome-trunk/lib/libgobject-2.0.so"' |
| | 152 | module_autogenargs['gnome-power-manager'] = autogenargs + ' CFLAGS=-Wno-error' |
| | 153 | module_autogenargs['epiphany-extensions'] = autogenargs + ' --with-extensions=really-all' |
| | 154 | |
| | 155 | # Приставката за Epiphany не е приспособена към WebKit. |
| | 156 | module_autogenargs['seahorse-plugins'] = autogenargs + ' --disable-epiphany' |
| | 157 | |
| | 158 | # Ако използвате системен пакет на dbus (а не компилиран чрез JHBuild), |
| | 159 | # Tracker се опитва да инсталира org.freedesktop.Tracker*.service в |
| | 160 | # системната директория, където няма права (а и не желаем това). |
| | 161 | module_autogenargs['tracker'] = autogenargs + ' --with-session-bus-services-dir=/home/yavor/gnome-trunk/share/dbus-1/services' |
| | 162 | |
| | 163 | # Коментирайте този ред, ако машината ви не е с многоядрен процесор. |
| | 164 | os.environ['MAKE'] = 'make -j2' |
| | 165 | |
| | 166 | # Използване на програмата install-check от дистрибуцията на JHBuild. |
| | 167 | os.environ['INSTALL'] = os.path.expanduser('~/bin/install-check') |
| | 168 | }}} |
| | 169 | |
| | 170 | Ето и един пример за gNewSense DeltaH, която е по-стара дистрибуция (базирана на Ubuntu Hardy). Тук не могат да се използват доста модули като пакети на дистрибуцията, понеже са с много стари версии. Налага се и доста по-често да се прибягва до трика с LDFLAGS, защото версията на GLib е още по-стара (2.16.3). |
| | 171 | |
| | 172 | {{{ |
| | 173 | # -*- mode: python -*- |
| | 174 | |
| | 175 | repos['git.gnome.org'] = 'git://git.gnome.org/' |
| | 176 | |
| | 177 | moduleset = 'gnome-2.28' |
| | 178 | |
| | 179 | use_local_modulesets = True |
| | 180 | |
| | 181 | modules = [ 'meta-gnome-desktop', 'meta-gnome-proposed', 'gedit-plugins', |
| | 182 | 'epiphany-extensions', 'gst-plugins-bad', 'gst-plugins-ugly' ] |
| | 183 | |
| | 184 | skip = [ 'libgpg-error', 'expat', 'fontconfig', 'audiofile', |
| | 185 | 'desktop-file-utils', 'libdaemon', 'avahi', 'libtasn1', 'liboil', |
| | 186 | 'mozilla', 'enchant', 'gnome-disk-utility', 'nspr', 'nss', |
| | 187 | 'iso-codes', 'libsndfile', 'ekiga', 'DeviceKit', 'libggz', |
| | 188 | 'ggz-client-libs', 'gnome-power-manager', 'gnome-user-share', |
| | 189 | 'libmusicbrainz', 'autogen', 'perl-net-dbus' ] |
| | 190 | |
| | 191 | checkoutroot = os.path.expanduser('~/src/gnome/trunk') |
| | 192 | |
| | 193 | prefix = '/home/yavor/gnome-trunk' |
| | 194 | |
| | 195 | autogenargs='--disable-static --enable-gtk-doc' |
| | 196 | module_autogenargs['devhelp'] = autogenargs + ' CFLAGS=-Wno-error LDFLAGS="-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so \ |
| | 197 | -Wl,/home/yavor/gnome-trunk/lib/libgobject-2.0.so"' |
| | 198 | module_autogenargs['empathy'] = autogenargs + ' CFLAGS=-Wno-error LDFLAGS="-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so \ |
| | 199 | -Wl,/home/yavor/gnome-trunk/lib/libgobject-2.0.so"' |
| | 200 | module_autogenargs['epiphany'] = autogenargs + ' LDFLAGS="-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so \ |
| | 201 | -Wl,/home/yavor/gnome-trunk/lib/libgobject-2.0.so"' |
| | 202 | module_autogenargs['epiphany-extensions'] = autogenargs + ' --with-extensions=really-all' |
| | 203 | module_autogenargs['evolution'] = autogenargs + ' --with-openldap --enable-python --disable-nm \ |
| | 204 | LDFLAGS=-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so' |
| | 205 | module_autogenargs['evolution-data-server'] = autogenargs + ' --with-openldap=yes' |
| | 206 | module_autogenargs['gnome-games'] = autogenargs + ' LDFLAGS="-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so |
| | 207 | -Wl,/home/yavor/gnome-trunk/lib/libgobject-2.0.so -Wl,/home/yavor/gnome-trunk/lib/libgio-2.0.so \ |
| | 208 | -Wl,/home/yavor/gnome-trunk/lib/libgdk_pixbuf-2.0.so"' |
| | 209 | module_autogenargs['evolution-exchange'] = autogenargs + ' LDFLAGS=-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so' |
| | 210 | module_autogenargs['glade3'] = autogenargs + ' --enable-user-manual' |
| | 211 | module_autogenargs['gstreamer'] = autogenargs + ' CFLAGS=-Wno-error' |
| | 212 | module_autogenargs['gst-plugins-bad'] = autogenargs + ' CFLAGS=-Wno-error' |
| | 213 | module_autogenargs['gst-plugins-good'] = autogenargs + ' CFLAGS=-Wno-error' |
| | 214 | module_autogenargs['gtk+'] = autogenargs + ' LDFLAGS=-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so' |
| | 215 | module_autogenargs['gtkhtml'] = autogenargs + ' LDFLAGS=-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so' |
| | 216 | module_autogenargs['nautilus'] = autogenargs + ' CFLAGS=-Wno-error' |
| | 217 | module_autogenargs['seahorse-plugins'] = autogenargs + ' --disable-epiphany' |
| | 218 | module_autogenargs['tracker'] = autogenargs + ' CPPFLAGS=-I/usr/include/uuid' |
| | 219 | module_autogenargs['WebKit'] = autogenargs + ' LDFLAGS="-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so \ |
| | 220 | -Wl,/home/yavor/gnome-trunk/lib/libgobject-2.0.so"' |
| | 221 | module_autogenargs['yelp'] = autogenargs + ' LDFLAGS="-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so \ |
| | 222 | -Wl,/home/yavor/gnome-trunk/lib/libgobject-2.0.so"' |
| | 223 | |
| | 224 | #os.environ['MAKE'] = 'make -j2' |
| | 225 | |
| | 226 | os.environ['INSTALL'] = os.path.expanduser('~/bin/install-check') |
| | 227 | }}} |
| | 228 | |
| | 229 | След като сте говори с ~/.jhbuildrc, не ви остава нищо друго освен |
| | 230 | |
| | 231 | {{{ |
| | 232 | $ jhbuild build |
| | 233 | }}} |
| | 234 | |
| | 235 | Първият път ще отнеме значително време -- клонирането на хранилищата на Git е сравнително бавно (съдържат цялата история на проекта), а и всичко се налага да се компилира начисто. Ако срещнете трудности, пишете до dict@fsa-bg.org за конкретната грешка. |
| | 236 | |
| | 237 | За да тествате определена програма, изпълнете |
| | 238 | |
| | 239 | {{{ |
| | 240 | $ jhbuild run <program> |
| | 241 | }}} |
| | 242 | |
| | 243 | Например: |
| | 244 | |
| | 245 | {{{ |
| | 246 | $ jhbuild run eog |
| | 247 | }}} |
| | 248 | |
| | 249 | Командата |
| | 250 | |
| | 251 | {{{ |
| | 252 | $ jhbuild run bash |
| | 253 | }}} |
| | 254 | |
| | 255 | влиза в нещо като chroot na JHBuild, където променливите на обкръжението са променени: |
| | 256 | |
| | 257 | {{{ |
| | 258 | $ which evolution |
| | 259 | /usr/bin/evolution |
| | 260 | $ evolution --version |
| | 261 | GNOME evolution 2.26.3 |
| | 262 | $ jhbuild run bash |
| | 263 | $ which evolution |
| | 264 | /home/yavor/gnome-trunk/bin/evolution |
| | 265 | $ evolution --version |
| | 266 | GNOME evolution 2.27.91 |
| | 267 | }}} |
| | 268 | |
| | 269 | За да компилирате само един модул, използвайте |
| | 270 | |
| | 271 | {{{ |
| | 272 | jhbuild buildone <модул> |
| | 273 | }}} |
| | 274 | |
| | 275 | Това е полезно, ако имате горе-долу обновено копие на GNOME (компилиран преди седмица, да речем), но работите по определен превод и искате програмата и превода да са 100% обновени спрямо хранилището. |
| | 276 | |
| | 277 | За да подкарате пълноценна сесия на нестабилния ви GNOME, добавете ~/.xinitrc със следното съдържание: |
| | 278 | |
| | 279 | {{{ |
| | 280 | exec jhbuild run gnome-session |
| | 281 | }}} |
| | 282 | |
| | 283 | Ако ползвате GDM, добавете файл /usr/share/xsessions/jhbuild.desktop със следното съдържание: |
| | 284 | |
| | 285 | {{{ |
| | 286 | [Desktop Entry] |
| | 287 | Name=GNOME (JHBuild) |
| | 288 | Exec=/home/yavor/bin/jhbuild-session |
| | 289 | Type=Application |
| | 290 | }}} |
| | 291 | |
| | 292 | и ~/bin/jhbuild-session: |
| | 293 | |
| | 294 | {{{ |
| | 295 | jhbuild run gnome-session |
| | 296 | }}} |
| | 297 | |
| | 298 | Не забравайте да направите файла изпълним: |
| | 299 | |
| | 300 | {{{ |
| | 301 | $ chmod +x ~/bin/jhbuild-session |
| | 302 | }}} |
| | 303 | |
| | 304 | Приятно тестване! |