On śro, 2017-06-14 at 18:15 -0500, Matthias Maier wrote: > From: Arfrever Frehtes Taifersar Arahesis <arfre...@apache.org> > > Newly added tc-enables-pie(), tc-enables-ssp(), tc-enables-ssp-strong() > and tc-enables-ssp-all() check macros instead of specs. > This solution also works with older GCC and with Clang. > > Signed-off-by: Matthias Maier <tam...@gentoo.org> > --- > eclass/toolchain-funcs.eclass | 71 > +++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 71 insertions(+) > > diff --git a/eclass/toolchain-funcs.eclass b/eclass/toolchain-funcs.eclass > index a0c359a950..3658c40518 100644 > --- a/eclass/toolchain-funcs.eclass > +++ b/eclass/toolchain-funcs.eclass > @@ -792,6 +792,77 @@ gcc-specs-stack-check() { > } > > > +# @FUNCTION: tc-enables-pie > +# @RETURN: Truth if the current compiler generates position-independent code > (PIC) which can be linked into executables > +# @DESCRIPTION: > +# Return truth if the current compiler generates position-independent code > (PIC) > +# which can be linked into executables. > +tc-enables-pie() { > + $($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null > + #if defined(__PIE__) > + true > + #else > + false > + #endif > + EOF > + )
Looks quite horrible. Why can't you just compare the output against a value instead of randomly executing it? > +} > + > +# @FUNCTION: tc-enables-ssp > +# @RETURN: Truth if the current compiler enables stack smashing protection > (SSP) on at least minimal level > +# @DESCRIPTION: > +# Return truth if the current compiler enables stack smashing protection > (SSP) > +# on level corresponding to any of the following options: > +# -fstack-protector > +# -fstack-protector-strong > +# -fstack-protector-all > +tc-enables-ssp() { > + $($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null > + #if defined(__SSP__) || defined(__SSP_STRONG__) || > defined(__SSP_ALL__) > + true > + #else > + false > + #endif > + EOF > + ) > +} > + > +# @FUNCTION: tc-enables-ssp-strong > +# @RETURN: Truth if the current compiler enables stack smashing protection > (SSP) on at least middle level > +# @DESCRIPTION: > +# Return truth if the current compiler enables stack smashing protection > (SSP) > +# on level corresponding to any of the following options: > +# -fstack-protector-strong > +# -fstack-protector-all > +tc-enables-ssp-strong() { > + $($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null > + #if defined(__SSP_STRONG__) || defined(__SSP_ALL__) > + true > + #else > + false > + #endif > + EOF > + ) > +} > + > +# @FUNCTION: tc-enables-ssp-all > +# @RETURN: Truth if the current compiler enables stack smashing protection > (SSP) on maximal level > +# @DESCRIPTION: > +# Return truth if the current compiler enables stack smashing protection > (SSP) > +# on level corresponding to any of the following options: > +# -fstack-protector-all > +tc-enables-ssp-all() { > + $($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null > + #if defined(__SSP_ALL__) > + true > + #else > + false > + #endif > + EOF > + ) > +} > + > + > # @FUNCTION: gen_usr_ldscript > # @USAGE: [-a] <list of libs to create linker scripts for> > # @DESCRIPTION: -- Best regards, Michał Górny
signature.asc
Description: This is a digitally signed message part