:::
開發者討論區

在暈倒下編譯 LibreOffice ... (未完)

discuss pic 2012-03-18 00:04:48
參考此 頁 (英文的) ,以下只寫該頁沒提到的。

建構環境 (第一步):
  1. 官方說法只支援 2008。我已經有裝 Visual Studio 2010 所以懶得裝。
  2. Apache Ant:至此下 載。安裝法:解開到一個獨立目錄即可。
  3. Java SDK 1.6x:至 此下載。直接執行安裝即可。
  4. Junit:至此下 載 jar 包。完全不用安裝,也不用解開。

Cygwin 設定:因為我先前是專門編 Seamonkey = Firefox 的,所以用到的是 msys,我就照這樣修改過來。

  1. cygwin.bat 癈棄不用,改用 mozilla build system 的 guest-msvc.bat + 修改過的 start-msvc10.bat。使用 start-msvc10.bat 啟動進入 cygwin。

    start-msvc10.bat - 只有改紅字段落
    @echo off

    SET MOZ_MSVCVERSION=10
    SET MOZBUILDDIR=%~dp0
    SET MOZILLABUILD=%MOZBUILDDIR%

    echo "cygwin directory: %MOZBUILDDIR%"

    REM Get MSVC paths
    call "%MOZBUILDDIR%guess-msvc.bat"

    REM Use the "new" moztools-static 這邊這樣改是因為我的 mozilla build system 放在這
    set MOZ_TOOLS=d:\moz-build\moztools

    rem append to PATH
    SET PATH=%PATH%;%MOZBUILDDIR%\bin;%MOZ_TOOLS%\bin

    if "%VC10DIR%"=="" (
    if "%VC10EXPRESSDIR%"=="" (
    ECHO "Microsoft Visual C++ version 10 (2010) was not found. Exiting."
    pause
    EXIT /B 1
    )

    if "%SDKDIR%"=="" (
    ECHO "Microsoft Platform SDK was not found. Exiting."
    pause
    EXIT /B 1
    )

    rem Prepend MSVC paths
    call "%VC10EXPRESSDIR%\Bin\vcvars32.bat"

    rem Don't set SDK paths in this block, because blocks are early-evaluated.

    rem Fix problem with VC++Express Edition
    if "%SDKVER%" GEQ "6" (
    rem SDK Ver.6.0 (Windows Vista SDK) and newer
    rem do not contain ATL header files.
    rem We need to use the Platform SDK's ATL header files.
    SET USEPSDKATL=1
    )
    rem SDK ver.6.0 does not contain OleAcc.idl
    rem We need to use the Platform SDK's OleAcc.idl
    if "%SDKVER%" == "6" (
    if "%SDKMINORVER%" == "0" (
    SET USEPSDKIDL=1
    )
    )
    ) else (
    rem Prepend MSVC paths
    rem The Win7 SDK (or newer) should automatically integrate itself into vcvars32.bat
    ECHO Using VC 2010 built-in SDK
    call "%VC10DIR%\Bin\vcvars32.bat"
    )

    if "%VC10DIR%"=="" (
    rem Prepend SDK paths - Don't use the SDK SetEnv.cmd because it pulls in
    rem random VC paths which we don't want.
    rem Add the atlthunk compat library to the end of our LIB
    set "PATH=%SDKDIR%\bin;%PATH%"
    set "LIB=%SDKDIR%\lib;%LIB%;%MOZBUILDDIR%atlthunk_compat"

    if "%USEPSDKATL%"=="1" (
    if "%USEPSDKIDL%"=="1" (
    set "INCLUDE=%SDKDIR%\include;%PSDKDIR%\include\atl;%PSDKDIR%\include;%INCLUDE%"
    ) else (
    set "INCLUDE=%SDKDIR%\include;%PSDKDIR%\include\atl;%INCLUDE%"
    )
    ) else (
    if "%USEPSDKIDL%"=="1" (
    set "INCLUDE=%SDKDIR%\include;%SDKDIR%\include\atl;%PSDKDIR%\include;%INCLUDE%"
    ) else (
    set "INCLUDE=%SDKDIR%\include;%SDKDIR%\include\atl;%INCLUDE%"
    )
    )
    )

    rem Apache ANT 放的地方
    SET ANT_HOME=d:\cygwin\ant
    rem Ant 要帶 path
    SET PATH=%PATH%;%ANT_HOME%\bin
    rem 設定 jdk 位置
    SET JAVA_HOME=c:\Program Files (x86)\java\jdk1.6.0_31

    rem bash login d:\cygwin 是我的 cygwin 安裝位置
    d:
    cd \cygwin\bin

    bash --login -i

    cd \cygwin


  2. cygwin 會把所有磁碟掛到 /cygdrive 下面,我使用 ln -s 把所有磁碟都連結到 / 下,設定時可以少打幾個字。
  3. 下載 LibreOffice 團隊修改過的 make。 據說速度會比 cygwin 提供的快。下載後放到 cygwin 的 opt/lo/bin 目錄中,記得再去 chmod +x 加執行權限。

取得 LibreOffice 源碼:兩種方式可以作到,但都很花時間,因為要下載近 1G 的東西。

  1. 下載 libo_git_from_tar.sh,然後在 cygwin 下執行它。這會抓取數個 tar 源碼包,之後會自己解開到 libo 目錄中。
  2. 在 cygwin 下執行「git clone git://anongit.freedesktop.org/libreoffice/core libo」。一樣會把源碼抓到 libo 目錄中。
