User Tools

Site Tools


mingw32

This is an old revision of the document!


Инструкция по сборке Psi+ в ОС MS Windows (MinGW)

Необходимый инструментарий

1. Qt libraries 4.8.7 for Windows (minGW v4.8.2) или скачать с основной страницы загрузок ~330 MB

2. MinGW v4.8.2 ~45 MB

3. CMake build system (win32) – версию 3.7.2 можно взять здесь ~14 MB

4. Git for Windows - набор утилит для работы с Git ~33 MB

5. OpenSSL – архив с исходным кодом пакета программ для поддержки шифрования и криптографии (версия > 1.0.0) ~4 MB

6. GNU IDN Library (LibIDN) – скомпилированную версию (v1.28) можно взять здесь или здесь ~0.5 MB

7. Zlib for Windows (скомпилированную версию можно взять здесь) (v1.2.8) ~0.05 MB

8. GnuPG (Package for Windows) - свежий win32-инсталлятор можно взять здесь

Опционально:

  • TortoiseGit - надстройка для проводника MS Windows ~20 MB
  • Aspell Libs for MinGW - библиотеки для обеспечения работы функционала проверки орфографии, необходимые для сборки файлы можно взять здесь ~0.5 MB
  • Hunspell for MinGW - библиотека проверки орфографии
  • Python – только версии 2.x.x (x86) ~15 MB
  • ccache version 3.1утилита для ускорения процесса компиляции ~0.2 MB
    • Примечание: для нормальной работы ccache необходимо прописать переменную CCACHE_DIR в переменных окружения.

Подготовка к сборке, настройка переменных окружения и необходимых библиотек

  • Устанавливаем необходимый инструментарий, указанный выше. Git рекомендуется устанавливать в корень диска, например, в C:\Git
  • Создаём в папке C:\MinGW\bin новый файл make.exe путём копирования и переименования из файла mingw32-make.exe (ВРЕМЕННЫЙ КОСТЫЛЬ)
  • Распаковываем содержимое архива 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.7\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.7
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.7\bin\qmake -v

Видим следующее:

C:\>C:\Qt\4.8.7\bin\qmake -v
QMake version 2.01a
Using Qt version 4.8.7 in C:\Qt\4.8.7\lib

А также командой:

echo %QMAKESPEC%

Видим ответ:

C:\>echo %QMAKESPEC%
win32-g++
  • Меняем рабочую папку на C:\Qt\4.8.7\examples\tutorials\addressbook\part1 командой:
cd C:\Qt\4.8.7\examples\tutorials\addressbook\part1
  • Выполняем команду:
C:\Qt\4.8.7\bin\qmake part1.pro
  • Затем выполняем команду:
mingw32-make -f makefile.release

Видим следующее:

C:\Qt\4.8.7\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.7\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.7\lib" -lmingw32 -
lqtmain -lQtGui4 -lQtCore4

Результат сборки release-версии тестового приложения в виде исполняемого файла part1.exe наблюдаем в папке C:\Qt\4.8.7\examples\tutorials\addressbook\part1\release

Успешная сборка тестового приложения означает, что Qt правильно установлена и готова к использованию.

Компиляция OpenSSL Toolkit v1.x.x

Важно! Данный алгоритм справедлив для версий OpenSSL выше v1.x.x.

  • Создаём рабочую папку C:\build\openssl
  • Распаковываем архив с исходниками OpenSSL v1.x.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.x.x получаем скомпилированные библиотеки libeay32.dll и ssleay32.dll в папке C:\OpenSSL\bin, а также заголовочные файлы в папке C:\OpenSSL\include\openssl и служебные библиотеки для линковки в папке C:\OpenSSL\lib.

Теперь пакет OpenSSL Toolkit v1.x.x готов для линковки и сборки Psi+. Временную папку сборки C:\build\openssl можно удалить.

Компиляция утилиты конфигурирования QConf

  • Запускаем от имени Администратора Git Bash (идёт в комплекте с Git) в рабочей папке C:\build
  • Задаём необходимые пути:
