win32{ # Because "copy" doesn't support files that containe plus sign (+) in name we will use xcopy instead. unset(QMAKE_COPY) QMAKE_COPY = xcopy /y unset(QMAKE_COPY_FILE) QMAKE_COPY_FILE = xcopy /y unset(QMAKE_INSTALL_FILE) QMAKE_INSTALL_FILE = xcopy /y unset(QMAKE_INSTALL_PROGRAM) QMAKE_INSTALL_PROGRAM = xcopy /y } unix{ *g++* { GCC_VERSION = $$system("g++ -dumpfullversion -dumpversion") GCC_VERSIONS = $$split(GCC_VERSION, ".") COMPILER_MAJOR_VERSION = $$member(GCC_VERSIONS, 0) message("g++ version $${COMPILER_MAJOR_VERSION}.x found") greaterThan(COMPILER_MAJOR_VERSION, 3):CONFIG += g++4 greaterThan(COMPILER_MAJOR_VERSION, 4):CONFIG += g++5 greaterThan(COMPILER_MAJOR_VERSION, 5):CONFIG += g++6 greaterThan(COMPILER_MAJOR_VERSION, 6):CONFIG += g++7 greaterThan(COMPILER_MAJOR_VERSION, 7):CONFIG += g++8 greaterThan(COMPILER_MAJOR_VERSION, 8):CONFIG += g++9 } macx{ VCOPY = $$QMAKE_COPY } else { VCOPY = $$QMAKE_COPY -u } # Default prefix. Use for creation install path. DEFAULT_PREFIX = /usr # Prefix for binary file. isEmpty(PREFIX){ PREFIX = $$DEFAULT_PREFIX } BINDIR = $$PREFIX/bin DATADIR = $$PREFIX/share PKGDATADIR = $$DATADIR/valentina DEFINES += BINDIR=\\\"$$BINDIR\\\" DATADIR=\\\"$$DATADIR\\\" PKGDATADIR=\\\"$$PKGDATADIR\\\" } win32{ VCOPY = $$QMAKE_COPY /D } macx{ # Check which minimal OSX version supports current Qt version # See page https://doc.qt.io/qt-5/supported-platforms.html # For qt 5.14 https://doc.qt.io/archives/qt-5.14/supported-platforms.html # For Qt 5.13 https://doc.qt.io/archives/qt-5.13/supported-platforms.html # For Qt 5.12 https://doc.qt.io/archives/qt-5.12/supported-platforms.html # For older versions https://doc.qt.io/archives/qt-5.11/supported-platforms-and-configurations.html equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 13) {# Qt 5.14 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.13 } else { equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 11) {# Qt 5.12 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.12 } else { equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 10) {# Qt 5.11 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.11 } else { equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 9) {# Qt 5.10 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.11 } else { equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 8) {# Qt 5.9 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.10 } else { equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 7) {# Qt 5.8 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.9 } else { equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 6) {# Qt 5.7 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.8 } else { equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 3) {# Qt 5.4 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7 } else { QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6 } } } } } } } } } # See question on StackOwerflow "QSslSocket error when SSL is NOT used" (http://stackoverflow.com/a/31277055/3045403) # Copy of answer: # We occasionally had customers getting very similar warning messages but the software was also crashing. # We determined it was because, although we weren't using SSL either, the program found a copy of OpenSSL on the # customer's computer and tried interfacing with it. The version it found was too old though (from Qt 5.2 onwards v1.0.0 # or later is required). # # Our solution was to distribute the OpenSSL DLLs along with our application (~1.65 MB). The alternative is to compile # Qt from scratch without OpenSSL support. win32 { greaterThan(QT_MAJOR_VERSION, 4):greaterThan(QT_MINOR_VERSION, 10) { versionAtLeast(QT_VERSION, 5.12.4){ # Minimal supported OpenSSL version since Qt 5.12.4 is 1.1.1. contains(QMAKE_HOST.arch, x86_64) { INSTALL_OPENSSL += \ ../../../dist/win/openssl/win64/libcrypto-1_1-x64.dll \ ../../../dist/win/openssl/win64/libssl-1_1-x64.dll } else { INSTALL_OPENSSL += \ ../../../dist/win/openssl/win32/libcrypto-1_1.dll \ ../../../dist/win/openssl/win32/libssl-1_1.dll } } else { INSTALL_OPENSSL += \ ../../../dist/win/msvcr120.dll contains(QMAKE_HOST.arch, x86_64) { INSTALL_OPENSSL += \ ../../../dist/win/openssl/win64/libeay32.dll \ ../../../dist/win/openssl/win64/ssleay32.dll } else { INSTALL_OPENSSL += \ ../../../dist/win/openssl/win32/libeay32.dll \ ../../../dist/win/openssl/win32/ssleay32.dll } } } else { INSTALL_OPENSSL += \ ../../../dist/win/msvcr120.dll contains(QMAKE_HOST.arch, x86_64) { INSTALL_OPENSSL += \ ../../../dist/win/openssl/win64/libeay32.dll \ ../../../dist/win/openssl/win64/ssleay32.dll } else { INSTALL_OPENSSL += \ ../../../dist/win/openssl/win32/libeay32.dll \ ../../../dist/win/openssl/win32/ssleay32.dll } } } DEFINES += QT_NO_FOREACH CONFIG(release, debug|release){ !noDebugSymbols:win32:!*msvc*{ unset(QMAKE_STRIP) QMAKE_STRIP = echo # we do striping manualy } } defineTest(minQtVersion) { maj = $$1 min = $$2 patch = $$3 isEqual(QT_MAJOR_VERSION, $$maj) { isEqual(QT_MINOR_VERSION, $$min) { isEqual(QT_PATCH_VERSION, $$patch) { return(true) } greaterThan(QT_PATCH_VERSION, $$patch) { return(true) } } greaterThan(QT_MINOR_VERSION, $$min) { return(true) } } greaterThan(QT_MAJOR_VERSION, $$maj) { return(true) } return(false) } # Copies the given files to the destination directory defineTest(copyToDestdir) { files = $$1 DDIR = $$2 mkpath($$DDIR) for(FILE, files) { unix{ !exists($$DDIR/$$basename(FILE)) { QMAKE_POST_LINK += ln -s -f $$quote($$FILE) $$quote($$DDIR/$$basename(FILE)) & $$escape_expand(\\n\\t) } } else { !exists($$DDIR/$$basename(FILE)) { # Replace slashes in paths with backslashes for Windows win32{ FILE ~= s,/,\\,g DDIR ~= s,/,\\,g } QMAKE_POST_LINK += $$VCOPY $$quote($$FILE) $$quote($$DDIR) $$escape_expand(\\n\\t) } QMAKE_CLEAN += $$DDIR/$$basename(FILE) } } export(QMAKE_POST_LINK) export(QMAKE_CLEAN) } # Alwayse copies the given files to the destination directory defineTest(forceCopyToDestdir) { files = $$1 DDIR = $$2 mkpath($$DDIR) for(FILE, files) { unix{ QMAKE_POST_LINK += ln -s -f $$quote($$FILE) $$quote($$DDIR/$$basename(FILE)) & $$escape_expand(\\n\\t) } else { # Replace slashes in paths with backslashes for Windows win32{ FILE ~= s,/,\\,g DDIR ~= s,/,\\,g } QMAKE_POST_LINK += $$VCOPY $$quote($$FILE) $$quote($$DDIR) $$escape_expand(\\n\\t) QMAKE_CLEAN += $$DDIR/$$basename(FILE) } } export(QMAKE_POST_LINK) export(QMAKE_CLEAN) } # We use precompiled headers for more fast compilation source code. defineReplace(set_PCH){ no_ccache{ no_pch{ # To disable recompiled headers (PCH) run qmake with CONFIG+=no_pch return(true) } else { CONFIG += precompile_header # Turn on creation precompiled headers (PCH). export(CONFIG) # export value to global variable. PRECOMPILED_HEADER = stable.h # Header file with all all static headers: libraries, static local headers. export(PRECOMPILED_HEADER) # export value to global variable *msvc* { PRECOMPILED_SOURCE = stable.cpp # MSVC need also cpp file. export(PRECOMPILED_SOURCE) # export value to global variable. } } } return(true) } defineReplace(enable_ccache){ *clang*:clazy { QMAKE_CXX = clazy export(QMAKE_CXX) # export value to global variable. } else { no_ccache{ # For enable run qmake with CONFIG+=no_ccache $$set_PCH() } else { # ccache support only Unix systems. unix:{ equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 8):greaterThan(QT_PATCH_VERSION, 1) { # since Qt 5.9.2 we have built-in support for ccache CONFIG += ccache export(CONFIG) # export value to global variable. } else { ccache_prefix = ccache for(tool, $$list(QMAKE_CC QMAKE_CXX QMAKE_LINK QMAKE_LINK_SHLIB QMAKE_LINK_C)): \ $$tool = $$ccache_prefix $$eval($$tool) export(QMAKE_CC) export(QMAKE_CXX) export(QMAKE_LINK) export(QMAKE_LINK_SHLIB) export(QMAKE_LINK_C) } } else { $$set_PCH() } } } return(true) } defineReplace(FindBuildRevision){ CONFIG(debug, debug|release){ # Debug mode return(\\\"unknown\\\") }else{ # Release mode DVCS_HESH=$$system("git rev-parse --short HEAD") isEmpty(DVCS_HESH){ DVCS_HESH = \\\"unknown\\\" # if we can't find build revision left unknown. } else { DVCS_HESH=\\\"Git:$${DVCS_HESH}\\\" } return($${DVCS_HESH}) } } defineReplace(FindLatestTagDistance){ CONFIG(debug, debug|release){ # Debug mode return(0) }else{ # Release mode # tag is formatted as TAG-N-gSHA: # 1. latest stable version is TAG, or vX.Y.Z # 2. number of commits since latest stable version is N # 3. latest commit is gSHA tag_all = $$system(git describe --tags) tag_split = $$split(tag_all, "-") #split at the dashes GIT_DISTANCE = $$member(tag_split,1) #get 2nd element of results isEmpty(GIT_DISTANCE){ GIT_DISTANCE = 0 # if we can't find local revision left 0. } message("Latest tag distance:" $${GIT_DISTANCE}) return($${GIT_DISTANCE}) } } # In debug mode on Unix system we use all usefull for us compilers keys for checking errors. # Also trying make all possible for speed up build time. unix { LIBS_USED_FOR_QT = \ QtCore \ QtSvg \ QtXml \ QtPrintSupport \ QtXmlPatterns \ QtWidgets \ QtGui \ QtNetwork \ QtTest \ QtConcurrent # Key -isystem disable checking errors in system headers. Marking ignore for warnings in Qt headers. !macx{ ISYSTEM += -isystem "$$[QT_INSTALL_HEADERS]" for(somelib, $$list($$LIBS_USED_FOR_QT)) { ISYSTEM += -isystem "$$[QT_INSTALL_HEADERS]/$${somelib}" } } else { for(somelib, $$list($$LIBS_USED_FOR_QT)) { ISYSTEM += -isystem "$$[QT_INSTALL_LIBS]/$${somelib}.framework/Versions/5/Headers" ISYSTEM += -isystem "$$[QT_INSTALL_LIBS]/$${somelib}.framework/Headers" } } # Usefull GCC warnings keys. GCC_DEBUG_CXXFLAGS += \ -O0 \ # Turn off oprimization. $$ISYSTEM \ # Ignore warnings Qt headers. # Last gdb doesn't show debug symbols with Qt Creator (issue with Python 3 and debug scripts that use Python 2.7). # Solution to use older version gdb, that's why we use old standard of debug information. -gdwarf-3 \ -Wall \ -Wextra \ -pedantic \ -Weffc++ \ -Woverloaded-virtual \ -Wctor-dtor-privacy \ -Wnon-virtual-dtor \ -Wold-style-cast \ -Wconversion \ -Winit-self \ # -Wstack-protector \ -Wunreachable-code \ -Wcast-align \ -Wcast-qual \ -Wdisabled-optimization \ -Wfloat-equal \ -Wformat=2 \ -Wimport \ -Wmissing-include-dirs \ -Wpacked \ -Wredundant-decls \ # -Winline \ -Winvalid-pch \ # -Wunsafe-loop-optimizations \ # -Wlong-long \ We have been using C++11 -Wmissing-format-attribute \ -Wswitch-default \ -Wuninitialized \ -Wvariadic-macros \ -Wlogical-op \ -Wnoexcept \ -Wmissing-noreturn \ -Wpointer-arith \ -Wstrict-null-sentinel \ -Wstrict-overflow=5 \ -Wno-error=strict-overflow \ -Wundef \ -Wno-unused \ -Wno-pragmas \ -ftrapv # Since GCC 5 g++5:GCC_DEBUG_CXXFLAGS += \ -Wswitch-bool \ -Wlogical-not-parentheses \ -Wsizeof-array-argument \ # -Wsuggest-final-types \ # -Wsuggest-final-methods \ -Wbool-compare # Since GCC 6 g++6:GCC_DEBUG_CXXFLAGS += \ -Wshift-negative-value \ -Wshift-overflow \ -Wshift-overflow=2 \ -Wtautological-compare \ # -Wnull-dereference \ -Wduplicated-cond \ -Wmisleading-indentation # Since GCC 7 g++7:GCC_DEBUG_CXXFLAGS += \ -Wduplicated-branches \ -Wrestrict \ -Walloc-zero \ -Wnonnull \ -Wno-stringop-overflow # cannot suppress warning in Qt headers # Since GCC 8 g++8:GCC_DEBUG_CXXFLAGS += \ -Wmultistatement-macros \ -Warray-bounds # Usefull Clang warnings keys. CLANG_DEBUG_CXXFLAGS += \ -O0 \ # Turn off oprimization. $$ISYSTEM \ # Ignore warnings in Qt headers. # Last gdb doesn't show debug symbols with Qt Creator (issue with Python 3 and debug scripts that use Python 2.7). # Solution to use older version gdb, that's why we use old standard of debug information. -gdwarf-3 \ -fparse-all-comments \ -Wabi \ -Wabstract-final-class \ -Wabstract-vbase-init \ -Waddress \ -Waddress-of-temporary \ -Waggregate-return \ -Wall \ -Wambiguous-macro \ -Wambiguous-member-template \ -Wanalyzer-incompatible-plugin \ -Wanonymous-pack-parens \ -Warc \ -Warc-bridge-casts-disallowed-in-nonarc \ -Warc-maybe-repeated-use-of-weak \ -Warc-non-pod-memaccess \ -Warc-performSelector-leaks \ -Warc-repeated-use-of-weak \ -Warc-retain-cycles \ -Warc-unsafe-retained-assign \ -Warray-bounds \ -Warray-bounds-pointer-arithmetic \ -Wasm \ -Wasm-operand-widths \ -Wassign-enum \ -Watomic-properties \ -Watomic-property-with-user-defined-accessor \ -Wattributes \ -Wauto-import \ -Wauto-storage-class \ -Wauto-var-id \ -Wavailability \ -Wbackslash-newline-escape \ # -Wbad-array-new-length \ -Wbad-function-cast \ -Wbind-to-temporary-copy \ -Wno-c++98-compat-bind-to-temporary-copy \ -Wbitfield-constant-conversion \ -Wbitwise-op-parentheses \ -Wbool-conversion \ -Wbool-conversions \ -Wbuiltin-macro-redefined \ -Wbuiltin-requires-header \ -Wc++-compat \ -Wc++0x-compat \ -Wc++0x-extensions \ -Wc++0x-narrowing \ -Wc++11-compat \ -Wc++11-compat-pedantic \ -Wc++11-compat-reserved-user-defined-literal \ -Wc++11-extensions \ -Wc++11-extra-semi \ -Wc++11-long-long \ -Wc++11-narrowing \ -Wc11-extensions \ -Wcast-align \ -Wcast-of-sel-type \ -Wcast-qual \ -WCFString-literal \ -Wchar-align \ -Wchar-subscripts \ -Wcomment \ -Wcomments \ -Wcompare-distinct-pointer-types \ -Wcomplex-component-init \ -Wconditional-type-mismatch \ -Wconditional-uninitialized \ -Wconfig-macros \ -Wconstant-conversion \ -Wconstant-logical-operand \ -Wconstexpr-not-const \ -Wconversion \ -Wconversion-null \ -Wno-covered-switch-default \ -Wctor-dtor-privacy \ -Wcustom-atomic-properties \ -Wdangling-else \ -Wdangling-field \ -Wdangling-initializer-list \ -Wdeclaration-after-statement \ -Wdelegating-ctor-cycles \ -Wdelete-incomplete \ -Wdelete-non-virtual-dtor \ -Wdeprecated \ -Wdeprecated-declarations \ -Wdeprecated-implementations \ -Wdeprecated-objc-isa-usage \ -Wdeprecated-objc-pointer-introspection \ -Wdeprecated-objc-pointer-introspection-performSelector \ -Wdeprecated-register \ -Wdeprecated-writable-strings \ -Wdirect-ivar-access \ # -Wdisabled-macro-expansion \ Disabled -Wdisabled-optimization \ -Wdiscard-qual \ -Wdistributed-object-modifiers \ -Wdiv-by-zero \ -Wdivision-by-zero \ -Wdocumentation \ -Wdocumentation-deprecated-sync \ -Wdocumentation-html \ -Wdollar-in-identifier-extension \ -Wduplicate-decl-specifier \ -Wduplicate-enum \ -Wduplicate-method-arg \ -Wduplicate-method-match \ -Wdynamic-class-memaccess \ -Weffc++ \ -Wembedded-directive \ -Wempty-body \ -Wempty-translation-unit \ -Wendif-labels \ -Wenum-compare \ -Wenum-conversion \ -Wexplicit-ownership-type \ -Wextern-initializer \ -Wextra \ -Wextra-semi \ -Wextra-tokens \ -Wflexible-array-extensions \ -Wfloat-equal \ -Wformat \ -Wformat-extra-args \ -Wformat-invalid-specifier \ -Wformat-non-iso \ -Wformat-nonliteral \ -Wformat-security \ -Wformat-y2k \ -Wformat-zero-length \ -Wformat=2 \ -Wfour-char-constants \ -Wgcc-compat \ -Wgnu \ -Wgnu-array-member-paren-init \ -Wgnu-designator \ -Wgnu-static-float-init \ -Wheader-guard \ -Wheader-hygiene \ -Widiomatic-parentheses \ -Wignored-attributes \ -Wignored-qualifiers \ -Wimplicit \ -Wimplicit-atomic-properties \ -Wimplicit-conversion-floating-point-to-bool \ -Wimplicit-exception-spec-mismatch \ -Wimplicit-fallthrough \ -Wimplicit-fallthrough-per-function \ -Wimplicit-function-declaration \ -Wimplicit-int \ -Wimplicit-retain-self \ -Wimport \ -Wimport-preprocessor-directive-pedantic \ -Wincompatible-library-redeclaration \ -Wincompatible-pointer-types \ -Wincompatible-pointer-types-discards-qualifiers \ -Wincomplete-implementation \ -Wincomplete-module \ -Wincomplete-umbrella \ -Winit-self \ -Winitializer-overrides \ # -Winline \ -Wint-conversion \ -Wint-conversions \ -Wint-to-pointer-cast \ -Wint-to-void-pointer-cast \ -Winteger-overflow \ -Winvalid-constexpr \ -Winvalid-iboutlet \ -Winvalid-noreturn \ -Winvalid-offsetof \ -Winvalid-pch \ -Winvalid-pp-token \ -Winvalid-source-encoding \ -Winvalid-token-paste \ -Wknr-promoted-parameter \ -Wlanguage-extension-token \ -Wlarge-by-value-copy \ -Wliteral-conversion \ -Wliteral-range \ -Wlocal-type-template-args \ -Wno-c++98-compat-local-type-template-args \ -Wlogical-not-parentheses \ -Wlogical-op-parentheses \ # -Wlong-long \ We have been using C++11 -Wloop-analysis \ -Wmain \ -Wmain-return-type \ -Wmalformed-warning-check \ -Wmethod-signatures \ -Wmicrosoft \ -Wmicrosoft-exists \ -Wmismatched-parameter-types \ -Wmismatched-return-types \ -Wmismatched-tags \ -Wmissing-braces \ -Wmissing-declarations \ -Wmissing-field-initializers \ -Wmissing-format-attribute \ -Wmissing-include-dirs \ -Wmissing-method-return-type \ -Wmissing-noreturn \ -Wmissing-prototypes \ -Wmissing-selector-name \ -Wmissing-sysroot \ -Wmissing-variable-declarations \ -Wmodule-conflict \ -Wmost \ -Wmultichar \ -Wnarrowing \ -Wnested-externs \ -Wnewline-eof \ -Wnon-gcc \ -Wnon-literal-null-conversion \ -Wnon-pod-varargs \ -Wnon-virtual-dtor \ -Wnonnull \ -Wnonportable-cfstrings \ -Wno-c++98-compat \ -WNSObject-attribute \ -Wnull-arithmetic \ -Wnull-character \ -Wnull-conversion \ -Wnull-dereference \ -Wodr \ -Wold-style-cast \ -Wold-style-definition \ -Wout-of-line-declaration \ -Wover-aligned \ -Woverflow \ -Woverlength-strings \ -Woverloaded-shift-op-parentheses \ -Woverloaded-virtual \ -Woverriding-method-mismatch \ -Wpacked \ -Wparentheses \ -Wparentheses-equality \ -Wpedantic \ -Wpointer-arith \ -Wpointer-sign \ -Wpointer-to-int-cast \ -Wpointer-type-mismatch \ -Wpredefined-identifier-outside-function \ -Wprivate-extern \ -Wprotocol \ -Wprotocol-property-synthesis-ambiguity \ -Wreadonly-iboutlet-property \ -Wreceiver-expr \ -Wreceiver-forward-class \ -Wredundant-decls \ -Wreinterpret-base-class \ -Wreorder \ -Wrequires-super-attribute \ -Wreserved-user-defined-literal \ -Wreturn-stack-address \ -Wreturn-type \ -Wreturn-type-c-linkage \ -Wsection \ -Wselector \ -Wselector-type-mismatch \ -Wself-assign \ -Wself-assign-field \ -Wsemicolon-before-method-body \ -Wsentinel \ -Wsequence-point \ -Wserialized-diagnostics \ -Wshadow-ivar \ -Wshift-count-negative \ -Wshift-count-overflow \ -Wshift-op-parentheses \ -Wshift-overflow \ -Wshift-sign-overflow \ -Wshorten-64-to-32 \ -Wsign-compare \ -Wsign-conversion \ -Wsign-promo \ -Wsizeof-array-argument \ -Wsizeof-array-decay \ -Wsizeof-pointer-memaccess \ -Wsometimes-uninitialized \ -Wsource-uses-openmp \ # -Wstack-protector \ -Wstatic-float-init \ -Wstatic-in-inline \ -Wstatic-local-in-inline \ -Wstatic-self-init \ -Wstrict-aliasing \ -Wstrict-aliasing=0 \ -Wstrict-aliasing=1 \ -Wstrict-aliasing=2 \ -Wstrict-overflow \ -Wstrict-overflow=0 \ -Wstrict-overflow=1 \ -Wstrict-overflow=2 \ -Wstrict-overflow=3 \ -Wstrict-overflow=4 \ -Wstrict-overflow=5 \ -Wstrict-prototypes \ -Wstrict-selector-match \ -Wstring-compare \ -Wstring-conversion \ -Wstring-plus-int \ -Wstrlcpy-strlcat-size \ -Wstrncat-size \ -Wsuper-class-method-mismatch \ -Wswitch \ -Wswitch-default \ -Wsynth \ -Wtautological-compare \ -Wtautological-constant-out-of-range-compare \ -Wtentative-definition-incomplete-type \ -Wthread-safety \ -Wthread-safety-analysis \ -Wthread-safety-attributes \ -Wthread-safety-beta \ -Wthread-safety-precise \ -Wtrigraphs \ -Wtype-limits \ -Wtype-safety \ -Wtypedef-redefinition \ -Wtypename-missing \ -Wundeclared-selector \ -Wundef \ -Wundefined-inline \ -Wundefined-internal \ -Wundefined-reinterpret-cast \ -Wunicode \ -Wunicode-whitespace \ -Wuninitialized \ -Wunnamed-type-template-args \ -Wunneeded-internal-declaration \ -Wunneeded-member-function \ -Wunsequenced \ -Wunsupported-visibility \ -Wunused \ -Wunused-argument \ -Wunused-command-line-argument \ -Wunused-comparison \ -Wunused-exception-parameter \ -Wunused-function \ -Wunused-label \ -Wunused-member-function \ -Wunused-parameter \ -Wunused-private-field \ -Wunused-result \ -Wunused-value \ -Wunused-variable \ -Wunused-volatile-lvalue \ -Wuser-defined-literals \ -Wvarargs \ -Wvariadic-macros \ -Wvector-conversion \ -Wvector-conversions \ -Wvexing-parse \ -Wvisibility \ -Wvla \ -Wvla-extension \ -Wvolatile-register-var \ -Wweak-template-vtables \ # -Wweak-vtables \ -Wwrite-strings \ -Wzero-length-array \ -Qunused-arguments \ -fcolor-diagnostics \ -Wno-gnu-zero-variadic-macro-arguments \ -fms-extensions # Need for pragma message macx{ # Cannot suppress warnings from Qt headers CLANG_DEBUG_CXXFLAGS += \ -Wno-sign-conversion \ -Wno-duplicate-enum \ -Wno-shorten-64-to-32 \ -Wno-deprecated } CONFIG(release, debug|release){ CLANG_DEBUG_CXXFLAGS += -Wno-unknown-warning-option } ICC_DEBUG_CXXFLAGS += \ $$ISYSTEM \ # Ignore warnings Qt headers. -Wcomment \ -Weffc++ \ -Wextra-tokens \ -Wformat \ # -Winline \ -Wmain \ -Wmissing-declarations \ -Wmissing-prototypes \ -Wnon-virtual-dtor \ -Wp64 \ -Wpointer-arith \ -Wremarks \ -Wreturn-type \ -Wsign-compare \ -Wstrict-aliasing \ -Wstrict-prototypes \ -Wtrigraphs \ -Wuninitialized \ -Wno-unknown-pragmas \ -Wunused-variable \ -Wno-pch-messages \ -wd1418,2012,2015,2017,2022,2013 #disable warnings. Syntax example -wd1572,873,2259,2261 } else { # Don't use additional GCC and Clang keys on Windows system. # Can't find way mark ignore Qt header on Windows. GCC_DEBUG_CXXFLAGS += \ -O0 \ -Wall \ -Wno-pragmas \ -Wno-error=strict-overflow \ -Wextra \ -fno-omit-frame-pointer # Need for exchndl.dll win32:equals(QT_MAJOR_VERSION, 5):equals(QT_MINOR_VERSION, 6) { GCC_DEBUG_CXXFLAGS += \ -Wno-array-bounds # annoying warning } CLANG_DEBUG_CXXFLAGS += \ -O0 \ -Wall \ -Wextra \ -pedantic \ -Wno-gnu-zero-variadic-macro-arguments \ -fno-omit-frame-pointer \ # Need for exchndl.dll -fms-extensions # Need for pragma message MSVC_DEBUG_CXXFLAGS += \ -Wall \ -wd4061 \ # enum value is not *explicitly* handled in switch -wd4099 \ # first seen using 'struct' now seen using 'class' -wd4127 \ # conditional expression is constant -wd4217 \ # member template isn't copy constructor -wd4250 \ # inherits (implements) some member via dominance -wd4251 \ # needs to have dll-interface to be used by clients -wd4275 \ # exported class derived from non-exported class -wd4347 \ # "behavior change", function called instead of template -wd4355 \ # "'this': used in member initializer list -wd4505 \ # unreferenced function has been removed -wd4510 \ # default constructor could not be generated -wd4511 \ # copy constructor could not be generated -wd4512 \ # assignment operator could not be generated -wd4513 \ # destructor could not be generated -wd4514 \ # 'function' : unreferenced inline function has been removed -wd4610 \ # can never be instantiated user defined constructor required -wd4623 \ # default constructor could not be generated -wd4624 \ # destructor could not be generated -wd4625 \ # copy constructor could not be generated -wd4626 \ # assignment operator could not be generated -wd4640 \ # a local static object is not thread-safe -wd4661 \ # a member of the template class is not defined. -wd4670 \ # a base class of an exception class is inaccessible for catch -wd4672 \ # a base class of an exception class is ambiguous for catch -wd4673 \ # a base class of an exception class is inaccessible for catch -wd4675 \ # resolved overload was found by argument-dependent lookup -wd4702 \ # unreachable code, e.g. in header. -wd4710 \ # call was not inlined -wd4711 \ # call was inlined -wd4820 \ # some padding was added -wd4917 \ # a GUID can only be associated with a class, interface or namespace -wd4351 \ # elements of array 'array' will be default initialized # The following are real warnings but are generated by almost all MS headers, including # standard library headers, so it's impractical to leave them on. -wd4619 \ # there is no warning number 'XXXX' -wd4668 \ # XXX is not defined as a preprocessor macro -wd5045 \ # Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified # Because Microsoft doesn't provide a way to suppress warnings in headers we will suppress # all warnings we meet in headers globally -wd4548 \ -wd4350 \ -wd4242 \ -wd4265 \ -wd4599 \ -wd4371 \ -wd4718 \ -wd4946 \ -wd4868 \ # compiler may not enforce left-to-right evaluation order in braced initializer list -wd4866 \ # compiler may not enforce left-to-right evaluation order for call to 'C++17 operator' -wd4571 \ # catch(...) semantics changed since Visual C++ 7.1; structured exceptions (SEH) are no longer caught -wd5026 \ # move constructor was implicitly defined as deleted -wd5027 \ # move assignment operator was implicitly defined as deleted -wd5039 \ # pointer or reference to potentially throwing function passed to extern C function under -EHc. -wd4774 \ # format string expected in argument 3 is not a string literal -wd5204 \ # class has virtual functions, but its trivial destructor is not virtual; instances of objects derived # from this class may not be destructed correctly -wd5219 \ # implicit conversion from '' to '', possible loss of data -wd5243 # 'type-name': using incomplete class 'class-name' can cause potential one definition rule violation due # to ABI limitation }