Skip to content

Commit 9fd28fd

Browse files
authored
Merge branch 'qgis:master' into master
2 parents 465e00e + 22e4124 commit 9fd28fd

File tree

1,313 files changed

+41280
-11282
lines changed

Some content is hidden

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

1,313 files changed

+41280
-11282
lines changed

.github/workflows/build_artifact_comment.yml

-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ on:
55
workflows: [🪟 MingW64 Windows 64bit Build]
66
types:
77
- completed
8-
branches-ignore:
9-
- 'master'
10-
- 'release*'
118

129
permissions:
1310
contents: read

.github/workflows/macos-build.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ env:
3434
jobs:
3535
mac_os_build:
3636
if: github.repository == 'qgis/QGIS'
37-
runs-on: macos-latest
37+
runs-on: macos-13
3838
steps:
3939
- uses: actions/checkout@v4
4040

.github/workflows/mingw-w64-msys2.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ jobs:
7171
-DPython_EXECUTABLE=${MINGW_PREFIX}/bin/python \
7272
-DWITH_3D=ON \
7373
-DWITH_DRACO=ON \
74-
-DWITH_PDAL=OFF \
74+
-DWITH_PDAL=ON \
7575
-DWITH_CUSTOM_WIDGETS=ON \
7676
-DWITH_BINDINGS=OFF \
7777
-DWITH_GRASS=OFF \

.github/workflows/write_failure_comment.yml

-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ on:
55
workflows: [🧪 QGIS tests]
66
types:
77
- completed
8-
branches-ignore:
9-
- 'master'
10-
- 'release*'
118

129
permissions:
1310
contents: read

CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ if(WITH_CORE)
544544
# get the Qt plugins directory
545545
get_target_property(QMAKE_EXECUTABLE ${QT_VERSION_BASE}::qmake LOCATION)
546546

547-
EXEC_PROGRAM(${QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_PLUGINS" RETURN_VALUE return_code OUTPUT_VARIABLE DEFAULT_QT_PLUGINS_DIR )
547+
execute_process(COMMAND ${QMAKE_EXECUTABLE} -query QT_INSTALL_PLUGINS RESULT_VARIABLE return_code OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE DEFAULT_QT_PLUGINS_DIR )
548548
set (QT_PLUGINS_DIR ${DEFAULT_QT_PLUGINS_DIR} CACHE STRING "Path to installation directory for Qt Plugins. Defaults to Qt native plugin directory")
549549

550550
if (BUILD_WITH_QT6)
@@ -1102,7 +1102,7 @@ if (WITH_CORE AND WITH_BINDINGS)
11021102
include(SIPMacros)
11031103

11041104
set(SIP_INCLUDES ${PYQT_SIP_DIR} ${CMAKE_SOURCE_DIR}/python)
1105-
set(SIP_CONCAT_PARTS 25)
1105+
set(SIP_CONCAT_PARTS 22)
11061106

11071107
if (NOT BINDINGS_GLOBAL_INSTALL)
11081108
set(Python_SITEARCH ${QGIS_DATA_DIR}/python)

INSTALL.md

+9-4
Original file line numberDiff line numberDiff line change
@@ -561,14 +561,16 @@ dnf5 install -y --setopt=install_weak_deps=False proj-devel
561561

562562
Installation of all needed build dependencies:
563563

564-
```bash
565-
dnf5 install qt6-qtbase-private-devel qt6-qtwebkit-devel qt6-qtlocation-devel qt6-qtmultimedia-devel qt6-qttools-static qca-qt6-devel qca-qt6-ossl qt6-qt3d-devel python3-qt6-devel python3-qscintilla-qt6-devel qscintilla-qt6-devel python3-qscintilla-qt6 clang flex bison geos-devel gdal gdal-devel hdf5-devel sqlite-devel libspatialite-devel qt6-qtsvg-devel spatialindex-devel expat-devel netcdf-devel proj-devel qwt-qt6-devel gsl-devel PDAL PDAL-devel postgresql-devel cmake python3-gdal gdal-python-tools python3-psycopg2 python3-PyYAML python3-pygments python3-jinja2 python3-OWSLib qca-qt6-ossl qwt-qt6-devel qtkeychain-qt6-devel libzip-devel exiv2-devel PyQt-builder protobuf-lite protobuf-lite-devel libzstd-devel qt6-qtserialport-devel draco-devel python3-devel qt6-qt5compat-devel
566-
```
564+
|Distribution|Install command for packages|
565+
|------------|----------------------------|
566+
| Fedora 40 Workstation | ``dnf install qt6-qtbase-private-devel qt6-qtlocation-devel qt6-qtmultimedia-devel qt6-qttools-static qca-qt6-devel qca-qt6-ossl qt6-qt3d-devel qt6-qtwebengine-devel python3-pyqt6-devel python3-qscintilla-qt6-devel qscintilla-qt6-devel python3-qscintilla-qt6 clang flex bison geos-devel gdal gdal-devel hdf5-devel sqlite-devel libspatialite-devel qt6-qtsvg-devel spatialindex-devel expat-devel netcdf-devel proj-devel qwt-qt6-devel gsl-devel PDAL PDAL-devel postgresql-devel cmake python3-gdal gdal-python-tools python3-psycopg2 python3-PyYAML python3-pygments python3-jinja2 python3-OWSLib qca-qt6-ossl qwt-qt6-devel qtkeychain-qt6-devel libzip-devel exiv2-devel PyQt-builder protobuf-lite protobuf-lite-devel libzstd-devel qt6-qtserialport-devel draco-devel python3-devel qt6-qt5compat-devel python3-pyqt6-webengine`` |
567+
| Fedora 39 Workstation | ``dnf install qt6-qtbase-private-devel qt6-qtwebkit-devel qt6-qtlocation-devel qt6-qtmultimedia-devel qt6-qttools-static qca-qt6-devel qt6-qtwebengine-devel qca-qt6-ossl qt6-qt3d-devel python3-qt6-devel python3-qscintilla-qt6-devel qscintilla-qt6-devel python3-qscintilla-qt6 clang flex bison geos-devel gdal gdal-devel hdf5-devel sqlite-devel libspatialite-devel qt6-qtsvg-devel spatialindex-devel expat-devel netcdf-devel proj-devel qwt-qt6-devel gsl-devel PDAL PDAL-devel postgresql-devel cmake python3-gdal gdal-python-tools python3-psycopg2 python3-PyYAML python3-pygments python3-jinja2 python3-OWSLib qca-qt6-ossl qwt-qt6-devel qtkeychain-qt6-devel libzip-devel exiv2-devel PyQt-builder protobuf-lite protobuf-lite-devel libzstd-devel qt6-qtserialport-devel draco-devel python3-devel qt6-qt5compat-devel`` |
568+
567569

568570
To build,
569571

570572
```bash
571-
cmake .. -DBUILD_WITH_QT5=OFF -DBUILD_WITH_QT6=ON -DWITH_QTWEBKIT=OFF
573+
cmake .. -DBUILD_WITH_QT6=ON -DWITH_QTWEBKIT=OFF -DWITH_QTWEBENGINE=ON
572574
```
573575

574576
# 4. Building on Windows
@@ -1083,6 +1085,9 @@ CMake option:
10831085
This will flood your terminal or system log with lots of useful output from
10841086
QgsDebugMsg() calls in source code.
10851087
1088+
Those lines can be reduced or augmented by setting the QGIS_DEBUG
1089+
runtime environment variable between 0 (no messages) and 5 (all messages).
1090+
10861091
If you would like to run the test suite, you will need to do so from the build
10871092
directory, as it will not work with the installed/bundled app. First set the
10881093
CMake option to enable tests:

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -254,9 +254,9 @@ There are several channels where you can find help and support for QGIS:
254254
- Using the [QGIS community site](https://qgis.org)
255255
- Joining the [qgis-users mailing list](https://lists.osgeo.org/mailman/listinfo/qgis-user)
256256
- Chatting with other users real-time. *Please wait around for a response to your question as many folks on the channel are doing other things and it may take a while for them to notice your question. The following paths all take you to the same chat room:*
257-
- Using an IRC client and joining the [#qgis](https://webchat.freenode.net/?channels=#qgis) channel on irc.freenode.net.
258-
- Using a Matrix client and joining the [#qgis:matrix.org](https://matrix.to/#/#qgis:matrix.org) room.
259-
- Using [Gitter](https://gitter.im/qgis/QGIS) chat.
257+
- Using an IRC client and joining the
258+
[#qgis](https://web.libera.chat/?channels=#qgis) channel on irc.libera.chat.
259+
- Using a Matrix client and joining the [#qgis:osgeo.org](https://matrix.to/#/#qgis:osgeo.org) room.
260260
- At the [GIS stackexchange](https://gis.stackexchange.com/) or [r/QGIS reddit](https://www.reddit.com/r/QGIS/), which are not maintained by the QGIS team, but where the QGIS and broader GIS community provides lots of advice
261261
- [Other support channels](https://qgis.org/en/site/forusers/support.html)
262262

cmake/FindGDAL.cmake

+6-9
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,8 @@ if(NOT GDAL_FOUND)
9898
IF (GDAL_CONFIG)
9999

100100
## extract gdal version
101-
EXEC_PROGRAM(${GDAL_CONFIG}
102-
ARGS --version
103-
OUTPUT_VARIABLE GDAL_VERSION )
101+
execute_process(COMMAND ${GDAL_CONFIG} --version
102+
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GDAL_VERSION )
104103
STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1" GDAL_VERSION_MAJOR "${GDAL_VERSION}")
105104
STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\2" GDAL_VERSION_MINOR "${GDAL_VERSION}")
106105
STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\3" GDAL_VERSION_MICRO "${GDAL_VERSION}")
@@ -123,9 +122,8 @@ if(NOT GDAL_FOUND)
123122
ENDIF( (GDAL_VERSION_MAJOR EQUAL 3) AND (GDAL_VERSION_MINOR EQUAL 0) AND (GDAL_VERSION_MICRO LESS 3) )
124123

125124
# set INCLUDE_DIR to prefix+include
126-
EXEC_PROGRAM(${GDAL_CONFIG}
127-
ARGS --prefix
128-
OUTPUT_VARIABLE GDAL_PREFIX)
125+
execute_process(COMMAND ${GDAL_CONFIG} --prefix
126+
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GDAL_PREFIX)
129127
#SET(GDAL_INCLUDE_DIR ${GDAL_PREFIX}/include CACHE STRING INTERNAL)
130128
FIND_PATH(GDAL_INCLUDE_DIR
131129
gdal.h
@@ -136,9 +134,8 @@ if(NOT GDAL_FOUND)
136134
)
137135

138136
## extract link dirs for rpath
139-
EXEC_PROGRAM(${GDAL_CONFIG}
140-
ARGS --libs
141-
OUTPUT_VARIABLE GDAL_CONFIG_LIBS )
137+
execute_process(COMMAND ${GDAL_CONFIG} --libs
138+
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GDAL_CONFIG_LIBS )
142139

143140
## split off the link dirs (for rpath)
144141
## use regular expression to match wildcard equivalent "-L*<endchar>"

cmake/FindGEOS.cmake

+6-9
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,8 @@ if(NOT GEOS_FOUND)
8686

8787
IF (GEOS_CONFIG)
8888

89-
EXEC_PROGRAM(${GEOS_CONFIG}
90-
ARGS --version
91-
OUTPUT_VARIABLE GEOS_VERSION)
89+
execute_process(COMMAND ${GEOS_CONFIG} --version
90+
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GEOS_VERSION)
9291
STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1" GEOS_VERSION_MAJOR "${GEOS_VERSION}")
9392
STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\2" GEOS_VERSION_MINOR "${GEOS_VERSION}")
9493

@@ -97,9 +96,8 @@ if(NOT GEOS_FOUND)
9796
ENDIF (GEOS_VERSION_MAJOR LESS 3 OR (GEOS_VERSION_MAJOR EQUAL 3 AND GEOS_VERSION_MINOR LESS 9) )
9897

9998
# set INCLUDE_DIR to prefix+include
100-
EXEC_PROGRAM(${GEOS_CONFIG}
101-
ARGS --prefix
102-
OUTPUT_VARIABLE GEOS_PREFIX)
99+
execute_process(COMMAND ${GEOS_CONFIG} --prefix
100+
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GEOS_PREFIX)
103101

104102
FIND_PATH(GEOS_INCLUDE_DIR
105103
geos_c.h
@@ -109,9 +107,8 @@ if(NOT GEOS_FOUND)
109107
)
110108

111109
## extract link dirs for rpath
112-
EXEC_PROGRAM(${GEOS_CONFIG}
113-
ARGS --libs
114-
OUTPUT_VARIABLE GEOS_CONFIG_LIBS )
110+
execute_process(COMMAND ${GEOS_CONFIG} --libs
111+
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GEOS_CONFIG_LIBS )
115112

116113
## split off the link dirs (for rpath)
117114
## use regular expression to match wildcard equivalent "-L*<endchar>"

cmake/FindPDAL.cmake

+2-3
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,8 @@ ENDIF (PDAL_INCLUDE_DIR AND PDAL_CPP_LIBRARY AND PDAL_UTIL_LIBRARY AND PDAL_BIN)
7676

7777
IF (PDAL_FOUND)
7878
# extract PDAL version
79-
EXEC_PROGRAM(${PDAL_BIN}
80-
ARGS --version
81-
OUTPUT_VARIABLE PDAL_VERSION_OUT )
79+
execute_process(COMMAND ${PDAL_BIN} --version
80+
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE PDAL_VERSION_OUT )
8281
STRING(REGEX REPLACE "^.*([0-9]+)\\.([0-9]+)\\.([0-9]+).*$" "\\1" PDAL_VERSION_MAJOR "${PDAL_VERSION_OUT}")
8382
STRING(REGEX REPLACE "^.*([0-9]+)\\.([0-9]+)\\.([0-9]+).*$" "\\2" PDAL_VERSION_MINOR "${PDAL_VERSION_OUT}")
8483
STRING(REGEX REPLACE "^.*([0-9]+)\\.([0-9]+)\\.([0-9]+).*$" "\\3" PDAL_VERSION_PATCH "${PDAL_VERSION_OUT}")

cmake/FindPostgres.cmake

+6-9
Original file line numberDiff line numberDiff line change
@@ -68,21 +68,18 @@ ELSE(WIN32)
6868

6969
IF (POSTGRES_CONFIG)
7070
# set INCLUDE_DIR
71-
EXEC_PROGRAM(${POSTGRES_CONFIG}
72-
ARGS --includedir
73-
OUTPUT_VARIABLE PG_TMP)
71+
execute_process(COMMAND ${POSTGRES_CONFIG} --includedir
72+
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE PG_TMP)
7473
SET(POSTGRES_INCLUDE_DIR ${PG_TMP} CACHE STRING INTERNAL)
7574

7675
# set LIBRARY_DIR
77-
EXEC_PROGRAM(${POSTGRES_CONFIG}
78-
ARGS --libdir
79-
OUTPUT_VARIABLE PG_TMP)
76+
execute_process(COMMAND ${POSTGRES_CONFIG} --libdir
77+
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE PG_TMP)
8078
IF (APPLE)
8179
SET(POSTGRES_LIBRARY ${PG_TMP}/libpq.dylib CACHE STRING INTERNAL)
8280
ELSEIF (CYGWIN)
83-
EXEC_PROGRAM(${POSTGRES_CONFIG}
84-
ARGS --libs
85-
OUTPUT_VARIABLE PG_TMP)
81+
execute_process(COMMAND ${POSTGRES_CONFIG} --libs
82+
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE PG_TMP)
8683

8784
STRING(REGEX MATCHALL "[-][L]([^ ;])+" _LDIRS "${PG_TMP}")
8885
STRING(REGEX MATCHALL "[-][l]([^ ;])+" _LLIBS "${PG_TMP}")

cmake/FindPyQt5.cmake

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ ELSE(EXISTS PYQT5_VERSION_STR)
3434
ENDIF(_pyqt5_metadata)
3535

3636
IF(PYQT5_VERSION_STR)
37-
SET(PYQT5_MOD_DIR "${Python_SITEARCH}/PyQt5")
38-
SET(PYQT5_SIP_DIR "${Python_SITEARCH}/PyQt5/bindings")
37+
EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} -c "import os; import PyQt5; print(os.path.dirname(PyQt5.__file__), end='')" OUTPUT_VARIABLE PYQT5_MOD_DIR)
38+
SET(PYQT5_SIP_DIR "${PYQT5_MOD_DIR}/bindings")
3939
FIND_PROGRAM(__pyuic5 "pyuic5")
4040
GET_FILENAME_COMPONENT(PYQT5_BIN_DIR ${__pyuic5} DIRECTORY)
4141

cmake/FindPyQt6.cmake

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ ELSE(EXISTS PYQT6_VERSION_STR)
3434
ENDIF(_pyqt6_metadata)
3535

3636
IF(PYQT6_VERSION_STR)
37-
SET(PYQT6_MOD_DIR "${Python_SITEARCH}/PyQt6")
38-
SET(PYQT6_SIP_DIR "${Python_SITEARCH}/PyQt6/bindings")
37+
EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} -c "import os; import PyQt6; print(os.path.dirname(PyQt6.__file__), end='')" OUTPUT_VARIABLE PYQT6_MOD_DIR)
38+
SET(PYQT6_SIP_DIR "${PYQT6_MOD_DIR}/bindings")
3939
FIND_PROGRAM(__pyuic6 "pyuic6")
4040
GET_FILENAME_COMPONENT(PYQT6_BIN_DIR ${__pyuic6} DIRECTORY)
4141

cmake_templates/cmake_uninstall.cmake.in

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ STRING(REGEX REPLACE "\n" ";" files "${files}")
77
FOREACH(file ${files})
88
MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
99
IF(EXISTS "$ENV{DESTDIR}${file}")
10-
EXEC_PROGRAM(
11-
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
12-
OUTPUT_VARIABLE rm_out
13-
RETURN_VALUE rm_retval
10+
execute_process(
11+
COMMAND "@CMAKE_COMMAND@" -E remove "$ENV{DESTDIR}${file}"
12+
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE rm_out
13+
RESULT_VARIABLE rm_retval
1414
)
1515
IF("${rm_retval}" STREQUAL 0)
1616
ELSE("${rm_retval}" STREQUAL 0)

doc/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ if(WITH_APIDOC)
7777
${CMAKE_SOURCE_DIR}/src/core/metadata
7878
${CMAKE_SOURCE_DIR}/src/core/network
7979
${CMAKE_SOURCE_DIR}/src/core/numericformats
80+
${CMAKE_SOURCE_DIR}/src/core/painting
8081
${CMAKE_SOURCE_DIR}/src/core/pal
8182
${CMAKE_SOURCE_DIR}/src/core/pdf
8283
${CMAKE_SOURCE_DIR}/src/core/plot

doc/api_break.dox

+11
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,17 @@ https://github.com/qgis/qgis4.0_api/issues
1717

1818
This page maintains a list of incompatible changes that happened in previous releases.
1919

20+
QGIS 3.38 {#qgis_api_break_3_38}
21+
=========
22+
23+
Enabling GDAL Python exceptions
24+
-------------------------------
25+
26+
- QGIS now turns on exceptions in the osgeo.gdal, osgeo.ogr and osgeo.osr modules.
27+
This may affect plugins that use the GDAL Python API. Typically gdal.Open,
28+
gdal.OpenEx or ogr.Open() (non exclusive list) will now throw an exception
29+
if the dataset cannot be opened.
30+
2031
QGIS 3.24 {#qgis_api_break_3_24}
2132
=========
2233

0 commit comments

Comments
 (0)