| 1 | # Copyright 1999-2008 Gentoo Foundation |
1 | # Copyright 1999-2009 Gentoo Foundation |
| 2 | # Distributed under the terms of the GNU General Public License v2 |
2 | # Distributed under the terms of the GNU General Public License v2 |
| 3 | # $Header: /var/cvsroot/gentoo-x86/eclass/flag-o-matic.eclass,v 1.127 2008/12/21 21:40:49 solar Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/flag-o-matic.eclass,v 1.132 2009/01/21 00:42:20 gengor Exp $ |
| 4 | |
4 | |
| 5 | # @ECLASS: flag-o-matic.eclass |
5 | # @ECLASS: flag-o-matic.eclass |
| 6 | # @MAINTAINER: |
6 | # @MAINTAINER: |
| 7 | # toolchain@gentoo.org |
7 | # toolchain@gentoo.org |
| 8 | # @BLURB: common functions to manipulate and query toolchain flags |
8 | # @BLURB: common functions to manipulate and query toolchain flags |
| … | |
… | |
| 71 | -fPIC|-fpic|-fPIE|-fpie|-Wl,pie|-pie) |
71 | -fPIC|-fpic|-fPIE|-fpie|-Wl,pie|-pie) |
| 72 | gcc-specs-pie || continue |
72 | gcc-specs-pie || continue |
| 73 | is-flagq -nopie || append-flags -nopie;; |
73 | is-flagq -nopie || append-flags -nopie;; |
| 74 | -fstack-protector) |
74 | -fstack-protector) |
| 75 | gcc-specs-ssp || continue |
75 | gcc-specs-ssp || continue |
| 76 | is-flagq -fno-stack-protector || append-flags -fno-stack-protector;; |
76 | is-flagq -fno-stack-protector || append-flags $(test-flags -fno-stack-protector);; |
| 77 | -fstack-protector-all) |
77 | -fstack-protector-all) |
| 78 | gcc-specs-ssp-to-all || continue |
78 | gcc-specs-ssp-to-all || continue |
| 79 | is-flagq -fno-stack-protector-all || append-flags -fno-stack-protector-all;; |
79 | is-flagq -fno-stack-protector-all || append-flags $(test-flags -fno-stack-protector-all);; |
|
|
80 | -fno-strict-overflow) |
|
|
81 | gcc-specs-nostrict || continue |
|
|
82 | is-flagq -fstrict-overflow || append-flags $(test-flags -fstrict-overflow);; |
| 80 | esac |
83 | esac |
| 81 | done |
84 | done |
| 82 | } |
85 | } |
| 83 | |
86 | |
| 84 | # Remove occurrences of strings from variable given in $1 |
87 | # Remove occurrences of strings from variable given in $1 |
| … | |
… | |
| 128 | # @DESCRIPTION: |
131 | # @DESCRIPTION: |
| 129 | # Add extra <flags> to the current CPPFLAGS. |
132 | # Add extra <flags> to the current CPPFLAGS. |
| 130 | append-cppflags() { |
133 | append-cppflags() { |
| 131 | [[ -z $* ]] && return 0 |
134 | [[ -z $* ]] && return 0 |
| 132 | export CPPFLAGS="${CPPFLAGS} $*" |
135 | export CPPFLAGS="${CPPFLAGS} $*" |
|
|
136 | return 0 |
|
|
137 | } |
|
|
138 | |
|
|
139 | # @FUNCTION: append-cxxflags |
|
|
140 | # @USAGE: <flags> |
|
|
141 | # @DESCRIPTION: |
|
|
142 | # Add extra <flags> to the current CXXFLAGS. |
|
|
143 | append-cxxflags() { |
|
|
144 | [[ -z $* ]] && return 0 |
|
|
145 | export CXXFLAGS="${CXXFLAGS} $*" |
| 133 | return 0 |
146 | return 0 |
| 134 | } |
147 | } |
| 135 | |
148 | |
| 136 | # @FUNCTION: append-fflags |
149 | # @FUNCTION: append-fflags |
| 137 | # @USAGE: <flags> |
150 | # @USAGE: <flags> |
| … | |
… | |
| 553 | ewarn "has_ssp_all: deprecated, please use gcc-specs-ssp()!" >&2 |
566 | ewarn "has_ssp_all: deprecated, please use gcc-specs-ssp()!" >&2 |
| 554 | |
567 | |
| 555 | # note; this matches only -fstack-protector-all |
568 | # note; this matches only -fstack-protector-all |
| 556 | [[ ${CFLAGS/-fstack-protector-all} != ${CFLAGS} || \ |
569 | [[ ${CFLAGS/-fstack-protector-all} != ${CFLAGS} || \ |
| 557 | -n $(echo | $(tc-getCC) ${CFLAGS} -E -dM - | grep __SSP_ALL__) ]] || \ |
570 | -n $(echo | $(tc-getCC) ${CFLAGS} -E -dM - | grep __SSP_ALL__) ]] || \ |
| 558 | gcc-specs-ssp-all |
571 | gcc-specs-ssp-to-all |
| 559 | } |
572 | } |
| 560 | |
573 | |
| 561 | # @FUNCTION: has_ssp |
574 | # @FUNCTION: has_ssp |
| 562 | # @DESCRIPTION: |
575 | # @DESCRIPTION: |
| 563 | # DEPRECATED - use gcc-specs-ssp from toolchain-funcs |
576 | # DEPRECATED - use gcc-specs-ssp from toolchain-funcs |
| … | |
… | |
| 689 | # @FUNCTION: bindnow-flags |
702 | # @FUNCTION: bindnow-flags |
| 690 | # @RETURN: Returns the flags to enable "now" binding in the current selected linker. |
703 | # @RETURN: Returns the flags to enable "now" binding in the current selected linker. |
| 691 | # @DESCRIPTION: |
704 | # @DESCRIPTION: |
| 692 | # DEPRECATED - Gets the flags needed for "NOW" binding |
705 | # DEPRECATED - Gets the flags needed for "NOW" binding |
| 693 | bindnow-flags() { |
706 | bindnow-flags() { |
| 694 | ewarn "QA: stop using the bindnow-flags function ... simply drop it from your ebuild" >&2 |
707 | ewarn "QA: stop using the bindnow-flags function ... simply drop it from your ebuild" |
| 695 | |
|
|
| 696 | case $($(tc-getLD) -v 2>&1 </dev/null) in |
|
|
| 697 | *GNU* | *'with BFD'*) # GNU ld |
|
|
| 698 | echo "-Wl,-z,now" ;; |
|
|
| 699 | *Apple*) # Darwin ld |
|
|
| 700 | echo "-bind_at_load" ;; |
|
|
| 701 | *) |
|
|
| 702 | # Some linkers just recognize -V instead of -v |
|
|
| 703 | case $($(tc-getLD) -V 2>&1 </dev/null) in |
|
|
| 704 | *Solaris*) # Solaris accept almost the same GNU options |
|
|
| 705 | echo "-Wl,-z,now" ;; |
|
|
| 706 | esac |
|
|
| 707 | ;; |
|
|
| 708 | esac |
|
|
| 709 | } |
708 | } |
| 710 | |
709 | |
| 711 | |
710 | |
| 712 | # Some tests for when we screw with things and want to make |
711 | # Some tests for when we screw with things and want to make |
| 713 | # sure we didn't break anything |
712 | # sure we didn't break anything |