Merge remote-tracking branch 'origin/release-v4.5.2'
[WRF.git] / configure
blob41243e2813761e966ea51fb37f5772b586b7a1b4
1 #!/bin/sh
3 # parse argument list
5 thiscmd=$0
7 FORTRAN_COMPILER_TIMER=""
8 opt_level="-f"
9 rword="-r4"
10 print_usage=""
11 chemistry=""
12 wrf_core=""
13 config_line="$0 "
14 while [ $# -ge 1 ]; do
15 config_line="$config_line $1"
16 case $1 in
17 -d) opt_level="-d" ;;
18 -D) opt_level="-D" ;;
19 -s) opt_level="-s" ;;
20 -f) opt_level="-f" ;;
21 -h) print_usage="yes" ;;
22 -help) print_usage="yes" ;;
23 -os) shift ; WRF_OS=$1 ;;
24 -mach) shift ; WRF_MACH=$1 ;;
25 -r8) rword="-r8" ;;
26 -time) shift ; FORTRAN_COMPILER_TIMER=$1 ;;
27 chem) WRF_CHEM=1 ;;
28 cmaq) WRF_CMAQ=1 ;;
29 kpp) WRF_KPP=1 ;;
30 radardfi) WRF_DFI_RADAR=1 ;;
31 wrfda) wrf_core=DA_CORE ;;
32 4dvar) wrf_core=4D_DA_CORE ;;
33 arw) wrf_core=EM_CORE ;;
34 coamps) wrf_core=COAMPS_CORE ;;
35 titan) WRF_TITAN=1 ; break ;;
36 mars) WRF_MARS=1 ; break ;;
37 venus) WRF_VENUS=1 ; break ;;
38 wrfplus) wrf_core=WRF_PLUS_CORE ; break ;;
39 *) echo "This option is not recognized: $1" ; exit 2 ;;
40 esac
41 shift
42 done
43 if [ -n "$print_usage" ] ; then
44 echo ' '
45 echo '*****************************************************************************'
46 echo usage: $thiscmd '[-d|-D|-s|-f|-os os|-mach mach|-time timecommand] [chem] [kpp]'
47 echo '-d build with debugging information and no optimization'
48 echo '-D build with -d AND floating traps, traceback, uninitialized variables'
49 echo '-r8 build with 8 byte reals'
50 echo '-help print this message'
51 echo '*****************************************************************************'
52 echo ' '
53 exit
56 if `pwd | grep ' ' > /dev/null ` ; then
57 echo '************************** W A R N I N G ************************************'
58 echo The current working directory has spaces in some components of its path name
59 echo and this may cause problems for your build. This can occur, for example, on
60 echo Windows systems. It is strongly recommended that you install WRF and other
61 echo related software such as NetCDF in directories whose path names contain no
62 echo white space. On Win, for example, create and install in a directory under C:.
63 echo '*****************************************************************************'
67 # lifted from the configure file for mpich; 00/03/10 jm
69 # Check for perl and perl version
70 for p in perl5 perl
72 # Extract the first word of "$p", so it can be a program name with args.
73 set dummy $p; ac_word=$2
74 if test -z "$ac_echo_n" ; then
75 ac_echo_n=yes
76 if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
77 # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
78 if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
79 ac_n= ac_c='
80 ' ac_t=' '
81 else
82 ac_n=-n ac_c= ac_t=
84 else
85 ac_n= ac_c='\c' ac_t=
87 ac_echo_test=`echo foo 1>&1`
88 if test -z "$ac_echo_test" ; then
89 print_error "Your sh shell does not handle the output redirection"
90 print_error "1>&1 correctly. Configure will work around this problem,"
91 print_error "but you should report the problem to your vendor."
94 if test -z "$ac_echo_test" -a 1 = 1 ; then
95 echo $ac_n "checking for $ac_word""... $ac_c"
96 else
97 echo $ac_n "checking for $ac_word""... $ac_c" 1>&1
99 ac_prog_where=""
100 if test -n "$PERL"; then
101 ac_pg_PERL="$PERL" # Let the user override the test.
102 else
103 ac_first_char=`expr "$p" : "\(.\)"`
104 if test "$ac_first_char" = "/" -a -x "$p" ; then
105 ac_pg_PERL="$p"
106 ac_prog_where=$p
107 else
108 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
109 for ac_dir in $PATH; do
110 test -z "$ac_dir" && ac_dir=.
111 if test -f $ac_dir/$ac_word; then
112 ac_pg_PERL="$p"
113 ac_prog_where=$ac_dir/$ac_word
114 break
116 done
117 IFS="$ac_save_ifs"
119 fi;PERL="$ac_pg_PERL"
120 if test -n "$ac_prog_where" ; then
121 if test -z "$ac_echo_test" -a 1 = 1 ; then
122 echo "$ac_t""found $ac_prog_where ($PERL)"
123 else
124 echo "$ac_t""found $ac_prog_where ($PERL)" 1>&1
126 PERLFULLPATH=$ac_prog_where
127 else
128 if test -z "$ac_echo_test" -a 1 = 1 ; then
129 echo "$ac_t""no"
130 else
131 echo "$ac_t""no" 1>&1
134 test -n "$PERL" && break
135 done
137 if test -z "$PERL" ; then
138 # We have to set this outside of the loop lest the first failure in
139 # PROGRAM_CHECK set the value (which then terminates the effect of the
140 # loop, since autoconf macros only set values that are null, they
141 # don't override them
142 PERL=""
145 if test -n "$PERL" ; then
146 PERL="$PERL"
148 perlversion=`$PERL -v | grep 'This is perl' | \
149 sed -e 's/^.*v[a-z ]*\([0-9]\).*$/\1/'`
151 # Should do a test first for ch_p4 etc.
152 if test "$perlversion" -lt 5 ; then
153 echo "WRF build requires perl version 5, which configure did not find."
154 echo "You can set the environment variable PERL to contain the "
155 echo "location of perl version 5."
156 echo "Configure believes that $PERL is version $perlversion ."
157 PERL=""
162 # We just need to find nc-config. First, check if NETCDF_C is set; if not, check
163 # $NETCDF/bin; otherwise, try `which nc-config`. If all that fails, warn user that WRF
164 # may fail to build beacuse of an incomplete NetCDF configuration. It could still be
165 # successfull if NetCDF was built statically because the results of `nf-config --flibs`
166 # should contain the necessary information for linking as long as NetCDF-Fortran is not
167 # version 4.5.3 (see https://github.com/Unidata/netcdf-fortran/issues/270)
169 if [ -n "$NETCDF_C" ] ; then
170 if [ -f "$NETCDF_C/bin/nc-config" ] ; then
171 export NETCDF_C=$NETCDF_C
173 elif [ -f "${NETCDF}/bin/nc-config" ] ; then
174 export NETCDF_C=$NETCDF
175 else
176 ans="`which nc-config`"
177 status="$?"
178 if [ "$ans" != "nc-config:" -a "$ans" != "" -a "$status" = "0" ] ; then
179 export NETCDF_C=`echo $ans | awk -F/ '{NF=NF-2;$NF=$NF}1' OFS=/`
180 else
181 export NETCDF_C="NOT_FOUND"
185 if [ -e $NETCDF_C/bin/nc-config ] ; then
186 ncversion=`$NETCDF_C/bin/nc-config --version | awk '{print $2}'`
187 else
188 ncversion=OLD
191 PROBS=FALSE
192 if [ -n "$NETCDFPAR" ] ; then
193 NETCDF="$NETCDFPAR"
194 if [ ! -e $NETCDF_C/bin/nc-config ] ; then
195 PROBS=TRUE
196 else
197 ncversion=`$NETCDF_C/bin/nc-config --version | awk '{print $2}'`
198 ncversiona=`echo $ncversion | cut -c 1`
199 ncversionb=`echo $ncversion | cut -c 3`
200 ncversionc=`echo $ncversion | cut -c 5`
201 ncversiona=`expr $ncversiona \* 100`
202 ncversionb=`expr $ncversionb \* 10`
203 ncversionabc=`expr $ncversiona + $ncversionb`
204 ncversionabc=`expr $ncversionabc + $ncversionc`
205 if [ $ncversionabc -lt 474 ] ; then
206 PROBS=TRUE
209 if [ "$PROBS" = "TRUE" ] ; then
210 echo
211 echo Cannot activate NETCDFPAR with this version of NetCDF: $ncversion
212 echo You need NetCDF version 4.7.4 or newer
213 echo Use a newer version of NetCDF, or unset the env variable NETCDFPAR
214 echo
215 exit
217 NETCDF4="1"
218 USENETCDFPAR="1"
219 export NETCDF
220 export NETCDF4
221 export USENETCDFPAR
224 if test -z "$NETCDF" ; then
225 echo ' '
226 echo '*****************************************************************************'
227 echo 'No environment variable NETCDF set.'
228 echo 'Stopping'
229 echo '*****************************************************************************'
230 echo ' '
231 exit 5
234 if test -z "$NETCDF_classic" ; then
235 export NETCDF4=1
236 else
237 unset NETCDF4
240 USENETCDFF=""
241 USENETCDF=""
242 if [ -n "$NETCDF" ] ; then
243 echo "Will use NETCDF in dir: $NETCDF"
244 # Oh UNIDATA, why make it so hard ...
245 if [ -f "$NETCDF/lib/libnetcdff.a" -o -f "$NETCDF/lib/libnetcdff.so" -o -f "$NETCDF/lib/libnetcdff.dll.a" ] ; then
246 USENETCDFF="-lnetcdff"
247 else
248 USENETCDFF=" "
250 if [ -f "$NETCDF_C/lib/libnetcdf.a" -o -f "$NETCDF_C/lib/libnetcdf.so" -o -f "$NETCDF_C/lib/libnetcdf.dll.a" ] ; then
251 USENETCDF="-lnetcdf"
252 else
253 USENETCDF=" "
255 export USENETCDF=$USENETCDF
256 export USENETCDFF=$USENETCDFF
257 else
258 echo ' '
259 echo '*****************************************************************************'
260 echo 'No environment variable NETCDF set.'
261 echo 'Stopping'
262 echo '*****************************************************************************'
263 echo ' '
264 exit 6
267 # If the user asked for classic netcdf, acquiesce to the request.
269 if [ ! -f "$NETCDF/bin/nf-config" ] ; then
270 export NETCDF_classic=1
271 unset NETCDF4
272 else
273 if [ -n "$NETCDF_classic" ] ; then
274 if [ $NETCDF_classic -eq 1 ] ; then
275 unset NETCDF4
276 else
277 unset NETCDF_classic
278 export NETCDF4=1
280 else
281 if [ "`$NETCDF/bin/nf-config --has-nc4`" = "yes" ] ; then
282 unset NETCDF_classic
283 export NETCDF4=1
284 else
285 export NETCDF_classic=1
286 unset NETCDF4
291 if [ -z "$HDF5_PATH" ] ; then HDF5_PATH=''; fi
292 if [ -z "$ZLIB_PATH" ] ; then ZLIB_PATH=''; fi
293 if [ -z "$GPFS_PATH" ] ; then GPFS_PATH=''; fi
294 if [ -z "$CURL_PATH" ] ; then CURL_PATH=''; fi
296 if [ -n "$NETCDF4" ] ; then
297 if [ $NETCDF4 -eq 1 ] ; then
298 NETCDF4_DEP_LIB=''
299 if [ "$NETCDF_C" != "NOT_FOUND" -a -f $NETCDF_C/bin/nc-config ] ; then
300 nx_config="`$NETCDF_C/bin/nc-config --libs`"
301 NETCDF4_DEP_LIB="$NETCDF4_DEP_LIB $nx_config"
302 else
303 echo ' '
304 echo '*****************************************************************************'
305 echo 'WARNING! Unable to find nc-config. Linking with NetCDF may fail.'
306 echo '*****************************************************************************'
307 echo ' '
309 nx_config="`$NETCDF/bin/nf-config --flibs`"
310 NETCDF4_DEP_LIB="$NETCDF4_DEP_LIB $nx_config"
314 if [ -n "$PNETCDF" ] ; then
315 echo "Will use PNETCDF in dir: $PNETCDF"
316 # experimental, so don't tease the user if it is not there
317 #else
318 # echo "Will configure for use without NetCDF"
321 if [ -n "$ADIOS2" ] ; then
322 echo "Will use ADIOS2 in dir: $ADIOS2"
323 else
324 echo "ADIOS2 not set in environment. Will configure WRF for use without."
327 if [ -n "$HDF5" ] ; then
328 echo "Will use HDF5 in dir: $HDF5"
329 else
330 echo "HDF5 not set in environment. Will configure WRF for use without."
333 if [ -n "$PHDF5" ] ; then
334 echo "Will use PHDF5 in dir: $PHDF5"
335 else
336 echo "PHDF5 not set in environment. Will configure WRF for use without."
339 if [ "$wrf_core" = "DA_CORE" -o "$wrf_core" = "4D_DA_CORE" ] ; then
340 if [ -n "$RTTOV" ] ; then
341 echo "Will use RTTOV in dir: $RTTOV"
342 else
343 echo "RTTOV not set in environment. Will configure WRFDA for use without."
347 # Set the "traditional" flag and the "cpp" flags
349 TFL="-traditional-cpp"
350 CFL="-P -nostdinc"
352 if [ "$wrf_core" = "4D_DA_CORE" ]; then
353 if [ -n "$WRFPLUS_DIR" ] ; then
354 echo "Will use WRFPLUS in dir: $WRFPLUS_DIR"
355 else
356 echo "WRFPLUS_DIR not set in environment. Please compile WRFPLUS and set WRFPLUS_DIR."
357 exit
359 else
360 if [ -n "$WRFPLUS_DIR" ] ; then
361 echo 'Unsetting "$WRFPLUS_DIR" environment variable. Use "configure 4dvar" to configure for 4dvar compilation.'
362 unset WRFPLUS_DIR
365 # Users who are cross-compiling can set environment variable
366 # $WRF_OS to override the value normally obtained from `uname`.
367 # If $WRF_OS is set, then $WRF_MACH can also be set to override
368 # the value normally obtained from `uname -m`. If $WRF_OS is
369 # set and $WRF_MACH is not set, then $WRF_MACH defaults to "ARCH".
370 # If $WRF_OS is not set then $WRF_MACH is ignored.
371 if [ -n "$WRF_OS" ] ; then
372 echo "${0}: WRF operating system set to \"${WRF_OS}\" via environment variable \$WRF_OS"
373 os=$WRF_OS
374 mach="ARCH"
375 if [ -n "$WRF_MACH" ] ; then
376 echo "${0}: WRF machine set to \"${WRF_MACH}\" via environment variable \$WRF_MACH"
377 mach=$WRF_MACH
379 else
380 # if the uname command exists, give it a shot and see if
381 # we can narrow the choices; otherwise, spam 'em
382 os="ARCH"
383 mach="ARCH"
384 type uname > /dev/null
385 if [ $? -eq 0 ] ; then
386 os=`uname`
387 if [ "$os" = "AIX" -o "$os" = "IRIX" -o "$os" = "IRIX64" -o "$os" = "SunOS" -o "$os" = "HP-UX" -o "$os" = "Darwin" -o "$os" = "Interix" ] ; then
388 mach="ARCH"
389 else
390 xxx=`expr "$os" : '\(.........\).*'`
391 if [ "$xxx" = "CYGWIN_NT" ] ; then
392 os=$xxx
394 if [ "$os" = "OSF1" -o "$os" = "Linux" -o "$os" = "UNICOS/mp" -o "$os" = "UNIX_System_V" -o "$os" = "CYGWIN_NT" ] ; then
395 mach=`uname -m`
396 if [ "$mach" = "ia64" -a -f /etc/sgi-release ] ; then
397 mach="Altix"
399 else
400 os="ARCH"
401 mach="ARCH"
407 # an IBM specific hack to adjust the bmaxstack and bmaxdata options if addressing is 32-bit
408 if [ "$os" = "AIX" ] ; then
409 if [ -z "$OBJECT_MODE" ] ; then
410 OBJECT_MODE=32
411 export OBJECT_MODE
413 if [ "$OBJECT_MODE" = "32" ] ; then
414 # the bang means nothing to sh in this context; use to represent spaces (perl will unbang)
415 ldflags=-bmaxstack:256000000!-bmaxdata:2048000000
419 # compile options that come from the environment, such as chemistry
420 # the "!" is removed by Config.pl
421 if [ -n "$WRF_HYDRO" ] ; then
422 if [ $WRF_HYDRO = 1 ] ; then
423 echo building WRF-HYDRO
424 compileflags="${compileflags}!-DWRF_HYDRO"
425 echo $compileflags
429 # compile options that come from the environment, such as chemistry
430 # the "!" is removed by Config.pl
431 if [ -n "$WRF_MARS" ] ; then
432 if [ $WRF_MARS = 1 ] ; then
433 echo building WRF for Mars
434 compileflags="${compileflags}!-DPLANET!-DMARS"
435 echo $compileflags
439 if [ -n "$WRF_TITAN" ] ; then
440 if [ $WRF_TITAN = 1 ] ; then
441 echo building WRF for Titan
442 compileflags="${compileflags}!-DPLANET!-DTITAN"
446 if [ -n "$WRF_VENUS" ] ; then
447 if [ $WRF_VENUS = 1 ] ; then
448 echo building WRF for Venus
449 compileflags="${compileflags}!-DPLANET!-DVENUS"
452 if [ -n "$WRF_QUIETLY" ]; then
453 echo WRF_QUIETLY is now a synonym for WRF_LOG_BUFFERING
454 echo setting WRF_LOG_BUFFERING to 1...
455 export WRF_LOG_BUFFERING=1
457 if [ -n "$WRF_LOG_BUFFERING" ]; then
458 if [ $WRF_LOG_BUFFERING = 1 ]; then
459 echo building WRF with support for buffering of log messages
460 compileflags="${compileflags}!-DWRF_LOG_BUFFERING=1"
463 if [ -n "$PNETCDF_QUILT" ]; then
464 echo Enabling quilt_pnc I/O server implementation.
465 compileflags="${compileflags}!-DPNETCDF_QUILT=1"
467 if [ -n "$WRF_DFI_RADAR" ] ; then
468 if [ $WRF_DFI_RADAR = 1 ] ; then
469 echo building WRF with radar dfi option
470 compileflags="${compileflags}!-DWRF_DFI_RADAR=1"
474 if [ -n "$WRF_CMAQ" ] ; then
475 echo building WRF with CMAQ option
476 compileflags="${compileflags}!-DWRF_CMAQ"
479 if [ -n "$WRF_CHEM" ] ; then
480 if [ $WRF_CHEM = 1 ] ; then
481 echo building WRF with chemistry option
482 compileflags="${compileflags}!-DWRF_CHEM!-DBUILD_CHEM=1"
483 if [ -n "$WRF_KPP" ] ; then
484 if [ $WRF_KPP = 1 ] ; then
485 echo building WRF with KPP chemistry option
486 compileflags="${compileflags}!-DWRF_KPP"
489 else
490 compileflags="${compileflags} "
492 else
493 compileflags="${compileflags} "
496 if [ -n "$WRFPLUS" ] ; then
497 if [ $WRFPLUS = 1 ] ; then
498 echo building WRF for TL and AD
499 compileflags="!-DWRFPLUS"
500 echo $compileflags
504 type m4 > /dev/null
505 if [ $? -ne 0 ] ; then
506 echo
507 echo "ERROR ERROR ERROR ERROR ERROR ERROR ERROR"
508 echo "'m4' utility not found! Can not configure."
509 echo
510 echo "If on an Ubuntu machine, use the command"
511 echo " sudo apt-get install m4 "
512 echo "To download and install the 'm4' utility"
513 exit 1
516 if command -v timex > /dev/null 2>&1; then
517 FORTRAN_COMPILER_TIMER=timex
518 echo "Will use 'timex' to report timing information"
519 elif command -v time > /dev/null 2>&1; then
520 FORTRAN_COMPILER_TIMER=time
521 echo "Will use 'time' to report timing information"
524 # Is this some type of WRF DA build? If so, it is real*8.
525 # Let's go ahead and set a flag internally.
526 if test -n "$wrf_core" ; then
527 if [ "$wrf_core" = "DA_CORE" -o \
528 "$wrf_core" = "4D_DA_CORE" -o \
529 "$wrf_core" = "WRF_PLUS_CORE" ] ; then
530 rword="-r8"
534 # Found perl, so proceed with configuration
535 if test -n "$PERL" ; then
536 srch=`grep -i "^#ARCH.*$os" arch/configure.defaults | grep -i "$mach"`
537 if [ -n "$srch" ] ; then
538 $PERL arch/Config.pl -dmparallel=$COMMLIB -ompparallel=$OMP -perl=$PERL \
539 -netcdf=$NETCDF -pnetcdf=$PNETCDF -netcdfpar=$NETCDFPAR -adios2=$ADIOS2 -hdf5=$HDF5 -phdf5=$PHDF5 -os=$os -mach=$mach -ldflags=$ldflags \
540 -compileflags=$compileflags -opt_level=$opt_level -USENETCDFF=$USENETCDFF -USENETCDF=$USENETCDF \
541 -time=$FORTRAN_COMPILER_TIMER -tfl="$TFL" -cfl="$CFL" -config_line="$config_line" \
542 -wrf_core=$wrf_core -gpfs=$GPFS_PATH -curl=$CURL_PATH -netcdf4_dep_lib="$NETCDF4_DEP_LIB"
543 if test ! -f configure.wrf ; then
544 echo "configure.wrf not created! Exiting configure script..."
545 exit 1
547 if [ "$opt_level" = "-d" ] ; then
548 sed -e 's/FCOPTIM[ ]*=/& # /' -e '/FCDEBUG[ ]*=/s/#//' configure.wrf > configure.wrf.edit
549 /bin/mv configure.wrf.edit configure.wrf
551 if [ "$opt_level" = "-D" ] ; then
552 sed -e 's/FCOPTIM[ ]*=/& # /' -e '/FCDEBUG[ ]*=/s/#//g' configure.wrf > configure.wrf.edit
553 /bin/mv configure.wrf.edit configure.wrf
556 # GNU has a funny way of doing promotion to real*8
557 if [ "$rword" = "-r8" ] ; then
558 srch=`grep -i "^SFC" configure.wrf | grep -i "gfortran"`
559 if [ -n "$srch" ] ; then
560 sed -e '/^PROMOTION/s/#//' \
561 -e '/^RWORDSIZE/s/$(NATIVE_RWORDSIZE)/8/' configure.wrf > configure.wrf.edit
562 else
563 sed -e '/^RWORDSIZE/s/$(NATIVE_RWORDSIZE)/8/' configure.wrf > configure.wrf.edit
565 /bin/mv configure.wrf.edit configure.wrf
566 sed -e 's/-DBUILD_SBM_FAST=1/-DBUILD_SBM_FAST=0/' configure.wrf > configure.wrf.edit
567 /bin/mv configure.wrf.edit configure.wrf
569 else
570 echo '*********************************************************'
571 echo '*** ERROR ERROR ERROR ERROR ***'
572 echo '*** ***'
573 echo '*** Configuration not found in configure.defaults ***'
574 echo '*********************************************************'
575 exit 2
579 if test -f configure.wrf ; then
580 # new dec 2005. test what fseek is supported (needed for share/landread.c to work correctly)
581 echo testing for fseeko and fseeko64
582 /bin/rm -f tools/fseeko_test tools/fseeko64_test
583 ( make fseek_test 2> /dev/null ) 1> /dev/null
584 if [ "$os" = "Darwin" ] ; then
585 # fseeko64 does not exist under Darwin fseeko does. Remove the 0 length executable
586 # file that might get generated anyway, even though the compiler complains about missing reference.
587 /bin/rm -f tools/fseeko64_test
589 if test -x tools/fseeko64_test ; then
590 ( tools/fseeko64_test 2> /dev/null ) 1> /dev/null
591 if [ $? = 0 ] ; then
592 echo fseeko64 is supported
593 sed '/^CC .*=/s/$/ -DFSEEKO64_OK /' configure.wrf > xx$$ ; /bin/mv xx$$ configure.wrf
595 else
596 if test -x tools/fseeko_test ; then
597 ( tools/fseeko_test 2> /dev/null ) 1> /dev/null
598 if [ $? = 0 ] ; then
599 echo fseeko is supported and handles 64 bit offsets
600 sed '/^CC .*=/s/$/ -DFSEEKO_OK /' configure.wrf > xx$$ ; /bin/mv xx$$ configure.wrf
601 else
602 echo neither fseeko64 nor fseeko with 64 bit offsets works, landread will be compiled with fseek
603 echo but may not work correctly for very high resolution terrain datasets
605 else
606 echo neither fseeko64 nor fseeko with 64 bit offsets works, landread will be compiled with fseek
607 echo but may not work correctly for very high resolution terrain datasets
612 echo "------------------------------------------------------------------------"
613 sed -e '1,/#### Architecture specific settings ####/d' -e '/^externals/,$d' configure.wrf
615 echo "------------------------------------------------------------------------"
616 echo "Settings listed above are written to configure.wrf."
617 echo "If you wish to change settings, please edit that file."
618 echo "If you wish to change the default options, edit the file:"
619 echo " arch/configure.defaults"
621 if test -n "$NETCDF" ; then
622 if [ ! -f $NETCDF/include/netcdf.inc ] ; then
623 echo
624 echo "Error : Not found $NETCDF/include/netcdf.inc"
625 echo " Please check this installation of NetCDF and re-run this configure script"
626 exit -1
628 grep nf_format_64bit $NETCDF/include/netcdf.inc > /dev/null
629 configure_aaaa=$? ; export configure_aaaa
630 if [ $configure_aaaa -a -z "$WRFIO_NCD_NO_LARGE_FILE_SUPPORT" ] ; then
631 echo "NetCDF users note:"
632 echo " This installation of NetCDF supports large file support. To DISABLE large file"
633 echo " support in NetCDF, set the environment variable WRFIO_NCD_NO_LARGE_FILE_SUPPORT"
634 echo " to 1 and run configure again. Set to any other value to avoid this message."
637 echo " "
639 if [ "$wrf_core" = "DA_CORE" -o "$wrf_core" = "WRF_PLUS_CORE" -o "$wrf_core" = "4D_DA_CORE" ]; then
640 if [ "`grep '^SFC' configure.wrf | grep -i 'gfortran'`" != "" -o "`grep '^SFC' configure.wrf | grep -i 'frtpx'`" != "" ]; then
641 echo "WRFDA/WRFPLUS using gfortran/frtpx needs realsize=8"
642 sed -e '/^PROMOTION.*=/s/#//' configure.wrf > configure.wrf.edit
643 /bin/mv configure.wrf.edit configure.wrf
647 if [ -n "$WRFPLUS" ] ; then
648 if [ $WRFPLUS = 1 ] ; then
649 if [ `grep '^SFC' configure.wrf | cut -d= -f2` = "gfortran" ]; then
650 echo "WRFPLUS using gfortran needs realsize=8"
651 sed -e '/^PROMOTION.*=/s/#//' configure.wrf > configure.wrf.edit
652 /bin/mv configure.wrf.edit configure.wrf
657 #Checking cross-compiling capability for some particular environment
658 #on Linux and Mac box
660 if [ $os = "Linux" -o $os = "Darwin" ]; then
662 SFC=`grep '^SFC' configure.wrf | awk '{print $3}'`
663 SCC=`grep '^SCC' configure.wrf | awk '{print $3}'`
664 CCOMP=`grep '^CCOMP' configure.wrf | awk '{print $3}'`
666 SFC="`type $SFC 2>/dev/null | awk '{print $NF}' | sed -e 's/(//g;s/)//g'`"
667 SCC="`type $SCC 2>/dev/null | awk '{print $NF}' | sed -e 's/(//g;s/)//g'`"
668 CCOMP="`type $CCOMP 2>/dev/null | awk '{print $NF}' | sed -e 's/(//g;s/)//g'`"
670 foo=foo_$$
672 grep '^SFC' configure.wrf | grep -i 'gfortran' > /dev/null
673 if [ $? ]
674 then
676 cat > ${foo}.F << EOF
677 PROGRAM GFORTRAN_VERSION_CHECK
678 IF (__GNUC__ .GT. 9) CALL EXIT(1)
679 END PROGRAM
682 gfortran -o ${foo} ${foo}.F > /dev/null 2>&1 && ./${foo}
683 if [ $? -eq 1 ]
684 then
685 sed '/^FCCOMPAT/ s/$/ -fallow-argument-mismatch -fallow-invalid-boz/' configure.wrf > configure.wrf.edit
686 mv configure.wrf.edit configure.wrf
688 rm ${foo} ${foo}.F 2> /dev/null
691 cat > ${foo}.c <<EOF
692 int main(int argc, char ** argv)
694 return (0);
698 cat > ${foo}.f <<EOF
699 program test_exit
700 integer :: STATUS = 0
701 call EXIT(STATUS)
702 end program test_exit
705 # do not do this test for MIC, which cross compiles
706 if [ -z "`grep 'SCC.*mmic' configure.wrf`" ] ; then
707 # Detecting whether if mpi compiler wrapper supports -cc/-f90 options
708 if [ -z "`grep -i -E '^DMPARALLEL[ \t]*=.*#' configure.wrf`" ] ; then
709 mpicc -cc=$SCC -o ${foo} ${foo}.c > /dev/null 2>&1
710 if [ $? != 0 ]; then
711 sed 's/-cc=$(SCC)//' configure.wrf > configure.wrf.edit
712 mv configure.wrf.edit configure.wrf
714 rm ${foo} ${foo}.o 2> /dev/null
715 mpif90 -f90=$SFC -o ${foo} ${foo}.f > /dev/null 2>&1
716 if [ $? != 0 ]; then
717 sed 's/-f90=$(SFC)//' configure.wrf > configure.wrf.edit
718 mv configure.wrf.edit configure.wrf
720 rm ${foo} ${foo}.o 2> /dev/null
724 if [ -e $NETCDF_C/lib/libnetcdf.a -a "$SFC" != "" -a "$SCC" != "" -a "$CCOMP" != "" ]; then
726 SFC_MULTI_ABI=0
727 SCC_MULTI_ABI=0
728 CCOMP_MULTI_ABI=0
729 CROSS_COMPILING=0
731 echo
732 echo Testing for NetCDF, C and Fortran compiler
733 echo
735 ar p $NETCDF_C/lib/libnetcdf.a `ar t $NETCDF_C/lib/libnetcdf.a | grep -E '\.o' | head -n 1 | sed 's/://'` > ${foo}.o
736 netcdf_arch="`file ${foo}.o | grep -o -E '[0-9]{2}-bit|i386'`"
737 rm ${foo}.o
739 $SFC -o ${foo} ${foo}.f > /dev/null 2>&1
740 SFC_arch="`file ${foo} | grep -o -E '[0-9]{2}-bit|i386'`"
741 rm ${foo} ${foo}.o 2> /dev/null
743 $SCC -o ${foo} ${foo}.c > /dev/null 2>&1
744 SCC_arch="`file ${foo} | grep -o -E '[0-9]{2}-bit|i386'`"
745 CCOMP_arch=$SCC_arch
746 rm ${foo} ${foo}.o 2> /dev/null
748 if [ "$SCC" != "$CCOMP" ]; then
749 $CCOMP -o ${foo} ${foo}.c > /dev/null 2>&1
750 CCOMP_arch="`file ${foo} | grep -o -E '[0-9]{2}-bit|i386'`"
751 rm ${foo} ${foo}.o 2> /dev/null
754 if [ "$SFC_arch" = "" -o "$SCC_arch" = "" -o "$CCOMP_arch" = "" ]; then
755 echo " One of compilers testing failed!"
756 echo " Please check your compiler"
757 echo
758 rm -f ${foo} ${foo}.[cfo] 2> /dev/null
759 exit
760 else
761 cp configure.wrf configure.wrf.edit
764 case $netcdf_arch in
766 32-bit|i386 )
768 if [ "$SFC_arch" = "64-bit" ] ; then
769 CROSS_COMPILING=1
770 $SFC -m32 -o ${foo} ${foo}.f > /dev/null 2>&1
771 if [ $? = 0 ]; then
772 SFC_MULTI_ABI=1
773 sed '/^SFC.*=/s/$/ -m32/' configure.wrf.edit > configure.wrf.tmp
774 mv configure.wrf.tmp configure.wrf.edit
777 if [ "$SCC_arch" = "64-bit" ] ; then
778 CROSS_COMPILING=1
779 $SCC -m32 -o ${foo} ${foo}.c > /dev/null 2>&1
780 if [ $? = 0 ]; then
781 SCC_MULTI_ABI=1
782 sed '/^SCC.*=/s/$/ -m32/' configure.wrf.edit > configure.wrf.tmp
783 mv configure.wrf.tmp configure.wrf.edit
787 if [ "$CCOMP_arch" = "64-bit" ] ; then
788 CROSS_COMPILING=1
789 if [ "$CCOMP" != "$SCC" ]; then
790 $CCOMP -m32 -o ${foo} ${foo}.c > /dev/null 2>&1
791 if [ $? = 0 ]; then
792 CCOMP_MULTI_ABI=1
793 sed '/^CCOMP/ s/$/ -m32/' configure.wrf.edit > configure.wrf.tmp
794 mv configure.wrf.tmp configure.wrf.edit
796 else
797 CCOMP_MULTI_ABI=1
798 sed '/^CCOMP/ s/$/ -m32/' configure.wrf.edit > configure.wrf.tmp
799 mv configure.wrf.tmp configure.wrf.edit
803 if [ $CROSS_COMPILING -eq 1 ] ; then
804 echo NOTE:
805 echo This installation of NetCDF is 32-bit
806 if [ \( $SFC_MULTI_ABI -ne 1 -a "$SFC_arch" = "64-bit" \) \
807 -o \( $SCC_MULTI_ABI -ne 1 -a "$SCC_arch" = "64-bit" \) \
808 -o \( $CCOMP_MULTI_ABI -ne 1 -a "$CCOMP_arch" = "64-bit" \) ] ; then
809 rm configure.wrf.edit
810 echo One of compilers is 64-bit and doesn\'t support cross-compiling.
811 echo Please check your NETCDF lib and compiler
812 else
813 echo -m32 is appended to configure.wrf
814 echo It will be forced to build in 32-bit.
815 echo If you don\'t want 32-bit binaries, please use 64-bit NetCDF, and re-run the configure script.
820 64-bit )
822 if [ "$SFC_arch" = "32-bit" -o "$SFC_arch" = "i386" ] ; then
823 CROSS_COMPILING=1
824 $SFC -m64 -o ${foo} ${foo}.f > /dev/null 2>&1
825 if [ $? = 0 ]; then
826 SFC_MULTI_ABI=1
827 sed '/^SFC.*=/s/$/ -m64/' configure.wrf.edit > configure.wrf.tmp
828 mv configure.wrf.tmp configure.wrf.edit
831 if [ "$SCC_arch" = "32-bit" -o "$SCC_arch" = "i386" ] ; then
832 CROSS_COMPILING=1
833 $SCC -m64 -o ${foo} ${foo}.c > /dev/null 2>&1
834 if [ $? = 0 ]; then
835 SCC_MULTI_ABI=1
836 sed '/^SCC.*=/s/$/ -m64/' configure.wrf.edit > configure.wrf.tmp
837 mv configure.wrf.tmp configure.wrf.edit
841 if [ "$CCOMP_arch" = "32-bit" -o "$CCOMP_arch" = "i386" ] ; then
842 CROSS_COMPILING=1
843 if [ "$CCOMP" != "$SCC" ]; then
844 $CCOMP -m64 -o ${foo} ${foo}.c > /dev/null 2>&1
845 if [ $? = 0 ]; then
846 CCOMP_MULTI_ABI=1
847 sed '/^CCOMP/ s/$/ -m64/' configure.wrf.edit > configure.wrf.tmp
848 mv configure.wrf.tmp configure.wrf.edit
850 else
851 CCOMP_MULTI_ABI=1
852 sed '/^CCOMP/ s/$/ -m64/' configure.wrf.edit > configure.wrf.tmp
853 mv configure.wrf.tmp configure.wrf.edit
857 if [ $CROSS_COMPILING -eq 1 ] ; then
858 echo NOTE:
859 echo This installation of NetCDF is 64-bit
860 if [ \( $SFC_MULTI_ABI -ne 1 -a "$SFC_arch" != "64-bit" \) \
861 -o \( $SCC_MULTI_ABI -ne 1 -a "$SCC_arch" != "64-bit" \) \
862 -o \( $CCOMP_MULTI_ABI -ne 1 -a "$CCOMP_arch" != "64-bit" \) ]; then
863 rm configure.wrf.edit
864 echo One of Compilers is 32-bit and doesn\'t support cross-compiling.
865 echo Please check your NetCDF lib and compiler
866 else
867 echo -m64 is appended to configure.wrf
868 echo It will be forced to build in 64-bit.
869 echo If you don\'t want 64-bit binaries, please use 32-bit NetCDF, and re-run the configure script.
873 esac
875 if [ -e configure.wrf.edit ]; then
876 mv configure.wrf.edit configure.wrf
879 if [ $CROSS_COMPILING -eq 0 ] ; then
880 echo "This installation of NetCDF is $netcdf_arch"
881 echo " C compiler is $SCC_arch"
882 echo " Fortran compiler is $SFC_arch"
883 echo " It will build in $netcdf_arch"
884 echo " "
885 if [ -e $NETCDF_C/bin/nc-config ] ; then
886 echo "NetCDF version: ${ncversion}"
887 echo "Enabled NetCDF-4/HDF-5: `$NETCDF_C/bin/nc-config --has-nc4`"
888 echo "NetCDF built with PnetCDF: `$NETCDF_C/bin/nc-config --has-pnetcdf`"
889 if [ "$USENETCDFPAR" = "1" ] ; then
890 echo "Using parallel NetCDF via NETCDFPAR option"
892 echo " "
895 echo
897 rm -f ${foo} ${foo}.[cfo] 2> /dev/null
900 # testing for Fortran 2003 IEEE features
901 make fortran_2003_ieee_test > tools/fortran_2003_ieee_test.log 2>&1
902 rm -f tools/fortran_2003_ieee_test.log
903 retval=-1
904 if [ -f tools/fortran_2003_ieee_test.exe ] ; then
905 retval=0
907 if [ $retval -ne 0 ] ; then
908 sed -e '/^ARCH_LOCAL/s/$/ -DNO_IEEE_MODULE/' configure.wrf > configure.wrf.edit
909 mv configure.wrf.edit configure.wrf
910 echo " "
911 echo " "
912 echo "************************** W A R N I N G ************************************"
913 echo " "
914 echo "There are some IEEE Fortran 2003 features in WRF that your compiler does not"
915 echo "recognize. The IEEE function calls have been removed."
916 echo " "
917 echo "*****************************************************************************"
920 # testing for Fortran 2003 ISO_C features
921 make fortran_2003_iso_c_test > tools/fortran_2003_iso_c_test.log 2>&1
922 rm -f tools/fortran_2003_iso_c_test.log
923 retval=-1
924 if [ -f tools/fortran_2003_iso_c_test.exe ] ; then
925 retval=0
927 if [ $retval -ne 0 ] ; then
928 sed -e '/^ARCH_LOCAL/s/$/ -DNO_ISO_C_SUPPORT/' configure.wrf > configure.wrf.edit
929 mv configure.wrf.edit configure.wrf
930 echo " "
931 echo " "
932 echo "************************** W A R N I N G ************************************"
933 echo " "
934 echo "There are some Fortran 2003 features in WRF that your compiler does not recognize"
935 echo "The routines that utilize ISO_C support have been stubbed out. "
936 echo "That may not be enough."
937 echo " "
938 echo "*****************************************************************************"
941 # testing for Fortran 2003 FLUSH features
942 make fortran_2003_flush_test > tools/fortran_2003_flush_test.log 2>&1
943 rm -f tools/fortran_2003_flush_test.log
944 retval=-1
945 if [ -f tools/fortran_2003_flush_test.exe ] ; then
946 retval=0
948 if [ $retval -ne 0 ] ; then
949 make fortran_2003_fflush_test > tools/fortran_2003_fflush_test.log 2>&1
950 rm -f tools/fortran_2003_fflush_test.log
951 retval=-1
952 if [ -f tools/fortran_2003_fflush_test.exe ] ; then
953 retval=0
955 if [ $retval -eq 0 ] ; then
956 sed -e '/^ARCH_LOCAL/s/$/ -DUSE_FFLUSH/' configure.wrf > configure.wrf.edit
957 mv configure.wrf.edit configure.wrf
958 echo " "
959 echo " "
960 echo "************************** W A R N I N G ************************************"
961 echo " "
962 echo "There are some Fortran 2003 features in WRF that your compiler does not recognize"
963 echo "The standard FLUSH routine has been replaced by FFLUSH."
964 echo "That may not be enough."
965 echo " "
966 echo "*****************************************************************************"
968 if [ $retval -ne 0 ] ; then
969 sed -e '/^ARCH_LOCAL/s/$/ -DNO_FLUSH_SUPPORT/' configure.wrf > configure.wrf.edit
970 mv configure.wrf.edit configure.wrf
971 echo " "
972 echo " "
973 echo "************************** W A R N I N G ************************************"
974 echo " "
975 echo "There are some Fortran 2003 features in WRF that your compiler does not recognize"
976 echo "The standard FLUSH routine has been stubbed out."
977 echo "That may not be enough."
978 echo " "
979 echo "*****************************************************************************"
983 # testing for Fortran 2008 intrinsic gamma function
984 make fortran_2008_gamma_test > tools/fortran_2008_gamma.log 2>&1
985 rm -f tools/fortran_2008_gamma.log
986 retval=-1
987 if [ -f tools/fortran_2008_gamma_test.exe ] ; then
988 retval=0
990 if [ $retval -ne 0 ] ; then
991 sed -e '/^ARCH_LOCAL/s/$/ -DNO_GAMMA_SUPPORT/' configure.wrf > configure.wrf.edit
992 mv configure.wrf.edit configure.wrf
993 echo " "
994 echo " "
995 echo "************************** W A R N I N G ************************************"
996 echo " "
997 echo "There are some Fortran 2008 features in WRF that your compiler does not recognize"
998 echo "The intrinsic gamma function is not available, required by some schemes."
999 echo "That code is stubbbed out, and those schemes are unavailable at run-time."
1000 echo " "
1001 echo "*****************************************************************************"
1004 # testing for location of rpc/types.h file, used in landuse
1005 make rpc_test > tools/rpc_test.log 2>&1
1006 rm -f tools/rpc_test.log
1008 if [ -f tools/rpc_test.exe ] ; then
1009 rpc_type=`tools/rpc_test.exe`
1010 if [ $rpc_type = "rpc" ]; then
1011 sed -e '/^CFLAGS_LOCAL/s/#/-DRPC_TYPES=1 &/' configure.wrf > configure.wrf.edit
1012 else
1013 sed -e '/^CFLAGS_LOCAL/s/#/-DRPC_TYPES=2 &/' configure.wrf > configure.wrf.edit
1015 mv configure.wrf.edit configure.wrf
1016 else
1017 echo "************************** W A R N I N G ************************************"
1018 echo " "
1019 echo "The moving nest option is not available due to missing rpc/types.h file."
1020 echo "Copy landread.c.dist to landread.c in share directory to bypass compile error."
1021 echo " "
1022 echo "*****************************************************************************"
1025 # testing for netcdf4 IO features
1026 if [ -n "$NETCDF4" ] ; then
1027 if [ $NETCDF4 -eq 1 ] ; then
1028 make nc4_test > tools/nc4_test.log 2>&1
1029 retval=-1
1030 if [ -f tools/nc4_test.exe ] ; then
1031 retval=0
1032 rm -f tools/nc4_test.log
1034 if [ $retval -ne 0 ] ; then
1035 echo "************************** W A R N I N G ************************************"
1036 echo "NETCDF4 IO features are requested, but this installation of NetCDF "
1037 echo " $NETCDF"
1038 echo "DOES NOT support these IO features. "
1039 echo
1040 echo "Please make sure NETCDF version is 4.1.3 or later and was built with "
1041 echo "--enable-netcdf4 "
1042 echo
1043 echo "OR set NETCDF_classic variable "
1044 echo " bash/ksh : export NETCDF_classic=1 "
1045 echo " csh : setenv NETCDF_classic 1 "
1046 echo
1047 echo "Then re-run this configure script "
1048 echo
1049 echo "!!! configure.wrf has been REMOVED !!!"
1050 echo
1051 echo "*****************************************************************************"
1052 rm -f configure.wrf
1053 else
1054 echo "*****************************************************************************"
1055 echo "This build of WRF will use NETCDF4 with HDF5 compression"
1056 echo "*****************************************************************************"
1057 echo " "
1060 else
1061 echo "*****************************************************************************"
1062 echo "This build of WRF will use classic (non-compressed) NETCDF format"
1063 echo "*****************************************************************************"
1064 echo " "