From f84347aec1dc3ad66421e152fcea45fe8022f13e Mon Sep 17 00:00:00 2001 From: "Juergen E. Fischer" Date: Fri, 30 May 2025 11:31:39 +0200 Subject: [PATCH] msvc build changes --- .qmake.conf | 2 + apps/apps.pri | 1 - apps/pgmodeler-se/pgmodeler-se.pro | 6 +- libs/libcanvas/libcanvas.pro | 1 - libs/libcli/libcli.pro | 1 - libs/libconnector/libconnector.pro | 1 - libs/libcore/libcore.pro | 1 - libs/libgui/libgui.pro | 4 +- libs/libparsers/libparsers.pro | 1 - libs/libutils/libutils.pro | 1 - pgmodeler.pri | 130 ++++++++++++++++------------- 11 files changed, 81 insertions(+), 68 deletions(-) create mode 100644 .qmake.conf diff --git a/.qmake.conf b/.qmake.conf new file mode 100644 index 0000000000..b303d719d9 --- /dev/null +++ b/.qmake.conf @@ -0,0 +1,2 @@ +top_srcdir=$$PWD +top_builddir=$$shadowed($$PWD) diff --git a/apps/apps.pri b/apps/apps.pri index 6204f25182..3289e6d410 100644 --- a/apps/apps.pri +++ b/apps/apps.pri @@ -29,7 +29,6 @@ DEPENDPATH += $$LIBGUI_ROOT \ unix:LIBS += $$QMAKE_LIBS_EXECINFO windows:RCC_DIR=src/ -windows:DESTDIR=$$PWD isEqual(PRIVATE_PLUGINS, false) { windows:RC_FILE=res/windows_ico.qrc diff --git a/apps/pgmodeler-se/pgmodeler-se.pro b/apps/pgmodeler-se/pgmodeler-se.pro index 6da11c6deb..3bd2ba3940 100644 --- a/apps/pgmodeler-se/pgmodeler-se.pro +++ b/apps/pgmodeler-se/pgmodeler-se.pro @@ -30,12 +30,12 @@ DEPENDPATH += ../pgmodeler \ # Forcing the linker to use the objects files generated # during the compilation of the main executable since # pgmodeler-se uses the same application class -OBJECTS += ../pgmodeler/obj/pgmodelerapp.o \ -../pgmodeler/obj/moc_pgmodelerapp.o +windows: OBJECTS += ../pgmodeler/obj/pgmodelerapp.obj ../pgmodeler/obj/moc_pgmodelerapp.obj +else: OBJECTS += ../pgmodeler/obj/pgmodelerapp.o ../pgmodeler/obj/moc_pgmodelerapp.o # Deployment settings target.path = $$PRIVATEBINDIR INSTALLS = target -# Print the current build settins (see pgmodeler.pri) +# Print the current build settings (see pgmodeler.pri) printBuildDetails() diff --git a/libs/libcanvas/libcanvas.pro b/libs/libcanvas/libcanvas.pro index 3c6aca815e..2b17f796b1 100644 --- a/libs/libcanvas/libcanvas.pro +++ b/libs/libcanvas/libcanvas.pro @@ -2,7 +2,6 @@ include(../../pgmodeler.pri) TEMPLATE = lib TARGET = canvas -windows: DESTDIR = $$PWD # Enables shared library symbols exporting DEFINES += CANVAS_SYMBOLS diff --git a/libs/libcli/libcli.pro b/libs/libcli/libcli.pro index e69f7eb6f9..ca520fdbf0 100644 --- a/libs/libcli/libcli.pro +++ b/libs/libcli/libcli.pro @@ -2,7 +2,6 @@ include(../../pgmodeler.pri) TEMPLATE = lib TARGET = cli -windows: DESTDIR = $$PWD # Enables shared library symbols exporting DEFINES += CLI_SYMBOLS diff --git a/libs/libconnector/libconnector.pro b/libs/libconnector/libconnector.pro index 66e8bc9716..574e3f5151 100644 --- a/libs/libconnector/libconnector.pro +++ b/libs/libconnector/libconnector.pro @@ -2,7 +2,6 @@ include(../../pgmodeler.pri) TEMPLATE = lib TARGET = connector -windows: DESTDIR = $$PWD # Enables shared library symbols exporting DEFINES += CONNECTOR_SYMBOLS diff --git a/libs/libcore/libcore.pro b/libs/libcore/libcore.pro index 4a866f5197..36b683aa2f 100644 --- a/libs/libcore/libcore.pro +++ b/libs/libcore/libcore.pro @@ -2,7 +2,6 @@ include(../../pgmodeler.pri) TEMPLATE = lib TARGET = core -windows: DESTDIR = $$PWD # Enables shared library symbols exporting DEFINES += CORE_SYMBOLS diff --git a/libs/libgui/libgui.pro b/libs/libgui/libgui.pro index 9146ba0d64..e21f60ec28 100644 --- a/libs/libgui/libgui.pro +++ b/libs/libgui/libgui.pro @@ -16,7 +16,6 @@ isEqual(PRIVATE_PLUGINS, false) { RESOURCES += res/resources.qrc windows:RCC_DIR += src -windows:DESTDIR = $$PWD # Enables shared library symbols exporting DEFINES += GUI_SYMBOLS @@ -382,7 +381,8 @@ INCLUDEPATH += $$LIBCANVAS_INC \ $$PWD/src/settings \ $$PWD/src/tools \ $$PWD/src/utils \ - $$PWD/src/widgets + $$PWD/src/widgets \ + $$PWD/src DEPENDPATH += $$LIBCANVAS_ROOT \ $$LIBCONNECTOR_ROOT \ diff --git a/libs/libparsers/libparsers.pro b/libs/libparsers/libparsers.pro index 0e87689a97..ee1fe04b27 100644 --- a/libs/libparsers/libparsers.pro +++ b/libs/libparsers/libparsers.pro @@ -2,7 +2,6 @@ include(../../pgmodeler.pri) TEMPLATE = lib TARGET = parsers -windows: DESTDIR = $$PWD # Enables shared library symbols exporting DEFINES += PARSERS_SYMBOLS diff --git a/libs/libutils/libutils.pro b/libs/libutils/libutils.pro index ddb4d90b18..8ce1b13171 100644 --- a/libs/libutils/libutils.pro +++ b/libs/libutils/libutils.pro @@ -2,7 +2,6 @@ include(../../pgmodeler.pri) TEMPLATE = lib TARGET = utils -windows: DESTDIR = $$PWD # Enables shared library symbols exporting DEFINES += UTILS_SYMBOLS diff --git a/pgmodeler.pri b/pgmodeler.pri index 5021a98ec6..70aaafd326 100644 --- a/pgmodeler.pri +++ b/pgmodeler.pri @@ -9,59 +9,77 @@ OBJECTS_DIR = obj UI_DIR = src contains(CONFIG, debug):{ - DEFINES+=PGMODELER_DEBUG + DEFINES+=PGMODELER_DEBUG - # Enabling ccache (https://ccache.dev) in debug mode to speed up recompilations - isEqual(USE_CCACHE, true):CONFIG+=ccache + # Enabling ccache (https://ccache.dev) in debug mode to speed up recompilations + isEqual(USE_CCACHE, true):CONFIG+=ccache } +msvc:DEFINES+=__PRETTY_FUNCTION__=__FUNCTION__ + # Disables all the APIs deprecated before Qt 6.4.0 DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060400 !defined(NO_CHECK_CURR_VER, var):DEFINES+=CHECK_CURR_VER # Forcing the compilation using Qt 6.4.x !versionAtLeast(QT_VERSION, "6.4.0") { - error("Unsupported Qt version detected: $${QT_VERSION}! pgModeler must be compiled with at least Qt 6.4.0") + error("Unsupported Qt version detected: $${QT_VERSION}! pgModeler must be compiled with at least Qt 6.4.0") } # Store the absolute paths to library subprojects to be referenced in other .pro files # *_ROOT -> the path to the root folder of the subproject -# *_LIB -> the libary flags (-L -l) (LIBS on qmake) passed to the compiler that points to the library generated from a subproject +# *_LIB -> the library flags (-L -l) (LIBS on qmake) passed to the compiler that points to the library generated from a subproject # *_INC -> the path to the source code folder (src), used by the flag -I (INCLUDEPATH on qmake) passed to the compiler + LIBCANVAS = libcanvas LIBCANVAS_ROOT = $$absolute_path($$PWD/libs/$$LIBCANVAS) -LIBCANVAS_LIB = -L$$LIBCANVAS_ROOT -lcanvas -LIBCANVAS_INC = $$LIBCANVAS_ROOT/src +LIBCANVAS_INC = $$LIBCANVAS_ROOT/src $$top_builddir/libs/$$LIBCANVAS/src LIBCONNECTOR = libconnector LIBCONNECTOR_ROOT = $$absolute_path($$PWD/libs/$$LIBCONNECTOR) -LIBCONNECTOR_LIB = -L$$LIBCONNECTOR_ROOT -lconnector -LIBCONNECTOR_INC = $$LIBCONNECTOR_ROOT/src +LIBCONNECTOR_INC = $$LIBCONNECTOR_ROOT/src $$top_builddir/libs/$$LIBCONNECTOR/src LIBCORE = libcore LIBCORE_ROOT = $$absolute_path($$PWD/libs/$$LIBCORE) -LIBCORE_LIB = -L$$LIBCORE_ROOT -lcore -LIBCORE_INC = $$LIBCORE_ROOT/src +LIBCORE_INC = $$LIBCORE_ROOT/src $$top_builddir/libs/$$LIBCORE/src LIBPARSERS = libparsers LIBPARSERS_ROOT = $$absolute_path($$PWD/libs/$$LIBPARSERS) -LIBPARSERS_LIB = -L$$LIBPARSERS_ROOT -lparsers -LIBPARSERS_INC = $$LIBPARSERS_ROOT/src +LIBPARSERS_INC = $$LIBPARSERS_ROOT/src $$top_builddir/libs/$$LIBPARSERS/src LIBGUI = libgui LIBGUI_ROOT = $$absolute_path($$PWD/libs/$$LIBGUI) -LIBGUI_LIB = -L$$LIBGUI_ROOT -lgui -LIBGUI_INC = $$LIBGUI_ROOT/src +LIBGUI_INC = $$LIBGUI_ROOT/src $$top_builddir/libs/$$LIBGUI/src LIBUTILS = libutils LIBUTILS_ROOT = $$absolute_path($$PWD/libs/$$LIBUTILS) -LIBUTILS_LIB = -L$$LIBUTILS_ROOT -lutils -LIBUTILS_INC = $$LIBUTILS_ROOT/src +LIBUTILS_INC = $$LIBUTILS_ROOT/src $$top_builddir/libs/$$LIBUTILS/src LIBCLI = libcli LIBCLI_ROOT = $$absolute_path($$PWD/libs/$$LIBCLI) -LIBCLI_LIB = -L$$LIBCLI_ROOT -lcli -LIBCLI_INC = $$LIBCLI_ROOT/src +LIBCLI_INC = $$LIBCLI_ROOT/src $$top_builddir/libs/$$LIBCLI + +macx|unix { + LIBCANVAS_LIB = -L$$LIBCANVAS_ROOT -lcanvas + LIBCONNECTOR_LIB = -L$$LIBCONNECTOR_ROOT -lconnector + LIBCORE_LIB = -L$$LIBCORE_ROOT -lcore + LIBPARSERS_LIB = -L$$LIBPARSERS_ROOT -lparsers + LIBGUI_LIB = -L$$LIBGUI_ROOT -lgui + LIBUTILS_LIB = -L$$LIBUTILS_ROOT -lutils + LIBCLI_LIB = -L$$LIBCLI_ROOT -lcli +} +windows { + CONFIG(release): c = release + CONFIG(debug, debug|release): c = debug + + LIBCANVAS_LIB = -L$$top_builddir/libs/libcanvas/$$c -lcanvas + LIBCONNECTOR_LIB = -L$$top_builddir/libs/libconnector/$$c -lconnector + LIBCORE_LIB = -L$$top_builddir/libs/libcore/$$c -lcore + LIBPARSERS_LIB = -L$$top_builddir/libs/libparsers/$$c -lparsers + LIBGUI_LIB = -L$$top_builddir/libs/libgui/$$c -lgui + LIBUTILS_LIB = -L$$top_builddir/libs/libutils/$$c -lutils + LIBCLI_LIB = -L$$top_builddir/libs/libcli/$$c -lcli +} # Set the flag passed to compiler to indicate a snapshot build isEqual(SNAPSHOT_BUILD, true): DEFINES+=SNAPSHOT_BUILD @@ -80,7 +98,7 @@ PLUGINS_FOLDER=plugins isEqual(PRIVATE_PLUGINS, true) { DEFINES+=PRIVATE_PLUGINS_SYMBOLS PLUGINS_FOLDER=priv-plugins - PRIV_RES_FOLDER=$$PWD/$$PLUGINS_FOLDER/res + PRIV_RES_FOLDER=$$PWD/$$PLUGINS_FOLDER/res } # Include the plugins subprojects only if exists @@ -125,36 +143,36 @@ linux { # If the AppImage generation option is set isEqual(APPIMAGE_BUILD, true):{ - # Set the flag passed to compiler to indicate a appimage build - DEFINES+=APPIMAGE_BUILD - - !defined(PREFIX, var): PREFIX = /usr/local/pgmodeler-appimage - BINDIR = $$PREFIX - PRIVATEBINDIR = $$PREFIX - PRIVATELIBDIR = $$PREFIX/lib - PLUGINSDIR = $$PREFIX/lib/pgmodeler/plugins - SHAREDIR = $$PREFIX - CONFDIR = $$SHAREDIR/conf - DOCDIR = $$SHAREDIR - LANGDIR = $$SHAREDIR/lang - SAMPLESDIR = $$SHAREDIR/samples - SCHEMASDIR = $$SHAREDIR/schemas + # Set the flag passed to compiler to indicate a appimage build + DEFINES+=APPIMAGE_BUILD + + !defined(PREFIX, var): PREFIX = /usr/local/pgmodeler-appimage + BINDIR = $$PREFIX + PRIVATEBINDIR = $$PREFIX + PRIVATELIBDIR = $$PREFIX/lib + PLUGINSDIR = $$PREFIX/lib/pgmodeler/plugins + SHAREDIR = $$PREFIX + CONFDIR = $$SHAREDIR/conf + DOCDIR = $$SHAREDIR + LANGDIR = $$SHAREDIR/lang + SAMPLESDIR = $$SHAREDIR/samples + SCHEMASDIR = $$SHAREDIR/schemas } !isEqual(APPIMAGE_BUILD, true):{ - # Default configuration for package pgModeler. - # The default prefix is /usr/local - !defined(PREFIX, var): PREFIX = /usr/local - !defined(BINDIR, var): BINDIR = $$PREFIX/bin - !defined(PRIVATEBINDIR, var): PRIVATEBINDIR = $$PREFIX/bin - !defined(PRIVATELIBDIR, var): PRIVATELIBDIR = $$PREFIX/lib/pgmodeler - !defined(PLUGINSDIR, var): PLUGINSDIR = $$PREFIX/lib/pgmodeler/plugins - !defined(SHAREDIR, var): SHAREDIR = $$PREFIX/share/pgmodeler - !defined(CONFDIR, var): CONFDIR = $$SHAREDIR/conf - !defined(DOCDIR, var): DOCDIR = $$SHAREDIR - !defined(LANGDIR, var): LANGDIR = $$SHAREDIR/lang - !defined(SAMPLESDIR, var): SAMPLESDIR = $$SHAREDIR/samples - !defined(SCHEMASDIR, var): SCHEMASDIR = $$SHAREDIR/schemas + # Default configuration for package pgModeler. + # The default prefix is /usr/local + !defined(PREFIX, var): PREFIX = /usr/local + !defined(BINDIR, var): BINDIR = $$PREFIX/bin + !defined(PRIVATEBINDIR, var): PRIVATEBINDIR = $$PREFIX/bin + !defined(PRIVATELIBDIR, var): PRIVATELIBDIR = $$PREFIX/lib/pgmodeler + !defined(PLUGINSDIR, var): PLUGINSDIR = $$PREFIX/lib/pgmodeler/plugins + !defined(SHAREDIR, var): SHAREDIR = $$PREFIX/share/pgmodeler + !defined(CONFDIR, var): CONFDIR = $$SHAREDIR/conf + !defined(DOCDIR, var): DOCDIR = $$SHAREDIR + !defined(LANGDIR, var): LANGDIR = $$SHAREDIR/lang + !defined(SAMPLESDIR, var): SAMPLESDIR = $$SHAREDIR/samples + !defined(SCHEMASDIR, var): SCHEMASDIR = $$SHAREDIR/schemas } # Specifies where to find the libraries at runtime @@ -176,8 +194,8 @@ windows { # (e.g. inline static class members). Maybe it's a bug in the code is wrong (more likely) # or is a bug in the compiler? The fact is that reducing the executable/libs code # optmization causes the tool to work as expected. - QMAKE_CXXFLAGS_RELEASE -= -O2 - QMAKE_CXXFLAGS_RELEASE *= -O0 + gcc:QMAKE_CXXFLAGS_RELEASE -= -O2 + gcc:QMAKE_CXXFLAGS_RELEASE *= -O0 # The default prefix is ./build !defined(PREFIX, var): PREFIX = $$PWD/build @@ -225,7 +243,7 @@ DEFINES += BINDIR=\\\"$${BINDIR}\\\" \ DOCDIR=\\\"$${DOCDIR}\\\" \ LANGDIR=\\\"$${LANGDIR}\\\" \ SAMPLESDIR=\\\"$${SAMPLESDIR}\\\" \ - SCHEMASDIR=\\\"$${SCHEMASDIR}\\\" + SCHEMASDIR=\\\"$${SCHEMASDIR}\\\" # pgModeler depends on libpq and libxml2 this way to variables @@ -243,22 +261,22 @@ linux: { dep_paths = "$$PGSQL_LIB" "$$XML_LIB" "$$PGSQL_INC" "$$XML_INC" if(count(dep_paths, 4)):{ INCLUDEPATH += "$$PGSQL_INC" "$$XML_INC" - has_dep_paths = true + has_dep_paths = true } # If not all of the PGSQL_??? and XML_??? vars are defined # Then we default to use pkg-config for libpq and libxml-2.0 !defined(has_dep_paths,var): { CONFIG += link_pkgconfig - PKGCONFIG = libpq libxml-2.0 - PGSQL_LIB = -lpq - XML_LIB = -lxml2 + PKGCONFIG = libpq libxml-2.0 + PGSQL_LIB = -lpq + XML_LIB = -lxml2 } } macx { - !defined(PGSQL_LIB, var): PGSQL_LIB = /Library/PostgreSQL/15/lib/libpq.dylib - !defined(PGSQL_INC, var): PGSQL_INC = /Library/PostgreSQL/15/include + !defined(PGSQL_LIB, var): PGSQL_LIB = /Library/PostgreSQL/15/lib/libpq.dylib + !defined(PGSQL_INC, var): PGSQL_INC = /Library/PostgreSQL/15/include !defined(XML_INC, var): XML_INC = /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/libxml2 !defined(XML_LIB, var): XML_LIB = /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libxml2.tbd INCLUDEPATH += "$$PGSQL_INC" "$$XML_INC"