파이어폭스 브라우저 소스코드 컴파일에서 주의할 점 몇가지

기초지식이 일천한 상태에서 맨 땅에 헤딩하기가 너무 어렵다.
나중을 위해 기록으로 남긴다.

  1. MozillaBuild package  install이것이 잘못되면 해결안 되는 build error가 발생한다.
    ==============                  사례               ======================

 

aesopc@aesopc-Pad /d/mozilla-central
$ ./mach build
 0:02.17 c:\mozilla-build\mozmake\mozmake.EXE -f client.mk MOZ_PARALLEL_BUILD=4 -s
 0:06.62 client.mk:201: d:/mozilla-central/obj-test/.mozconfig.mk: No such file or directory
 0:09.92 Clobber not needed.
 0:21.56 Adding client.mk options from d:/mozilla-central/.mozconfig:
 0:21.56     MOZ_MAKE_FLAGS=-j4
 0:21.56     MOZ_OBJDIR=d:/mozilla-central/obj-test
 0:21.57     OBJDIR=d:/mozilla-central/obj-test
 0:21.57     FOUND_MOZCONFIG=d:/mozilla-central/.mozconfig
 0:26.38 cd d:/mozilla-central/obj-test
 0:26.42 d:/mozilla-central/configure
 0:29.54 Adding configure options from d:/mozilla-central/.mozconfig
 0:29.54   --disable-gamepad
 0:29.54   --enable-optimize=-O2
 0:29.54   --disable-tests
 0:29.54   --disable-accessibility
 0:29.54   --disable-update-channel
 0:29.54   --disable-
 0:29.55   --enable-official-branding
 0:29.55   --disable-crashreporter
 0:32.12 creating  ./config.
 0:34.06 checking host system type... i686-pc-mingw32
 0:34.81 checking target system type... i686-pc-mingw32
 0:35.57 checking build system type... i686-pc-mingw32
 0:35.62 checking for mawk... no
 0:35.64 checking for gawk... gawk
 0:35.81 checking for python2.7... /c/mozilla-build/python/python2.7
 0:35.94 Creating Python environment
 0:37.04 New python executable in d:/mozilla-central/obj-test/_virtualenv\Scripts\python2.7.exe
 0:37.05 Also creating executable in d:/mozilla-central/obj-test/_virtualenv\Scripts\python.exe
 0:42.47 Installing setuptools, pip...done.
 0:44.36 running build_ext
 0:44.36
 0:44.36 building 'psutil._psutil_windows' extension
 0:44.36
 0:44.36 c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64_x86\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -DPSUTIL_VERSION=311 -D_WIN32_WINNT=0x
0601 -D_AVAIL_WINVER_=0x0601 -D_CRT_SECURE_NO_WARNINGS -DPSAPI_VERSION=1 -Ic:\mozilla-build\python\include -Id:\mozilla-central\obj-test\_virtualenv\PC /Tcpsuti
l/_psutil_windows.c /Fobuild\temp.win32-2.7\Release\psutil/_psutil_windows.obj
 0:44.36
 0:44.36 _psutil_windows.c
 0:44.36
 0:44.36 d:\mozilla-central\python\psutil\psutil\arch\windows\ntextapi.h(189) :error C2365: 'ProcessDebugPort' : redefinition; previous definition was 'enumera
tor'
 0:44.37
 0:44.37         C:\Program Files (x86)\Windows Kits\8.1\include\um\winternl.h(304) : see declaration of 'ProcessDebugPort'
...


 0:56.27 d:/mozilla-central/configure: line 5838: test: /c/mozilla-build/moztools-x64/bin/c: binary operator expected
 0:56.27 no
 0:56.27 checking for make... /usr/local/bin/make
 0:57.81 checking for X... no
 0:59.89 checking that static assertion macros used in autoconf tests work... yes
 1:00.38 checking for 64-bit OS... no
 1:03.98 checking whether the C++ compiler (cl  -TP -nologo -D_HAS_EXCEPTIONS=0-W3 -Gy -arch:IA32 -FS -wd4251 -wd4244 -wd4267 -wd4345 -wd4351 -wd4800 -wd4819 -
we4553 -GR-  -LARGEADDRESSAWARE -NXCOMPAT -DYNAMICBASE -SAFESEH) actually is a C++ compiler... yes
 1:04.76 checking for malloc.h... yes
 1:05.40 checking for alloca.h... no
 1:05.90 checking for strndup... no
 1:06.39 checking for posix_memalign... no
 1:06.89 checking for memalign... no
 1:07.40 checking for malloc_usable_size... no
 1:07.53 checking for malloc.h... (cached) yes
 1:08.03 checking whether malloc_usable_size definition can use const argument... yes
 1:08.47 checking for valloc in malloc.h... no
 1:08.79 checking for valloc in unistd.h... no
 1:09.35 checking NSPR selection... source-tree
 1:09.79 checking for YASM assembler... checking for yasm... yasm
 1:10.49 checking for application to build... browser
 1:10.74 checking if app-specific confvars.sh exists... d:/mozilla-central/browser/confvars.sh
 1:11.86 configure: error: You must specify MOZ_OFFICIAL_BRANDING_DIRECTORY to use --enable-official-branding.
 1:11.86 ------ config.log ------
...

 1:11.93 configure:14785: checking NSPR selection
 1:11.94 configure:15483: checking for YASM assembler
 1:11.94 configure:15489: checking for yasm
 1:11.94 configure:16485: checking for application to build
 1:11.94 configure:16666: checking if app-specific confvars.sh exists
 1:11.94 configure: error: You must specify MOZ_OFFICIAL_BRANDING_DIRECTORY to use --enable-official-branding.
 1:11.95 *** Fix above errors and then restart with\
 1:11.95                "c:/mozilla-build/mozmake/mozmake.EXE -f client.mk build"
 1:11.96 d:/mozilla-central/client.mk:361: recipe for target 'configure' failed
 1:11.96 mozmake.EXE[2]: *** [configure] Error 1
 1:11.97 d:/mozilla-central/client.mk:375: recipe for target 'd:/mozilla-central/obj-test/Makefile' failed
 1:11.97 mozmake.EXE[1]: *** [d:/mozilla-central/obj-test/Makefile] Error 2
 1:11.97 client.mk:171: recipe for target 'build' failed
 1:11.97 mozmake.EXE: *** [build] Error 2
 1:12.04 0 compiler warnings present.
2

=====================================================================

MozillaBuild version을 2.0.0–> 1,11.0으로 낮추었으나  또 다른 생소한 오류가 나타났음.
다시 2.0.0 으로 되돌아오니 정상 작동하기 시작..
하지만 이것이 지쨰 원인이되었는지는 반복 테스트를 해보지 않아서 확신할 수 없음.
(문서에는 재 설치, 업그레이드 시 반드시 설칟된 버전을 완전히 삭제하는 것을 주의하라고 되어있음.
uninstall package가 없기 때문에 단순히 디렉토리를 삭제하는 것으로 대체함. )

