Merge pull request #22 from wirc-sjsu/develop-w21
[WRF-SFIRE.git] / configure
blob37798a612b1944ad8e29207e57ddff9096380d92
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 if [ -e $NETCDF/bin/nc-config ] ; then
163 ncversion=`nc-config --version | awk '{print $2}'`
164 else
165 ncversion=OLD
168 PROBS=FALSE
169 if [ -n "$NETCDFPAR" ] ; then
170 NETCDF="$NETCDFPAR"
171 if [ ! -e $NETCDF/bin/nc-config ] ; then
172 PROBS=TRUE
173 else
174 ncversion=`nc-config --version | awk '{print $2}'`
175 ncversiona=`echo $ncversion | cut -c 1`
176 ncversionb=`echo $ncversion | cut -c 3`
177 ncversionc=`echo $ncversion | cut -c 5`
178 ncversiona=`expr $ncversiona \* 100`
179 ncversionb=`expr $ncversionb \* 10`
180 ncversionabc=`expr $ncversiona + $ncversionb`
181 ncversionabc=`expr $ncversionabc + $ncversionc`
182 if [ $ncversionabc -lt 474 ] ; then
183 PROBS=TRUE
186 if [ "$PROBS" == "TRUE" ] ; then
187 echo
188 echo Cannot activate NETCDFPAR with this version of NetCDF: $ncversion
189 echo You need NetCDF version 4.7.4 or newer
190 echo Use a newer version of NetCDF, or unset the env variable NETCDFPAR
191 echo
192 exit
194 NETCDF4="1"
195 USENETCDFPAR="1"
196 export NETCDF
197 export NETCDF4
198 export USENETCDFPAR
201 if test -z "$NETCDF" ; then
202 echo ' '
203 echo '*****************************************************************************'
204 echo 'No environment variable NETCDF set.'
205 echo 'Stopping'
206 echo '*****************************************************************************'
207 echo ' '
208 exit 5
211 if test -z "$NETCDF_classic" ; then
212 export NETCDF4=1
213 else
214 unset NETCDF4
217 USENETCDFF=""
218 USENETCDF=""
219 if [ -n "$NETCDF" ] ; then
220 echo "Will use NETCDF in dir: $NETCDF"
221 # Oh UNIDATA, why make it so hard ...
222 if [ -f "$NETCDF/lib/libnetcdff.a" -o -f "$NETCDF/lib/libnetcdff.so" -o -f "$NETCDF/lib/libnetcdff.dll.a" ] ; then
223 USENETCDFF="-lnetcdff"
224 else
225 USENETCDFF=" "
227 if [ -f "$NETCDF/lib/libnetcdf.a" -o -f "$NETCDF/lib/libnetcdf.so" -o -f "$NETCDF/lib/libnetcdf.dll.a" ] ; then
228 USENETCDF="-lnetcdf"
229 else
230 USENETCDF=" "
232 export USENETCDF=$USENETCDF
233 export USENETCDFF=$USENETCDFF
234 else
235 echo ' '
236 echo '*****************************************************************************'
237 echo 'No environment variable NETCDF set.'
238 echo 'Stopping'
239 echo '*****************************************************************************'
240 echo ' '
241 exit 6
244 # If the user asked for classic netcdf, acquiesce to the request.
246 ans="`which nf-config`"
247 status="$?"
248 if [ "$ans" = "nf-config:" -o "$ans" = "" -o "$status" != "0" ] ; then
249 export NETCDF_classic=1
250 unset NETCDF4
251 else
252 if [ -n "$NETCDF_classic" ] ; then
253 if [ $NETCDF_classic -eq 1 ] ; then
254 unset NETCDF4
255 else
256 unset NETCDF_classic
257 export NETCDF4=1
259 else
260 if [ "`nf-config --has-nc4`" = "yes" ] ; then
261 unset NETCDF_classic
262 export NETCDF4=1
263 else
264 export NETCDF_classic=1
265 unset NETCDF4
270 if [ -z "$HDF5_PATH" ] ; then HDF5_PATH=''; fi
271 if [ -z "$ZLIB_PATH" ] ; then ZLIB_PATH=''; fi
272 if [ -z "$GPFS_PATH" ] ; then GPFS_PATH=''; fi
273 if [ -z "$CURL_PATH" ] ; then CURL_PATH=''; fi
275 if [ -n "$NETCDF4" ] ; then
276 if [ $NETCDF4 -eq 1 ] ; then
277 DEP_LIB_PATH=''
278 if [ -f $NETCDF/bin/nf-config ] ; then
279 nx_config="$NETCDF/bin/nf-config --flibs"
280 DEP_LIB_PATH="`$nx_config | awk '{for(i=1;i<=NF;i++){if(match($i, /-L.*/)) {print $i} } }'`"
281 CURL="`$nx_config | awk '{for(i=1;i<=NF;i++){if($i == "-lcurl") {print $i} } }'`"
282 GPFS="`$nx_config | awk '{for(i=1;i<=NF;i++){if($i == "-lgpfs") {print $i} } }'`"
284 if [ "$DEP_LIB_PATH" = '' ] ; then
285 if [ -f $NETCDF/bin/nc-config ] ; then
286 nx_config="$NETCDF/bin/nc-config --libs"
287 DEP_LIB_PATH="`$nx_config | awk '{for(i=1;i<=NF;i++){if(match($i, /-L.*/)) {print $i} } }'`"
288 CURL="`$nx_config | awk '{for(i=1;i<=NF;i++){if($i == "-lcurl") {print $i} } }'`"
289 GPFS="`$nx_config | awk '{for(i=1;i<=NF;i++){if($i == "-lgpfs") {print $i} } }'`"
290 if [ "$CURL" != '' -a "$CURL_PATH" = '' ] ; then
291 CURL_PATH="DEFAULT"
293 if [ "$GPFS" != '' -a "$GPFS_PATH" = '' ] ; then
294 GPFS_PATH="DEFAULT"
298 for P in "$HDF5_PATH" "$ZLIB_PATH" "$GPFS_PATH" "$CURL_PATH"
300 if [ "$P" != '' -a "$P" != "DEFAULT" ] ; then
301 if [ "${P#${P%?}}" = "/" ] ; then
302 P=`echo $P | sed 's/\/$//'`
304 DEP_LIB_PATH="`echo $DEP_LIB_PATH | awk -v VAR=-L$P/lib '{for(i=1;i<=NF;i++){if ($i != VAR ) {print $i} } }'`"
305 DEP_LIB_PATH="$DEP_LIB_PATH -L$P/lib"
307 done
308 if [ "${NETCDF#${NETCDF%?}}" = "/" ] ; then
309 NETCDF=`echo $NETCDF | sed 's/\/$//'`
311 buff="`ls -l $NETCDF | sed 's/ */ /g'`"
312 while [ "`echo $buff | grep lib`" = "" -a "`echo $buff | grep '\->'`" != "" ]
314 buff="`echo $buff | sed -e 's/->//' -e 's/ */ /g'`"
315 n=`echo $buff | wc -w`
316 lastword=`echo "$buff" | cut -d' ' -f$n | sed 's/\/$//'`
317 c="`echo $lastword | cut -c1`"
318 if [ "$c" == "/" ] ; then
319 NETCDF=$lastword
320 else
321 c="`echo $lastword | cut -c1-2`"
322 if [ "$c" = "./" ] ; then
323 lastword="echo $lastword | cut -c3-"
325 NETCDF=${NETCDF%/*}/$lastword
327 buff="`ls -l $NETCDF | sed 's/ */ /g'`"
328 done
329 if [ "`echo $NETCDF | grep '..'`" != "" ] ; then
330 buff="`echo $NETCDF | sed -e 's/^\///' -e 's/\// /g'`"
331 n=`echo $buff | wc -w`
333 while [ $i -le $n ]
335 if [ "`echo $buff | cut -d' ' -f$i`" = ".." ] ; then
336 m=$i
338 i=$(( $i + 1 ))
339 done
340 m=$(( $m + 1 ))
341 NETCDF=/"`echo $buff | cut -d' ' -f${m}- | sed 's/ */\//g'`"
343 if [ "${DEP_LIB_PATH#${DEP_LIB_PATH%?}}" = "/" ] ; then
344 DEP_LIB_PATH=`echo $DEP_LIB_PATH | sed 's/\/$//'`
346 DEP_LIB_PATH="`echo $DEP_LIB_PATH | awk -v VAR=-L$NETCDF/lib '{for(i=1;i<=NF;i++){if ($i != VAR ) {print $i} } }'`"
350 if [ -n "$PNETCDF" ] ; then
351 echo "Will use PNETCDF in dir: $PNETCDF"
352 # experimental, so don't tease the user if it is not there
353 #else
354 # echo "Will configure for use without NetCDF"
357 if [ -n "$HDF5" ] ; then
358 echo "Will use HDF5 in dir: $HDF5"
359 else
360 echo "HDF5 not set in environment. Will configure WRF for use without."
363 if [ -n "$PHDF5" ] ; then
364 echo "Will use PHDF5 in dir: $PHDF5"
365 else
366 echo "PHDF5 not set in environment. Will configure WRF for use without."
369 if [ "$wrf_core" = "DA_CORE" -o "$wrf_core" = "4D_DA_CORE" ] ; then
370 if [ -n "$RTTOV" ] ; then
371 echo "Will use RTTOV in dir: $RTTOV"
372 else
373 echo "RTTOV not set in environment. Will configure WRFDA for use without."
377 # Set the "traditional" flag and the "cpp" flags
379 TFL="-traditional-cpp"
380 CFL="-P -nostdinc"
382 if [ "$wrf_core" = "4D_DA_CORE" ]; then
383 if [ -n "$WRFPLUS_DIR" ] ; then
384 echo "Will use WRFPLUS in dir: $WRFPLUS_DIR"
385 else
386 echo "WRFPLUS_DIR not set in environment. Please compile WRFPLUS and set WRFPLUS_DIR."
387 exit
389 else
390 if [ -n "$WRFPLUS_DIR" ] ; then
391 echo 'Unsetting "$WRFPLUS_DIR" environment variable. Use "configure 4dvar" to configure for 4dvar compilation.'
392 unset WRFPLUS_DIR
395 # Users who are cross-compiling can set environment variable
396 # $WRF_OS to override the value normally obtained from `uname`.
397 # If $WRF_OS is set, then $WRF_MACH can also be set to override
398 # the value normally obtained from `uname -m`. If $WRF_OS is
399 # set and $WRF_MACH is not set, then $WRF_MACH defaults to "ARCH".
400 # If $WRF_OS is not set then $WRF_MACH is ignored.
401 if [ -n "$WRF_OS" ] ; then
402 echo "${0}: WRF operating system set to \"${WRF_OS}\" via environment variable \$WRF_OS"
403 os=$WRF_OS
404 mach="ARCH"
405 if [ -n "$WRF_MACH" ] ; then
406 echo "${0}: WRF machine set to \"${WRF_MACH}\" via environment variable \$WRF_MACH"
407 mach=$WRF_MACH
409 else
410 # if the uname command exists, give it a shot and see if
411 # we can narrow the choices; otherwise, spam 'em
412 os="ARCH"
413 mach="ARCH"
414 type uname > /dev/null
415 if [ $? -eq 0 ] ; then
416 os=`uname`
417 if [ "$os" = "AIX" -o "$os" = "IRIX" -o "$os" = "IRIX64" -o "$os" = "SunOS" -o "$os" = "HP-UX" -o "$os" = "Darwin" -o "$os" = "Interix" ] ; then
418 mach="ARCH"
419 else
420 xxx=`expr "$os" : '\(.........\).*'`
421 if [ "$xxx" = "CYGWIN_NT" ] ; then
422 os=$xxx
424 if [ "$os" = "OSF1" -o "$os" = "Linux" -o "$os" = "UNICOS/mp" -o "$os" = "UNIX_System_V" -o "$os" = "CYGWIN_NT" ] ; then
425 mach=`uname -m`
426 if [ "$mach" = "ia64" -a -f /etc/sgi-release ] ; then
427 mach="Altix"
429 else
430 os="ARCH"
431 mach="ARCH"
437 # an IBM specific hack to adjust the bmaxstack and bmaxdata options if addressing is 32-bit
438 if [ "$os" = "AIX" ] ; then
439 if [ -z "$OBJECT_MODE" ] ; then
440 OBJECT_MODE=32
441 export OBJECT_MODE
443 if [ "$OBJECT_MODE" = "32" ] ; then
444 # the bang means nothing to sh in this context; use to represent spaces (perl will unbang)
445 ldflags=-bmaxstack:256000000!-bmaxdata:2048000000
449 # compile options that come from the environment, such as chemistry
450 # the "!" is removed by Config.pl
451 if [ -n "$WRF_HYDRO" ] ; then
452 if [ $WRF_HYDRO = 1 ] ; then
453 echo building WRF-HYDRO
454 compileflags="${compileflags}!-DWRF_HYDRO"
455 echo $compileflags
459 # compile options that come from the environment, such as chemistry
460 # the "!" is removed by Config.pl
461 if [ -n "$WRF_MARS" ] ; then
462 if [ $WRF_MARS = 1 ] ; then
463 echo building WRF for Mars
464 compileflags="${compileflags}!-DPLANET!-DMARS"
465 echo $compileflags
469 if [ -n "$WRF_TITAN" ] ; then
470 if [ $WRF_TITAN = 1 ] ; then
471 echo building WRF for Titan
472 compileflags="${compileflags}!-DPLANET!-DTITAN"
476 if [ -n "$WRF_VENUS" ] ; then
477 if [ $WRF_VENUS = 1 ] ; then
478 echo building WRF for Venus
479 compileflags="${compileflags}!-DPLANET!-DVENUS"
482 if [ -n "$WRF_QUIETLY" ]; then
483 echo WRF_QUIETLY is now a synonym for WRF_LOG_BUFFERING
484 echo setting WRF_LOG_BUFFERING to 1...
485 export WRF_LOG_BUFFERING=1
487 if [ -n "$WRF_LOG_BUFFERING" ]; then
488 if [ $WRF_LOG_BUFFERING = 1 ]; then
489 echo building WRF with support for buffering of log messages
490 compileflags="${compileflags}!-DWRF_LOG_BUFFERING=1"
493 if [ -n "$PNETCDF_QUILT" ]; then
494 echo Enabling quilt_pnc I/O server implementation.
495 compileflags="${compileflags}!-DPNETCDF_QUILT=1"
497 if [ -n "$WRF_DFI_RADAR" ] ; then
498 if [ $WRF_DFI_RADAR = 1 ] ; then
499 echo building WRF with radar dfi option
500 compileflags="${compileflags}!-DWRF_DFI_RADAR=1"
504 if [ -n "$WRF_CMAQ" ] ; then
505 echo building WRF with CMAQ option
506 compileflags="${compileflags}!-DWRF_CMAQ"
509 if [ -n "$WRF_CHEM" ] ; then
510 if [ $WRF_CHEM = 1 ] ; then
511 echo building WRF with chemistry option
512 compileflags="${compileflags}!-DWRF_CHEM!-DBUILD_CHEM=1"
513 if [ -n "$WRF_KPP" ] ; then
514 if [ $WRF_KPP = 1 ] ; then
515 echo building WRF with KPP chemistry option
516 compileflags="${compileflags}!-DWRF_KPP"
519 else
520 compileflags="${compileflags} "
522 else
523 compileflags="${compileflags} "
526 if [ -n "$WRFPLUS" ] ; then
527 if [ $WRFPLUS = 1 ] ; then
528 echo building WRF for TL and AD
529 compileflags="!-DWRFPLUS"
530 echo $compileflags
534 type m4 > /dev/null
535 if [ $? -ne 0 ] ; then
536 echo
537 echo "ERROR ERROR ERROR ERROR ERROR ERROR ERROR"
538 echo "'m4' utility not found! Can not configure."
539 echo
540 echo "If on an Ubuntu machine, use the command"
541 echo " sudo apt-get install m4 "
542 echo "To download and install the 'm4' utility"
543 exit 1
546 if command -v timex > /dev/null 2>&1; then
547 FORTRAN_COMPILER_TIMER=timex
548 echo "Will use 'timex' to report timing information"
549 elif command -v time > /dev/null 2>&1; then
550 FORTRAN_COMPILER_TIMER=time
551 echo "Will use 'time' to report timing information"
554 # Is this some type of WRF DA build? If so, it is real*8.
555 # Let's go ahead and set a flag internally.
556 if test -n "$wrf_core" ; then
557 if [ "$wrf_core" = "DA_CORE" -o \
558 "$wrf_core" = "4D_DA_CORE" -o \
559 "$wrf_core" = "WRF_PLUS_CORE" ] ; then
560 rword="-r8"
564 # Found perl, so proceed with configuration
565 if test -n "$PERL" ; then
566 srch=`grep -i "^#ARCH.*$os" arch/configure.defaults | grep -i "$mach"`
567 if [ -n "$srch" ] ; then
568 $PERL arch/Config.pl -dmparallel=$COMMLIB -ompparallel=$OMP -perl=$PERL \
569 -netcdf=$NETCDF -pnetcdf=$PNETCDF -netcdfpar=$NETCDFPAR -hdf5=$HDF5 -phdf5=$PHDF5 -os=$os -mach=$mach -ldflags=$ldflags \
570 -compileflags=$compileflags -opt_level=$opt_level -USENETCDFF=$USENETCDFF -USENETCDF=$USENETCDF \
571 -time=$FORTRAN_COMPILER_TIMER -tfl="$TFL" -cfl="$CFL" -config_line="$config_line" \
572 -wrf_core=$wrf_core -gpfs=$GPFS_PATH -curl=$CURL_PATH -dep_lib_path="$DEP_LIB_PATH"
573 if test ! -f configure.wrf ; then
574 echo "configure.wrf not created! Exiting configure script..."
575 exit 1
577 if [ "$opt_level" = "-d" ] ; then
578 sed -e 's/FCOPTIM[ ]*=/& # /' -e '/FCDEBUG[ ]*=/s/#//' configure.wrf > configure.wrf.edit
579 /bin/mv configure.wrf.edit configure.wrf
581 if [ "$opt_level" = "-D" ] ; then
582 sed -e 's/FCOPTIM[ ]*=/& # /' -e '/FCDEBUG[ ]*=/s/#//g' configure.wrf > configure.wrf.edit
583 /bin/mv configure.wrf.edit configure.wrf
586 # GNU has a funny way of doing promotion to real*8
587 if [ "$rword" = "-r8" ] ; then
588 srch=`grep -i "^SFC" configure.wrf | grep -i "gfortran"`
589 if [ -n "$srch" ] ; then
590 sed -e '/^PROMOTION/s/#//' \
591 -e '/^RWORDSIZE/s/$(NATIVE_RWORDSIZE)/8/' configure.wrf > configure.wrf.edit
592 else
593 sed -e '/^RWORDSIZE/s/$(NATIVE_RWORDSIZE)/8/' configure.wrf > configure.wrf.edit
595 /bin/mv configure.wrf.edit configure.wrf
596 sed -e 's/-DBUILD_SBM_FAST=1/-DBUILD_SBM_FAST=0/' configure.wrf > configure.wrf.edit
597 /bin/mv configure.wrf.edit configure.wrf
599 else
600 echo '*********************************************************'
601 echo '*** ERROR ERROR ERROR ERROR ***'
602 echo '*** ***'
603 echo '*** Configuration not found in configure.defaults ***'
604 echo '*********************************************************'
605 exit 2
609 if test -f configure.wrf ; then
610 # new dec 2005. test what fseek is supported (needed for share/landread.c to work correctly)
611 echo testing for fseeko and fseeko64
612 /bin/rm -f tools/fseeko_test tools/fseeko64_test
613 ( make fseek_test 2> /dev/null ) 1> /dev/null
614 if [ "$os" = "Darwin" ] ; then
615 # fseeko64 does not exist under Darwin fseeko does. Remove the 0 length executable
616 # file that might get generated anyway, even though the compiler complains about missing reference.
617 /bin/rm -f tools/fseeko64_test
619 if test -x tools/fseeko64_test ; then
620 ( tools/fseeko64_test 2> /dev/null ) 1> /dev/null
621 if [ $? = 0 ] ; then
622 echo fseeko64 is supported
623 sed '/^CC .*=/s/$/ -DFSEEKO64_OK /' configure.wrf > xx$$ ; /bin/mv xx$$ configure.wrf
625 else
626 if test -x tools/fseeko_test ; then
627 ( tools/fseeko_test 2> /dev/null ) 1> /dev/null
628 if [ $? = 0 ] ; then
629 echo fseeko is supported and handles 64 bit offsets
630 sed '/^CC .*=/s/$/ -DFSEEKO_OK /' configure.wrf > xx$$ ; /bin/mv xx$$ configure.wrf
631 else
632 echo neither fseeko64 nor fseeko with 64 bit offsets works, landread will be compiled with fseek
633 echo but may not work correctly for very high resolution terrain datasets
635 else
636 echo neither fseeko64 nor fseeko with 64 bit offsets works, landread will be compiled with fseek
637 echo but may not work correctly for very high resolution terrain datasets
642 echo "------------------------------------------------------------------------"
643 sed -e '1,/#### Architecture specific settings ####/d' -e '/^externals/,$d' configure.wrf
645 echo "------------------------------------------------------------------------"
646 echo "Settings listed above are written to configure.wrf."
647 echo "If you wish to change settings, please edit that file."
648 echo "If you wish to change the default options, edit the file:"
649 echo " arch/configure.defaults"
651 if test -n "$NETCDF" ; then
652 if [ ! -f $NETCDF/include/netcdf.inc ] ; then
653 echo
654 echo "Error : Not found $NETCDF/include/netcdf.inc"
655 echo " Please check this installation of NetCDF and re-run this configure script"
656 exit -1
658 grep nf_format_64bit $NETCDF/include/netcdf.inc > /dev/null
659 configure_aaaa=$? ; export configure_aaaa
660 if [ $configure_aaaa -a -z "$WRFIO_NCD_NO_LARGE_FILE_SUPPORT" ] ; then
661 echo "NetCDF users note:"
662 echo " This installation of NetCDF supports large file support. To DISABLE large file"
663 echo " support in NetCDF, set the environment variable WRFIO_NCD_NO_LARGE_FILE_SUPPORT"
664 echo " to 1 and run configure again. Set to any other value to avoid this message."
667 echo " "
669 if [ "$wrf_core" = "DA_CORE" -o "$wrf_core" = "WRF_PLUS_CORE" -o "$wrf_core" = "4D_DA_CORE" ]; then
670 if [ "`grep '^SFC' configure.wrf | grep -i 'gfortran'`" != "" -o "`grep '^SFC' configure.wrf | grep -i 'frtpx'`" != "" ]; then
671 echo "WRFDA/WRFPLUS using gfortran/frtpx needs realsize=8"
672 sed -e '/^PROMOTION.*=/s/#//' configure.wrf > configure.wrf.edit
673 /bin/mv configure.wrf.edit configure.wrf
677 if [ -n "$WRFPLUS" ] ; then
678 if [ $WRFPLUS = 1 ] ; then
679 if [ `grep '^SFC' configure.wrf | cut -d= -f2` = "gfortran" ]; then
680 echo "WRFPLUS using gfortran needs realsize=8"
681 sed -e '/^PROMOTION.*=/s/#//' configure.wrf > configure.wrf.edit
682 /bin/mv configure.wrf.edit configure.wrf
687 #Checking cross-compiling capability for some particular environment
688 #on Linux and Mac box
690 if [ $os = "Linux" -o $os = "Darwin" ]; then
692 SFC=`grep '^SFC' configure.wrf | awk '{print $3}'`
693 SCC=`grep '^SCC' configure.wrf | awk '{print $3}'`
694 CCOMP=`grep '^CCOMP' configure.wrf | awk '{print $3}'`
696 SFC="`type $SFC 2>/dev/null | awk '{print $NF}' | sed -e 's/(//g;s/)//g'`"
697 SCC="`type $SCC 2>/dev/null | awk '{print $NF}' | sed -e 's/(//g;s/)//g'`"
698 CCOMP="`type $CCOMP 2>/dev/null | awk '{print $NF}' | sed -e 's/(//g;s/)//g'`"
700 foo=foo_$$
702 grep '^SFC' configure.wrf | grep -i 'gfortran' > /dev/null
703 if [ $? ]
704 then
706 cat > ${foo}.F << EOF
707 PROGRAM GFORTRAN_VERSION_CHECK
708 IF (__GNUC__ .GT. 9) CALL EXIT(1)
709 END PROGRAM
712 gfortran -o ${foo} ${foo}.F > /dev/null 2>&1 && ./${foo}
713 if [ $? -eq 1 ]
714 then
715 sed '/^FCCOMPAT/ s/$/ -fallow-argument-mismatch -fallow-invalid-boz/' configure.wrf > configure.wrf.edit
716 mv configure.wrf.edit configure.wrf
718 rm ${foo} ${foo}.F 2> /dev/null
721 cat > ${foo}.c <<EOF
722 int main(int argc, char ** argv)
724 return (0);
728 cat > ${foo}.f <<EOF
729 program test_exit
730 integer :: STATUS = 0
731 call EXIT(STATUS)
732 end program test_exit
735 # do not do this test for MIC, which cross compiles
736 if [ -z "`grep 'SCC.*mmic' configure.wrf`" ] ; then
737 # Detecting whether if mpi compiler wrapper supports -cc/-f90 options
738 if [ -z "`grep -i -E '^DMPARALLEL[ \t]*=.*#' configure.wrf`" ] ; then
739 mpicc -cc=$SCC -o ${foo} ${foo}.c > /dev/null 2>&1
740 if [ $? != 0 ]; then
741 sed 's/-cc=$(SCC)//' configure.wrf > configure.wrf.edit
742 mv configure.wrf.edit configure.wrf
744 rm ${foo} ${foo}.o 2> /dev/null
745 mpif90 -f90=$SFC -o ${foo} ${foo}.f > /dev/null 2>&1
746 if [ $? != 0 ]; then
747 sed 's/-f90=$(SFC)//' configure.wrf > configure.wrf.edit
748 mv configure.wrf.edit configure.wrf
750 rm ${foo} ${foo}.o 2> /dev/null
754 if [ -e $NETCDF/lib/libnetcdf.a -a "$SFC" != "" -a "$SCC" != "" -a "$CCOMP" != "" ]; then
756 SFC_MULTI_ABI=0
757 SCC_MULTI_ABI=0
758 CCOMP_MULTI_ABI=0
759 CROSS_COMPILING=0
761 echo
762 echo Testing for NetCDF, C and Fortran compiler
763 echo
765 ar p $NETCDF/lib/libnetcdf.a `ar t $NETCDF/lib/libnetcdf.a | grep -E '\.o' | head -n 1 | sed 's/://'` > ${foo}.o
766 netcdf_arch="`file ${foo}.o | grep -o -E '[0-9]{2}-bit|i386'`"
767 rm ${foo}.o
769 $SFC -o ${foo} ${foo}.f > /dev/null 2>&1
770 SFC_arch="`file ${foo} | grep -o -E '[0-9]{2}-bit|i386'`"
771 rm ${foo} ${foo}.o 2> /dev/null
773 $SCC -o ${foo} ${foo}.c > /dev/null 2>&1
774 SCC_arch="`file ${foo} | grep -o -E '[0-9]{2}-bit|i386'`"
775 CCOMP_arch=$SCC_arch
776 rm ${foo} ${foo}.o 2> /dev/null
778 if [ "$SCC" != "$CCOMP" ]; then
779 $CCOMP -o ${foo} ${foo}.c > /dev/null 2>&1
780 CCOMP_arch="`file ${foo} | grep -o -E '[0-9]{2}-bit|i386'`"
781 rm ${foo} ${foo}.o 2> /dev/null
784 if [ "$SFC_arch" = "" -o "$SCC_arch" = "" -o "$CCOMP_arch" = "" ]; then
785 echo " One of compilers testing failed!"
786 echo " Please check your compiler"
787 echo
788 rm -f ${foo} ${foo}.[cfo] 2> /dev/null
789 exit
790 else
791 cp configure.wrf configure.wrf.edit
794 case $netcdf_arch in
796 32-bit|i386 )
798 if [ "$SFC_arch" = "64-bit" ] ; then
799 CROSS_COMPILING=1
800 $SFC -m32 -o ${foo} ${foo}.f > /dev/null 2>&1
801 if [ $? = 0 ]; then
802 SFC_MULTI_ABI=1
803 sed '/^SFC.*=/s/$/ -m32/' configure.wrf.edit > configure.wrf.tmp
804 mv configure.wrf.tmp configure.wrf.edit
807 if [ "$SCC_arch" = "64-bit" ] ; then
808 CROSS_COMPILING=1
809 $SCC -m32 -o ${foo} ${foo}.c > /dev/null 2>&1
810 if [ $? = 0 ]; then
811 SCC_MULTI_ABI=1
812 sed '/^SCC.*=/s/$/ -m32/' configure.wrf.edit > configure.wrf.tmp
813 mv configure.wrf.tmp configure.wrf.edit
817 if [ "$CCOMP_arch" = "64-bit" ] ; then
818 CROSS_COMPILING=1
819 if [ "$CCOMP" != "$SCC" ]; then
820 $CCOMP -m32 -o ${foo} ${foo}.c > /dev/null 2>&1
821 if [ $? = 0 ]; then
822 CCOMP_MULTI_ABI=1
823 sed '/^CCOMP/ s/$/ -m32/' configure.wrf.edit > configure.wrf.tmp
824 mv configure.wrf.tmp configure.wrf.edit
826 else
827 CCOMP_MULTI_ABI=1
828 sed '/^CCOMP/ s/$/ -m32/' configure.wrf.edit > configure.wrf.tmp
829 mv configure.wrf.tmp configure.wrf.edit
833 if [ $CROSS_COMPILING -eq 1 ] ; then
834 echo NOTE:
835 echo This installation of NetCDF is 32-bit
836 if [ \( $SFC_MULTI_ABI -ne 1 -a "$SFC_arch" = "64-bit" \) \
837 -o \( $SCC_MULTI_ABI -ne 1 -a "$SCC_arch" = "64-bit" \) \
838 -o \( $CCOMP_MULTI_ABI -ne 1 -a "$CCOMP_arch" = "64-bit" \) ] ; then
839 rm configure.wrf.edit
840 echo One of compilers is 64-bit and doesn\'t support cross-compiling.
841 echo Please check your NETCDF lib and compiler
842 else
843 echo -m32 is appended to configure.wrf
844 echo It will be forced to build in 32-bit.
845 echo If you don\'t want 32-bit binaries, please use 64-bit NetCDF, and re-run the configure script.
850 64-bit )
852 if [ "$SFC_arch" = "32-bit" -o "$SFC_arch" = "i386" ] ; then
853 CROSS_COMPILING=1
854 $SFC -m64 -o ${foo} ${foo}.f > /dev/null 2>&1
855 if [ $? = 0 ]; then
856 SFC_MULTI_ABI=1
857 sed '/^SFC.*=/s/$/ -m64/' configure.wrf.edit > configure.wrf.tmp
858 mv configure.wrf.tmp configure.wrf.edit
861 if [ "$SCC_arch" = "32-bit" -o "$SCC_arch" = "i386" ] ; then
862 CROSS_COMPILING=1
863 $SCC -m64 -o ${foo} ${foo}.c > /dev/null 2>&1
864 if [ $? = 0 ]; then
865 SCC_MULTI_ABI=1
866 sed '/^SCC.*=/s/$/ -m64/' configure.wrf.edit > configure.wrf.tmp
867 mv configure.wrf.tmp configure.wrf.edit
871 if [ "$CCOMP_arch" = "32-bit" -o "$CCOMP_arch" = "i386" ] ; then
872 CROSS_COMPILING=1
873 if [ "$CCOMP" != "$SCC" ]; then
874 $CCOMP -m64 -o ${foo} ${foo}.c > /dev/null 2>&1
875 if [ $? = 0 ]; then
876 CCOMP_MULTI_ABI=1
877 sed '/^CCOMP/ s/$/ -m64/' configure.wrf.edit > configure.wrf.tmp
878 mv configure.wrf.tmp configure.wrf.edit
880 else
881 CCOMP_MULTI_ABI=1
882 sed '/^CCOMP/ s/$/ -m64/' configure.wrf.edit > configure.wrf.tmp
883 mv configure.wrf.tmp configure.wrf.edit
887 if [ $CROSS_COMPILING -eq 1 ] ; then
888 echo NOTE:
889 echo This installation of NetCDF is 64-bit
890 if [ \( $SFC_MULTI_ABI -ne 1 -a "$SFC_arch" != "64-bit" \) \
891 -o \( $SCC_MULTI_ABI -ne 1 -a "$SCC_arch" != "64-bit" \) \
892 -o \( $CCOMP_MULTI_ABI -ne 1 -a "$CCOMP_arch" != "64-bit" \) ]; then
893 rm configure.wrf.edit
894 echo One of Compilers is 32-bit and doesn\'t support cross-compiling.
895 echo Please check your NetCDF lib and compiler
896 else
897 echo -m64 is appended to configure.wrf
898 echo It will be forced to build in 64-bit.
899 echo If you don\'t want 64-bit binaries, please use 32-bit NetCDF, and re-run the configure script.
903 esac
905 if [ -e configure.wrf.edit ]; then
906 mv configure.wrf.edit configure.wrf
909 if [ $CROSS_COMPILING -eq 0 ] ; then
910 echo "This installation of NetCDF is $netcdf_arch"
911 echo " C compiler is $SCC_arch"
912 echo " Fortran compiler is $SFC_arch"
913 echo " It will build in $netcdf_arch"
914 echo " "
915 if [ -e $NETCDF/bin/nc-config ] ; then
916 echo "NetCDF version: ${ncversion}"
917 echo "Enabled NetCDF-4/HDF-5: `nc-config --has-nc4`"
918 echo "NetCDF built with PnetCDF: `nc-config --has-pnetcdf`"
919 if [ "$USENETCDFPAR" == "1" ] ; then
920 echo "Using parallel NetCDF via NETCDFPAR option"
922 echo " "
925 echo
927 rm -f ${foo} ${foo}.[cfo] 2> /dev/null
930 # testing for Fortran 2003 IEEE features
931 make fortran_2003_ieee_test > tools/fortran_2003_ieee_test.log 2>&1
932 rm -f tools/fortran_2003_ieee_test.log
933 retval=-1
934 if [ -f tools/fortran_2003_ieee_test.exe ] ; then
935 retval=0
937 if [ $retval -ne 0 ] ; then
938 sed -e '/^ARCH_LOCAL/s/$/ -DNO_IEEE_MODULE/' configure.wrf > configure.wrf.edit
939 mv configure.wrf.edit configure.wrf
940 echo " "
941 echo " "
942 echo "************************** W A R N I N G ************************************"
943 echo " "
944 echo "There are some IEEE Fortran 2003 features in WRF that your compiler does not"
945 echo "recognize. The IEEE function calls have been removed."
946 echo " "
947 echo "*****************************************************************************"
950 # testing for Fortran 2003 ISO_C features
951 make fortran_2003_iso_c_test > tools/fortran_2003_iso_c_test.log 2>&1
952 rm -f tools/fortran_2003_iso_c_test.log
953 retval=-1
954 if [ -f tools/fortran_2003_iso_c_test.exe ] ; then
955 retval=0
957 if [ $retval -ne 0 ] ; then
958 sed -e '/^ARCH_LOCAL/s/$/ -DNO_ISO_C_SUPPORT/' configure.wrf > configure.wrf.edit
959 mv configure.wrf.edit configure.wrf
960 echo " "
961 echo " "
962 echo "************************** W A R N I N G ************************************"
963 echo " "
964 echo "There are some Fortran 2003 features in WRF that your compiler does not recognize"
965 echo "The routines that utilize ISO_C support have been stubbed out. "
966 echo "That may not be enough."
967 echo " "
968 echo "*****************************************************************************"
971 # testing for Fortran 2003 FLUSH features
972 make fortran_2003_flush_test > tools/fortran_2003_flush_test.log 2>&1
973 rm -f tools/fortran_2003_flush_test.log
974 retval=-1
975 if [ -f tools/fortran_2003_flush_test.exe ] ; then
976 retval=0
978 if [ $retval -ne 0 ] ; then
979 make fortran_2003_fflush_test > tools/fortran_2003_fflush_test.log 2>&1
980 rm -f tools/fortran_2003_fflush_test.log
981 retval=-1
982 if [ -f tools/fortran_2003_fflush_test.exe ] ; then
983 retval=0
985 if [ $retval -eq 0 ] ; then
986 sed -e '/^ARCH_LOCAL/s/$/ -DUSE_FFLUSH/' configure.wrf > configure.wrf.edit
987 mv configure.wrf.edit configure.wrf
988 echo " "
989 echo " "
990 echo "************************** W A R N I N G ************************************"
991 echo " "
992 echo "There are some Fortran 2003 features in WRF that your compiler does not recognize"
993 echo "The standard FLUSH routine has been replaced by FFLUSH."
994 echo "That may not be enough."
995 echo " "
996 echo "*****************************************************************************"
998 if [ $retval -ne 0 ] ; then
999 sed -e '/^ARCH_LOCAL/s/$/ -DNO_FLUSH_SUPPORT/' configure.wrf > configure.wrf.edit
1000 mv configure.wrf.edit configure.wrf
1001 echo " "
1002 echo " "
1003 echo "************************** W A R N I N G ************************************"
1004 echo " "
1005 echo "There are some Fortran 2003 features in WRF that your compiler does not recognize"
1006 echo "The standard FLUSH routine has been stubbed out."
1007 echo "That may not be enough."
1008 echo " "
1009 echo "*****************************************************************************"
1013 # testing for Fortran 2008 intrinsic gamma function
1014 make fortran_2008_gamma_test > tools/fortran_2008_gamma.log 2>&1
1015 rm -f tools/fortran_2008_gamma.log
1016 retval=-1
1017 if [ -f tools/fortran_2008_gamma_test.exe ] ; then
1018 retval=0
1020 if [ $retval -ne 0 ] ; then
1021 sed -e '/^ARCH_LOCAL/s/$/ -DNO_GAMMA_SUPPORT/' configure.wrf > configure.wrf.edit
1022 mv configure.wrf.edit configure.wrf
1023 echo " "
1024 echo " "
1025 echo "************************** W A R N I N G ************************************"
1026 echo " "
1027 echo "There are some Fortran 2008 features in WRF that your compiler does not recognize"
1028 echo "The intrinsic gamma function is not available, required by some schemes."
1029 echo "That code is stubbbed out, and those schemes are unavailable at run-time."
1030 echo " "
1031 echo "*****************************************************************************"
1034 # testing for location of rpc/types.h file, used in landuse
1035 if [ -f /usr/include/rpc/types.h ] ; then
1036 sed -e '/^CFLAGS_LOCAL/s/#/-DRPC_TYPES=1 &/' configure.wrf > configure.wrf.edit
1037 mv configure.wrf.edit configure.wrf
1038 elif [ -f /usr/include/tirpc/rpc/types.h ] ; then
1039 sed -e '/^CFLAGS_LOCAL/s/#/-DRPC_TYPES=2 &/' configure.wrf > configure.wrf.edit
1040 mv configure.wrf.edit configure.wrf
1041 else
1042 echo "************************** W A R N I N G ************************************"
1043 echo " "
1044 echo "The moving nest option is not available due to missing rpc/types.h file."
1045 echo "Copy landread.c.dist to landread.c in share directory to bypass compile error."
1046 echo " "
1047 echo "*****************************************************************************"
1050 # testing for netcdf4 IO features
1051 if [ -n "$NETCDF4" ] ; then
1052 if [ $NETCDF4 -eq 1 ] ; then
1053 make nc4_test > tools/nc4_test.log 2>&1
1054 retval=-1
1055 if [ -f tools/nc4_test.exe ] ; then
1056 retval=0
1057 rm -f tools/nc4_test.log
1059 if [ $retval -ne 0 ] ; then
1060 echo "************************** W A R N I N G ************************************"
1061 echo "NETCDF4 IO features are requested, but this installation of NetCDF "
1062 echo " $NETCDF"
1063 echo "DOES NOT support these IO features. "
1064 echo
1065 echo "Please make sure NETCDF version is 4.1.3 or later and was built with "
1066 echo "--enable-netcdf4 "
1067 echo
1068 echo "OR set NETCDF_classic variable "
1069 echo " bash/ksh : export NETCDF_classic=1 "
1070 echo " csh : setenv NETCDF_classic 1 "
1071 echo
1072 echo "Then re-run this configure script "
1073 echo
1074 echo "!!! configure.wrf has been REMOVED !!!"
1075 echo
1076 echo "*****************************************************************************"
1077 rm -f configure.wrf
1078 else
1079 echo "*****************************************************************************"
1080 echo "This build of WRF will use NETCDF4 with HDF5 compression"
1081 echo "*****************************************************************************"
1082 echo " "
1085 else
1086 echo "*****************************************************************************"
1087 echo "This build of WRF will use classic (non-compressed) NETCDF format"
1088 echo "*****************************************************************************"
1089 echo " "