Russian Qt Forum

Qt => Печать => Тема начата: vovan1982 от Июль 09, 2012, 14:21



Название: eXaro Сборка и запуск тестового примера
Отправлено: vovan1982 от Июль 09, 2012, 14:21
Привет всем.
В моей программе дело дошло до создания отчётов, свой выбор я остановил на eXaro, не смотря на то что проект мёртв с 2009 года его функционала мне вполне достаточно, всяко лучше чем рисовать каждый отчёт в исходном коде.
После недели ковыряний в интернете, сбора информации по крупицам, ковыряния исходников eXaro, чтения постов http://www.prog.org.ru/topic_11534_0.html и http://www.prog.org.ru/topic_10574_30.html и в конечном итоге опухшего мозга мне удалось победить этот сабж :).
Ну и собственно решил поделиться своими результатами, вдруг кому ещё пригодится, ну и конечно же чтоб самому не забыть тоже :)

Итак входные данные:
ОС: Win7
Qt: Qt SDK version 1.2.1
Версия используемой библиотеки Qt: 4.8.1
Компилятор: MinGw


Сборка eXaro

Качаем и ставим cmake
http://www.cmake.org/cmake/resources/software.html (http://www.cmake.org/cmake/resources/software.html)

Качаем и ставим mercurial
http://mercurial.selenic.com/downloads/ (http://mercurial.selenic.com/downloads/)

Качаем exaro
Для этого создаём папку с исходниками exaro у меня это D:\exaro-src
Открываем cmd заходим в папку и выполняем команду:
Код:
hg clone https://code.google.com/p/exaro/

Качаем propertyeditor 2.1.3
https://code.google.com/p/propertyeditor/downloads/list (https://code.google.com/p/propertyeditor/downloads/list)

Качаем libpng15
http://sourceforge.net/projects/libpng/files/libpng15/1.5.11/ (http://sourceforge.net/projects/libpng/files/libpng15/1.5.11/)

Качаем Zint-for-exaro и Quazip
http://code.google.com/p/exaro/downloads/list (http://code.google.com/p/exaro/downloads/list)

Качаем установку и исходники Zlib for windows v1.2.3
http://gnuwin32.sourceforge.net/packages/zlib.htm (http://gnuwin32.sourceforge.net/packages/zlib.htm)
Устанавливаем Zlib в папку D:\exaro-src\zlib

Распаковываем все дополнения в папку D:\exaro-src

После распаковки я переместил содержимое дополнений так чтоб получилась следующая структура папок:

Код:
D:\exaro-src
D:\exaro-src\lpng
D:\exaro-src\propertyeditor
D:\exaro-src\quazip
D:\exaro-src\zint
D:\exaro-src\zlib

Распаковываем исходники Zlib и копируем файл zconf.h в папку D:\exaro-src\quazip

Создадим все необходимые папки для сборки
Код:
D:\exaro-src\bin
D:\exaro-src\bins
D:\exaro-src\bins\lpng
D:\exaro-src\bins\propertyeditor
D:\exaro-src\bins\quazip
D:\exaro-src\bins\zint
D:\exaro-src\bins\exaro
D:\exaro-src\lpng\bin
D:\exaro-src\propertyeditor\bin
D:\exaro-src\quazip\bin
D:\exaro-src\zint\bin

Собираем QuaZip

Код:
Source dir = D:\exaro-src\quazip
Build binaries = D:\exaro-src\quazip\bin
LIBRARY_OUTPUT_PATH = D:\exaro-src\bins\quazip (PATCH)
ZLIB_LIBRARY = D:\exaro-src\ zlib\lib\libz.dll.a (FILEPATCH)
ZLIB_INCLUDE_DIR = D:\exaro-src\zlib\include (PATCH)
Жмём Configure
Выбираем “MinGW Makefiles”  и “Use default native compilers”
Получаем ошибку и идём править параметры
QT_QMAKE_EXECUTABLE = (Здесь нужно указать путь к qmake.exe у меня он равен D:\Qt\QtSdk\Desktop\Qt\4.8.1\mingw\bin\ qmake.exe)
CMAKE_BUILD_TYPE = Release
Ещё раз жмём Configure
В окне лога видим следующую ошибку
«CMake Error at quazip/CMakeLists.txt:22 (install):
install Library TARGETS given no DESTINATION!»
Для её устранения открываем файл «D:\exaro-src\quazip\quazip\CMakeLists.txt» и в строке 22 удаляем слово «LIBRARY» и сохраняем файл.
Ещё раз жмём Configure
Затем жмём Generate

