2009-04-11

Kompilacja Mozilla Firefox 3.0.8

Konfiguracja: Windows XP SP2 x86, Visual Studio 2008 SP1 To drugie podejście do tematu, poprzednie pod Vista x64 zakończyło się porażką, nie mogłem sobie poradzić z błędami, Google też nie pomogło. Tak więc podejście drugie czas zacząć. Zaglądamy na Windows Build Prerequisites. Jak widać Firefox 3.0 jest wspierany eksperymentalnie dla VS2008, ale bądźmy dobrej myśli. Pobieramy i instalujemy Windows SDK. Jest to obraz ISO całego SDK, na stronie zalecają tzw. web setup. Ponieważ działam na maszynie wirtualnej to dla zaoszczędzenia miejsca zrezygnowałem z dokumentacji i przykładów (2GB mniej i o wiele, wiele szybsza instalacja). Pobieramy i instalujemy MozillaBuild. Nie zmieniamy miejsca do którego paczka się wypakowuje. Odpalamy start-msvc9.bat by uzyskać dostęp do namiastki konsoli linuksowej. I mamy błąd - nic się nie dzieje. Wstawiamy pause gdzie trzeba i możemy po pierwsze zauważyć, że nie jest znajdowana przez guess-msvc.bat ścieżka do Windows SDK. Okazuje się, że skrypt współpracuje z jedną słuszną wersją SDK. Zmieniamy dwa wystąpienia v6.0 na v6.1. Ponawiamy uruchomienie start-msvc9.bat. Znowu coś nie tak. Tym razem znowu kombinując z pause dochodzimy do wniosku, że coś jest nie tak z całym drugim blokiem zaczynającym się od if "%VC9DIR%"=="" (. Choć ten warunek jest fałszywy, czyli wnętrze bloku nie podlega wykonaniu (interpretacji) skrypt się tam gdzieś "wywala". Samo if "%VC9DIR%"=="" ( nie jest błędne bo wcześniej mamy to samo. Kasujemy ten niepotrzebny i w dodatku błędny kod. Ponawiamy uruchomienie start-msvc9.bat. Udało się. Na Windows Build Prerequisites w części mówiącej o błędzie w SDK dla Windows Server 2008 mamy linka do strony z rozwiązaniem problemu. Okazuje się, że instalator niepoprawnie modyfikuje plik vcvars32.bat. Jeśli przyjrzymy się naszemu plikowi to okaże się, że też jest błędny, poprawiamy go tak jak tutaj radzą. No to jesteśmy na konsoli MSYS. Tutaj znajduje się krótkie wprowadzenie do obsługi takiej konsoli: Using the MSYS Command Shell in Windows. Czas na pobranie źródeł. Informacje na ten temat znajdziemy tutaj: Mozilla Source Code (CVS). Nie należy zmieniać nazwy w którym umieszczone są źródła w archiwum. Źródła powinny znajdować się w katalogu mozilla, jeśli chcemy oznaczyć wersję to np. w katalogu firexox_3_0_8/mozilla, a nie w np. firefox_3_0_8. Druga ważna sprawa - ścieżka do źródeł nie może zawierać spacji. Przechodzimy do katalogu w którym chcemy utworzyć katalog mozilla ze źródłami i wydajemy polecenie: cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co -r FIREFOX_3_0_8_RELEASE mozilla/client.mk Listę dostępnych gałęzi mamy tutaj: CVS Tags, nie mam tam znacznika dla wersji 3.0.8 (na dzień jak pisałem ten tekst), ale łatwo możemy odgadnąć jego postać (w ostateczności zawsze pozostaje nam CVS, skąd możemy się dowiedzieć o wszystkich możliwych znacznikach). Wydawanie takich poleceń w konsoli MSYS może być męczące, szczególnie, że nie mogłem jej zmusić do współpracy ze schowkiem. Najlepszą metodą jest tworzenie skryptów i ich wywoływanie. Skrypt dla powyższego ma postać: #! /bin/bash cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co -r FIREFOX_3_0_8_RELEASE mozilla/client.mk Ważne by plik ze skryptem miał rozszerzenie .sh. Skrypt wywołujemy podając jego pełną nazwę wraz z rozszerzeniem. W ten sposób pobraliśmy skrypt client.mk specyficzny dla naszej wersji Firefoxa. Samych źródeł nie pobieramy bezpośrednio z CVS, tylko za pomocą tego skryptu. Jednak zanim to zrobimy musimy przygotować plik konfiguracyjny, z które client.mk będzie czerpał wiedzę jak pobierać źródła, kompilować, itp. Czas na Configuring Build Options. Tworzymy w katalogu ze źródłami plik konfiguracji za pomocą polecenia: echo "# My first mozilla config" > .mozconfig Niestety Windows XP nie pozwoli nam na utworzenie takiego pliku bezpośrednio z eksploratora (Vista tak). W moim przypadku zawartość tego pliku wygląda tak: . $topsrcdir/browser/config/mozconfig mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/ff-opt ac_add_options --disable-tests ac_add_options --enable-optimize W pierwszej linijce dołączamy standardowe opcje dla kompilacji przeglądarki. W drugiej mówimy do jakiego katalogu nastąpi kompilacja. Pobranie źródeł za pomocą polecenia: make -f client.mk checkout jeszcze nam nie zadziała. Gdyż nie mamy . $topsrcdir/browser/config/mozconfig. Pobieramy z CVS ten plik: cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co -r FIREFOX_3_0_8_RELEASE mozilla/browser/config/mozconfig Teraz możemy pobrać źródła. Jest tego jakieś 225 MB. Przechodzimy do etapu Build and Install. Budujemy źródła: make -f client.mk build To co nam wyjdzie będzie po angielsku i wcale nie będzie się nazywało Firefox. Czemu i jak temu zaradzić dalej. Aby przerwać budowanie naciśnij CTRL+BREAK. I czekamy... Wchodzimy do katalogu ff-opt i robimy instalkę: make installer Instalkę znajdziemy w katalogu ff-opt\dist\install\sea. Wygląda na to, że wszystko się udało, tyle tylko, że nasza przeglądarka nazywa się Minefield, i jest w wersji angielskiej. Nie ma też oryginalnych ikon. Aby uzyskać coś co wygląda jak Firefox, dodajemy do .mozconfig: export MOZILLA_OFFICIAL=1 export BUILD_OFFICIAL=1 mk_add_options MOZILLA_OFFICIAL=1 mk_add_options BUILD_OFFICIAL=1 ac_add_options --enable-official-branding Powinniśmy pamiętać, że takiej wersji oznaczonej jako Firefox nie powinniśmy rozpowszechniać. Tutaj jest dość ciekawa dyskusja na ten temat: Komercjalizacja Mozilli. Przed każdym przebudowaniem źródeł warto wyczyścić zawartość poprzedniego budowania - kasując katalog MOZ_OBJDIR. Można też: make -f client.mk clean Ale nie polecam, strasznie długo to trwa. Pozostało nam sprawa językowa. Z tym było najwięcej kombinowania. Dodajemy do .mozconfig: mk_add_options MOZ_CO_LOCALES=pl ac_add_options --enable-ui-locale=pl mk_add_options LOCALES_CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/l10n I ściągamy potrzebne pliki językowe: make -f client.mk l10n-checkout Czyścimy i ponawiamy budowanie. Gotowe. Na końcu jeszcze podaje wygląd mojego pliku konfiguracyjnego: . $topsrcdir/browser/config/mozconfig mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/ff-opt ac_add_options --disable-tests ac_add_options --enable-optimize export MOZILLA_OFFICIAL=1 export BUILD_OFFICIAL=1 mk_add_options MOZILLA_OFFICIAL=1 mk_add_options BUILD_OFFICIAL=1 ac_add_options --enable-official-branding mk_add_options MOZ_CO_LOCALES=pl ac_add_options --enable-ui-locale=pl mk_add_options LOCALES_CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/l10n Tak wygląda konsola MSYS po uruchomieniu: