This is an old revision of the document!
Table of Contents
Инструкция по сборке Psi+ в ОС MS Windows (MinGW)
Необходимый инструментарий
1. Qt libraries 4.8.6 for Windows (minGW v4.8.2) или скачать с основной страницы загрузок ~330 MB
2. MinGW v4.8.2 ~45 MB
2. MinGW-gcc-4.4.0-2 ~15 MB
3. CMake build system (win32) – скомпилированную версию 3.0.0 можно взять здесь ~14 MB
4. Git for Windows - набор утилит для работы с Git (из состава msysGit) ~12 MB
5. OpenSSL – архив с исходным кодом пакета программ для шифрования и криптографии (версия > 1.0.0), необходим для компиляции OpenSSL ~4 MB
6. Aspell Libs for MinGW - библиотеки для обеспечения работы функционала проверки орфографии, необходимые для сборки файлы можно взять здесь ~0.5 MB
7. GNU IDN Library (LibIDN) – скомпилированную версию (v1.28) можно взять здесь или здесь ~0.5 MB
8. QConf – утилита конфигурирования проекта перед сборкой (скомпилированную версию можно взять здесь) ~0.1 MB
9. Zlib for Windows (скомпилированную версию можно взять здесь) (v1.2.8) ~0.05 MB
10. Qt Cryptographic Architecture Libs (QCA) (скомпилированную версию можно взять здесь) ~0.01 MB
11. GnuPG (Package for Windows) - свежий win32-инсталлятор можно взять здесь
Опционально:
- TortoiseGit - надстройка для проводника MS Windows ~20 MB
Python – только версии 2.x.x (x86) ~15 MBccache version 3.1 – утилита для ускорения процесса компиляции ~0.2 MBПримечание: для нормальной работы ccache необходимо прописать переменную CCACHE_DIR в переменных окружения.
Подготовка к сборке, настройка переменных окружения и необходимых библиотек
- Устанавливаем необходимый инструментарий, указанный выше. Git рекомендуется устанавливать в корень диска, например, в C:\Git
- Создаём в папке C:\MinGW\bin новый файл make.exe путём копирования и переименования из файла mingw32-make.exe /ВРЕМЕННЫЙ КОСТЫЛЬ/
- Распаковываем папки include и lib из архива lyx-windows-deps-mingw-small.zip в папку C:\MinGW
- Распаковываем содержимое архива zlib-1.2.8-win32.7z в папку C:\Qt\zlib
- Распаковываем содержимое архива libidn-1.28-win32.zip в папку C:\Qt\LibIDN
- Скачиваем и распаковываем содержимое архива otrplugin-deps-mingw-win32.7z следующим образом:
- файлы из папки bin копируем в папку Psi+ (например, C:\Program Files (x86)\Psi+)
- папки include и lib копируем в папку C:\MinGW\i686-w64-mingw32
Распаковываем утилиту ccache.exe и библиотеку zlib1.dll из архива ccache-3.1-win32.7z в папку C:\MinGW\binРедактируем строки QMAKE_CC и QMAKE_CXX в файле C:\Qt\4.8.6\mkspecs\win32-g++\qmake.conf (дописываем ccache в следующих строках)
<code>
……..
QMAKE_CC = ccache $${CROSS_COMPILE}gcc
……..
QMAKE_CXX = ccache $${CROSS_COMPILE}g++
</code>
- В свойствах компьютера (Start → Settings → Control Panel → System Properties → Advanced → Environment Variables) добавляем необходимые пути в системную переменную PATH (при необходимости пути следует заменить на свои):
C:\>path
PATH=C:\MinGW\bin;C:\Qt\QConf;C:\cmake\bin;C:\Program Files (x86)\GNU\GnuPG\pub
А также создаём новые системные переменные (при необходимости заменив пути на свои):
GITDIR=C:\Git LIBIDNDIR=C:\Qt\LibIDN MINGWDIR=C:\MinGW OPENSSLDIR=C:\OpenSSL QCADIR=C:\Qt\QCA QCONFDIR=C:\Qt\QConf QMAKESPEC=win32-g++ QTDIR=C:\Qt\4.8.6 ZLIBDIR=C:\Qt\zlib
Примечание 1: Переменные обновятся только для вновь запущенных процессов, т.е. требуется перезапустить cmd с правами администратора (в крайнем случае - перезагрузить систему).
Примечание 2: Если у вас закрыт доступ наружу по порту 9418, то вы не сможете скачать исходный код Psi и Psi+ по протоколу git://. В этом случае рекомендуется в глобальном конфиге Git добавить следующий параметр:
C:\Git\bin\git config --global url."https://".insteadOf git://
Проверка правильной установки и работоспособности Qt на примере сборки тестовой программы
- Запускаем командную строку cmd.exe с правами администратора (Start → Run → cmd)
- Проверяем правильность установки путей и переменных командой:
C:\Qt\4.8.6\bin\qmake -v
Видим следующее:
C:\>C:\Qt\4.8.6\bin\qmake -v QMake version 2.01a Using Qt version 4.8.6 in C:\Qt\4.8.6\lib
А также командой:
echo %QMAKESPEC%
Видим ответ:
C:\>echo %QMAKESPEC% win32-g++
- Меняем рабочую папку на C:\Qt\4.8.6\examples\tutorials\addressbook\part1 командой:
cd C:\Qt\4.8.6\examples\tutorials\addressbook\part1
- Выполняем команду:
C:\Qt\4.8.6\bin\qmake part1.pro
- Затем выполняем команду:
mingw32-make -f makefile.release
Видим следующее:
C:\Qt\4.8.6\examples\tutorials\addressbook\part1>mingw32-make -f makefile.releas e g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_M MXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include \QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"..\..\..\..\in clude\ActiveQt" -I"release" -I"..\..\..\..\mkspecs\win32-g++" -o release\address book.o addressbook.cpp g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_M MXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include \QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"..\..\..\..\in clude\ActiveQt" -I"release" -I"..\..\..\..\mkspecs\win32-g++" -o release\main.o main.cpp C:\Qt\4.8.6\bin\moc.exe -DUNICODE -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_ LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPP ORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtGui " -I"..\..\..\..\include" -I"..\..\..\..\include\ActiveQt" -I"release" -I"..\..\ ..\..\mkspecs\win32-g++" -D__GNUC__ -DWIN32 addressbook.h -o release\moc_address book.cpp g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_M MXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include \QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"..\..\..\..\in clude\ActiveQt" -I"release" -I"..\..\..\..\mkspecs\win32-g++" -o release\moc_add ressbook.o release\moc_addressbook.cpp g++ -Wl,-s -mthreads -Wl,-subsystem,windows -o release\part1.exe release/address book.o release/main.o release/moc_addressbook.o -L"c:\Qt\4.8.6\lib" -lmingw32 - lqtmain -lQtGui4 -lQtCore4
Результат сборки release-версии тестового приложения в виде исполняемого файла part1.exe наблюдаем в папке C:\Qt\4.8.6\examples\tutorials\addressbook\part1\release
Успешная сборка тестового приложения означает, что Qt правильно установлена и готова к использованию.
Компиляция OpenSSL Toolkit v1.0.x
Важно! Данный алгоритм справедлив для версий OpenSSL выше v1.0.x.
- Создаём рабочую папку C:\build\openssl
- Распаковываем архив с исходниками OpenSSL v1.0.x (из Пункта №5 необходимого инструментария) в папку C:\build\openssl
- Запускаем от имени Администратора Git Bash (идёт в комплекте с Git) в папке C:\build\openssl и последовательно выполняем следующие команды. Сначала конфигурируем проект:
MAKE=mingw32-make PERL=perl.exe ./config --prefix=/c/OpenSSL shared
Видим процесс конфигурирования проекта:
........................... making links in ssl... mingw32-make[1]: Entering directory `c:/build/openssl/ssl' ssl.h => ../include/openssl/ssl.h ssl2.h => ../include/openssl/ssl2.h ssl3.h => ../include/openssl/ssl3.h ssl23.h => ../include/openssl/ssl23.h tls1.h => ../include/openssl/tls1.h dtls1.h => ../include/openssl/dtls1.h kssl.h => ../include/openssl/kssl.h srtp.h => ../include/openssl/srtp.h ssltest.c => ../test/ssltest.c mingw32-make[1]: Leaving directory `c:/build/openssl/ssl' making links in engines... mingw32-make[1]: Entering directory `c:/build/openssl/engines' making links in engines/ccgost... mingw32-make[2]: Entering directory `c:/build/openssl/engines/ccgost' mingw32-make[2]: Nothing to be done for `links'. mingw32-make[2]: Leaving directory `c:/build/openssl/engines/ccgost' mingw32-make[1]: Leaving directory `c:/build/openssl/engines' making links in apps... mingw32-make[1]: Entering directory `c:/build/openssl/apps' mingw32-make[1]: Nothing to be done for `links'. mingw32-make[1]: Leaving directory `c:/build/openssl/apps' making links in test... mingw32-make[1]: Entering directory `c:/build/openssl/test' mingw32-make[1]: Nothing to be done for `links'. mingw32-make[1]: Leaving directory `c:/build/openssl/test' making links in tools... mingw32-make[1]: Entering directory `c:/build/openssl/tools' mingw32-make[1]: Nothing to be done for `links'. mingw32-make[1]: Leaving directory `c:/build/openssl/tools' generating dummy tests (if needed)... mingw32-make[1]: Entering directory `c:/build/openssl/test' mingw32-make[1]: Nothing to be done for `generate'. mingw32-make[1]: Leaving directory `c:/build/openssl/test' Configured for mingw.
Далее запускаем компиляцию:
mingw32-make
Видим процесс компиляции:
.................................. gcc -I.. -I../include -D_WINDLL -DOPENSSL_USE_APPLINK -DOPENSSL_PIC -DOPENSSL_T HREADS -D_MT -DDSO_WIN32 -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -fomit-frame-pointer - O3 -march=i486 -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_B N_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -c -o asn1test. o asn1test.c mingw32-make[2]: Entering directory `c:/build/openssl/test' mingw32-make[2]: Leaving directory `c:/build/openssl/test' gcc -I.. -I../include -D_WINDLL -DOPENSSL_USE_APPLINK -DOPENSSL_PIC -DOPENSSL_T HREADS -D_MT -DDSO_WIN32 -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -fomit-frame-pointer - O3 -march=i486 -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_B N_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -c -o dummytest .o dummytest.c mingw32-make[2]: Entering directory `c:/build/openssl/test' mingw32-make[2]: Leaving directory `c:/build/openssl/test' mingw32-make[1]: Leaving directory `c:/build/openssl/test' making all in tools... mingw32-make[1]: Entering directory `c:/build/openssl/tools' mingw32-make[1]: Nothing to be done for `all'. mingw32-make[1]: Leaving directory `c:/build/openssl/tools'
Примечание: Если при выполнении команды mingw32-make получаем ошибку компиляции тестов, то в папке C:\build\openssl открываем файл Makefile, находим строку:
build_all: build_libs build_apps build_tests build_tools
и удаляем из неё параметр build_tests. Далее продолжаем компиляцию командой mingw32-make.
И в завершении выполняем команду:
mingw32-make install
Видим процесс инсталляции:
......................................... making install in tools... mingw32-make[1]: Entering directory `c:/build/openssl/tools' mingw32-make[1]: Leaving directory `c:/build/openssl/tools' installing libcrypto.a installing libssl.a installing libcrypto.dll.a installing libeay32.dll installing libssl.dll.a installing ssleay32.dll mingw32-make[1]: Entering directory `c:/OpenSSL/lib' mingw32-make[2]: Entering directory `c:/OpenSSL/lib' mingw32-make[2]: Nothing to be done for `symlink.cygwin-shared'. mingw32-make[2]: Leaving directory `c:/OpenSSL/lib' mingw32-make[2]: Entering directory `c:/OpenSSL/lib' mingw32-make[2]: Nothing to be done for `symlink.cygwin-shared'. mingw32-make[2]: Leaving directory `c:/OpenSSL/lib' mingw32-make[1]: Leaving directory `c:/OpenSSL/lib' OpenSSL shared libraries have been installed in: /c/OpenSSL If this directory is not in a standard system path for dynamic/shared libraries, then you will have problems linking and executing applications that use OpenSSL libraries UNLESS: * you link with static (archive) libraries. If you are truly paranoid about security, you should use static libraries. * you use the GNU libtool code during linking (http://www.gnu.org/software/libtool/libtool.html) * you use pkg-config during linking (this requires that PKG_CONFIG_PATH includes the path to the OpenSSL shared library directory), and make use of -R or -rpath. (http://www.freedesktop.org/software/pkgconfig/) * you specify the system-wide link path via a command such as crle(1) on Solaris systems. * you add the OpenSSL shared library directory to /etc/ld.so.conf and run ldconfig(8) on Linux systems. * you define the LD_LIBRARY_PATH, LIBPATH, SHLIB_PATH (HP), DYLD_LIBRARY_PATH (MacOS X) or PATH (Cygwin and DJGPP) environment variable and add the OpenSSL shared library directory to it. One common tool to check the dynamic dependencies of an executable or dynamic library is ldd(1) on most UNIX systems. See any operating system documentation and manpages about shared libraries for your version of UNIX. The following manpages may be helpful: ld(1), ld.so(1), ld.so.1(1) [Solaris], dld.sl(1) [HP], ldd(1), crle(1) [Solaris], pldd(1) [Solaris], ldconfig(8) [Linux], chatr(1) [HP]. cp libcrypto.pc /c/OpenSSL/lib/pkgconfig chmod 644 /c/OpenSSL/lib/pkgconfig/libcrypto.pc cp libssl.pc /c/OpenSSL/lib/pkgconfig chmod 644 /c/OpenSSL/lib/pkgconfig/libssl.pc cp openssl.pc /c/OpenSSL/lib/pkgconfig chmod 644 /c/OpenSSL/lib/pkgconfig/openssl.pc
В результате компиляции и инсталляции пакета OpenSSL Toolkit v1.0.x получаем скомпилированные библиотеки libeay32.dll и ssleay32.dll в папке C:\OpenSSL\bin, а также заголовочные файлы в папке C:\OpenSSL\include\openssl и служебные библиотеки для линковки в папке C:\OpenSSL\lib.
Теперь пакет OpenSSL Toolkit v1.0.x готов для линковки и сборки Psi+. Временную папку сборки C:\build\openssl можно удалить.
Компиляция утилиты конфигурирования QConf
- Запускаем от имени Администратора Git Bash (идёт в комплекте с Git) в рабочей папке C:\build
- Задаём необходимые пути:
PATH=$PATH:/c/qt/4.8.6/bin/
- Скачиваем исходный код QConf командой:
git clone https://github.com/psi-plus/qconf.git
Видим процесс скачивания:
$ git clone https://github.com/psi-plus/qconf.git Cloning into 'qconf'... remote: Reusing existing pack: 239, done. Receiving objremote: Total 239 (delta 0), reused 0 (delta 0)ects: 86% (206/239) R Receiving objects: 100% (239/239), 82.14 KiB | 0 bytes/s, done. Resolving deltas: 100% (152/152), done. Checking connectivity... done.
- Далее переходим в папку C:\build\qconf и выполняем конфигурирование проекта командой:
./configure
Видим процесс конфигурирования проекта:
$ ./configure Configuring QConf ... Verifying Qt 4 build environment ... ok Good, your configure finished. Now run make.
- Далее запускаем компиляцию:
mingw32-make -f makefile.release
Видим процесс компиляции:
$ mingw32-make -f makefile.release g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_DLL -DQT_NO_DEBUG -DQT_XML_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_M MXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I'../../Qt/4.8.6/include/QtCore' -I'.. /../Qt/4.8.6/include/QtXml' -I'../../Qt/4.8.6/include' -I'../../Qt/4.8.6/include /ActiveQt' -I'release' -I'../../Qt/4.8.6/mkspecs/win32-g++' -o release/stringhel p.o src/stringhelp.cpp g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_DLL -DQT_NO_DEBUG -DQT_XML_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_M MXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I'../../Qt/4.8.6/include/QtCore' -I'.. /../Qt/4.8.6/include/QtXml' -I'../../Qt/4.8.6/include' -I'../../Qt/4.8.6/include /ActiveQt' -I'release' -I'../../Qt/4.8.6/mkspecs/win32-g++' -o release/qconf.o s rc/qconf.cpp c:/Qt/4.8.6/bin/rcc.exe -name qconf src/qconf.qrc -o release/qrc_qconf.cpp g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_DLL -DQT_NO_DEBUG -DQT_XML_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_M MXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I'../../Qt/4.8.6/include/QtCore' -I'.. /../Qt/4.8.6/include/QtXml' -I'../../Qt/4.8.6/include' -I'../../Qt/4.8.6/include /ActiveQt' -I'release' -I'../../Qt/4.8.6/mkspecs/win32-g++' -o release/qrc_qconf .o release/qrc_qconf.cpp g++ -Wl,-s -Wl,-subsystem,console -mthreads -o qconf.exe release/stringhelp.o re lease/qconf.o release/qrc_qconf.o -L'c:/Qt/4.8.6/lib' -lQtXml4 -lQtCore4
- Копируем из рабочей папки C:\build\qconf вложенные папки conf и modules, а также файл qconf.exe во вновь созданную папку назначения C:\Qt\QConf
Теперь утилита конфигурирования QConf готова для конфигурирования проекта Psi+.
Если по каким-либо причинам не получается самостоятельно скомпилировать утилиту QConf, то можно воспользоваться уже готовой версией утилиты, распаковав содержимое архива в рабочую папку C:\Qt\QConf.
ВАЖНО!
Далее для работы с QConf в папке C:\Qt\QConf необходимо создать файл qconf.cmd следующего вида (в кодировке ANSI или UTF-8 (без BOM)):
@set PATH=%PATH%;%QTDIR%\bin&C:\Qt\QConf\qconf.exe %*
и при конфигурировании проекта вызывать именно его. Например:
........ call qconf.cmd ........
Временную папку сборки C:\build\qconf можно удалить.
Компиляция Qt Cryptographic Architecture (QCA)
- Запускаем от имени Администратора CMD в рабочей папке C:\build
- Скачиваем исходный код QCA из официального git-репозитория:
C:\Git\bin\git clone git://anongit.kde.org/qca.git
Видим процесс скачивания:
$ git clone git://anongit.kde.org/qca.git Cloning into 'qca'... remote: Counting objects: 14036, done. remote: Compressing objects: 100% (5391/5391), done. remote: Total 14036 (delta 8820), reused 13132 (delta 8167) Receiving objects: 100% (14036/14036), 18.19 MiB | 5.00 MiB/s, done. Resolving deltas: 100% (8820/8820), done. Checking connectivity... done. Checking out files: 100% (467/467), done.
- Переходим в папку C:\build\qca и конфигурируем проект перед сборкой:
cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=%QCADIR% -DCMAKE_BUILD_TYPE=Release -DBUILD_PLUGINS=ossl;gnupg
Видим следующее:
C:\build\qca>cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=%QCADIR% -DCMAKE_ BUILD_TYPE=Release -DBUILD_PLUGINS=ossl;gnupg -- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) -- Checking for certstore.. -- Using built in certstore. -- certstore path: C:/build/qca/certs/rootcerts.pem -- mlock(2) does not take a void * CMake Warning at plugins/qca-ossl/CMakeLists.txt:18 (message): qca-ossl will be compiled without MD2 digest algorithm support Plugins: qca-botan off qca-cyrus-sasl off qca-gcrypt off qca-gnupg on qca-logger off qca-nss off qca-ossl on qca-pkcs11 off qca-softstore off QCA prefix is C:/Qt/QCA Plugins will be installed to C:/Qt/QCA/lib/qca/crypto Binary will be installed to C:/Qt/QCA/bin Library will be installed to C:/Qt/QCA/lib Feature file will be installed to C:/Qt/QCA/mkspecs/features Public headers will be installed to C:/Qt/QCA/include Private headers will be installed to C:/Qt/QCA/include Documentation will be installed to C:/Qt/QCA/share/doc/qca/html Man page will be installed to C:/Qt/QCA/share/man Pkg-config file will be installed to C:/Qt/QCA/lib/pkgconfig -- Configuring done -- Generating done -- Build files have been written to: C:/build/qca
- После успешного конфигурирования проекта запускаем сборку командой:
mingw32-make
Видим процесс компиляции:
................................ [ 95%] Generating ssltest.moc Scanning dependencies of target ssltest [ 95%] Building CXX object examples/ssltest/CMakeFiles/ssltest.dir/ssltest.cpp.o bj Linking CXX executable ..\..\bin\ssltest.exe [ 95%] Built target ssltest [ 95%] Generating sslservtest.moc Scanning dependencies of target sslservtest [ 96%] Building CXX object examples/sslservtest/CMakeFiles/sslservtest.dir/sslse rvtest.cpp.obj Linking CXX executable ..\..\bin\sslservtest.exe [ 96%] Built target sslservtest [ 97%] Generating tlssocket.moc Scanning dependencies of target tlssocket [ 98%] Building CXX object examples/tlssocket/CMakeFiles/tlssocket.dir/tlssocket .cpp.obj [ 98%] Building CXX object examples/tlssocket/CMakeFiles/tlssocket.dir/main.cpp. obj Linking CXX executable ..\..\bin\tlssocket.exe [ 98%] Built target tlssocket Scanning dependencies of target mozcerts [ 99%] Building CXX object tools/mozcerts/CMakeFiles/mozcerts.dir/main.cpp.obj Linking CXX executable ..\..\bin\mozcerts.exe [ 99%] Built target mozcerts [100%] Generating main.moc Scanning dependencies of target qcatool [100%] Building CXX object tools/qcatool/CMakeFiles/qcatool.dir/main.cpp.obj Linking CXX executable ..\..\bin\qcatool.exe [100%] Built target qcatool
- Теперь запускаем установку компонентов QCA в заданную при конфигурировании папку:
mingw32-make install
Видим процесс установки:
................................ [ 95%] Built target ssltest [ 96%] Built target sslservtest [ 98%] Built target tlssocket [ 99%] Built target mozcerts [100%] Built target qcatool Install the project... -- Install configuration: "Release" -- Installing: C:/Qt/QCA/certs/rootcerts.pem -- Installing: C:/Qt/QCA/include/QtCrypto/qca.h -- Installing: C:/Qt/QCA/include/QtCrypto/qcaprovider.h -- Installing: C:/Qt/QCA/include/QtCrypto/QtCrypto -- Installing: C:/Qt/QCA/include/QtCrypto/qca_export.h -- Installing: C:/Qt/QCA/include/QtCrypto/qca_support.h -- Installing: C:/Qt/QCA/include/QtCrypto/qca_tools.h -- Installing: C:/Qt/QCA/include/QtCrypto/qca_core.h -- Installing: C:/Qt/QCA/include/QtCrypto/qca_textfilter.h -- Installing: C:/Qt/QCA/include/QtCrypto/qca_basic.h -- Installing: C:/Qt/QCA/include/QtCrypto/qca_publickey.h -- Installing: C:/Qt/QCA/include/QtCrypto/qca_cert.h -- Installing: C:/Qt/QCA/include/QtCrypto/qca_keystore.h -- Installing: C:/Qt/QCA/include/QtCrypto/qca_securelayer.h -- Installing: C:/Qt/QCA/include/QtCrypto/qca_securemessage.h -- Installing: C:/Qt/QCA/include/QtCrypto/qca_version.h -- Installing: C:/Qt/QCA/include/QtCrypto/qpipe.h -- Installing: C:/Qt/QCA/mkspecs/features/crypto.prf -- Installing: C:/Qt/QCA/share/man/man1/qcatool.1 -- Installing: C:/Qt/QCA/lib/libqca.dll.a -- Installing: C:/Qt/QCA/bin/libqca.dll -- Installing: C:/Qt/QCA/lib/qca/crypto/libqca-gnupg.dll -- Installing: C:/Qt/QCA/lib/qca/crypto/libqca-ossl.dll -- Installing: C:/Qt/QCA/bin/mozcerts.exe -- Installing: C:/Qt/QCA/bin/qcatool.exe
* Копируем из рабочей папки C:\build\qca файл crypto.prf в папку C:\Qt\4.8.5\mkspecs\features
Теперь комплект QCA готов для конфигурирования и сборки проекта Pi+.
Если по каким-либо причинам не получается самостоятельно скомпилировать QCA, то можно воспользоваться уже готовой версией, распаковав содержимое архива в рабочую папку C:\Qt\QCA.
Компиляция zlib
- Скачиваем исходный код zlib-1.2.8 отсюда
- Распаковываем содержимое архива zlib-1.2.8.tar.gz во временную рабочую папку C:\build\zlib
- Запускаем от имени Администратора Git Bash в папке C:\build\zlib
- Выполняем команду:
mingw32-make -f win32/Makefile.gcc
Видим процесс компиляции:
$ mingw32-make -f win32/Makefile.gcc gcc -O3 -Wall -c -o adler32.o adler32.c gcc -O3 -Wall -c -o compress.o compress.c gcc -O3 -Wall -c -o crc32.o crc32.c gcc -O3 -Wall -c -o deflate.o deflate.c gcc -O3 -Wall -c -o gzclose.o gzclose.c gcc -O3 -Wall -c -o gzlib.o gzlib.c gcc -O3 -Wall -c -o gzread.o gzread.c gcc -O3 -Wall -c -o gzwrite.o gzwrite.c gcc -O3 -Wall -c -o infback.o infback.c gcc -O3 -Wall -c -o inffast.o inffast.c gcc -O3 -Wall -c -o inflate.o inflate.c gcc -O3 -Wall -c -o inftrees.o inftrees.c gcc -O3 -Wall -c -o trees.o trees.c gcc -O3 -Wall -c -o uncompr.o uncompr.c gcc -O3 -Wall -c -o zutil.o zutil.c ar rcs libz.a adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o windres --define GCC_WINDRES -o zlibrc.o win32/zlib1.rc gcc -shared -Wl,--out-implib,libz.dll.a \ -o zlib1.dll win32/zlib.def adler32.o compress.o crc32.o deflate.o gzclo se.o gzlib.o gzread.o gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o zlibrc.o Creating library file: libz.dll.a strip zlib1.dll gcc -O3 -Wall -I. -c -o example.o test/example.c gcc -o example.exe example.o libz.a strip example.exe gcc -O3 -Wall -I. -c -o minigzip.o test/minigzip.c gcc -o minigzip.exe minigzip.o libz.a strip minigzip.exe gcc -o example_d.exe example.o libz.dll.a strip example_d.exe gcc -o minigzip_d.exe minigzip.o libz.dll.a strip minigzip_d.exe
В результате компиляции наблюдаем в рабочей папке C:\build\zlib готовую к употреблению библиотеку zlib1.dll, а также служебные файлы zconf.h, zlib.h, libz.a и libz.dll.a
Копируем из папки C:\build\zlib следующие файлы:
- zlib1.dll в папку C:\Qt\zlib\bin
- zconf.h и zlib.h в папку C:\Qt\zlib\include
- libz.a и libz.dll.a в папку C:\Qt\zlib\lib
После этого временную рабочую папку C:\build\zlib можно удалить.
Теперь комплект zlib готов для конфигурирования и сборки проекта Pi+.
===== Компиляция утилиты ccache =====
Подробную инструкцию по сборке утилиты ccache можно найти здесь.
Сборка Psi+ в автоматическом режиме (рекомендуется)
- Скачиваем скрипт auto-compiler-all-in-one.cmd в новую папку (например, C:\build)
- Включаем необходимый для сборки параметр MakeClassic в положение 1 (если он ещё не включен):
SET MakeClassic=1 SET UploadClassic=0 SET MakeClassicDebug=0 SET UploadClassicDebug=0 SET MakeWebkit=0 SET UploadWebkit=0 SET MakeWebkitDebug=0 SET UploadWebkitDebug=0 SET MakePlugins=0 SET UploadPlugins=0 SET MakePluginsDebug=0 SET UploadPluginsDebug=0
- Запускаем скрипт auto-compiler-all-in-one.cmd в папке C:\build и ждём окончания его выполнения
Если скрипт отработал успешно, то в рабочей папке C:\build появится архив, содержащий скомпилированный и готовый к работе бинарный файл psi-plus.exe.
Компиляция плагинов Psi+
- Скачиваем скрипт auto-compiler-all-in-one.cmd в новую папку (например, C:\build)
- Включаем необходимый для сборки параметр MakePlugins в положение 1:
SET MakeClassic=0 SET UploadClassic=0 SET MakeClassicDebug=0 SET UploadClassicDebug=0 SET MakeWebkit=0 SET UploadWebkit=0 SET MakeWebkitDebug=0 SET UploadWebkitDebug=0 SET MakePlugins=1 SET UploadPlugins=0 SET MakePluginsDebug=0 SET UploadPluginsDebug=0
- Запускаем скрипт auto-compiler-all-in-one.cmd в папке C:\build и ждём окончания его выполнения
Если скрипт отработал успешно, то в рабочей папке C:\build появится архив, содержащий скомпилированные и готовые к работе плагины Psi+.