2. 앞 글에서 사례가 된 리비젼(#f4800de50e03 ) 로 업데이트 하면 mach command 가 비활성화된다.
–> 생각할수있는 해결방법은 압축본을 받아서 덥어쓰기 해보는 것인데..
일단 최신본의 빌드에 성공하고난 후에 복사본의 디렉토리를 만들고 그 곳에서 테스트

==>결과
=================================================

aesopc@aesopc-Pad /d/mozilla-firefox
$ ./mach build
 0:02.12 c:\mozilla-build\mozmake\mozmake.EXE -f client.mk -s
 0:03.08 client.mk:141: /d/mozilla-firefox/.mozconfig.mk: No such file or directory
 0:03.08 mozmake.EXE: *** No rule to make target '/d/mozilla-firefox/.mozconfig.mk'.  Stop.
 0:03.11 0 compiler warnings present.
2

================================================
==> client.mk 파일이 달라서 발생하는 문제라고 보고
빌드에 성공한 경우의 파일을 복사해옴
==> 결과
===================================

aesopc@aesopc-Pad /d/mozilla-firefox
$ ./mach build
 0:02.05 c:\mozilla-build\mozmake\mozmake.EXE -f client.mk -s
 0:12.99 Adding client.mk options from d:/mozilla-firefox/.mozconfig:
 0:12.99     MOZ_OBJDIR=d:/mozilla-firefox/obj-i686-pc-mingw32
 0:12.99     OBJDIR=d:/mozilla-firefox/obj-i686-pc-mingw32
 0:12.99     FOUND_MOZCONFIG=d:/mozilla-firefox/.mozconfig
 0:17.59 cd d:/mozilla-firefox/obj-i686-pc-mingw32
 0:17.63 d:/mozilla-firefox/configure
 0:20.33 loading  ./config.
 0:22.21 checking host system type... i686-pc-mingw32
 0:22.98 checking target system type... i686-pc-mingw32
 0:23.71 checking build system type... i686-pc-mingw32
 0:23.76 checking for mawk... no
 0:23.80 checking for gawk... gawk
 0:23.96 checking for python2.7... /c/mozilla-build/python/python2.7
 0:24.10 Creating Python environment
 0:24.49 checking Python environment is Mozilla virtualenv... Traceback (most recent call last):
 0:24.49   File "", line 1, in 
 0:24.49   File "d:\mozilla-firefox\python\mozbuild\mozbuild\base.py", line 14,in 
 0:24.49     import which
 0:24.50 ImportError: No module named which
 0:24.50 configure: error: Python environment does not appear to be sane.
 0:24.50 ------ config.log ------
 0:24.56 This file contains any messages produced by compilers while
 0:24.56 running configure, to aid debugging if configure makes a mistake.
 0:24.56
 0:24.56 configure:1200: checking host system type
 0:24.56 configure:1221: checking target system type
 0:24.56 configure:1239: checking build system type
 0:24.56 configure:1318: checking for mawk
 0:24.56 configure:1318: checking for gawk
 0:24.56 configure:1402: checking for python2.7
 0:24.56 configure:1512: checking Python environment is Mozilla virtualenv
 0:24.57 configure: error: Python environment does not appear to be sane.
 0:24.58 *** Fix above errors and then restart with\
 0:24.58                "c:/mozilla-build/mozmake/mozmake.EXE -f client.mk build"
 0:24.60 d:/mozilla-firefox/client.mk:359: recipe for target 'configure' failed
 0:24.60 mozmake.EXE[2]: *** [configure] Error 1
 0:24.60 d:/mozilla-firefox/client.mk:373: recipe for target 'd:/mozilla-firefox/obj-i686-pc-mingw32/Makefile' failed
 0:24.60 mozmake.EXE[1]: *** [d:/mozilla-firefox/obj-i686-pc-mingw32/Makefile] Error 2
 0:24.61 client.mk:171: recipe for target 'build' failed
 0:24.61 mozmake.EXE: *** [build] Error 2
 0:24.62 0 compiler warnings present.
2

===============================

3.  일단 에러가 나면 먼저 진행한  ‘obj-dir’가 남아있지 않은지 살펴보고 삭제한다.

(./mach clobber  // 명령은 ‘obj-dir’를 삭제하라는 뜻을 가진다.)

결과 :

====================================================

0:33.21 Also creating executable in d:/mozilla-firefox/obj-i686-pc-mingw32/_virtualenv\Scripts\python.exe
0:39.24 Installing setuptools, pip...done.
0:41.16 running build_ext
0:41.16
0:41.16 building 'psutil._psutil_windows' extension
0:41.16
0:41.16 c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64_x86\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -DPSUTIL_VERSION=311 -D_WIN32_WINNT=0x0601 -D_AVAIL_WINVER_=0x0601 -D_CRT_SECURE_NO_WARNINGS -DPSAPI_VERSION=1 -Ic:\mozilla-build\python\include -Id:\mozilla-firefox\obj-i686-pc-mingw32\_virtualenv\PC /Tcpsutil/_psutil_windows.c /Fobuild\temp.win32-2.7\Release\psutil/_psutil_windows.obj

....

 0:41.19         C:\Program Files (x86)\Windows Kits\8.1\include\um\winternl.h(3
08) : see declaration of 'ProcessBreakOnTermination'
 0:41.20
 0:41.20 d:\mozilla-firefox\python\psutil\psutil\arch\windows\ntextapi.h(212) :
error C2086: '_PROCESSINFOCLASS2 ProcessBreakOnTermination' : redefinition
 0:41.20
 0:41.20         d:\mozilla-firefox\python\psutil\psutil\arch\windows\ntextapi.h
(212) : see declaration of 'ProcessBreakOnTermination'
 0:41.20
 0:41.20 error: command 'c:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\
VC\\BIN\\amd64_x86\\cl.exe' failed with exit status 2
 0:41.20
 0:41.21
 0:41.21 Error processing command. Ignoring because optional. (optional:setup.py
:python/psutil:build_ext:--inplace)
 0:41.21 d:/mozilla-firefox/python/mozbuild/mozbuild/virtualenv.py:318: UserWarn
ing: Hacking environment to allow binary Python extensions to build. You can mak
e this warning go away by installing Visual Studio 2008. You can download the Ex
press Edition installer from http://go.microsoft.com/?linkid=7729279
 0:41.21   warnings.warn('Hacking environment to allow binary Python '
...


1:37.67 js\src\ctypes\libffi> running C:/mozilla-build/msys/bin/sh d:/mozilla-firefox/js/src/ctypes/libffi/configure --build=i686-pc-mingw32 --host=i686-pc-mingw32 --disable-shared --enable-static --disable-raw-api AS=ml.exe CC=cl CXX=cl CPP=cl -E -nologo LD=link AR=lib RANLIB=echo not_ranlib STRIP=echo not_strip LD=link CPP=cl -nologo -EP CXXCPP=cl -nologo -EP SHELL=sh.exe CC=/d/mozilla-firefox/js/src/ctypes/libffi/msvcc.sh CXX=/d/mozilla-firefox/js/src/ctypes/libffi/msvcc.sh ---file=d:/mozilla-firefox/obj-i686-pc-mingw32/js/src/ctypes/libffi/conf
ig.
1:37.68 memory\jemalloc\src> configuring
1:37.68 memory\jemalloc\src> running C:/mozilla-build/msys/bin/sh d:/mozilla-firefox/memory/jemalloc/src/configure --build=i686-pc-mingw32 --host=i686-pc-mingw32 --enable-stats --with-jemalloc-prefix=je_ --disable-valgrind ac_cv_func_memalign=yes ac_cv_func_valloc=yes --without-export --disable-lazy-lock --disable-tls AS=ml.exe CC=cl CXX=cl CPP=cl -E -nologo LD=link AR=lib RANLIB=echo not_ranlibSTRIP=echo not_strip CPPFLAGS= EXTRA_CFLAGS= LDFLAGS= ac_cv_func_sbrk=false --enable-munmap --disable--oblivious ---file=d:/mozilla-firefox/obj-i686-p
c-mingw32/memory/jemalloc/src/config.
1:37.73 nsprpub> configuring
1:37.73 nsprpub> running C:/mozilla-build/msys/bin/sh d:/mozilla-firefox/nsprpub/configure --build=i686-pc-mingw32 --with-ist-prefix=d:/mozilla-firefox/obj-i686-pc-mingw32/dist --with-mozilla --disable- --enable-optimize AS=ml.exe CC= CXX= CPP=cl -E -nologo LD=link AR=lib RANLIB=echo not_ranlib STRIP=echo not_strip ---file=d:/mozilla-firefox/obj-i686-pc-mingw32/nsprpub/config.
1:40.68 js\src> configuring
1:40.68 js\src> running C:/mozilla-build/msys/bin/sh d:/mozilla-firefox/js/src/configure --enable-threadsafe --enable-ctypes --disable-hared-js --with-nspr-cflags=-Id:/mozilla-firefox/obj-i686-pc-mingw32/dist/include/nspr --with-nspr-libs=d:/mozilla-firefox/obj-i686-pc-mingw32/dist/lib/nspr4.lib d:/mozilla-firefox/obj-i686-pc-mingw32/dist/lib/plc4.lib d:/mozilla-firefox/obj-i686-pc-mingw32/dist/lib/plds4.lib --prefix=d:/mozilla-firefox/obj-i686-pc-mingw32/dist --enable-jemalloc ---file=d:/mozilla-firefox/obj-i686-pc-mingw32/js/src/config.
1:40.68 nsprpub> configure: warning: AS=ml.exe: invalid host type
1:40.68 nsprpub> configure: warning: CC=: invalid host type
1:40.68 nsprpub> configure: error: can only configure for one host and one target at a time
1:40.69
5:37.75 *** Fix above errors and then restart with\
5:37.75 "c:/mozilla-build/mozmake/mozmake.EXE -f client.mk build"
5:37.76 d:/mozilla-firefox/client.mk:359: recipe for target 'configure' failed
5:37.76 mozmake.EXE[2]: *** [configure] Error 1
5:37.77 d:/mozilla-firefox/client.mk:373: recipe for target 'd:/mozilla-firefox/obj-i686-pc-mingw32/Makefile' failed
5:37.77 mozmake.EXE[1]: *** [d:/mozilla-firefox/obj-i686-pc-mingw32/Makefile] Error 2
5:37.77 client.mk:171: recipe for target 'build' failed
5:37.77 mozmake.EXE: *** [build] Error 2
5:37.80 0 compiler warnings present.
2

====================================================

 

종합 결론

앞에서 사례로 든 문서 https://wiki.mozilla.org/Education/Learning/ModifyBrowser 는 수 년전(2009년)에 작성된 것으로서 여기서 기재된  리비젼(#f4800de50e03 ) 도 또한 아주 오래된 버전(mozilla 1.9.2; firefox version3.6)이다.
그런데 문서 Obsolete Build Caveats and Tips 에   가보면  Firefox 10이하 부터는 visual Studio 2010 를 사용하라고 나온다.
지금까지 문제의 원인은 여기에있었던 것으로 생각된다.

visual Studio 2010 구해서 테스트 해보기 전까지는 일단 작업을 중단한다.

 

소셜댓글

Loading Facebook Comments ...
Loading Disqus Comments ...

No Trackbacks.