Windows版QGISをビルド

Windows7(32bit)でQGIS(2.8.1)をコンパイル

コンパイラは「VisualStudio 2010」

参考にしたサイトは定番の以下のサイト

QGISをソースからコンパイルする方法(Windows8.1 32bit環境)

Building QGIS from source – step by step

こちらも参考にしました

package.cmd

CMAKEをセットアップ

CNAKE2.8のダウンロードサイトからcmake-2.8.6-win32-x86.zipをダウンロードしてC:\CMakeにインストール

Flex、Bisonをインストール

Cygwinをインストールして、Flex、Bisonのパッケージをインストール
Flexのバージョンは2.5.39
Bisonのバージョンは3.0.4
※Cygwinはダウンロードするサイトによってパッケージのバージョンが違うかも

Gitをインストール
Gitの1.9.2をダウンロードサイトからダウンロードしてC:\Gitにインストール

Subversionをインストール

Subversionの1.8.11をC:\Subversionにインストール
※使わないかも

OSGeo4Wをインストール

OSGeo4Wをインストールして以下のパッケージとQGISをインストール

※QGISをインストールするのはコンパイルエラーになったモジュールを補うため。(プラグインなどは必ずしも正しくコンパイルされるとは限らないので)

expat
fcgi
gdal
grass
gsl-devel
iconv
pyqt4
qt4-devel
qwt5-devel-qt4
sip
spatialite
libspatialindex-devel
python-qscintilla
qwtは念のためにqwt5だけではなくqwtもインストールする

インストールされたパッケージ


avce002.0.0-1
curl7.15.1-2
expat2.0.1-1
fcgi2.4.0-1
fftw3.2-1
freetype-mingw2.3.7-1
freexl1.0.0e-1
gdal1.11.2-1
gdal-python1.11.2-1
gdal110dll1.10.1-1
gdal15dll1.5.4-1
gdal18dll1.8.1-0
gdal19dll1.9.2-1
geos3.4.2-1
gpsbabel1.4.4-1
gpsbabelfe1.4.4-1
grass66.4.4-1
gs9.07-3
gsl-devel1.12-1
gsl-libs1.12-1
hdf44.2.0r3-4
hdf51.8.11-1
iconv1.9.1-1
laszip2.2.0-1
libcairo1.10.2-1
libgeotiff1.3.0-3
libintl0.14.4-2
libjpeg6b-5
libjpeg126b-3
libmysql5.0.18-1
libpng1.2.34-1
libpq8.3.10-3
libspatialindex1.7.0-1
libspatialindex-devel1.7.0-2
libtiff4.0.2-2
libxml22.9.1-1
msvcrt1.0.1-12
msys1.0.18-7
msys-grass1-5
netcdf3.6.1-1
ogdi3.2.0b1-4
openjpeg2.0.0-1
openssl1.0.1g-1
pdcurses3.3-1
proj4.8.0-0
proj-datumgrid1.5-1
proj-hpgn1.0-1
psycopg22.4-1
pygments1.4-3
pyopengl3.0.1-1
pyqt44.11.3-1
pyspatialite3.0.1-1
python2.7.4-2
python-core2.7.4-3
python-dateutil2.2-1
python-help2.7.4-1
python-jinja22-2.7.2-1
python-markupsafe0.23-1
python-numpy2.7-1.7.0-1
python-pilpil-1.1.7-1
python-qscintilla2.8.4-1
python-tcltk2.7.4-1
python-testsuite2.7.4-1
python-tools2.7.4-1
python-win322.16-1
pytz2014.2-1
qgis2.8.1-1
qgis-common2.8.1-1
qscintilla2.8.4-1
qt4-devel4.8.6-1
qt4-libs4.8.6-1
qwt-devel-qt46.0.2-1
qwt-libs-qt46.0.2-1
qwt5-devel-qt44-5.2.1-1
qwt5-libs-qt44-5.2.1-1
setup1.0.7-10
shell1.0.0-13
sip4.16.5-1
six1.6.1-1
spatialite4.1.1-1
spatialite3dll3.0.1-0
sqlite33.7.17-1
szip2.1-1
tcltk8.5.6-1
wxpython2.8.12.1-1
xerces-c2.7.0-1
xerces-c-vc93.1.1-2
zlib1.2.3-1