PATH=$PATH:/c/qt/4.8.7/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.7/include/QtCore' -I'..
/../Qt/4.8.7/include/QtXml' -I'../../Qt/4.8.7/include' -I'../../Qt/4.8.7/include
/ActiveQt' -I'release' -I'../../Qt/4.8.7/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.7/include/QtCore' -I'..
/../Qt/4.8.7/include/QtXml' -I'../../Qt/4.8.7/include' -I'../../Qt/4.8.7/include
/ActiveQt' -I'release' -I'../../Qt/4.8.7/mkspecs/win32-g++' -o release/qconf.o s
rc/qconf.cpp
c:/Qt/4.8.7/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.7/include/QtCore' -I'..
/../Qt/4.8.7/include/QtXml' -I'../../Qt/4.8.7/include' -I'../../Qt/4.8.7/include
/ActiveQt' -I'release' -I'../../Qt/4.8.7/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.7/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="C:/Qt/QCA" -DCMAKE_BUILD_TYPE=Release -DBUILD_PLUGINS=ossl;gnupg

Где “C:/Qt/QCA” - путь по которому будет установлена библиотека QCA (у вас может быть другой)

Видим следующее:

C:\build\qca>cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX="C:/Qt/QCA" -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 готов для конфигурирования и сборки проекта Psi+.

Если по каким-либо причинам не получается самостоятельно скомпилировать 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 готов для конфигурирования и сборки проекта Psi+.

Компиляция библиотеки Hunspell

C:\Git\bin\git clone https://github.com/zdenop/hunspell-mingw.git
  • Переходим в каталог исходников
cd hunspell-mingw
  • Создаем каталог для теневой сборки и переходим в него:
mkdir build
cd build
  • Выполняем конфигурацию исходников:
cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX="C:/Hunspell" ..

Где C:/Hunspell - путь куда будет установлена библиотека libhunspell после сборки

  • Если конфигурация прошла успешно, запускаем сборку библиотеки и установку:
mingw32-make
mingw32-make install

Если сборка прошла успешно, то по адресу C:\Hunspell будет установлена библиотека libhunspell

<del>Компиляция утилиты ccache</del>

Подробную инструкцию по сборке утилиты 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+.

Альтернативный способ сборки Psi+ под OS Windows (утилитой cmake)

Инструментарий

  • При сборке этим способом все вышеописанные процедуры можно пропустить
  • Скачиваем и устанавливаем Cmake и Git For Windows
  • Если вы хотите собрать Psi+ при помощи Qt5, скачиваем Qt5 Online Installer и устанавливаем версию 5.5 (можно и новее, но возможно придется собирать SDK самому, и в версиях >=5.5 из Qt5 под OS Windows удалили QtWebkit, следовательно собрать вебкит-версию не получится).
  • Для сборки этим способом нам также необходим SDK для сборки Psi+, новые версии SDK появляются в каталоге.

Устанавливать лучше всего как можно ближе в корню диска, также не стоит устанавливать эти утилиты в каталоги, в имени которых есть пробелы.

Если у вас уже есть все собранные вами библиотеки необходимые для сборки Psi+, вы можете сами создать каталог SDK разместив в нем каталоги библиотек таким образом:

   |-hunspell
   |---i386
   |-----bin
   |-----doc
   |-----include
   |-----lib
   |-libgcrypt
   |---i386
   |-----...
   |-libgpg-error
   |---i386
   |-----...
   |-libidn
   |---i386
   |-----...
   |-libotr
   |---i386
   |-----...
   |-libtidy
   |---i386
   |-----...
   |-openssl
   |---i386
   |-----...
   |-qca
   |---i386
   |-----...
   |-zlib
   |---i386
   |-----...

