From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id C3F56138334 for ; Wed, 25 Dec 2019 10:45:47 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id E5D56E0AE3; Wed, 25 Dec 2019 10:45:43 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 62948E0AD9 for ; Wed, 25 Dec 2019 10:45:43 +0000 (UTC) Received: from sf (tunnel547699-pt.tunnel.tserv1.lon2.ipv6.he.net [IPv6:2001:470:1f1c:3e6::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: slyfox) by smtp.gentoo.org (Postfix) with ESMTPSA id B37B634DB3B for ; Wed, 25 Dec 2019 10:45:41 +0000 (UTC) Date: Wed, 25 Dec 2019 10:45:38 +0000 From: Sergei Trofimovich To: gentoo-dev@lists.gentoo.org Subject: [gentoo-dev] Re: [PATCH] flag-o-matic.eclass: add LDFLAGS testing against linker Message-ID: <20191225104538.6f2b536c@sf> In-Reply-To: <20191223115043.3160866-2-slyfox@gentoo.org> References: <20191223115043.3160866-1-slyfox@gentoo.org> <20191223115043.3160866-2-slyfox@gentoo.org> X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; x86_64-pc-linux-gnu) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Archives-Salt: f82d4d8a-5ec5-47c9-a878-5f742c05ed28 X-Archives-Hash: f1655021dbea26e8077fd47ce664a847 On Mon, 23 Dec 2019 11:50:43 +0000 Sergei Trofimovich wrote: > Before the change we tested only compiler driver (gcc flag parser) > for LDFLAGS. > > This does not cover cases when we would really like to filter out > unsupported linker flags like -Wl,--hash-style=gnu passed to non-ELF > targets. > > The change adds test-flag-CCLD() helper to perform all of assembly, > compilation and linking steps. Helper is used to filter LDFLAGS variable > in strip-unsupported-flags(). > > Closes: https://bugs.gentoo.org/333763 > Signed-off-by: Sergei Trofimovich > --- Pushed as: https://gitweb.gentoo.org/repo/gentoo.git/commit/eclass?id=28d6437fc7009002f98f28e8900e994109927726 > eclass/flag-o-matic.eclass | 72 +++++++++++++++++++++++++++++------- > eclass/tests/flag-o-matic.sh | 2 +- > 2 files changed, 59 insertions(+), 15 deletions(-) > > diff --git a/eclass/flag-o-matic.eclass b/eclass/flag-o-matic.eclass > index f882b09d621..0aec22c83f2 100644 > --- a/eclass/flag-o-matic.eclass > +++ b/eclass/flag-o-matic.eclass > @@ -441,29 +441,63 @@ test-flag-PROG() { > # 'type' needs a binary name > type -p ${comp[0]} >/dev/null || return 1 > > + # Set up test file. > + local in_src in_ext cmdline_extra=() > + case "${lang}" in > + # compiler/assembler only > + c) > + in_ext='.c' > + in_src='int main(void) { return 0; }' > + cmdline_extra+=(-xc -c) > + ;; > + c++) > + in_ext='.cc' > + in_src='int main(void) { return 0; }' > + cmdline_extra+=(-xc++ -c) > + ;; > + f77) > + in_ext='.f' > + # fixed source form > + in_src=' end' > + cmdline_extra+=(-xf77 -c) > + ;; > + f95) > + in_ext='.f90' > + in_src='end' > + cmdline_extra+=(-xf95 -c) > + ;; > + > + # C compiler/assembler/linker > + c+ld) > + in_ext='.c' > + in_src='int main(void) { return 0; }' > + cmdline_extra+=(-xc) > + ;; > + esac > + local test_in=${T}/test-flag-${comp}.${lang} > + local test_out=${T}/test-flag-${comp}.exe > + > + printf "%s\n" "${in_src}" > "${test_in}" || return 1 > + > local cmdline=( > "${comp[@]}" > # Clang will warn about unknown gcc flags but exit 0. > # Need -Werror to force it to exit non-zero. > -Werror > - # Use -c so we can test the assembler as well. > - -c -o /dev/null > + "$@" > + # -x options need to go before first source file > + "${cmdline_extra[@]}" > + > + "${test_in}" -o "${test_out}" > ) > - if "${cmdline[@]}" -x${lang} - /dev/null ; then > - cmdline+=( "$@" -x${lang} - ) > - else > - # XXX: what's the purpose of this? does it even work with > - # any compiler? > - cmdline+=( "$@" -c -o /dev/null /dev/null ) > - fi > > - if ! "${cmdline[@]}" /dev/null; then > + if ! "${cmdline[@]}" &>/dev/null; then > # -Werror makes clang bail out on unused arguments as well; > # try to add -Qunused-arguments to work-around that > # other compilers don't support it but then, it's failure like > # any other > cmdline+=( -Qunused-arguments ) > - "${cmdline[@]}" /dev/null > + "${cmdline[@]}" &>/dev/null > fi > } > > @@ -491,6 +525,12 @@ test-flag-F77() { test-flag-PROG "F77" f77 "$@"; } > # Returns shell true if is supported by the Fortran 90 compiler, else returns shell false. > test-flag-FC() { test-flag-PROG "FC" f95 "$@"; } > > +# @FUNCTION: test-flag-CCLD > +# @USAGE: > +# @DESCRIPTION: > +# Returns shell true if is supported by the C compiler and linker, else returns shell false. > +test-flag-CCLD() { test-flag-PROG "CC" c+ld "$@"; } > + > test-flags-PROG() { > local comp=$1 > local flags=() > @@ -548,6 +588,12 @@ test-flags-F77() { test-flags-PROG "F77" "$@"; } > # Returns shell true if are supported by the Fortran 90 compiler, else returns shell false. > test-flags-FC() { test-flags-PROG "FC" "$@"; } > > +# @FUNCTION: test-flags-CCLD > +# @USAGE: > +# @DESCRIPTION: > +# Returns shell true if are supported by the C compiler and default linker, else returns shell false. > +test-flags-CCLD() { test-flags-PROG "CCLD" "$@"; } > + > # @FUNCTION: test-flags > # @USAGE: > # @DESCRIPTION: > @@ -576,9 +622,7 @@ strip-unsupported-flags() { > export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS}) > export FFLAGS=$(test-flags-F77 ${FFLAGS}) > export FCFLAGS=$(test-flags-FC ${FCFLAGS}) > - # note: this does not verify the linker flags but it is enough > - # to strip invalid C flags which are much more likely, #621274 > - export LDFLAGS=$(test-flags-CC ${LDFLAGS}) > + export LDFLAGS=$(test-flags-CCLD ${LDFLAGS}) > } > > # @FUNCTION: get-flag > diff --git a/eclass/tests/flag-o-matic.sh b/eclass/tests/flag-o-matic.sh > index 7c078499d70..90eaf3a6ffb 100755 > --- a/eclass/tests/flag-o-matic.sh > +++ b/eclass/tests/flag-o-matic.sh > @@ -8,7 +8,7 @@ inherit flag-o-matic > > CFLAGS="-a -b -c=1 --param l1-cache-size=32" > CXXFLAGS="-x -y -z=2" > -LDFLAGS="-l -m -n=3" > +LDFLAGS="-l -m -n=3 -Wl,--remove-me" > ftend() { > local ret=$? > local msg="Failed; flags are:" > -- > 2.24.1 > -- Sergei