Запускаем командную оболочку cmd с установленным окружением QT 4.8.1 MinGW
Переходим в папку D:\exaro-src\quazip\bin и запускаем mingw32-make.exe.
Собранная библиотека будет находится в D:\exaro-src\bins\quazip.

Собираем  lpng

Код:
Source dir = D:\exaro-src\lpng
Build binaries = D:\exaro-src\lpng\bin
LIBRARY_OUTPUT_PATH = D:\exaro-src\bins\lpng (PATCH)
ZLIB_LIBRARY = D:\exaro-src\ zlib\lib\libz.dll.a (FILEPATCH)
ZLIB_INCLUDE_DIR = D:\exaro-src\zlib\include (PATCH)
EXECUTABLE_OUTPUT_PATH = D:\exaro-src\bins\lpng (PATCH)
Жмём Configure
Выбираем “MinGW Makefiles”  и “Use default native compilers”
Правим параметр
CMAKE_BUILD_TYPE = Release
Ещё раз жмём Configure
Затем жмём Generate

Запускаем командную оболочку cmd с установленным окружением QT 4.8.1 MinGW
Переходим в папку D:\exaro-src\lpng\bin и запускаем mingw32-make.exe.

При компилящии получаем ошибку, для её устранения копируем файлы
D:\exaro-src\bins\lpng\libpng15.a
D:\exaro-src\bins\lpng\libpng15.dll
D:\exaro-src\bins\lpng\libpng15.dll.a
В папку «D:\exaro-src\lpng\bin»
И ещё раз запускаем mingw32-make.exe.

Собранная библиотека будет находится в D:\exaro-src\bins\lpng.

Собираем PropertyEditor

Код:
Source dir = D:\exaro-src\ propertyeditor
Build binaries = D:\exaro-src\ propertyeditor\bin
LIBRARY_OUTPUT_PATH = D:\exaro-src\bins\ propertyeditor (PATCH)
Жмём Configure
Выбираем “MinGW Makefiles”  и “Use default native compilers”
Получаем ошибку и идём править параметры
QT_QMAKE_EXECUTABLE = (Здесь нужно указать путь к qmake.exe у меня он равен D:\Qt\QtSdk\Desktop\Qt\4.8.1\mingw\bin\ qmake.exe)
CMAKE_BUILD_TYPE = Release
Ещё раз жмём Configure
Затем жмём Generate

Запускаем командную оболочку cmd с установленным окружением QT 4.8.1 MinGW
Переходим в папку D:\exaro-src\propertyeditor\bin и запускаем mingw32-make.exe.
Собранная библиотека будет находится в D:\exaro-src\bins\propertyeditor.

Собираем Zint

Код:
Копируем файл D:\exaro-src\lpng\bin\pnglibconf.h в D:\exaro-src\lpng
Source dir = D:\exaro-src\zint
Build binaries = D:\exaro-src\zint\bin
LIBRARY_OUTPUT_PATH = D:\exaro-src\bins\zint (PATCH)
ZLIB_LIBRARY = D:\exaro-src\zlib\lib\libz.dll.a (FILEPATCH)
ZLIB_INCLUDE_DIR = D:\exaro-src\zlib\include (PATCH)
PNG_LIBRARY = D:\exaro-src\bins\lpng\libpng15.dll.a (FILEPATCH)
QT_QMAKE_EXECUTABLE = (Здесь нужно указать путь к qmake.exe у меня он равен D:\Qt\QtSdk\Desktop\Qt\4.8.1\mingw\bin\ qmake.exe) (FILEPATCH)
Жмём Configure
Выбираем “MinGW Makefiles”  и “Use default native compilers”
Правим параметр
CMAKE_BUILD_TYPE = Release
Ещё раз жмём Configure
Видим сообщения: «Could NOT find QR (missing: QR_LIBRARY QR_INCLUDE_DIR)» и « Could NOT find PNG (missing: PNG_PNG_INCLUDE_DIR) ».
Не обращаем на них внимание.
Затем жмём Generate

