#986206 qmake drops options passed from QMAKE_CXXFLAGS_RELEASE and QMAKE_CXXFLAGS_DEBUG

#986206#5
Date:
2021-03-31 15:30:17 UTC
From:
To:
seen when building guymager, adding to the rules file:

export DEB_CXXFLAGS_MAINT_APPEND = --param ggc-min-expand=0 --param
ggc-min-heapsize=0


The generated Makefile isn't correctly generated. The "# Command" line shows the
passed args, which are correct, however the "^CXXFLAGS" line shows that the
flags are expanded twice, and the first time, the second --param option is
omitted, but not the parameter following that option.

Feel free to reassign to guymager and lowering the severity, if that is not a
generic qmake issue.


$ fgrep -- --param Makefile
# Command: /usr/lib/qt5/bin/qmake -o Makefile guymager.pro
'QMAKE_CFLAGS_RELEASE=-g -O2 -ffile-prefix-map=/packages/tmp/guymager-0.8.12=.
-fstack-protector-strong -Wformat -Werror=format-security -Wdate-time
-D_FORTIFY_SOURCE=2' 'QMAKE_CFLAGS_DEBUG=-g -O2
-ffile-prefix-map=/packages/tmp/guymager-0.8.12=. -fstack-protector-strong
-Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2'
'QMAKE_CXXFLAGS_RELEASE=-g -O2 -ffile-prefix-map=/packages/tmp/guymager-0.8.12=.
-fstack-protector-strong -Wformat -Werror=format-security --param
ggc-min-expand=0 --param ggc-min-heapsize=0 -Wdate-time -D_FORTIFY_SOURCE=2'
'QMAKE_CXXFLAGS_DEBUG=-g -O2 -ffile-prefix-map=/packages/tmp/guymager-0.8.12=.
-fstack-protector-strong -Wformat -Werror=format-security --param
ggc-min-expand=0 --param ggc-min-heapsize=0 -Wdate-time -D_FORTIFY_SOURCE=2'
QMAKE_LFLAGS_RELEASE=-Wl,-z,relro QMAKE_LFLAGS_DEBUG=-Wl,-z,relro QMAKE_STRIP=:
PREFIX=/usr 'DEFINES+=SPLASH_DIR=\'\''\"/usr/share/guymager\"\'\''
LANGUAGE_DIR=\'\''\"/usr/share/guymager\"\'\''
LANGUAGE_DIR_QT=\'\''\"/usr/share/qt5/translations\"\'\'''
CXXFLAGS      = -pipe -g -O2 -ffile-prefix-map=/packages/tmp/guymager-0.8.12=.
-fstack-protector-strong -Wformat -Werror=format-security --param
ggc-min-expand=0 ggc-min-heapsize=0 -fmessage-length=0 -fno-strict-aliasing
-flto -g -ffile-prefix-map=/packages/tmp/guymager-0.8.12=.
-fstack-protector-strong -Wformat -Werror=format-security --param
ggc-min-expand=0 --param ggc-min-heapsize=0 -Wdate-time -D_FORTIFY_SOURCE=2 -O3
-ggdb -std=gnu++1y -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES)
        $(QMAKE) -o Makefile guymager.pro 'QMAKE_CFLAGS_RELEASE=-g -O2