tat2tagのセットアップ

PhytonがインストールされているC:\OSGEO4W\binにパスを通す
txt2tags.pyをダウンロードしてC:\OSGEO4W\binにコピー
txt2tags-2.3.exeをダウンロードしてC:\txt2tagsにインストール

作業ディレクトリの用意

ディレクトリC:\qgis\2.8.1_01を作成。
ディレクトリC:\qgis\2.8.1_01\build-x86を作成。

C:\qgis\2.8.1_01をカレントにして以下のコマンドでQGISのソース等をダウンロード
※QGISのGITHUBのアドレスhttps://github.com/qgis/QGIS

git clone git://github.com/qgis/qgis.git

C:\qgis\2.8.1_01\qgisにソースがダウンロードされる。
C:\qgis\2.8.1_01\qgisをカレントにして以下のコマンドでカレントのバージョンをリリースバージョんと同様の2.8.1に設定
現段階でのGISHUBのリポジトリの最新は2.8.2

git checkout ddccf8ee73eab92188a9055c472c58c86e3dc3b1

C:\qgis\2.8.1_01\init.batを以下の内容で作成

set VERSION=2.8.1
set PACKAGE=qgis2.8.1
set PACKAGENAME=qgis2.8.1
set ARCH=x86
if "%VERSION%"=="" goto usage
if "%PACKAGE%"=="" goto usage
if "%PACKAGENAME%"=="" goto usage
if "%ARCH%"=="" goto usage

echo "set BUILDDIR"
pause

set BUILDDIR=C:\qgis\2.8.1_01\build-x86

echo "set OSGEO4W_ROOT"
pause

set OSGEO4W_ROOT=C:\OSGeo4W

echo "exec o4w_env.bat"
pause

call "C:\OSGeo4W\bin\o4w_env.bat"

echo "set O4W_ROOT"
pause

set O4W_ROOT=%OSGEO4W_ROOT:\=/%

echo "set LIB_DIR"
pause

set LIB_DIR=%O4W_ROOT%

echo "set PF86"
pause

set PF86=%PROGRAMFILES%

echo "set GRASS_VERSION"
pause

set GRASS_VERSION=6.4.4

echo "exec vcvarsall.bat"
pause

call "%PF86%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86

echo "exec SetEnv.Cmd"
pause

call "c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /x86 /Release

color

@echo on

echo "set path"
pause

path %path%;%PF86%\Microsoft Visual Studio 10.0\VC\bin

echo "set CMAKE_OPT"
pause

set CMAKE_OPT=^
	-G "Visual Studio 10" ^
	-D SIP_BINARY_PATH=%O4W_ROOT%/bin/sip.exe ^
	-D QWT_LIBRARY=%O4W_ROOT%/lib/qwt5.lib

echo %CMAKE_OPT%

echo "set PYTHONPATH"
pause

set PYTHONPATH=
path C:\CMake\bin;%PATH%;c:\cygwin\bin

REM PROMPT qgis%VERSION%$g 

echo "set BUILDCONF"
pause

set BUILDCONF=RelWithDebInfo

echo "set SRCDIR"
pause

set SRCDIR=C:\qgis\2.8.1_01\qgis

echo %SRCDIR%

echo "cd BUILDDIR"
pause

if "%BUILDDIR:~1,1%"==":" %BUILDDIR:~0,2%
cd %BUILDDIR%

echo %BUILDDIR%

if errorlevel 1 goto error

echo %CD%

if errorlevel 1 goto error

echo "check log"
pause

if errorlevel 1 goto error

if not exist build.log goto build

echo "del build.tmp"
pause

REM
REM try renaming the logfile to see if it's locked
REM

if exist build.tmp del build.tmp
if exist build.tmp (echo could not remove build.tmp & goto error)

echo "ren build.log"
pause

ren build.log build.tmp
if exist build.log goto locked
if not exist build.tmp goto locked