Запускаем командную оболочку cmd с установленным окружением QT 4.8.1 MinGW
Переходим в папку D:\exaro-src\zint\bin и запускаем mingw32-make.exe.
Собранная библиотека будет находится в D:\exaro-src\bins\zint.

Собираем Exaro

Код:
Копируем все *.h файлы из папки D:\exaro-src\quazip\quazip в папку D:\exaro-src\quazip.
Копируем файл D:\exaro-src\zlib\include\zlib.h в папку D:\exaro-src\quazip.
В файле D:\exaro-src\plugins\report\items\charts\CMakeLists.txt удаляем строку 3.
Source dir = D:\exaro-src
Build binaries = D:\exaro-src\ bin
LIBRARY_OUTPUT_PATH = D:\exaro-src\bins\exaro (PATCH)
EXECUTABLE_OUTPUT_PATH = D:\exaro-src\bins\exaro (PATCH)
ZLIB_LIBRARY = D:\exaro-src\zlib\lib\libz.dll.a (FILEPATCH)
ZLIB_INCLUDE_DIR = D:\exaro-src\zlib\include (PATCH)
PROPERTYEDITOR_INCLUDE_DIR =  D:\exaro-src\propertyeditor\lib (PATCH) если оставить пустым дизайнер не соберётся
PROPERTYEDITOR_LIBRARY = D:\QtProjects\exaro_2.0.0\bins\propertyeditor\ libPropertyEditor.dll.a (FILEPATCH)
QUAZIP_INCLUDE_DIR = D:\exaro-src\quazip (PATCH)
QUAZIP_LIBRARY = D:\exaro-src\bins\quazip\libquazip.dll.a (FILEPATCH)
QZINT_INCLUDE_DIR = D:\exaro-src\zint\backend_qt4 (PATCH)
QZINT_LIBRARY = D:\exaro-src\bins\zint\libQZint.dll.a (FILEPATCH)
ZINT_INCLUDE_DIR = D:\exaro-src\zint\backend (PATCH)
ZINT_LIBRARY = D:\exaro-src\bins\zint\libZint.dll.a (FILEPATCH)
QT_QMAKE_EXECUTABLE = (Здесь нужно указать путь к qmake.exe у меня он равен D:\Qt\QtSdk\Desktop\Qt\4.8.1\mingw\bin\ qmake.exe) (FILEPATCH)
Жмём Configure
Выбираем “MinGW Makefiles”  и “Use default native compilers”
Правим параметр
CMAKE_BUILD_TYPE = Release
Ещё раз жмём Configure
В окне лога будет много красного, не обращаем на это внимание.
Жмём Generate

Запускаем командную оболочку cmd с установленным окружением QT 4.8.1 MinGW
Переходим в папку D:\exaro-src\bin и запускаем mingw32-make.exe.

В процессе компиляции получаем ошибку в файле D:\exaro-src\libs\report \reportinterface.cpp. Открываем этот файл и переходим на 528 строку и удаляем лишнюю кавычку перед «+"/XXXXXXXXXXXXX.bdrtpf");».
Заново запускаем mingw32-make.exe.

Получаем ещё одну ошибку в фале  D:\exaro-src\plugins\report\items\barcode\barcode.cpp. Открываем этот файл и комментируем строку 403 и строки с 464 по 470.
Заново запускаем mingw32-make.exe.

Собранная eXaro Находится в D:\exaro-src\bins\exaro.

Теперь создадим папку с готовым для использования eXaro.

Создаём папку D:\eXaro в ней создаём дополнительные подпапки

Код:
D:\eXaro\exaro
D:\eXaro\exaro\toolbars
D:\eXaro\include
D:\eXaro\propertyEditor
D:\eXaro\report
D:\eXaro\report\export
D:\eXaro\sqldrivers
D:\eXaro\translations

И заполняем эти папки файлами из папки D:\exaro-src\bins следующим образом

