Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/bash
#set -x
set -o posix
#set -u
#set -e
#+
#
# ==================
# Fcheck_archfile.sh
# ==================
#
# --------------------------
# Check the compilation file
# --------------------------
#
# SYNOPSIS
# ========
#
# ::
#
# $ Fcheck_archfile.sh
#
#
# DESCRIPTION
# ===========
#
#
# Check the choice of the compiler.
# Three cases :
#
# - There was a previous choice
# - A new one has be specified, we use this one
# - No information, exit
#
# We use TOOLS/COMPILE/arch.fcm to see if something was chosen.
#
# EXAMPLES
# ========
#
# ::
#
# $ ./Fcheck_archfile.sh ARCHFILE CPPFILE COMPILER
#
#
# TODO
# ====
#
# option debug
#
#
# EVOLUTIONS
# ==========
#
# $Id: Fcheck_archfile.sh 14945 2021-06-04 07:38:41Z gsamson $
#
#
#
# * creation
#
#-
cpeval ()
{
cat > $2 << EOF
#==========================================================
# Automatically generated by Fcheck_archfile.sh from
# $1
#==========================================================
EOF
while read line
do
eval "echo \"$line\" >> $2"
done < $1
}
rm -f $( find $(dirname $1) -type f -name $(basename $1) -print )

