From d187dd35cf1b20b32777cb603e03aefc91d06dd2 Mon Sep 17 00:00:00 2001 From: Larry Shaffer Date: Thu, 24 Nov 2016 09:31:17 -0700 Subject: [PATCH 1/5] Flip CMake finds for Qt-based frameworks, to ensure Headers are searched Search for libraries first, before includes, so any frameworks found can have their Headers subdirectory added to search paths for includes. - Reintroduce qwt and qscintilla2 base library names for searching. --- cmake/FindQCA.cmake | 11 +++++------ cmake/FindQScintilla.cmake | 33 +++++++++++++++++++++++---------- cmake/FindQwt.cmake | 24 +++++++++++++++--------- cmake/FindQwtPolar.cmake | 23 ++++++++++++++--------- 4 files changed, 57 insertions(+), 34 deletions(-) diff --git a/cmake/FindQCA.cmake b/cmake/FindQCA.cmake index e715188726e..4f6839b842b 100644 --- a/cmake/FindQCA.cmake +++ b/cmake/FindQCA.cmake @@ -31,16 +31,15 @@ else(QCA_INCLUDE_DIR AND QCA_LIBRARY) /usr/local/lib ) - if(APPLE) - if(QCA_LIBRARY AND QCA_LIBRARY MATCHES "qca(2)?-qt5\\.framework") - set(QCA_LIBRARY "${QCA_LIBRARY}" CACHE FILEPATH "QCA framework" FORCE) - set(QCA_INCLUDE_DIR "${QCA_LIBRARY}/Headers" CACHE FILEPATH "QCA framework headers" FORCE) - endif() - endif(APPLE) + set(_qca_fw) + if(QCA_LIBRARY MATCHES "/qca.*\\.framework") + string(REGEX REPLACE "^(.*/qca.*\\.framework).*$" "\\1" _qca_fw "${QCA_LIBRARY}") + endif() find_path(QCA_INCLUDE_DIR NAMES QtCrypto PATHS + "${_qca_fw}/Headers" ${LIB_DIR}/include "$ENV{LIB_DIR}/include" $ENV{INCLUDE} diff --git a/cmake/FindQScintilla.cmake b/cmake/FindQScintilla.cmake index bde0f6676bd..8826e1f2a81 100644 --- a/cmake/FindQScintilla.cmake +++ b/cmake/FindQScintilla.cmake @@ -24,16 +24,14 @@ IF(EXISTS QSCINTILLA_VERSION_STR) SET(QSCINTILLA_FOUND TRUE) ELSE(EXISTS QSCINTILLA_VERSION_STR) - FIND_PATH(QSCINTILLA_INCLUDE_DIR - NAMES Qsci/qsciglobal.h - PATHS - ${Qt5Core_INCLUDE_DIRS} - "${QT_INCLUDE_DIR}" - /usr/local/include - /usr/include - ) - - set(QSCINTILLA_LIBRARY_NAMES qscintilla2-qt5 libqt5scintilla2 libqscintilla2-qt5 qt5scintilla2 libqscintilla2-qt5.dylib) + set(QSCINTILLA_LIBRARY_NAMES + qscintilla2-qt5 + libqt5scintilla2 + libqscintilla2-qt5 + qt5scintilla2 + libqscintilla2-qt5.dylib + qscintilla2 + ) find_library(QSCINTILLA_LIBRARY NAMES ${QSCINTILLA_LIBRARY_NAMES} @@ -43,6 +41,21 @@ ELSE(EXISTS QSCINTILLA_VERSION_STR) /usr/lib ) + set(_qsci_fw) + if(QSCINTILLA_LIBRARY MATCHES "/qscintilla.*\\.framework") + string(REGEX REPLACE "^(.*/qscintilla.*\\.framework).*$" "\\1" _qsci_fw "${QSCINTILLA_LIBRARY}") + endif() + + FIND_PATH(QSCINTILLA_INCLUDE_DIR + NAMES Qsci/qsciglobal.h + PATHS + "${_qsci_fw}/Headers" + ${Qt5Core_INCLUDE_DIRS} + "${QT_INCLUDE_DIR}" + /usr/local/include + /usr/include + ) + IF(QSCINTILLA_LIBRARY AND QSCINTILLA_INCLUDE_DIR) SET(QSCINTILLA_FOUND TRUE) diff --git a/cmake/FindQwt.cmake b/cmake/FindQwt.cmake index 13f3b5b09c7..4f04637de44 100644 --- a/cmake/FindQwt.cmake +++ b/cmake/FindQwt.cmake @@ -12,15 +12,7 @@ # -FIND_PATH(QWT_INCLUDE_DIR NAMES qwt.h PATHS - /usr/include - /usr/local/include - "$ENV{LIB_DIR}/include" - "$ENV{INCLUDE}" - PATH_SUFFIXES qwt-qt4 qwt qwt5 qwt6 - ) - -set(QWT_LIBRARY_NAMES qwt-qt5 qwt6-qt5) +set(QWT_LIBRARY_NAMES qwt-qt5 qwt6-qt5 qwt) find_library(QWT_LIBRARY NAMES ${QWT_LIBRARY_NAMES} @@ -31,6 +23,20 @@ find_library(QWT_LIBRARY "$ENV{LIB}" ) +set(_qwt_fw) +if(QWT_LIBRARY MATCHES "/qwt.*\\.framework") + string(REGEX REPLACE "^(.*/qwt.*\\.framework).*$" "\\1" _qwt_fw "${QWT_LIBRARY}") +endif() + +FIND_PATH(QWT_INCLUDE_DIR NAMES qwt.h PATHS + "${_qwt_fw}/Headers" + /usr/include + /usr/local/include + "$ENV{LIB_DIR}/include" + "$ENV{INCLUDE}" + PATH_SUFFIXES qwt-qt4 qwt qwt5 qwt6 +) + IF (QWT_INCLUDE_DIR AND QWT_LIBRARY) SET(QWT_FOUND TRUE) ENDIF (QWT_INCLUDE_DIR AND QWT_LIBRARY) diff --git a/cmake/FindQwtPolar.cmake b/cmake/FindQwtPolar.cmake index 8956693c140..e09d14ca67f 100644 --- a/cmake/FindQwtPolar.cmake +++ b/cmake/FindQwtPolar.cmake @@ -12,15 +12,6 @@ # QWTPOLAR_INCLUDE_DIR = where to find headers # - -FIND_PATH(QWTPOLAR_INCLUDE_DIR NAMES qwt_polar.h PATHS - /usr/include - /usr/local/include - "$ENV{LIB_DIR}/include" - "$ENV{INCLUDE}" - PATH_SUFFIXES qwtpolar qwt - ) - FIND_LIBRARY(QWTPOLAR_LIBRARY NAMES qwtpolar PATHS /usr/lib /usr/local/lib @@ -28,6 +19,20 @@ FIND_LIBRARY(QWTPOLAR_LIBRARY NAMES qwtpolar PATHS "$ENV{LIB}/lib" ) +SET(_qwtpolar_fw) +IF (QWTPOLAR_LIBRARY MATCHES "/qwtpolar.*\\.framework") + STRING(REGEX REPLACE "^(.*/qwtpolar.*\\.framework).*$" "\\1" _qwtpolar_fw "${QWTPOLAR_LIBRARY}") +ENDIF () + +FIND_PATH(QWTPOLAR_INCLUDE_DIR NAMES qwt_polar.h PATHS + "${_qwtpolar_fw}/Headers" + /usr/include + /usr/local/include + "$ENV{LIB_DIR}/include" + "$ENV{INCLUDE}" + PATH_SUFFIXES qwtpolar qwt + ) + IF (QWTPOLAR_INCLUDE_DIR AND QWTPOLAR_LIBRARY) SET(QWTPOLAR_FOUND TRUE) ENDIF (QWTPOLAR_INCLUDE_DIR AND QWTPOLAR_LIBRARY) From c8eca29d1de880d80e78bea62604d98768632658 Mon Sep 17 00:00:00 2001 From: Larry Shaffer Date: Thu, 24 Nov 2016 09:34:31 -0700 Subject: [PATCH 2/5] Add default sip directory to search for Qsci sip files Handles instance where Qsci directory is outside of PyQt5 sip directory. The default sip directory is logical additional place to search. --- cmake/FindQsci.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/FindQsci.cmake b/cmake/FindQsci.cmake index fcb2bc11ce0..0e7544bde9d 100644 --- a/cmake/FindQsci.cmake +++ b/cmake/FindQsci.cmake @@ -35,7 +35,7 @@ ELSE(EXISTS QSCI_MOD_VERSION_STR) IF(QSCI_FOUND) FIND_PATH(QSCI_SIP_DIR NAMES Qsci/qscimod5.sip - PATHS ${PYQT5_SIP_DIR} + PATHS ${PYQT5_SIP_DIR} ${SIP_DEFAULT_SIP_DIR} ) IF(NOT QSCI_FIND_QUIETLY) From 33120528d0e169fc8b3300d94f5226d891eea50b Mon Sep 17 00:00:00 2001 From: Larry Shaffer Date: Thu, 24 Nov 2016 09:38:05 -0700 Subject: [PATCH 3/5] Add GRASS plugin CMake macro to find extra includes of GRASS compilation Such includes may need found again when including some GRASS headers. --- cmake/FindGRASS.cmake | 29 +++++++++++++++++++++++++++++ src/plugins/grass/CMakeLists.txt | 4 ++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/cmake/FindGRASS.cmake b/cmake/FindGRASS.cmake index 36479ac8ea2..e8f7ae7f030 100644 --- a/cmake/FindGRASS.cmake +++ b/cmake/FindGRASS.cmake @@ -4,6 +4,33 @@ # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# Macro that checks for extra include directories set during GRASS compilation. +# This helps for platforms where GRASS is built against dependencies in +# non-standard locations; like on Mac, where the system gettext is too old and +# GRASS is built off of gettext in /usr/local/opt, or some other custom prefix. +# Such includes may need found again when including some GRASS headers. + +MACRO (CHECK_GRASS_EXTRA_INCLUDE_DIRS GRASS_VERSION) + SET(GRASS_EXTRA_INCLUDE_DIRS${GRASS_VERSION} "" + CACHE STRING "Extra includes string used for GRASS${GRASS_VERSION}") + + IF(UNIX AND EXISTS ${GRASS_INCLUDE_DIR${GRASS_VERSION}}/Make/Platform.make + AND "${GRASS${GRASS_VERSION}_EXTRA_INCLUDE_DIRS}" STREQUAL "") + + FILE(READ ${GRASS_INCLUDE_DIR${GRASS_VERSION}}/Make/Platform.make _platformfile) + STRING(REGEX MATCH "INCLUDE_DIRS *= [^\n]*" _config_includes "${_platformfile}") + IF(NOT "${_config_includes}" STREQUAL "") + STRING(REGEX REPLACE "INCLUDE_DIRS *= *([^\n]*)" "\\1" _extra_includes "${_config_includes}") + ENDIF() + IF(NOT "${_extra_includes}" STREQUAL "") + SET(GRASS_EXTRA_INCLUDE_DIRS${GRASS_VERSION} ${_extra_includes} + CACHE STRING "Extra includes string used for GRASS${GRASS_VERSION}" FORCE) + ENDIF() + ENDIF() + + MARK_AS_ADVANCED (GRASS_EXTRA_INCLUDE_DIRS${GRASS_VERSION}) +ENDMACRO (CHECK_GRASS_EXTRA_INCLUDE_DIRS GRASS_VERSION) + # macro that checks for grass installation in specified directory MACRO (CHECK_GRASS G_PREFIX) @@ -108,10 +135,12 @@ MACRO (CHECK_GRASS G_PREFIX) SET(GRASS_FOUND${GRASS_FIND_VERSION} TRUE) SET(GRASS_FOUND TRUE) # GRASS_FOUND is true if at least one version was found SET(GRASS_PREFIX${GRASS_CACHE_VERSION} ${G_PREFIX}) + CHECK_GRASS_EXTRA_INCLUDE_DIRS(${GRASS_CACHE_VERSION}) IF(GRASS_FIND_VERSION EQUAL 6) # Set also normal variable with number SET(GRASS_INCLUDE_DIR${GRASS_FIND_VERSION} ${GRASS_INCLUDE_DIR${GRASS_CACHE_VERSION}}) SET(GRASS_PREFIX${GRASS_FIND_VERSION} ${G_PREFIX}) + CHECK_GRASS_EXTRA_INCLUDE_DIRS(${GRASS_FIND_VERSION}) ENDIF(GRASS_FIND_VERSION EQUAL 6) ENDIF(GRASS_LIBRARIES_FOUND${GRASS_FIND_VERSION}) ENDIF(GRASS_MAJOR_VERSION${GRASS_FIND_VERSION} EQUAL GRASS_FIND_VERSION) diff --git a/src/plugins/grass/CMakeLists.txt b/src/plugins/grass/CMakeLists.txt index 3ee4f87d834..b33ff80e98f 100644 --- a/src/plugins/grass/CMakeLists.txt +++ b/src/plugins/grass/CMakeLists.txt @@ -190,7 +190,7 @@ MACRO(ADD_GRASSPLUGIN GRASS_BUILD_VERSION) ) SET_TARGET_PROPERTIES(grassplugin${GRASS_BUILD_VERSION} PROPERTIES - COMPILE_FLAGS "-DGRASS_BASE=\\\"${GRASS_PREFIX}\\\"" + COMPILE_FLAGS "-DGRASS_BASE=\\\"${GRASS_PREFIX}\\\" ${GRASS_EXTRA_INCLUDE_DIRS${GRASS_BUILD_VERSION}}" ) IF(MSVC) @@ -216,7 +216,7 @@ MACRO(ADD_GRASSPLUGIN GRASS_BUILD_VERSION) ADD_EXECUTABLE(qgis.g.browser${GRASS_BUILD_VERSION} ${GRASS_BROWSER_SRCS}) SET_TARGET_PROPERTIES(qgis.g.browser${GRASS_BUILD_VERSION} PROPERTIES - COMPILE_FLAGS "-DGRASS_BASE=\\\"${GRASS_PREFIX}\\\"" + COMPILE_FLAGS "-DGRASS_BASE=\\\"${GRASS_PREFIX}\\\" ${GRASS_EXTRA_INCLUDE_DIRS${GRASS_BUILD_VERSION}}" ) TARGET_LINK_LIBRARIES (qgis.g.browser${GRASS_BUILD_VERSION} From 3f50e8356e0c52c811aecf9f81db470161f7a145 Mon Sep 17 00:00:00 2001 From: Larry Shaffer Date: Thu, 24 Nov 2016 09:40:22 -0700 Subject: [PATCH 4/5] [processing] Ensure reading of shortHelp yaml files as UTF-8 On macOS 10.11 with Py 3.5.2, .yaml files defaulted to ASCII and failed. --- python/plugins/processing/algs/help/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/plugins/processing/algs/help/__init__.py b/python/plugins/processing/algs/help/__init__.py index ec4843cd93a..5591eef6dd1 100644 --- a/python/plugins/processing/algs/help/__init__.py +++ b/python/plugins/processing/algs/help/__init__.py @@ -24,6 +24,7 @@ __copyright__ = '(C) 2016, Victor Olaya' __revision__ = '$Format:%H$' import os +import codecs import yaml from qgis.core import Qgis, QgsWkbTypes from qgis.PyQt.QtCore import QSettings, QLocale @@ -35,7 +36,7 @@ def loadShortHelp(): for f in os.listdir(path): if f.endswith("yaml"): filename = os.path.join(path, f) - with open(filename) as stream: + with codecs.open(filename, encoding='utf-8') as stream: h.update(yaml.load(stream)) version = ".".join(Qgis.QGIS_VERSION.split(".")[0:2]) overrideLocale = QSettings().value('locale/overrideFlag', False, bool) From 8c8db0eb517ed5d4d16082f085eafff6a4b52a17 Mon Sep 17 00:00:00 2001 From: Larry Shaffer Date: Thu, 24 Nov 2016 23:02:24 -0700 Subject: [PATCH 5/5] Ensure GRASS plugin CMake extra includes macro works for all versions --- cmake/FindGRASS.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/FindGRASS.cmake b/cmake/FindGRASS.cmake index e8f7ae7f030..09c095006db 100644 --- a/cmake/FindGRASS.cmake +++ b/cmake/FindGRASS.cmake @@ -18,7 +18,8 @@ MACRO (CHECK_GRASS_EXTRA_INCLUDE_DIRS GRASS_VERSION) AND "${GRASS${GRASS_VERSION}_EXTRA_INCLUDE_DIRS}" STREQUAL "") FILE(READ ${GRASS_INCLUDE_DIR${GRASS_VERSION}}/Make/Platform.make _platformfile) - STRING(REGEX MATCH "INCLUDE_DIRS *= [^\n]*" _config_includes "${_platformfile}") + STRING(REGEX MATCH "INCLUDE_DIRS *= *[^\n]*" _config_includes "${_platformfile}") + SET(_extra_includes "") IF(NOT "${_config_includes}" STREQUAL "") STRING(REGEX REPLACE "INCLUDE_DIRS *= *([^\n]*)" "\\1" _extra_includes "${_config_includes}") ENDIF()