Changes between Initial Version and Version 1 of HowToTest


Ignore:
Timestamp:
Aug 27, 2009, 1:26:17 PM (16 years ago)
Author:
yavorescu
Comment:

Нова страница

Legend:

Unmodified
Added
Removed
Modified
  • HowToTest

    v1 v1  
     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{{{
     59if [ -d ~/bin ] ; then
     60    PATH=~/bin:"${PATH}"
     61fi
     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.
     87use_local_modulesets = True
     88
     89repos['git.gnome.org'] = 'git://git.gnome.org/'
     90
     91# Променете спрямо целевата версия на GNOME.
     92moduleset = 'gnome-2.28'
     93
     94# Списък с модули за компилиране.  Ако превеждате модули, които не са
     95# в официално издание на GNOME (напр. Rhythmbox, GIMP и т.н.), може да
     96# ги добавите тук.
     97modules = [ '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.
     103skip = [ '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# Основен път към хранилищата.
     114checkoutroot = os.path.expanduser('~/src/gnome/trunk')
     115
     116# Директория за инсталация.  Добре е да не е в $PATH.
     117prefix = '/home/yavor/gnome-trunk'
     118
     119# Допълнителни опциии за някои пакети към ./configure или ./autogen.sh.
     120
     121# Не ни трябват статични библиотеки, а е добре да си имаме документацийка.
     122# Внимание: --enable-gtk-doc забавя значително компилацията.  Ако не ви е нужна
     123# документация към библиотеките, задайте --disable-gtk-doc.
     124autogenargs='--disable-static --enable-gtk-doc'
     125
     126# -Wno-error е за модули, при които разработчиците са задали -Werror и всяко
     127# предупреждение на компилатора се счита за фатална грешка.
     128module_autogenargs['devhelp'] = autogenargs + ' CFLAGS=-Wno-error'
     129module_autogenargs['nautilus'] = autogenargs + ' CFLAGS=-Wno-error'
     130
     131# Потребителското ръководство на Glade не се инсталира по подразбиране.
     132module_autogenargs['glade3'] = autogenargs + ' --enable-user-manual'
     133
     134# Това ни трябва за да тестваме всички низове касаещи LDAP в e-d-s.
     135module_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# версия на проблематичната библиотека (тогава тя ще съдържа липсващите символи).
     147module_autogenargs['evolution'] = autogenargs + ' --with-openldap --enable-python --disable-nm \
     148  LDFLAGS=-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so'
     149
     150module_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"'
     152module_autogenargs['gnome-power-manager'] = autogenargs + ' CFLAGS=-Wno-error'
     153module_autogenargs['epiphany-extensions'] = autogenargs + ' --with-extensions=really-all'
     154
     155# Приставката за Epiphany не е приспособена към WebKit.
     156module_autogenargs['seahorse-plugins'] = autogenargs + ' --disable-epiphany'
     157
     158# Ако използвате системен пакет на dbus (а не компилиран чрез JHBuild),
     159# Tracker се опитва да инсталира org.freedesktop.Tracker*.service в
     160# системната директория, където няма права (а и не желаем това).
     161module_autogenargs['tracker'] = autogenargs + '  --with-session-bus-services-dir=/home/yavor/gnome-trunk/share/dbus-1/services'
     162
     163# Коментирайте този ред, ако машината ви не е с многоядрен процесор.
     164os.environ['MAKE'] = 'make -j2'
     165
     166# Използване на програмата install-check от дистрибуцията на JHBuild.
     167os.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
     175repos['git.gnome.org'] = 'git://git.gnome.org/'
     176
     177moduleset = 'gnome-2.28'
     178
     179use_local_modulesets = True
     180
     181modules = [ 'meta-gnome-desktop', 'meta-gnome-proposed', 'gedit-plugins',
     182            'epiphany-extensions', 'gst-plugins-bad', 'gst-plugins-ugly' ]
     183
     184skip = [ '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
     191checkoutroot = os.path.expanduser('~/src/gnome/trunk')
     192
     193prefix = '/home/yavor/gnome-trunk'
     194
     195autogenargs='--disable-static --enable-gtk-doc'
     196module_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"'
     198module_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"'
     200module_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"'
     202module_autogenargs['epiphany-extensions'] = autogenargs + ' --with-extensions=really-all'
     203module_autogenargs['evolution'] = autogenargs + ' --with-openldap --enable-python --disable-nm \
     204  LDFLAGS=-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so'
     205module_autogenargs['evolution-data-server'] = autogenargs + ' --with-openldap=yes'
     206module_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"'
     209module_autogenargs['evolution-exchange'] = autogenargs + ' LDFLAGS=-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so'
     210module_autogenargs['glade3'] = autogenargs + ' --enable-user-manual'
     211module_autogenargs['gstreamer'] = autogenargs + ' CFLAGS=-Wno-error'
     212module_autogenargs['gst-plugins-bad'] = autogenargs + ' CFLAGS=-Wno-error'
     213module_autogenargs['gst-plugins-good'] = autogenargs + ' CFLAGS=-Wno-error'
     214module_autogenargs['gtk+'] = autogenargs + ' LDFLAGS=-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so'
     215module_autogenargs['gtkhtml'] = autogenargs + ' LDFLAGS=-Wl,/home/yavor/gnome-trunk/lib/libglib-2.0.so'
     216module_autogenargs['nautilus'] = autogenargs + ' CFLAGS=-Wno-error'
     217module_autogenargs['seahorse-plugins'] = autogenargs + ' --disable-epiphany'
     218module_autogenargs['tracker'] = autogenargs + ' CPPFLAGS=-I/usr/include/uuid'
     219module_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"'
     221module_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
     226os.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
     261GNOME evolution 2.26.3
     262$ jhbuild run bash
     263$ which evolution
     264/home/yavor/gnome-trunk/bin/evolution
     265$ evolution --version
     266GNOME evolution 2.27.91
     267}}}
     268
     269За да компилирате само един модул, използвайте
     270
     271{{{
     272jhbuild buildone <модул>
     273}}}
     274
     275Това е полезно, ако имате горе-долу обновено копие на GNOME (компилиран преди седмица, да речем), но работите по определен превод и искате програмата и превода да са 100% обновени спрямо хранилището.
     276
     277За да подкарате пълноценна сесия на нестабилния ви GNOME, добавете ~/.xinitrc със следното съдържание:
     278
     279{{{
     280exec jhbuild run gnome-session
     281}}}
     282
     283Ако ползвате GDM, добавете файл /usr/share/xsessions/jhbuild.desktop със следното съдържание:
     284
     285{{{
     286[Desktop Entry]
     287Name=GNOME (JHBuild)
     288Exec=/home/yavor/bin/jhbuild-session
     289Type=Application
     290}}}
     291
     292и ~/bin/jhbuild-session:
     293
     294{{{
     295jhbuild run gnome-session
     296}}}
     297
     298Не забравайте да направите файла изпълним:
     299
     300{{{
     301$ chmod +x ~/bin/jhbuild-session
     302}}}
     303
     304Приятно тестване!