13 hostos="$(uname -s | sed 's/\-.*//')"
17 # 1.1 Automatically detect, then check compiler
18 # 1.2 If no fortran compiler is detected, gfortran is default with NOFORTRAN definition
20 # 2.1 If path is correct, check compiler
21 # 2.2 If path is not correct, but still valid compiler name, force setting
22 # 2.2.2 Path is not correct, invalid compiler name, then gfortran is default with NOFORTRAN definition
34 # f77 is too ambiguous
35 [ "$compiler" = "f77" ] && compiler=''
37 path=`split "$PATH" ':'`
39 if [ -z "$compiler" ]; then
41 lists="gfortran g95 frt fort openf90 openf95
44 ppuf77 ppuf95 ppuf90 ppuxlf
46 pgf95 pgf90 pgf77 pgfortran nvfortran
50 for list in $lists; do
52 if [ -x "$p/$list" ]; then
61 if [ -z "$compiler" ]; then
70 data="$(command -v "$compiler_bin" >/dev/null 2>&1)"
73 data=`$compiler -O2 -S ftest.f > /dev/null 2>&1 && cat ftest.s && rm -f ftest.s`
74 if [ -z "$data" ]; then
75 data=`$compiler -O2 -S ftest.f > /dev/null 2>&1 && cat ftest.c && rm -f ftest.c`
78 case "$data" in *zhoge_*) bu=_ ;; esac
87 v="${data##*GCC: *\) }"
92 if [ "$major" -ge 4 ]; then
122 openmp='-xopenmp=parallel'
146 # for embedded underscore name, e.g. zho_ge, it may append 2 underscores.
147 data=`$compiler -O2 -S ftest3.f >/dev/null 2>&1 && cat ftest3.s && rm -f ftest3.s`
150 data=`$compiler -O2 -S ftest3.f >/dev/null 2>&1 && cat ftest3.c && rm -f ftest3.c`
153 case "$data" in *' zho_ge__'*) need2bu=1 ;; esac
154 case "$vendor" in *G95*) [ "$NO_LAPACKE" != 1 ] && need2bu='' ;; esac
157 if [ -z "$vendor" ]; then
199 *sunf77*|*sunf90*|*sunf95*)
202 openmp='-xopenmp=parallel'
224 if [ -z "$vendor" ]; then
235 data=`command -v $compiler_bin >/dev/null 2>&1`
240 [ "$USE_OPENMP" != 1 ] && openmp=''
245 link=`$compiler $openmp -m32 -v ftest2.f 2>&1 && rm -f a.out a.exe`
247 link=`$compiler $openmp -q32 -v ftest2.f 2>&1 && rm -f a.out a.exe`
250 link=`$compiler $openmp -maix32 -v ftest2.f 2>&1 && rm -f a.out a.exe`
253 mips_data=`$compiler_bin -E -dM - < /dev/null`
256 link=`$compiler $openmp -mabi=n32 -v ftest2.f 2>&1 && rm -f a.out a.exe`
259 link=`$compiler $openmp -mabi=32 -v ftest2.f 2>&1 && rm -f a.out a.exe`
268 link=`$compiler $openmp -m64 -v ftest2.f 2>&1 && rm -f a.out a.exe`
270 link=`$compiler $openmp -q64 -v ftest2.f 2>&1 && rm -f a.out a.exe`
273 link=`$compiler $openmp -maix64 -v ftest2.f 2>&1 && rm -f a.out a.exe`
276 link=`$compiler $openmp -mabi=64 -v ftest2.f 2>&1 && rm -f a.out a.exe`
279 link=`$compiler $openmp -dryrun ftest2.f 2>&1 && rm -f a.out a.exe`
286 if [ -z "$binary" ]; then
287 link=`$compiler $openmp -v ftest2.f 2>&1 && rm -f a.out a.exe`
291 if [ "$vendor" = "NAG" ]; then
292 link=`$compiler $openmp -dryrun ftest2.f 2>&1 && rm -f a.out a.exe`
298 if [ -n "$link" ]; then
300 link=`echo "$link" | sed 's/\-Y[[:space:]]P\,/\-Y/g'`
302 link=`echo "$link" | sed 's/\-R[[:space:]]*/\-rpath\%/g'`
304 link=`echo "$link" | sed 's/\-rpath[[:space:]]+/\-rpath\%/g'`
306 link=`echo "$link" | sed 's/\-rpath-link[[:space:]]+/\-rpath-link\%/g'`
308 flags=`echo "$link" | tr ',\n' ' '`
309 # remove leading and trailing quotes from each flag.
310 #@flags = map {s/^['"]|['"]$//g; $_} @flags;
312 for flag in $flags; do
316 *) linker_L="$linker_L $flag" ;;
321 [ "$hostos" = "SunOS" ] && continue
322 linker_L="$linker_L -Wl,$flag"
326 case "$flag" in --exclude-libs*)
327 linker_L="$linker_L -Wl,$flag"
332 case "$flag" in -rpath%*)
333 flag=`echo "$flag" | sed 's/\%/\,/g'`
334 linker_L="$linker_L -Wl,$flag"
337 case "$flag" in -rpath-link%*)
338 flag=`echo "$flag" | sed 's/\%/\,/g'`
339 linker_L="$linker_L -Wl,$flag"
343 case "$flag" in *-lgomp*)
344 case "$CC" in *clang*)
352 *ibrary*|*gfortranbegin*|*flangmain*|*frtbegin*|*pathfstart*|\
353 *crt[0-9]*|*gcc*|*user32*|*kernel32*|*advapi32*|*shell32*|\
358 *) linker_l="$linker_l $flag" ;;
362 if [ "$vendor" = "FUJITSU" ]; then
364 -lfj90*) linker_l="$linker_l $flag" ;;
369 *) linker_l="$linker_l $flag" ;;
373 case "$flag" in *quickfit.o*)
374 [ "$vendor" = "NAG" ] && linker_l="$linker_l $flag" ;;
377 case "$flag" in *safefit.o*)
378 [ "$vendor" = "NAG" ] && linker_l="$linker_l $flag" ;;
381 case "$flag" in *thsafe.o*)
382 [ "$vendor" = "NAG" ] && linker_l="$linker_l $flag" ;;
385 case "$flag" in *.a) linker_a="$linker_a $flag" ;; esac
389 if [ "$vendor" = "FLANG" ]; then
390 linker_a="$linker_a -lflang"
393 printf "F_COMPILER=%s\n" "$vendor" >> "$makefile"
394 printf "FC=%s\n" "$compiler" >> "$makefile"
395 [ -n "$bu" ] && printf 'BU=%s\n' "$bu" >> "$makefile"
396 [ "$nofortran" -eq 1 ] && printf 'NOFORTRAN=1\n' >> "$makefile"
398 [ -n "$bu" ] && printf '#define BUNDERSCORE\t%s\n' "$bu" >> "$config"
399 [ -n "$bu" ] && printf '#define NEEDBUNDERSCORE\t1\n' >> "$config"
400 [ -n "$need2bu" ] && printf "#define NEED2UNDERSCORES\t1\n" >> "$config"
402 [ -n "$need2bu" ] && printf "#define NEED2UNDERSCORES=1\n" >> "$config"
404 if [ -n "$linker_l" ] || [ -n "$linker_a" ]; then
405 printf "FEXTRALIB=%s %s %s\n" "$linker_L" "$linker_l" "$linker_a" >> "$makefile"