echo "ren build.tmp"
pause

ren build.tmp build.log
if exist build.tmp goto locked
if not exist build.log goto locked

goto build

:locked
echo Logfile locked
if exist build.tmp del build.tmp
goto error

:build
echo "build"
if errorlevel 1 goto error
echo BEGIN: %DATE% %TIME%
if errorlevel 1 goto error

set >buildenv.log

echo "check qgsversion.h"

if exist qgsversion.h del qgsversion.h
if errorlevel 1 goto error

echo "check CMakeCache.txt"

if exist CMakeCache.txt goto skipcmake
if errorlevel 1 goto error

echo CMAKE: %DATE% %TIME%
if errorlevel 1 goto error

echo "set LIB"
pause

set LIB=%LIB%;%OSGEO4W_ROOT%\lib

echo %LIB%

echo "set INCLUDE"
pause

set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include

echo %INCLUDE%

echo "set GRASS_PREFIX"
pause

set GRASS_PREFIX=%O4W_ROOT%/apps/grass/grass-%GRASS_VERSION%

echo %GRASS_PREFIX%

echo "cmake"
pause

cmake %CMAKE_OPT% ^
	-D PEDANTIC=TRUE ^
	-D WITH_QSPATIALITE=TRUE ^
	-D WITH_SERVER=FALSE ^
	-D SERVER_SKIP_ECW=TRUE ^
	-D WITH_GLOBE=FALSE ^
	-D WITH_TOUCH=FALSE ^
	-D WITH_ORACLE=FALSE ^
	-D WITH_GRASS=TRUE ^
	-D WITH_CUSTOM_WIDGETS=TRUE ^
	-D CMAKE_CXX_FLAGS_RELEASE="/MD /MP /O2 /Ob2 /D NDEBUG" ^
	-D CMAKE_BUILD_TYPE=%BUILDCONF% ^
	-D CMAKE_CONFIGURATION_TYPES=%BUILDCONF% ^
	-D GEOS_LIBRARY=%O4W_ROOT%/lib/geos_c.lib ^
	-D SQLITE3_LIBRARY=%O4W_ROOT%/lib/sqlite3_i.lib ^
	-D SPATIALITE_LIBRARY=%O4W_ROOT%/lib/spatialite_i.lib ^
	-D PYTHON_EXECUTABLE=%O4W_ROOT%/bin/python.exe ^
	-D PYTHON_INCLUDE_PATH=%O4W_ROOT%/apps/Python27/include ^
	-D PYTHON_LIBRARY=%O4W_ROOT%/apps/Python27/libs/python27.lib ^
	-D QT_BINARY_DIR=%O4W_ROOT%/bin ^
	-D QT_LIBRARY_DIR=%O4W_ROOT%/lib ^
	-D QT_HEADERS_DIR=%O4W_ROOT%/include/qt4 ^
	-D QWT_INCLUDE_DIR=%O4W_ROOT%/include/qwt ^
	-D CMAKE_INSTALL_PREFIX=c:/qgis/%PACKAGENAME% ^
	-D FCGI_INCLUDE_DIR=%O4W_ROOT%/include ^
	-D FCGI_LIBRARY=%O4W_ROOT%/lib/libfcgi.lib ^
	-D WITH_INTERNAL_JINJA2=FALSE ^
	-D WITH_INTERNAL_MARKUPSAFE=FALSE ^
	-D WITH_INTERNAL_PYGMENTS=FALSE ^
	-D WITH_INTERNAL_DATEUTIL=FALSE ^
	-D WITH_INTERNAL_PYTZ=FALSE ^
	-D WITH_INTERNAL_SIX=FALSE ^
	%SRCDIR%
if errorlevel 1 (echo cmake failed & goto error)

call "C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe"

:skipcmake
if exist noclean (echo skip clean & goto skipclean)
echo CLEAN: %DATE% %TIME%

:skipclean
echo ALL_BUILD: %DATE% %TIME%
goto end

:usage
echo usage: %0 version package packagename arch
echo sample: %0 2.0.1 3 qgis x86
exit