Guillaume Samson
committed
if [ ! -f $(dirname $1)/arch.history ]; then
echo "Warning !!!"
echo "NO compiler chosen"
echo "Try makenemo -h for help"
echo "EXITING..."
exit 1
else # use the arch file defined in arch.history
myarch=$( cat $(dirname $1)/arch.history )
if [ ! -f $myarch ]; then
echo "Warning !!!"
echo "previously used arch file no more found:"
echo $myarch
echo "EXITING..."
exit 1
else
if [ -f $1 ]; then
if [[ ! "$2" =~ "nocpp" ]]
then
# has the cpp keys file been changed since we copied the arch file in ${COMPIL_DIR}?
mycpp=$( ls -l $2 | sed -e "s/.* -> //" )
if [ "$mycpp" != "$( cat $(dirname $2)/cpp.history )" ]; then
echo $mycpp > $(dirname $2)/cpp.history
cpeval ${myarch} $1
fi
# has the cpp keys file been updated since we copied the arch file in ${COMPIL_DIR}?
mycpp=$( find -L $(dirname $2) -cnewer $(basename $1) -name $(basename $2) -print )
[ ${#mycpp} -ne 0 ] && cpeval ${myarch} $1
fi
# has myarch file been updated since we copied it in ${COMPIL_DIR}?
myarchdir=$( dirname ${myarch} )
myarchname=$( basename ${myarch} )
myarch=$( find -L $myarchdir -cnewer $(basename $1) -name $myarchname -print )
[ ${#myarch} -ne 0 ] && cpeval ${myarch} $1
fi
fi
fi
else
nb=$( find ${MAIN_DIR}/arch -name arch-${3}.fcm -print | wc -l )
if [ $nb -eq 0 ]; then # no arch file found
echo "Warning !!!"
echo "Compiler not existing"
echo "Try makenemo -h for help"
echo "EXITING..."
exit 1
fi
if [ $nb -gt 1 ]; then # more than 1 arch file found
echo "Warning !!!"
echo "more than 1 arch file for the same compiler have been found"
find ${MAIN_DIR}/arch -name arch-${3}.fcm -print
echo "keep only 1"
echo "EXITING..."
exit 1
fi
myarch=$( find ${MAIN_DIR}/arch -name arch-${3}.fcm -print )
# we were already using this arch file ?
if [ "$myarch" == "$( cat $(dirname $1)/arch.history 2>/dev/null)" ]; then
if [ -f $1 ]; then
if [[ ! "$2" =~ "nocpp" ]]
then
# has the cpp keys file been changed since we copied the arch file in ${COMPIL_DIR}?
mycpp=$( ls -l $2 | sed -e "s/.* -> //" )
if [ "$mycpp" != "$( cat $(dirname $2)/cpp.history )" ]; then
echo $mycpp > $(dirname $2)/cpp.history
cpeval ${myarch} $1
fi
# has the cpp keys file been updated since we copied the arch file in ${COMPIL_DIR}?
mycpp=$( find -L $(dirname $2) -cnewer $(basename $1) -name $(basename $2) -print )
[ ${#mycpp} -ne 0 ] && cpeval ${myarch} $1
fi
# has myarch file been updated since we copied it in ${COMPIL_DIR}?
myarch=$( find -L ${MAIN_DIR}/arch -cnewer $(basename $1) -name arch-${3}.fcm -print )
[ ${#myarch} -ne 0 ] && cpeval ${myarch} $1
if [[ ! "$2" =~ "nocpp" ]]
ls -l $2 | sed -e "s/.* -> //" > $(dirname $2)/cpp.history
echo ${myarch} > $(dirname $1)/arch.history
cpeval ${myarch} $1
fi
fi
#- do we need xios library?
#- 2 cases:
#- in CONFIG directory looking for key_xios or key_iomput
if [ "$(basename $1)" == "arch_nemo.fcm" ]
if [[ ! "$2" =~ "nocpp" ]]
use_iom=$( sed -e "s/#.*$//" $2 | grep -c "key_xios\|key_iomput" )
have_lxios=$( sed -e "s/#.*$//" $1 | grep -c "\-lxios" )
if [[ ( $use_iom -eq 0 ) && ( $have_lxios -ge 1 ) ]]
then
sed -e "s/-lxios//g" $1 > $(dirname $1)/tmp$$
mv -f $(dirname $1)/tmp$$ $1
fi
#- in TOOLS directory looking for USE xios
else
use_iom=$( egrep --exclude-dir=.svn -r USE ${MAIN_DIR}/src/* | grep -c xios )
have_lxios=$( sed -e "s/#.*$//" $1 | grep -c "\-lxios" )
if [[ ( $use_iom -eq 0 ) || ( $have_lxios != 1 ) ]]
then
sed -e "s/-lxios//g" $1 > $(dirname $1)/tmp$$
mv -f $(dirname $1)/tmp$$ $1
if [[ ! "$2" =~ "nocpp" ]]
use_oasis=$( sed -e "s/#.*$//" $2 | grep -c key_oasis3 )
else
use_oasis=0
fi
#ignore use_oasis if XIOS_OASIS is set (doesn't matter to what value)
if [[ ! -z "$XIOS_OASIS" ]]; then
use_oasis=1
fi
for liboa in psmile.MPI1 mct mpeu scrip mpp_io
do
have_liboa=$( sed -e "s/#.*$//" $1 | grep -c "\-l${liboa}" )
if [[ ( $use_oasis -eq 0 ) && ( $have_liboa -ge 1 ) ]]
then
sed -e "s/-l${liboa}//g" $1 > $(dirname $1)/tmp$$
mv -f $(dirname $1)/tmp$$ $1

Guillaume Samson
committed
# Nemo debug ?
if [ -n "${NEMO_DBG}" ]; then
if (! grep -q "^%DEBUG_FCFLAGS" $1 ); then

Guillaume Samson
committed
echo "ERROR: You must defined '%DEBUG_FCFLAGS' in your arch file if you want to compile Nemo in debug mode using '-d' option"
exit 1
fi
# duplicate the lines starting with %DEBUG_XXX and replace, in the duplicated line, %DEBUG_XXX by %XXX
sed -i "/^%DEBUG_/{p;s/^%DEBUG_\([^ ]*\)/%\1/;}" $1

Guillaume Samson
committed
else
if (! grep -q "^%PROD_FCFLAGS" $1 ); then

Guillaume Samson
committed
echo "WARNING: '%PROD_FCFLAGS' not defined in your arch file, makenemo will use '%FCFLAGS' instead"
fi
# duplicate the lines starting with %PROD_XXX and replace, in the duplicated line, %PROD_XXX by %XXX
sed -i "/^%PROD_/{p;s/^%PROD_\([^ ]*\)/%\1/;}" $1