source: modipsl/trunk/util/model @ 2

Last change on this file since 2 was 2, checked in by rblod, 16 years ago

First import of modipsl utilities

  • Property svn:executable set to *
File size: 11.4 KB
Line 
1#!/bin/ksh
2#- $Id: model,v 2.8 2005/06/17 11:43:38 adm Exp $
3#---------------------------------------------------------------------
4# @(#)Actions relatives aux modeles IPSL
5#---------------------------------------------------------------------
6#-
7#set -xv
8MAIL_ADDRESS=patricia.cadule@ipsl.jussieu.fr
9MAIL_COM=mail
10#MAIL_COM=Mail
11#------------------------------------------------------------
12#- Decomposition du nom d'appel de la procedure (d_n/b_n) ---
13#------------------------------------------------------------
14d_n=$(dirname $0); b_n=$(basename $0);
15#--------------------------------------
16#- Saisie et validation des options ---
17#--------------------------------------
18m_n=""; m_a=""; m_v='silencious'; no_tag='false';
19while getopts :heudrvH V
20  do
21    case $V in
22      (h)  m_a='help';;
23      (e)  m_a='checkout';;
24      (u)  m_a='update';;
25      (d)  m_a='diff';;
26      (r)  m_a='remove';;
27      (v)  m_v='verbose';;
28      (H)  no_tag='true';;
29      (:)  echo ${b_n}" : option $OPTARG : missing value" 1>&2;
30           exit 2;;
31      (\?) echo ${b_n}" : option $OPTARG : not supported" 1>&2;
32           exit 2;;
33    esac
34  done
35shift $(($OPTIND-1));
36case ${m_a} in
37  ( checkout | update | diff | remove ) ;;
38  ("") m_a='checkout';;
39esac
40#-----------------------------
41#- Saisie du nom du modele ---
42#-----------------------------
43if   [ ${#} -gt 1 ]; then
44  echo 'Only one model can be specified' 1>&2;
45  exit 3;
46elif [ ${#} -eq 1 ]; then
47  m_n="${1}";
48elif [ ${m_a} != 'help' ]; then
49  echo 'Model not specified' 1>&2;
50  echo 'Try "'${b_n}' -h [model-name]"' 1>&2;
51  exit 3;
52fi
53#-----------------------------------------------
54#- Test d'existence du fichier de definition ---
55#-----------------------------------------------
56F_DEF=${d_n}'/mod.def'
57[ ! -f "${F_DEF}" ] && { echo "${F_DEF} unreachable ..."; exit 3; }
58#-----------------------------------------------
59#- Extraction des noms des modeles supportes ---
60#-----------------------------------------------
61QQQ=$(sed -n -e "s/^#-C-  *\([^ ]*\).*$/\1/p" ${F_DEF});
62qi=0; for i in ${QQQ}; do ((qi=qi+1)); m_x[qi]=${i}; done
63#-------------------------------------------------------------
64#- Validation du nom du modele et saisie des informations  ---
65#-------------------------------------------------------------
66[ '\?'"${m_n}" != '\?' ] && \
67  {
68    i_m=-1;
69    qi=0; while (( ${qi} < ${#m_x[@]} ))
70      do
71        ((qi=qi+1));
72        [ ${m_n} = ${m_x[qi]} ] && { i_m=${qi}; break; };
73      done
74    (( ${i_m} < 0 )) && \
75     { echo 'Model '"${m_n}"' unknown' 1>&2;
76       echo 'Try "'${b_n}' -h"' 1>&2;
77       exit 3; }
78    #- Recherche de l'adresse email a qui envoyer les infos
79    QQQ=$(sed -n -e "s/^#-M-  *${m_n}  *//p" ${F_DEF});
80    [ '\?'"${QQQ}" = '\?' ] && \
81      { echo 'Address mail not found for '${m_n}; exit 3; }
82    m_m=${QQQ}
83    #- Recherche des composants
84    QQQ=$(sed -n -e "s/^#-C-  *${m_n}  *//p" ${F_DEF});
85    [ '\?'"${QQQ}" = '\?' ] && \
86      { echo 'Components not found for '${m_n}; exit 3; }
87    qi=0; for i in ${QQQ}; do ((qi=qi+1)); m_c[qi]=${i}; done
88    #- Recherche des tags
89    QQQ=$(sed -n -e "s/^#-T-  *${m_n}  *//p" ${F_DEF});
90    [ '\?'"${QQQ}" = '\?' ] && \
91      { echo 'Tags not found for '${m_n}; exit 3; }
92    qi=0; for i in ${QQQ}
93      do 
94        ((qi=qi+1));
95         if [ ${no_tag} = 'false' ]; then
96           m_t[qi]=${i};
97         else
98           m_t[qi]='?'
99         fi
100      done
101    #- Recherche des serveurs CVS
102    QQQ=$(sed -n -e "s/^#-I-  *${m_n}  *//p" ${F_DEF});
103    [ '\?'"${QQQ}" = '\?' ] && \
104      { echo 'Indexes not found for '${m_n}; exit 3; }
105    qi=0; for i in ${QQQ}
106      do
107        ((qi=qi+1));
108        QQS=$(sed -n -e "s/^#-S-  *${i}  *//p" ${F_DEF});
109        [ '\?'"${QQS}" = '\?' ] && \
110          { echo 'Server number '${i}' not found'; exit 3; }
111        m_s[qi]=${QQS};
112      done
113    #- Recherche des directories
114    QQQ=$(sed -n -e "s/^#-D-  *${m_n}  *//p" ${F_DEF});
115    [ '\?'"${QQQ}" = '\?' ] && \
116      { echo 'Target Directories not found for '${m_n}; exit 3; }
117    qi=0; for i in ${QQQ}; do ((qi=qi+1)); m_d[qi]=${i}; m_l[qi]="modeles"; done     
118    #- Recherche des local directories
119    QQQ=$(sed -n -e "s/^#-L-  *${m_n}  *//p" ${F_DEF});
120    [ '\?'"${QQQ}" = '\?' ] || \
121    qi=0; for i in ${QQQ}; do ((qi=qi+1)); m_l[qi]=${i}; done     
122  }
123#----------------------------------------------------------------
124# envoi d'un mail si c'est la premiere fois qu on utilise modipsl
125#      ie directory ~/.modipsl do not exist
126#----------------------------------------------------------------
127D_LOG=${HOME}/.modipsl
128[ -d "${D_LOG}" ] || { mkdir "${D_LOG}" ; echo `date +"%D %T"` `whoami` `uname -m` first usage of model | ${MAIL_COM} -s "first usage of modipsl" ${MAIL_ADDRESS} >/dev/null 2>&1 ; echo `date +"%D %T"` creation >"${D_LOG}"/first ; }
129#--------------------------
130#- Traitement du "help" ---
131#--------------------------
132if [ ${m_a} = 'help' ]; then
133  echo ' ';
134  if [ '\?'"${m_n}" = '\?' ]; then
135    echo 'Usage    :';
136    echo ${b_n} '[-h]';
137    echo ${b_n} '[-h] model_name';
138    echo ${b_n} '[-e/u/d/r] [-H] [-v] model_name';
139    echo 'h            : this help';
140    echo 'h model-name : help on model';
141    echo 'e/u/d/r      : extract/update/diff/remove model';
142    echo 'H            : suppreses the tags and takes the HEAD version';
143    echo 'v            : verbose mode';
144    echo 'Defaults     : -e';
145    echo ' ';
146    echo 'model_name in :';
147    qi=0; while (( ${qi} < ${#m_x[@]} ));
148      do ((qi=qi+1)); echo ${m_x[qi]}; done
149  else
150    echo 'Modele      : '${m_n};
151    echo ' ';
152    sed -n -e "s/^#-H-  *${m_n}  *//p" ${F_DEF};
153    echo ' ';
154    qi=0; while (( ${qi} < ${#m_c[@]} ))
155      do
156        ((qi=qi+1));
157        echo 'Component '${qi}' : '${m_c[qi]};
158        echo 'Tag       '${qi}' : '${m_t[qi]};
159        echo 'Server    '${qi}' : '${m_s[qi]};
160        echo 'Directory '${qi}' : '${m_d[qi]};
161        echo 'Local Dir '${qi}' : '${m_l[qi]};
162      done
163  fi
164  echo ' ';
165  exit 0;
166fi
167#----------------------------------------------------------
168# enregistrement de la commande dans une log
169#----------------------------------------------------------
170F_LOG=${d_n}'/log'
171echo "${F_LOG}"
172echo `date +"%D %T"` $0 $* >>"${F_LOG}"
173#-------------
174#- VERBOSE ---
175#-------------
176[ ${m_v} = 'verbose' ] && \
177 { echo '--- Model        : '${m_n};
178   echo '--- Action       : '${m_a};
179   echo '--- Mode         : '${m_v}; }
180#---------------------------------------------
181#- record in F_LOG file model information  ---
182#---------------------------------------------
183{ echo '--- Model        : '${m_n};
184  echo '--- Action       : '${m_a};
185  echo '--- Mode         : '${m_v};
186  echo '--- Mail address : '${m_m}; } >>"${F_LOG}"
187#-----------------------------------------
188#- Repertoire d'accueil des composants ---
189#-----------------------------------------
190###d_m=${d_n}'/../modeles';
191d_m=${d_n}'/../';
192#--------------------------------------------------------------------
193#- Envoi d'un mail la premiere fois  qu on appelle model de ce modele
194#-    ie file ~/.modipsl/log.${m_n}
195#--------------------------------------------------------------------
196M_LOG=${D_LOG}/log.${m_n}
197[ -f "${M_LOG}" ] || { echo `date +"%D %T"` `whoami` `uname -m` first usage of model ${m_n} | ${MAIL_COM} -s "first usage of model ${m_n}" ${m_m} >/dev/null 2>&1 ; echo `date +"%D %T"` model ${m_n} >"${M_LOG}" ; }
198#-------------------------------
199#- Extraction des composants ---
200#-------------------------------
201qi=0; while (( ${qi} < ${#m_c[@]} ))
202  do
203    ((qi=qi+1)); zc=${m_c[qi]}; zt=${m_t[qi]}; zs=${m_s[qi]}; zd=${m_d[qi]}; zl=${m_l[qi]};
204    [ ${m_v} = 'verbose' ] && \
205     { echo '---';
206       echo '--- Component  : '${zc};
207       echo '--- Tag        : '${zt};
208       echo '--- CVS Server : '${zs};
209       echo '--- Directory  : '${zd};
210       echo '--- Local Dir  : '${zl}; }
211#---------------------------------------------
212#- record in F_LOG file model information  ---
213#---------------------------------------------
214     { echo '---';
215       echo '--- Component  : '${zc};
216       echo '--- Tag        : '${zt};
217       echo '--- CVS Server : '${zs};
218       echo '--- Directory  : '${zd};
219       echo '--- Local Dir  : '${zl}; } >>"${F_LOG}"
220    case ${m_a} in
221      ( checkout | update | diff )
222        c_c='(cd '${d_m}/${zl}'; cvs -d :pserver:'${zs}' '${m_a};
223        [ ${m_a} = 'checkout' -a ${zt} != '?' ] && \
224         { c_c=${c_c}' -r '${zt}; }
225        [ ${m_a} = 'checkout' -a ${zd} != '.' ] && \
226         { c_c=${c_c}' -d '${zd}; } 
227        c_c=${c_c}' '${zc}')';;
228      ( remove )
229        c_c='(cd '${d_m}/${zl}'; rm -rf '${zc}')';;
230      (*)
231        echo 'Action '"${m_a}"' not supported' 1>&2;
232        exit 4;;
233    esac
234    grep "${zs%%/*}"'.*/'"${zs#*/}" ~/.cvspass > /dev/null;
235    if [ ${?} != 0 ]; then
236      c_z='cvs -d :pserver:'${zs}' login';
237      [ ${m_v} = 'verbose' ] && { echo ${c_z}; }
238      eval ${c_z};
239    fi
240    [ ${m_v} = 'verbose' ] && { echo '--- Command    : '${c_c}; }
241    eval ${c_c};
242  done
243#--------------------------------------------------------
244#- Traitement du repertoire WORK pour les modeles OPA ---
245#--------------------------------------------------------
246case ${m_n} in
247  ( EEL* |  ORCA* | OFF_TRC | IPSLCM* | ORCA_TOYATM | NEMO_ORCA2_LIM | GYRE )
248    d_m1=${d_m}/modeles/OPA  ;
249    [ ${m_a} = 'checkout' -o ${m_a} = 'remove' ] &&
250      { [ -d ${d_m1}/WORK ] && \rm -rf ${d_m1}/WORK; };
251    [ ${m_a} = 'checkout' -o ${m_a} = 'update' ] &&
252   {
253     [ -d ${d_m1}/WORK ] || mkdir ${d_m1}/WORK;
254     cd ${d_m1}/WORK;
255# Getting the configuration files to build the Makefile
256     ln -sf ../../../*/${m_n}/scripts/BB_make AA_make ;
257     ln -sf ../../../*/${m_n}/scripts/BB_make.ldef AA_make.ldef ;
258     case ${m_n} in
259       ( ORCA2_LMDZ96x71 )
260         echo " Creation du catalogue OPA/WORK = ORCA + LIM"
261         ln -sf ../SRC_ORCA/*.[Ffh] .
262         ln -sf ../SRC_UCL/[a-z]* .
263         ln -sf ../../${m_n}/scripts/prep.sed.coupled .;;
264       ( ORCA2 | ORCA4 | ORCA05 | EEL2 | EEL6 )
265         echo " Creation du catalogue OPA/WORK = ORCA"
266         ln -sf ../SRC_ORCA/*.[Ffh] .;;
267       ( ORCA*LIM | IPSLCM* | ORCA_TOYATM | ORCA*LMD* )
268         [ "${m_n}" = "IPSLCM4_LOOP" ] && echo " Creation du catalogue OPA/WORK = ORCA + LIM + TRC" || echo " Creation du catalogue OPA/WORK = ORCA + LIM"
269         ln -sf ../SRC_ORCA/*.[Ffh] .
270         [ "${m_n}" = "IPSLCM4_LOOP" ] && \rm *.passivetrc.h
271         [ "${m_n}" = "IPSLCM4_LOOP" ] && ln -sf ../SRC_TRC/*.[Ffh] ../SRC_TRC/trc_sms/*.[Ffh] .
272         ln -sf ../SRC_UCL/[a-z]* .;;
273       ( ORCA*_LIM_TRC )
274         echo " Creation du catalogue OPA/WORK = ORCA + LIM + TRC"
275         ln -sf ../SRC_ORCA/*.[Ffh] .
276         \rm *.passivetrc.h
277         ln -sf ../SRC_TRC/*.[Ffh] ../SRC_TRC/trc_sms/*.[Ffh] .
278         ln -sf ../SRC_UCL/[a-z]* .;;
279       ( *LOBSTER1 )
280         echo " Creation du catalogue OPA/WORK = ORCA + TRC"
281         ln -sf ../SRC_ORCA/*.[Ffh] .
282         \rm *.passivetrc.h
283         ln -sf ../SRC_TRC/*.[Ffh] ../SRC_TRC/trc_sms/*.[Ffh] .;;
284       ( ORCA*_OFF_TRC )
285         echo " Creation du catalogue OPA/WORK = TRC + OFFLINE"
286         ln -sf ../SRC_TRC/*.[Ffh] ../SRC_TRC/trc_sms/*.[Ffh] .
287         ln -sf ../SRC_OFFLINE_TRC/*.[Ffh] .;;
288     esac
289# Building the standard list of source files
290     cat >.patron <<"EOF" 
291CVS
292SRC_PARAM
293SRC_FILE_LIST
294tmplist
295AA_make
296KEY_CPP
297Makefile
298*?.o
299 i.?*
300*?.L
301.patron
302bloc.com
303para.com
304defcst.f
305fontbc.f
306icdyna.f
307thersf.f
308EOF
309     ls -1 | fgrep -v -f .patron  >SRC_FILE_LIST ; cp SRC_FILE_LIST SRC_FILE_LIST.temp ;
310#
311     KEY=$(grep P_P AA_make.ldef);
312     [ -f "KEY_CPP" ] || echo $KEY > KEY_CPP;
313    };;
314esac
315#-------------
316#- [EN]FIN ---
317#-------------
318exit 0;
Note: See TracBrowser for help on using the repository browser.