:error
echo BUILD ERROR %ERRORLEVEL%: %DATE% %TIME%
for %%i in ("" "-common" "-server" "-devel" "-grass-plugin" "-globe-plugin" "-oracle-provider") do (
	if exist %ARCH%\release\qgis\%PACKAGENAME%%%i\%PACKAGENAME%%%i-%VERSION%-%PACKAGE%.tar.bz2 del %ARCH%\release\qgis\%PACKAGENAME%%%i\%PACKAGENAME%%%i-%VERSION%-%PACKAGE%.tar.bz2
)

:end
echo FINISHED: %DATE% %TIME%

vc2010が起動したらqgis2.8.1.slnを開いてコンパイルする。

いくつかのプロジェクトはコンパイルエラーになった。

processing-59-stageinstallのように複数の*.uiが入っているプロジェクトは*.uiからui_*への変換でエラーになることがある。この場合はソリューションエクスプローラ上で*.uiを右クリックしてひとつひとつコンパイルした後に同プロジェクトをビルドすれば、ビルドが通る可能性がある。

いくつかのPython系のプラグイン関係のプロジェクトビルドを通らなかった。
pyplugin-installerプロジェクトで原因を調べてみると、同プロジェクトに設定されているカスタムビルドの以下のコマンドでエラーが発生していた。

C:\qgis\2.8.1.2\qgis\scripts\pyuic4-wrapper.bat C:/OSGeo4W/bin/pyuic4.bat C:/qgis/2.8.1.2/build-x86/output/bin/RelWithDebInfo C:/qgis/2.8.1.2/build-x86/output/python C:/qgis/2.8.1.2/qgis/python/pyplugin_installer/qgsplugininstallerfetchingbase.ui -o C:/qgis/2.8.1.2/build-x86/python/pyplugin_installer/ui_qgsplugininstallerfetchingbase.py

pyuic4-wrapper.bat

set PYUIC4=%1
set PATH=%2;%PATH%
set PYTHONPATH=%3;%PYTHONPATH%
%PYUIC4% %4 %5 %6 %7 %8 %9

pyuic4.bat

@"C:\OSGeo4W\bin\python.exe" "C:\OSGeo4W\apps\Python27\lib\site-packages\PyQt4\uic\pyuic.py" %1 %2 %3 %4 %5 %6 %7 %8 %9

どうやらpython.exeでエラーが発生しているようなのpython.exeを単独で実行してみると「 ImportError: No module named site」が出力される。

よって以下の環境変数を設定ひて再度、実行すると

SET PYTHONHOME=C:\OSgeo4w\apps\Python27

ビルドエラーとなるプロジェクトは以下の2つに減った。

synccrsdb
qgis_regression1141

インストール

インストール先のディテクトリ「C:\qgis\qgis2.8.1」を作成
※インストール先はCMAKEにパラメータ「CMAKE_INSTALL_PREFIX」で指定したディレクトリ

プロジェクト「INSTALL」を実行してインストール

clip_5

起動バッチの作成

OSGEO4WにあるQGIS起動バッチを参考に以下のバッチを作成して実行

@echo off
call C:\OSGeo4W\bin\o4w_env.bat
call C:\OSGeo4W\apps\grass\grass-6.4.4\etc\env.bat
@echo off
path C:\OSGeo4W\bin;C:\qgis\qgis2.8.1\bin;C:\OSGeo4W\apps\grass\grass-6.4.4\lib;%PATH%
set QGIS_PREFIX_PATH=C:\qgis\qgis2.8.1
set GDAL_FILENAME_IS_UTF8=YES
rem Set VSI cache to be used as buffer, see #6448
set VSI_CACHE=TRUE
set VSI_CACHE_SIZE=1000000
set QT_PLUGIN_PATH=C:\qgis\qgis2.8.1\qtplugins;C:\OSGeo4W\apps\qt4\plugins
start "QGIS" /B "C:\qgis\qgis2.8.1\bin\qgis.exe %*

clip_6

以上

業務連絡
\\gyan2014\share\project\qgisに今回のリソースがあります。