建構環境 (第二步):以下皆在 cygwin 中操作
  1. cd 到 libo 目錄,首先修改 oowintool 檔案,這個檔是補足剩下的一堆東西的列表,不過有一個項目叫作 Microsoft_VC90_CRT_x86.msm 的檔我始終找不到 (一般的都是分開的三個檔 msvcp90.dll、msvcm90.dll、msvcr90.dll,他這個要求「三合一」的我還真的沒有看過 ...)
    diff -ruNa libo/oowintool libox/oowintool
    --- libo/oowintool 2012-01-12 01:14:36 +0800
    +++ libox/oowintool 2012-01-18 13:03:07 +0800
    @@ -280,6 +280,6 @@
    my $msm_path = (cygpath $common_files_path . "\\Merge Modules", 'w', $output_format);
    foreach $fname ("Microsoft_VC90_CRT_x86$postfix.msm", "policy_9_0_Microsoft_VC90_CRT_x86$postfix.msm") {
    print STDERR "Copying $msm_path/$fname to $dest\n";
    - copy ("$msm_path/$fname", $dest) || die "copy failed: $!";
    +# copy ("$msm_path/$fname", $dest) || die "copy failed: $!";
    }
    }

  2. 在 libo 目錄內執行「make fetch」開始下載補足一堆檔案 (約 700MB)
  3. LibreOffice 會用到 dmake,請在 libo 目錄中執行:
    cd dmake
    ./configure
    make
    make install
    ps:本步驟只需要執行一次,以後就不用再執行了。
  4. 建立 myautogen.sh,用來跑 autogen.sh,存檔切記使用 LF 換行格式。內容主要是加上一堆編譯用設定參數。
    autogen.sh \
    --verbose \
    --enable-verbose \
    --disable-odk \
    --disable-debug \
    --disable-build-mozilla \
    --without-junit \
    --with-num-cpus=3 \
    --with-max-jobs=4 \
    --with-mozilla-build="/d/moz-build" \
    --with-vendor="s793016" \
    --with-build-version="Built by s793016" \
    --with-directx-home="/d/VStudio/DirectXSDK" \
    --with-cl-home="/d/VStudio/2010/VC" \
    --with-mspdb-path="/d/VStudio/2010/Common7/IDE" \
    --with-csc-path="/c/WINDOWS/Microsoft.NET/Framework/v3.5" \
    --with-midl-path="/c/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Bin" \
    --with-asm-home="/d/VStudio/2010/VC/Bin" \
    --with-windows-sdk-home="/c/Program Files (x86)/Microsoft SDKs/Windows/v7.0A" \
    --with-ant-home="/ant" \
    --with-jdk-home="/c/Program Files (x86)/java/jdk1.6.0_31" \
    --with-java-target-version=1.6 \
    2>&1 | tee /e/lo/log-autogen

    • 句尾的「\」是代表「此行未完」的連接符號
    • 最後一行是用來留畫面輸出 log 檔,以便有問題的話事後再回去看。
    • --with-num-cpus 設定使用幾個 cpu 核心數,我用的 4 核設定 3 核給他。這一項省略不設定的話就是「全部核心都用」。
    • --with-max-jobs 設定同時最多放幾個工作,這邊設定 4。一般似乎是建議設定 開放的核心數 x2
  5. 在 libo 目錄執行 make 開始編譯。如果您需要加設參數給 compiler,用這方式:
    CFLAGS="-O2" \
    CXXFLAGS="-O2" \
    make \
    2>&1 | tee /e/lo/log-make
    當然,一樣要記得 i/o 轉向留 log 檔,這樣不幸編掛時才能找錯誤。

已知問題:

  • 目前好像沒有比較有效的手段可以保持源碼的乾淨,這不像 firefox 可以指定 obj 目錄然後編掛了就只要把 obj 砍掉重來這麼簡單。如果直接 make clean、make distclean 之後再 make 旳話,錯誤的地方會不一樣 ... 也就是說,源碼被 obj 檔污染了,而且 make 移不乾淨,得重下源碼 ... orz
  • 參數的設定非常不便。您可以看到目前的作法預設就是,全部打在 autogen.sh 的後面變成長長一串。以 mozilla 來說,人家是全部集中在一個 .mozconfig 檔中,只要修改他就可以了。
  • 自從 2/28連假重感冒後就什麼都不想弄了。目前進度還沒編成功過,之前會掛在一個固定的地方。

ps:本文可能會再修改,如果心情好 或 有進展的話。

discuss pic 2012-03-18 11:47:00
start-msvc10.bat 在 bash login 前加一行:

set LC_CTYPE=zh_TW.Big5

在現用的 cygwin 1.7.x 中就可直接在 bash 顯示及處理中文。
discuss pic 2012-03-21 01:52:22
好酷~~
discuss pic 2012-03-27 21:47:03
強勁!

A+
志力建立 LibreOffice 的用戶和開發社群
discuss pic 2012-03-27 22:29:57
樓主 s793016,你好!

若我想把你的貼文引用或轉貼至 LibreOffice 正體中文官方 Wiki 裡,不知你會否反對?

http://wiki.documentfoundation.org/Development/zh-tw 
(此頁仍待努力更新)

志力建立 LibreOffice 的用戶和開發社群
discuss pic 2012-04-02 20:20:15
您要放我是不反對,不過我得先提醒您現在內容是未編譯成功過的狀態。所以現階段我不建議放。
discuss pic 2012-04-03 23:40:42
了解, 會再研究一下, 才把可取用或合適的內容放上 Wiki。
志力建立 LibreOffice 的用戶和開發社群
:::

快速登入

線上書籍列表

誰在線上

22人線上 (16人在瀏覽互動討論區)

會員: 0
訪客: 22

更多…