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
48 ifort nagfor ifx ftn crayftn"
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
91 v="${data#*GCC: *\) }"
96 if [ "$major" -ge 4 ]; then
130 openmp='-xopenmp=parallel'
154 # for embedded underscore name, e.g. zho_ge, it may append 2 underscores.
155 data=`$compiler -O2 -S ftest3.f >/dev/null 2>&1 && cat ftest3.s && rm -f ftest3.s`
158 data=`$compiler -O2 -S ftest3.f >/dev/null 2>&1 && cat ftest3.c && rm -f ftest3.c`
161 case "$data" in *' zho_ge__'*) need2bu=1 ;; esac
162 case "$vendor" in *G95*) [ "$NO_LAPACKE" != 1 ] && need2bu='' ;; esac
165 if [ -z "$vendor" ]; then
207 *sunf77*|*sunf90*|*sunf95*)
210 openmp='-xopenmp=parallel'
232 if [ -z "$vendor" ]; then
243 data=`command -v $compiler_bin >/dev/null 2>&1`
248 [ "$USE_OPENMP" != 1 ] && openmp=''
253 link=`$compiler $openmp -m32 -v ftest2.f 2>&1 && rm -f a.out a.exe`
255 link=`$compiler $openmp -q32 -v ftest2.f 2>&1 && rm -f a.out a.exe`
258 link=`$compiler $openmp -maix32 -v ftest2.f 2>&1 && rm -f a.out a.exe`
261 mips_data=`$compiler_bin -E -dM - < /dev/null`
264 link=`$compiler $openmp -mabi=n32 -v ftest2.f 2>&1 && rm -f a.out a.exe`
267 link=`$compiler $openmp -mabi=32 -v ftest2.f 2>&1 && rm -f a.out a.exe`
276 link=`$compiler $openmp -m64 -v ftest2.f 2>&1 && rm -f a.out a.exe`
278 link=`$compiler $openmp -q64 -v ftest2.f 2>&1 && rm -f a.out a.exe`
281 link=`$compiler $openmp -maix64 -v ftest2.f 2>&1 && rm -f a.out a.exe`
284 link=`$compiler $openmp -mabi=64 -v ftest2.f 2>&1 && rm -f a.out a.exe`
287 link=`$compiler $openmp -dryrun ftest2.f 2>&1 && rm -f a.out a.exe`
294 if [ -z "$binary" ]; then
295 link=`$compiler $openmp -v ftest2.f 2>&1 && rm -f a.out a.exe`
299 if [ "$vendor" = "NAG" ]; then
300 link=`$compiler $openmp -dryrun ftest2.f 2>&1 && rm -f a.out a.exe`
302 if [ "$vendor" = "CRAY" ]; then
303 link=`$compiler $openmp -hnopattern ftest2.f 2>&1 && rm -f a.out a.exe`
309 if [ -n "$link" ]; then
311 link=`echo "$link" | sed 's/\-Y[[:space:]]P\,/\-Y/g'`
313 link=`echo "$link" | sed 's/\-R[[:space:]]*/\-rpath\%/g'`
315 link=`echo "$link" | sed 's/\-rpath[[:space:]]+/\-rpath\%/g'`
317 link=`echo "$link" | sed 's/\-rpath-link[[:space:]]+/\-rpath-link\%/g'`
319 flags=`echo "$link" | tr "',\n" " "`
320 # remove leading and trailing quotes from each flag.
321 #@flags = map {s/^['"]|['"]$//g; $_} @flags;
323 for flag in $flags; do
327 *) linker_L="$linker_L $flag" ;;
332 [ "$hostos" = "SunOS" ] && continue
333 linker_L="$linker_L -Wl,$flag"
337 case "$flag" in --exclude-libs*)
338 linker_L="$linker_L -Wl,$flag"
343 case "$flag" in -rpath%*)
344 flag=`echo "$flag" | sed 's/\%/\,/g'`
345 linker_L="$linker_L -Wl,$flag"
348 case "$flag" in -rpath-link%*)
349 flag=`echo "$flag" | sed 's/\%/\,/g'`
350 linker_L="$linker_L -Wl,$flag"
354 case "$flag" in *-lgomp*)
355 case "$CC" in *clang*)
363 *ibrary*|*gfortranbegin*|*flangmain*|*frtbegin*|*pathfstart*|\
364 *crt[0-9]*|*gcc*|*user32*|*kernel32*|*advapi32*|*shell32*|\
369 *) linker_l="$linker_l $flag" ;;
373 if [ "$vendor" = "FUJITSU" ]; then
375 -lfj90*) linker_l="$linker_l $flag" ;;
380 *) linker_l="$linker_l $flag" ;;
384 case "$flag" in *quickfit.o*)
385 [ "$vendor" = "NAG" ] && linker_l="$linker_l $flag" ;;
388 case "$flag" in *safefit.o*)
389 [ "$vendor" = "NAG" ] && linker_l="$linker_l $flag" ;;
392 case "$flag" in *thsafe.o*)
393 [ "$vendor" = "NAG" ] && linker_l="$linker_l $flag" ;;
396 case "$flag" in *.a) linker_a="$linker_a $flag" ;; esac
400 if [ "$vendor" = "FLANG" ]; then
401 linker_a="$linker_a -lflang"
404 printf "F_COMPILER=%s\n" "$vendor" >> "$makefile"
405 printf "FC=%s\n" "$compiler" >> "$makefile"
406 [ -n "$bu" ] && printf 'BU=%s\n' "$bu" >> "$makefile"
407 [ "$nofortran" -eq 1 ] && printf 'NOFORTRAN=1\n' >> "$makefile"
409 [ -n "$bu" ] && printf '#define BUNDERSCORE\t%s\n' "$bu" >> "$config"
410 [ -n "$bu" ] && printf '#define NEEDBUNDERSCORE\t1\n' >> "$config"
411 [ -n "$need2bu" ] && printf "#define NEED2UNDERSCORES\t1\n" >> "$config"
413 [ -n "$need2bu" ] && printf "#define NEED2UNDERSCORES=1\n" >> "$config"
415 if [ -n "$linker_l" ] || [ -n "$linker_a" ]; then
416 printf "FEXTRALIB=%s %s %s\n" "$linker_L" "$linker_l" "$linker_a" >> "$makefile"