В корень папки D:\eXaro кладём
exaro.exe, libPropertyEditor.dll, libquazip.dll, libQZint.dll, libReport.dll, libzint.dll,
а также все необходимые файлы от qt и mingw
libgcc_s_dw2-1.dll, mingwm10.dll, QtCore4.dll, QtDesignerComponents4.dll, QtGui4.dll, QtOpenGL4.dll, QtScript4.dll, QtSql4.dll, QtWebKit4.dll, QtXml4.dll.
В папку D:\eXaro\exaro\toolbars кладём libFonttoolbar.dll из папки D:\exaro-src\bins\exaro
В папку D:\eXaro\include кладём все *.h файлы из D:\exaro-src\exaro\libs\report
В папку D:\eXaro\propertyEditor кладём все *.dll файлы из папки D:\exaro-src\bins\ propertyeditor
В папку D:\eXaro\report кладём все *.dll файлы из папки D:\exaro-src\bins\exaro кроме файлов libReport.dll и libFonttoolbar.dll
В папку D:\eXaro\report\export кладём libCsvTxt.dll, libHtml.dll, libOds.dll из папки D:\exaro-src\bins\exaro
В папку D:\eXaro\sqldrivers кладём драйвера баз данных содранных при помощи этого же mingw
В папку D:\eXaro\translations нужно класть переводы но где они находятся в исходникакх я не знаю и искать не стал а просто выдернул их из инсталяшки exaro
http://sourceforge.net/projects/exaro/
Я ещё скопировал libmysql.dll в корень D:\eXaro, чтоб работал с MySql.
Ну и на последок копируем в корень  D:\eXaro иконку от дизайнера из папки D:\exaro-src\apps\designer

Всё eXaro собран и готов к работе :).


Запуск тестового примера.

Для тестового примера нам необходимо скачать тестовую базу и тестовый отчёт с сайта eXaro
http://exaro.sourceforge.net/examples/music.db (http://exaro.sourceforge.net/examples/music.db)
http://exaro.sourceforge.net/examples/musicReport.bdrt (http://exaro.sourceforge.net/examples/musicReport.bdrt)

Далее создаём папку для нашего тестового примера, у меня это будет D:\QtProjects\testexaro, копируем туда содержимое папки D:\eXaro\include, libReport.dll и создаём два файла testexaro.pro и main.cpp.

Содержимое создаваемых файлов представлено ниже

testexaro.pro

Код:
QT += core gui sql xml script
CONFIG += uitools
LIBS += -LD:/QtProjects/testexaro -lReport
SOURCES += \
    main.cpp

main.cpp

Код:
#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QDomDocument>
#include <QFileDialog>
#include <QDir>
#include <reportengine.h>
#define error 1
#define ok 0
int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("music.db"); // установка базы данных
    if (!db.open())
    {
        qCritical()<<"Error: Can't open database";
        return error;
    }
    Report::ReportInterface* m_report=0;
    Report::ReportEngine m_reportEngine;
    m_report = m_reportEngine.loadReport("musicReport.bdrt"); // установка файла отчёта
    if (!m_report)
    {
        qCritical()<<"Error: Can't open the report";
        return error;
    }
    m_report->setDatabase(db); // установка базы данных в отчёт
    if (!m_report->exec()) // выполнение отчёта
    {
        qCritical()<<"Error: Can't exec the report";
        delete m_report;
        return error;
    }
    delete m_report;
    return ok;
}

Длалее создаём папку для release сборки нашего тестового проекта, у меня это D:\QtProjects\testexaro-build-release и копируем туда из папки D:\eXaro следующие файлы:
libPropertyEditor.dll, libquazip.dll, libQZint.dll, libReport.dll, libzint.dll,
а так же целиком папку D:\eXaro\report и скачанные тестовую базу music.db и отчёт musicReport.bdrt.

Запускаем Qt Creator и открываем наш тестовый проект testexaro.pro, идём в настройки проекта и меняем конфигурацию сборки на релиз mingw, в качестве каталога сборки указываем D:\QtProjects\testexaro-build-release.

Компилируем запускаем наслаждаемся :).

Если необходимо выполнить debug сборку примера то необходимо заново собрать eXaro но в качестве параметра CMAKE_BUILD_TYPE в cmake указать Debug и в папку с debug сборкой к примеру D:\QtProjects\testexaro-build-debug положить все необходимые файлы указанные выше но уже от debug сборки eXaro.