Инструкция по установке Qt5

  • Запускаем онлайн-инсталлер qt-unified-windows-x86-2.0.5-online.exe
  • Нажимаем Next
  • Нажимаем Skip (если у вас есть аккаунт Qt можете ввести данные)
  • Если это первый запуск онлайн-инсталлера, то он попросит ввести путь установки, вводим и нажимаем Next
  • Онлайн-инсталлер начнет скачивать информацию по доступным файлам, затем нажимаем Next
  • В появившемся списке версий снимаем все галочки и ставим их таким образом:

  • Нажимаем Next и ждем окончания установки

Настройка скрипта сборки Psi+ при помощи cmake и сборка

  • Скачиваем архив make-psiplus-cmake и распаковываем файл make-psiplus-cmake.cmd.
  • Открываем скрипт make-psiplus-cmake.cmd текстовым редактором, лучше всего Notepad++ или Geany, обычный Блокнот вряд ли подойдет, т.к. не умеет понимать форматирования файла, да и с подсветкой работать удобнее.
  • Ищем в скрипте и правим следующие переменные:

set CPUCOUNT=5 ←тут вместо 5 ваше количество ядер CPU + 1 (в примере 4+1)

set BUILDDIR=C:\build ←тут вместо C:\build путь к каталогу куда будут скачаны исходники и где будет производится сборка Psi+

set PSIDEPSPREFIX=C:\build\psibuild\psisdk ←тут вместо C:\build\psibuild\psisdk путь к каталогу в который был установлен Psi+ SDK

set GITBIN=C:\Git\bin\git.exe ←тут вместо C:\Git\bin\git.exe ваш путь к файлу git.exe

set CMAKEDIR=C:\cmake ←тут вместо C:\cmake ваш путь к каталогу в который был установлен Cmake

set ISWEBKIT=NO ←Если необходимо собрать Psi+ с поддержкой Webkit, заменяем NO на OK

set MINGW32=C:\MinGW ←тут вместо C:\MinGW ваш путь к каталогу в который был установлен MinGW (каталог в котором лежат каталоги bin и lib)

Если вы хотите собрать Psi+ при помощи Qt5, нужно изменить также следующие переменные:

set QT5DIR=C:\Qt\Qt5\5.5\mingw492_32 ←тут вместо C:\Qt\Qt5\5.5\mingw492_32 ваш путь к каталогу в который был установлен Qt-5.5 (каталог в котором лежат каталоги bin и lib)

set MINGW5DIR=C:\Qt\Qt5\Tools\mingw492_32 ←тут вместо C:\Qt\Qt5\Tools\mingw492_32 ваш путь к каталогу в который был установлен MinGW для Qt5 (каталог в котором лежат каталоги bin и lib)

  • Выполнив все подготовительные действия и исправив скрипт, запускаем скрипт на выполнение кликнув по нему правой кнопкой мыши и в меню выбрав Запуск от имени администратора
  • Скрипт сам скачает всё необходимое, подготовит исходники к сборке и запустит компиляцию. В процессе он несколько раз будет останавливаться для контроля за процессом сборки. Процесс сборки будет наглядно отображён процентом выполненной работы. Если скрипт отработал правильно, то у вас на диске C: появится каталог build, в котором появится каталог psibuild. В каталоге C:\build\psibuild будут лежать следующие каталоги: psi-plus-snapshots, psi-plus-l10n, это каталоги с исходными кодами, необходимыми для сборки Psi+. Также в каталоге C:\build\psibuild будет расположен каталог work, где и будет производится сборка Psi+
  • После того как скрипт закончит работу, в каталоге C:\build\psibuild\psi_версия пси+ будут лежать следующие элементы:
    • psi-plus.exe
    • каталог plugins со всеми плагинами
    • файл client_icons.txt
    • каталог crets
    • каталог iconsets
    • каталог sound
    • и каталог themes (если включен вебкит)

Файлы переводов (локализации) после сборки будут лежать в каталоге C:\build\psibuild\work\cmake_build\psi\translations

Полезные ссылки

mingw32.1567509017.txt.gz · Last modified: 2019/09/03 11:10 by kukuruzo

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki