Skip to content
This repository was archived by the owner on Oct 10, 2022. It is now read-only.

Commit 92e8c29

Browse files
authored
Build system mk2 (#71)
* New docker build system * Add more images * Improve build, more refactorings * Fix DLL loading on Windows * WS * stop copying files into docker images, just use the source directory * Better CLI for docker.py * Flush stdout while running command
1 parent b027ba5 commit 92e8c29

115 files changed

Lines changed: 566 additions & 981 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cmake/options.cmake

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Enable fPIC (Default: ON)
2-
option(cflags_fpic "Use -fPIC for compilation " on)
2+
option(cflags_fpic "Use -fPIC for compilation " On)
33
if(cflags_fpic)
44
message("Compiling with -fPIC")
55
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
@@ -8,15 +8,6 @@ if(WIN32)
88
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields")
99
endif()
1010

11-
# Extra options for cmake in an external file
12-
set(CMAKE_INCLUDE_EXT_FILE CACHE INTERNAL "Per-environment include file")
13-
if(CMAKE_INCLUDE_EXT_FILE)
14-
message("Using cmake environment: ${CMAKE_INCLUDE_EXT_FILE}")
15-
include(${CMAKE_INCLUDE_EXT_FILE})
16-
else()
17-
message("CMake environment file ${CMAKE_INCLUDE_EXT_FILE} NOT found")
18-
endif()
19-
2011
# Extra libraries
2112
SET(EXTRA_LIBRARIES "" CACHE STRING "Extra libraries for linking")
2213
message("Extra libraries for linking: ${EXTRA_LIBRARIES}")
@@ -40,3 +31,4 @@ endif()
4031

4132
# Extra executables to be built
4233
option(build_network_server "Build PlanetaryImager network daemon and frontend" On)
34+

packaging.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
set(PACKAGE_VERSION_SUFFIX "" CACHE STRING "Suffix package version (default: empty)")
22
set(PACKAGE_NAME_SUFFIX "" CACHE STRING "Suffix package name (default: empty)")
33

4+
set(PACKAGE_SYSTEM_NAME ${CMAKE_SYSTEM_NAME} CACHE STRING "System name for generated packages (default: ${CMAKE_SYSTEM_NAME}")
45

56
INCLUDE(InstallRequiredSystemLibraries)
67
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "GuLinux.net Planetary Imager for Linux")
@@ -10,7 +11,7 @@ SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md")
1011
SET(CPACK_PACKAGE_VERSION_MAJOR "${MAJOR_VERSION}")
1112
SET(CPACK_PACKAGE_VERSION_MINOR "${MINOR_VERSION}")
1213
SET(CPACK_PACKAGE_VERSION_PATCH "${PATCH_VERSION}")
13-
set(CPACK_PACKAGE_FILE_NAME PlanetaryImager-${FULL_VERSION}-${CMAKE_SYSTEM_NAME}-${PlanetaryImager_ARCH}${PACKAGE_NAME_SUFFIX})
14+
set(CPACK_PACKAGE_FILE_NAME PlanetaryImager-${FULL_VERSION}-${PACKAGE_SYSTEM_NAME}-${PlanetaryImager_ARCH}${PACKAGE_NAME_SUFFIX})
1415
SET(CPACK_PACKAGE_CONTACT "marco@gulinux.net")
1516
#SET(CPACK_STRIP_FILES "bin/planetary_imager")
1617

src/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ set(PlanetaryImager_GUI_SRCS planetaryimager_mainwindow.cpp planetaryimager_main
22
set(PlanetaryImager_SRCS planetaryimager_main.cpp ${PlanetaryImager_GUI_SRCS})
33

44

5+
if(static_qt_windows)
6+
add_definitions(-DSTATIC_WINDOWS_PLUGIN)
7+
endif()
58

69
set(drivers_destination lib/${CMAKE_PROJECT_NAME}/drivers)
710
set(binary_destination bin)

src/commons/loghandler.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
#include <QFileInfo>
2626
#include <QDir>
2727
#include "commons/commandline.h"
28+
#include <QMutex>
29+
#include <QMutexLocker>
2830

2931
using namespace std;
3032
using namespace std::placeholders;
@@ -53,6 +55,8 @@ QHash<QtMsgType, string> LogHandler::log_levels()
5355

5456
void LogHandler::Private::log_handler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
5557
{
58+
static QMutex log_mutex;
59+
5660
static QHash<QtMsgType, int> priority {
5761
{QtFatalMsg , 10},
5862
{QtCriticalMsg, 20},
@@ -70,6 +74,7 @@ void LogHandler::Private::log_handler(QtMsgType type, const QMessageLogContext &
7074
position = QString("%1:%2").arg(context.file).arg(context.line).replace(SRC_DIR, "");
7175
}
7276
QString function = context.function ? context.function : "";
77+
QMutexLocker lock(&log_mutex);
7378
output.stream.get() << setw(8) << LogHandler::log_levels()[type] << " - " /*<< qPrintable(position) << "@"*/<< qPrintable(function) << " " << qPrintable(msg) << endl;
7479
output.stream.get().flush();
7580
}

src/drivers/driver.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,15 @@ class Driver : public QObject {
4040
typedef QList<Driver::ptr> Drivers;
4141
typedef Driver *(*LoadDriverFunction)();
4242

43+
44+
#define PLANETARY_IMAGER_DRIVER_LOAD_F "PlanetaryImager_loadDriver"
45+
4346
#ifdef Q_OS_WIN
44-
#define EXPORT_DECL __declspec(dllexport)
47+
#define DECL_EXPORT Q_DECL_EXPORT
4548
#else
46-
#define EXPORT_DECL
49+
#define DECL_EXPORT
4750
#endif
48-
49-
#define PLANETARY_IMAGER_DRIVER_LOAD_F "PlanetaryImager_loadDriver"
50-
#define DECLARE_DRIVER_PLUGIN_INIT(DriverClass) extern "C" EXPORT_DECL Driver *PlanetaryImager_loadDriver() { return new DriverClass(); }
51+
#define DECLARE_DRIVER_PLUGIN_INIT(DriverClass) \
52+
extern "C" DECL_EXPORT Driver *PlanetaryImager_loadDriver() { return new DriverClass(); }
5153

5254
#endif

src/drivers/simulator/simulatordriver.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,14 @@ Driver::Cameras SimulatorDriver::cameras() const
5454
make_shared<SimulatorCamera>("Simulator: Planet", [](const ImageHandler::ptr& imageHandler){ return new SimulatorImager(imageHandler); }),
5555
make_shared<SimulatorCamera>("Simulator: SER file", [](const ImageHandler::ptr& imageHandler){ return new SERImager(imageHandler); }),
5656
};
57+
qDebug() << "(Simulator) Loaded cameras: " << _cameras.size();
5758
return _cameras;
5859
}
5960

6061

6162
SimulatorDriver::SimulatorDriver()
6263
{
64+
qDebug() << "(Simulator) Initialising";
6365
Q_INIT_RESOURCE(simulator);
6466
}
6567

src/drivers/supporteddrivers.cpp

Lines changed: 57 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,43 @@
2828

2929
using namespace std;
3030

31+
struct SupportedDriver {
32+
typedef shared_ptr<SupportedDriver> ptr;
33+
SupportedDriver(const QString &name, const QVariantMap &info, const shared_ptr<QLibrary> &library) : name(name), info(info), library(library) {}
34+
QString name;
35+
QVariantMap info;
36+
shared_ptr<QLibrary> library;
37+
shared_ptr<Driver> _driver;
38+
shared_ptr<Driver> driver();
39+
};
40+
41+
typedef int (*LoadDriverFunctionReady)();
42+
43+
44+
std::shared_ptr<Driver> SupportedDriver::driver()
45+
{
46+
if(!_driver) {
47+
qDebug() << "Initializing driver" << library->fileName();
48+
try {
49+
Driver *driverptr = ((LoadDriverFunction) library->resolve(PLANETARY_IMAGER_DRIVER_LOAD_F))();
50+
qDebug() << "Loaded driver address: " << (uint64_t)driverptr;
51+
_driver = shared_ptr<Driver>(driverptr);
52+
} catch(const Imager::exception &e) {
53+
qWarning() << "Error loading driver: " << e.what();
54+
}
55+
}
56+
qDebug() << "Driver loaded: " << !!_driver;
57+
return _driver;
58+
}
59+
60+
61+
3162
DPTR_IMPL(SupportedDrivers) {
3263
SupportedDrivers *q;
33-
QList<shared_ptr<QLibrary>> drivers;
64+
QList<SupportedDriver::ptr> supported_drivers;
3465

3566
void find_drivers(const QString &directory);
3667
void load_driver(const QString &filename);
37-
list<Driver*> instances();
38-
list<Driver*> _instances;
3968
};
4069

4170

@@ -71,13 +100,21 @@ void SupportedDrivers::Private::load_driver(const QString& filename)
71100
if(driver->load()) {
72101
qDebug() << "[OK] Driver " << library_name << " loaded successfully";
73102
if(driver->resolve(PLANETARY_IMAGER_DRIVER_LOAD_F)) {
103+
QFile json_file(filename);
104+
json_file.open(QIODevice::ReadOnly);
105+
QVariantMap driver_info = QJsonDocument::fromJson(json_file.readAll()).toVariant().toMap();
106+
74107
qDebug() << "[OK] PlanetaryImager_loadDriver resolved on " << library_name;
75-
drivers.push_back(driver);
108+
supported_drivers.push_back(make_shared<SupportedDriver>(
109+
QFileInfo(library_name).baseName(),
110+
driver_info,
111+
driver
112+
));
76113
} else {
77-
qWarning() << "[ERR] Error resolving PlanetaryImager_loadDriver function on " << library_name;
114+
qWarning() << "[ERR] Error resolving PlanetaryImager_loadDriver function on " << library_name << ":" << driver->errorString();
78115
}
79116
} else {
80-
qWarning() << "[ERR] Error loading driver: " << library_name;
117+
qWarning() << "[ERR] Error loading driver" << library_name << ":" << driver->errorString();
81118
}
82119
}
83120

@@ -88,37 +125,29 @@ SupportedDrivers::~SupportedDrivers()
88125

89126
void SupportedDrivers::aboutToQuit()
90127
{
91-
for(auto driver: d->instances())
92-
driver->aboutToQuit();
128+
for(auto supported_driver: d->supported_drivers)
129+
if(supported_driver->driver()) {
130+
supported_driver->driver()->aboutToQuit();
131+
}
93132
}
94133

95134

96135
Driver::Cameras SupportedDrivers::cameras() const
97136
{
98137
qDebug() << "Detecting active cameras";
99138
Cameras cameras;
100-
for(auto driver: d->instances()) {
101-
if(driver)
102-
cameras.append(driver->cameras());
139+
for(auto supported_driver: d->supported_drivers) {
140+
qDebug() << "Checking cameras on driver " << supported_driver->name;
141+
if(supported_driver->driver()) {
142+
auto driver_cameras = supported_driver->driver()->cameras();
143+
qDebug() << "Found" << driver_cameras.size() << "on driver" << supported_driver->name;
144+
cameras.append(driver_cameras);
145+
} else {
146+
qWarning() << "Driver" << supported_driver->name << "doesn't seem to be correctly loaded";
147+
}
103148
}
104149
qDebug() << "Detected cameras: " << cameras.size();
105150
return cameras;
106151
}
107152

108-
list<Driver *> SupportedDrivers::Private::instances()
109-
{
110-
if(_instances.size() == 0) {
111-
qDebug() << "Initialising driver instances";
112-
transform(begin(drivers), end(drivers), back_inserter(_instances), [](const auto &p) -> Driver* {
113-
qDebug() << "Initializing driver" << p->fileName();
114-
try {
115-
auto driver_load_function = (LoadDriverFunction) p->resolve(PLANETARY_IMAGER_DRIVER_LOAD_F);
116-
return qobject_cast<Driver*>(driver_load_function());
117-
} catch(const Imager::exception &e) {
118-
qWarning() << "Error loading driver: " << e.what();
119-
return nullptr;
120-
}
121-
});
122-
}
123-
return _instances;
124-
}
153+

src/drivers/zwo_asi/zwo_asi_driver.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,24 +56,23 @@ ZWO_ASI_Driver::ZWO_ASI_Driver() : dptr(this)
5656
metatypes_registered = true;
5757
qRegisterMetaType<ASI_IMG_TYPE>("ASI_IMG_TYPE");
5858
}
59-
qDebug() << "ZWO ASI Driver initialised";
59+
qInfo() << "(ASI) Driver initialised, version " << ASIGetSDKVersion();
6060
}
6161

6262
ZWO_ASI_Driver::~ZWO_ASI_Driver()
6363
{
64-
6564
}
6665

6766
Driver::Cameras ZWO_ASI_Driver::cameras() const
6867
{
6968
int ncams = ASIGetNumOfConnectedCameras();
70-
qDebug() << "ZWO AI Driver: detected" << ncams << "cameras";
69+
qDebug() << "(ASI) Driver: detected" << ncams << "cameras";
7170
Driver::Cameras cameras;
7271
int index=0;
7372
for(int index=0; index<ncams; index++) {
7473
ASI_CAMERA_INFO info;
7574
ASI_CHECK << ASIGetCameraProperty(&info, index) << string{"Get Camera Property"};
76-
qDebug() << "ZWO camera index" << index << "is a" << info.Name;
75+
qDebug() << "(ASI) camera index" << index << "is a" << info.Name;
7776
cameras.push_back(make_shared<ZWO_ASI_Camera>(info));
7877
}
7978
return cameras;

src/planetaryimager.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@
2323
#include <QThread>
2424
#include <QTimer>
2525

26+
#ifdef STATIC_WINDOWS_PLUGIN
27+
#pragma message("Initializing Qt static plugins")
28+
#include <QtPlugin>
29+
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
30+
#endif
31+
32+
2633
DPTR_IMPL(PlanetaryImager) {
2734
Driver::ptr driver;
2835
ImageHandler::ptr imageHandler;
@@ -43,6 +50,7 @@ PlanetaryImager::PlanetaryImager(
4350
Configuration &configuration
4451
) : QObject{}, dptr(driver, imageHandler, saveImages, configuration, this)
4552
{
53+
QThreadPool::globalInstance()->setMaxThreadCount(std::max(5, QThread::idealThreadCount()));
4654
d->initDevicesWatcher();
4755
}
4856

support/docker-builds/compile

Lines changed: 0 additions & 81 deletions
This file was deleted.

0 commit comments

Comments
 (0)