-ffile-prefix-map=/packages/tmp/guymager-0.8.12=. -fstack-protector-strong
-Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2'
'QMAKE_CFLAGS_DEBUG=-g -O2 -ffile-prefix-map=/packages/tmp/guymager-0.8.12=.
-fstack-protector-strong -Wformat -Werror=format-security -Wdate-time
-D_FORTIFY_SOURCE=2' 'QMAKE_CXXFLAGS_RELEASE=-g -O2
-ffile-prefix-map=/packages/tmp/guymager-0.8.12=. -fstack-protector-strong
-Wformat -Werror=format-security --param ggc-min-expand=0 --param
ggc-min-heapsize=0 -Wdate-time -D_FORTIFY_SOURCE=2' 'QMAKE_CXXFLAGS_DEBUG=-g -O2
-ffile-prefix-map=/packages/tmp/guymager-0.8.12=. -fstack-protector-strong
-Wformat -Werror=format-security --param ggc-min-expand=0 --param
ggc-min-heapsize=0 -Wdate-time -D_FORTIFY_SOURCE=2'
QMAKE_LFLAGS_RELEASE=-Wl,-z,relro QMAKE_LFLAGS_DEBUG=-Wl,-z,relro QMAKE_STRIP=:
PREFIX=/usr 'DEFINES+=SPLASH_DIR=\'\''\"/usr/share/guymager\"\'\''
LANGUAGE_DIR=\'\''\"/usr/share/guymager\"\'\''
LANGUAGE_DIR_QT=\'\''\"/usr/share/qt5/translations\"\'\'''
        @$(QMAKE) -o Makefile guymager.pro 'QMAKE_CFLAGS_RELEASE=-g -O2
-ffile-prefix-map=/packages/tmp/guymager-0.8.12=. -fstack-protector-strong
-Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2'
'QMAKE_CFLAGS_DEBUG=-g -O2 -ffile-prefix-map=/packages/tmp/guymager-0.8.12=.
-fstack-protector-strong -Wformat -Werror=format-security -Wdate-time
-D_FORTIFY_SOURCE=2' 'QMAKE_CXXFLAGS_RELEASE=-g -O2
-ffile-prefix-map=/packages/tmp/guymager-0.8.12=. -fstack-protector-strong
-Wformat -Werror=format-security --param ggc-min-expand=0 --param
ggc-min-heapsize=0 -Wdate-time -D_FORTIFY_SOURCE=2' 'QMAKE_CXXFLAGS_DEBUG=-g -O2
-ffile-prefix-map=/packages/tmp/guymager-0.8.12=. -fstack-protector-strong
-Wformat -Werror=format-security --param ggc-min-expand=0 --param
ggc-min-heapsize=0 -Wdate-time -D_FORTIFY_SOURCE=2'
QMAKE_LFLAGS_RELEASE=-Wl,-z,relro QMAKE_LFLAGS_DEBUG=-Wl,-z,relro QMAKE_STRIP=:
PREFIX=/usr 'DEFINES+=SPLASH_DIR=\'\''\"/usr/share/guymager\"\'\''
LANGUAGE_DIR=\'\''\"/usr/share/guymager\"\'\''
LANGUAGE_DIR_QT=\'\''\"/usr/share/qt5/translations\"\'\'''
        g++ -pipe -g -O2 -ffile-prefix-map=/packages/tmp/guymager-0.8.12=.
-fstack-protector-strong -Wformat -Werror=format-security --param
ggc-min-expand=0 ggc-min-heapsize=0 -fmessage-length=0 -fno-strict-aliasing
-flto -g -ffile-prefix-map=/packages/tmp/guymager-0.8.12=.
-fstack-protector-strong -Wformat -Werror=format-security --param
ggc-min-expand=0 --param ggc-min-heapsize=0 -Wdate-time -D_FORTIFY_SOURCE=2 -O3
-ggdb -std=gnu++1y -Wall -Wextra -dM -E -o moc/moc_predefs.h
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp

#986206#10
Date:
2021-03-31 16:56:04 UTC
From:
To:
Hi Matthias!

This happens because guymager.pro line 150 has this:

  QMAKE_CXXFLAGS *= $$system(dpkg-buildflags --get CXXFLAGS)

The *= operator is for adding unique values (as opposed to +=). The --param
flag appears twice, so it keeps only the first instance:

https://doc.qt.io/qt-5/qmake-language.html#adding-unique-values

You can use --param=ggc-min-expand=0 --param=ggc-min-heapsize=0, then there
will be no such problem.

Also there is no need at all to call dpkg-buildflags from the .pro file.
debhelper passes all needed flags via command line arguments.

Dear guymager maintainer(s): please consider removing lines 150 and 151 from
guymager.pro, or at least replacing *= with +=.