1 |
dberkholz 08/07/03 05:30:54 |
2 |
|
3 |
Modified: flag-o-matic.eclass |
4 |
Log: |
5 |
[Fortran] Add Fortran support to filter-flags(), append-flags(), is-flagq(), strip-flags(), strip-unsupported-flags(), get-flag(). Add new functions parallel to existing ones for Fortran: append-fflags(), test-flag-F77(), test-flags-FC(). |
6 |
|
7 |
Revision Changes Path |
8 |
1.124 eclass/flag-o-matic.eclass |
9 |
|
10 |
file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/eclass/flag-o-matic.eclass?rev=1.124&view=markup |
11 |
plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/eclass/flag-o-matic.eclass?rev=1.124&content-type=text/plain |
12 |
diff : http://sources.gentoo.org/viewcvs.py/gentoo-x86/eclass/flag-o-matic.eclass?r1=1.123&r2=1.124 |
13 |
|
14 |
Index: flag-o-matic.eclass |
15 |
=================================================================== |
16 |
RCS file: /var/cvsroot/gentoo-x86/eclass/flag-o-matic.eclass,v |
17 |
retrieving revision 1.123 |
18 |
retrieving revision 1.124 |
19 |
diff -u -r1.123 -r1.124 |
20 |
--- flag-o-matic.eclass 7 Jun 2008 16:42:32 -0000 1.123 |
21 |
+++ flag-o-matic.eclass 3 Jul 2008 05:30:54 -0000 1.124 |
22 |
@@ -1,6 +1,6 @@ |
23 |
# Copyright 1999-2008 Gentoo Foundation |
24 |
# Distributed under the terms of the GNU General Public License v2 |
25 |
-# $Header: /var/cvsroot/gentoo-x86/eclass/flag-o-matic.eclass,v 1.123 2008/06/07 16:42:32 flameeyes Exp $ |
26 |
+# $Header: /var/cvsroot/gentoo-x86/eclass/flag-o-matic.eclass,v 1.124 2008/07/03 05:30:54 dberkholz Exp $ |
27 |
|
28 |
# @ECLASS: flag-o-matic.eclass |
29 |
# @MAINTAINER: |
30 |
@@ -26,7 +26,7 @@ |
31 |
# has_ssp |
32 |
|
33 |
|
34 |
-# C[XX]FLAGS that we allow in strip-flags |
35 |
+# {C,CXX,F,FC}FLAGS that we allow in strip-flags |
36 |
# Note: shell globs and character lists are allowed |
37 |
setup-allowed-flags() { |
38 |
if [[ -z ${ALLOWED_FLAGS} ]] ; then |
39 |
@@ -53,7 +53,7 @@ |
40 |
-mlive-g0 -mcmodel -mstack-bias -mno-stack-bias \ |
41 |
-msecure-plt -D*" |
42 |
|
43 |
- # C[XX]FLAGS that we are think is ok, but needs testing |
44 |
+ # {C,CXX,F,FC}FLAGS that we are think is ok, but needs testing |
45 |
# NOTE: currently -Os have issues with gcc3 and K6* arch's |
46 |
export UNSTABLE_FLAGS="-Os -O3 -freorder-blocks" |
47 |
return 0 |
48 |
@@ -104,12 +104,14 @@ |
49 |
# @FUNCTION: filter-flags |
50 |
# @USAGE: <flags> |
51 |
# @DESCRIPTION: |
52 |
-# Remove particular <flags> from {C,CPP,CXX}FLAGS. Accepts shell globs. |
53 |
+# Remove particular <flags> from {C,CPP,CXX,F,FC}FLAGS. Accepts shell globs. |
54 |
filter-flags() { |
55 |
_filter-hardened "$@" |
56 |
_filter-var CFLAGS "$@" |
57 |
_filter-var CPPFLAGS "$@" |
58 |
_filter-var CXXFLAGS "$@" |
59 |
+ _filter-var FFLAGS "$@" |
60 |
+ _filter-var FCFLAGS "$@" |
61 |
return 0 |
62 |
} |
63 |
|
64 |
@@ -131,6 +133,17 @@ |
65 |
return 0 |
66 |
} |
67 |
|
68 |
+# @FUNCTION: append-fflags |
69 |
+# @USAGE: <flags> |
70 |
+# @DESCRIPTION: |
71 |
+# Add extra <flags> to the current {F,FC}FLAGS. |
72 |
+append-fflags() { |
73 |
+ [[ -z $* ]] && return 0 |
74 |
+ export FFLAGS="${FFLAGS} $*" |
75 |
+ export FCFLAGS="${FCFLAGS} $*" |
76 |
+ return 0 |
77 |
+} |
78 |
+ |
79 |
# @FUNCTION: append-lfs-flags |
80 |
# @DESCRIPTION: |
81 |
# Add flags that enable Large File Support. |
82 |
@@ -142,11 +155,13 @@ |
83 |
# @FUNCTION: append-flags |
84 |
# @USAGE: <flags> |
85 |
# @DESCRIPTION: |
86 |
-# Add extra <flags> to your current C[XX]FLAGS. |
87 |
+# Add extra <flags> to your current {C,CXX,F,FC}FLAGS. |
88 |
append-flags() { |
89 |
[[ -z $* ]] && return 0 |
90 |
export CFLAGS="${CFLAGS} $*" |
91 |
export CXXFLAGS="${CXXFLAGS} $*" |
92 |
+ export FFLAGS="${FFLAGS} $*" |
93 |
+ export FCFLAGS="${FCFLAGS} $*" |
94 |
return 0 |
95 |
} |
96 |
|
97 |
@@ -162,7 +177,7 @@ |
98 |
local f fset |
99 |
declare -a new_CFLAGS new_CXXFLAGS |
100 |
|
101 |
- for fset in CFLAGS CXXFLAGS; do |
102 |
+ for fset in CFLAGS CXXFLAGS FFLAGS FCFLAGS; do |
103 |
# Looping over the flags instead of using a global |
104 |
# substitution ensures that we're working with flag atoms. |
105 |
# Otherwise globs like -O* have the potential to wipe out the |
106 |
@@ -207,16 +222,16 @@ |
107 |
# @FUNCTION: is-flagq |
108 |
# @USAGE: <flag> |
109 |
# @DESCRIPTION: |
110 |
-# Returns shell true if <flag> is in C[XX]FLAGS, else returns shell false. Accepts shell globs. |
111 |
+# Returns shell true if <flag> is in {C,CXX,F,FC}FLAGS, else returns shell false. Accepts shell globs. |
112 |
is-flagq() { |
113 |
[[ -n $2 ]] && die "Usage: is-flag <flag>" |
114 |
- _is_flagq CFLAGS $1 || _is_flagq CXXFLAGS $1 |
115 |
+ _is_flagq CFLAGS $1 || _is_flagq CXXFLAGS $1 || _is_flagq FFLAGS $1 || _is_flagq FCFLAGS $1 |
116 |
} |
117 |
|
118 |
# @FUNCTION: is-flag |
119 |
# @USAGE: <flag> |
120 |
# @DESCRIPTION: |
121 |
-# Echo's "true" if flag is set in C[XX]FLAGS. Accepts shell globs. |
122 |
+# Echo's "true" if flag is set in {C,CXX,F,FC}FLAGS. Accepts shell globs. |
123 |
is-flag() { |
124 |
is-flagq "$@" && echo true |
125 |
} |
126 |
@@ -276,12 +291,14 @@ |
127 |
# @DESCRIPTION: |
128 |
# Strip C[XX]FLAGS of everything except known good/safe flags. |
129 |
strip-flags() { |
130 |
- local x y flag NEW_CFLAGS NEW_CXXFLAGS |
131 |
+ local x y flag NEW_CFLAGS NEW_CXXFLAGS NEW_FFLAGS NEW_FCFLAGS |
132 |
|
133 |
setup-allowed-flags |
134 |
|
135 |
local NEW_CFLAGS="" |
136 |
local NEW_CXXFLAGS="" |
137 |
+ local NEW_FFLAGS="" |
138 |
+ local NEW_FCFLAGS="" |
139 |
|
140 |
# Allow unstable C[XX]FLAGS if we are using unstable profile ... |
141 |
if has ~$(tc-arch) ${ACCEPT_KEYWORDS} ; then |
142 |
@@ -310,6 +327,26 @@ |
143 |
done |
144 |
done |
145 |
|
146 |
+ for x in ${FFLAGS}; do |
147 |
+ for y in ${ALLOWED_FLAGS}; do |
148 |
+ flag=${x%%=*} |
149 |
+ if [ "${flag%%${y}}" = "" ] ; then |
150 |
+ NEW_FFLAGS="${NEW_FFLAGS} ${x}" |
151 |
+ break |
152 |
+ fi |
153 |
+ done |
154 |
+ done |
155 |
+ |
156 |
+ for x in ${FCFLAGS}; do |
157 |
+ for y in ${ALLOWED_FLAGS}; do |
158 |
+ flag=${x%%=*} |
159 |
+ if [ "${flag%%${y}}" = "" ] ; then |
160 |
+ NEW_FCFLAGS="${NEW_FCFLAGS} ${x}" |
161 |
+ break |
162 |
+ fi |
163 |
+ done |
164 |
+ done |
165 |
+ |
166 |
# In case we filtered out all optimization flags fallback to -O2 |
167 |
if [ "${CFLAGS/-O}" != "${CFLAGS}" -a "${NEW_CFLAGS/-O}" = "${NEW_CFLAGS}" ]; then |
168 |
NEW_CFLAGS="${NEW_CFLAGS} -O2" |
169 |
@@ -317,11 +354,19 @@ |
170 |
if [ "${CXXFLAGS/-O}" != "${CXXFLAGS}" -a "${NEW_CXXFLAGS/-O}" = "${NEW_CXXFLAGS}" ]; then |
171 |
NEW_CXXFLAGS="${NEW_CXXFLAGS} -O2" |
172 |
fi |
173 |
+ if [ "${FFLAGS/-O}" != "${FFLAGS}" -a "${NEW_FFLAGS/-O}" = "${NEW_FFLAGS}" ]; then |
174 |
+ NEW_FFLAGS="${NEW_FFLAGS} -O2" |
175 |
+ fi |
176 |
+ if [ "${FCFLAGS/-O}" != "${FCFLAGS}" -a "${NEW_FCFLAGS/-O}" = "${NEW_FCFLAGS}" ]; then |
177 |
+ NEW_FCFLAGS="${NEW_FCFLAGS} -O2" |
178 |
+ fi |
179 |
|
180 |
set +f # re-enable pathname expansion |
181 |
|
182 |
export CFLAGS="${NEW_CFLAGS}" |
183 |
export CXXFLAGS="${NEW_CXXFLAGS}" |
184 |
+ export FFLAGS="${NEW_FFLAGS}" |
185 |
+ export FCFLAGS="${NEW_FCFLAGS}" |
186 |
return 0 |
187 |
} |
188 |
|
189 |
@@ -349,6 +394,18 @@ |
190 |
# Returns shell true if <flag> is supported by the C++ compiler, else returns shell false. |
191 |
test-flag-CXX() { test-flag-PROG "CXX" "$1"; } |
192 |
|
193 |
+# @FUNCTION: test-flag-F77 |
194 |
+# @USAGE: <flag> |
195 |
+# @DESCRIPTION: |
196 |
+# Returns shell true if <flag> is supported by the Fortran 77 compiler, else returns shell false. |
197 |
+test-flag-F77() { test-flag-PROG "F77" "$1"; } |
198 |
+ |
199 |
+# @FUNCTION: test-flag-FC |
200 |
+# @USAGE: <flag> |
201 |
+# @DESCRIPTION: |
202 |
+# Returns shell true if <flag> is supported by the Fortran 90 compiler, else returns shell false. |
203 |
+test-flag-FC() { test-flag-PROG "FC" "$1"; } |
204 |
+ |
205 |
test-flags-PROG() { |
206 |
local comp=$1 |
207 |
local flags |
208 |
@@ -381,6 +438,18 @@ |
209 |
# Returns shell true if <flags> are supported by the C++ compiler, else returns shell false. |
210 |
test-flags-CXX() { test-flags-PROG "CXX" "$@"; } |
211 |
|
212 |
+# @FUNCTION: test-flags-F77 |
213 |
+# @USAGE: <flags> |
214 |
+# @DESCRIPTION: |
215 |
+# Returns shell true if <flags> are supported by the Fortran 77 compiler, else returns shell false. |
216 |
+test-flags-F77() { test-flags-PROG "F77" "$@"; } |
217 |
+ |
218 |
+# @FUNCTION: test-flags-FC |
219 |
+# @USAGE: <flags> |
220 |
+# @DESCRIPTION: |
221 |
+# Returns shell true if <flags> are supported by the Fortran 90 compiler, else returns shell false. |
222 |
+test-flags-FC() { test-flags-PROG "FC" "$@"; } |
223 |
+ |
224 |
# @FUNCTION: test-flags |
225 |
# @USAGE: <flags> |
226 |
# @DESCRIPTION: |
227 |
@@ -412,10 +481,12 @@ |
228 |
|
229 |
# @FUNCTION: strip-unsupported-flags |
230 |
# @DESCRIPTION: |
231 |
-# Strip C[XX]FLAGS of any flags not supported by the active toolchain. |
232 |
+# Strip {C,CXX,F,FC}FLAGS of any flags not supported by the active toolchain. |
233 |
strip-unsupported-flags() { |
234 |
export CFLAGS=$(test-flags-CC ${CFLAGS}) |
235 |
export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS}) |
236 |
+ export FFLAGS=$(test-flags-F77 ${FFLAGS}) |
237 |
+ export FCFLAGS=$(test-flags-FC ${FCFLAGS}) |
238 |
} |
239 |
|
240 |
# @FUNCTION: get-flag |
241 |
@@ -430,7 +501,7 @@ |
242 |
# for example, if CFLAGS="-march=i686": |
243 |
# `get-flag -march` == "-march=i686" |
244 |
# `get-flag march` == "i686" |
245 |
- for f in ${CFLAGS} ${CXXFLAGS} ; do |
246 |
+ for f in ${CFLAGS} ${CXXFLAGS} ${FFLAGS} ${FCFLAGS} ; do |
247 |
if [ "${f/${findflag}}" != "${f}" ] ; then |
248 |
printf "%s\n" "${f/-${findflag}=}" |
249 |
return 0 |
250 |
|
251 |
|
252 |
|
253 |
-- |
254 |
gentoo-commits@l.g.o mailing list |