#!/bin/bash #MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence #MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt #MNH_LIC for details. version 1. #set -x if [ $# -ne 2 ] then echo ERROR USAGE :: spll NSOURCE file exit 1 fi NSOURCE=$1 file=$2 DIRNAME=`dirname $file` BASENAME=`basename $file` SUF=`echo $BASENAME | awk -F'.' '{print$2}'` BASENAME2=`basename $BASENAME .$SUF` LOCAL=$PWD TOCASE=${TOCASE-"tolower"} # export PERL5LIB=$SRC_MESONH/bin export FILE_WITHOUT_INTERFACE_NEDEED="\ rttov.*.F90|rttvi.F90|tstrad.*.F90|\ ch_f77.fx90|nband_model.fx90|BASIC.f90|mode_tmat.f90|\ ini_cmfshall.f90|mode_double_double.f90|mode_fgau.f90|\ extern_usersurc_ll.f90|\ extern_userio.f90|fmreadwrit.f90|fm_read_ll.f90|poub.f90|\ mode_glt.*.F90|\ rrtm_.*.F90|srtm_.*.F90|\ libs4py.f90|\ ec_meminfo.F90|\ turb.f90|shallow_mf.f90|rain_ice.f90|lima.f90|\ lima_adjust_split.f90|lima_precip_scavenging.f90|ini_tiwmx.f90|\ ini_snow.f90|ini_rain_ice.f90|ini_neb.f90|ini_cst.f90|\ ice_adjust.f90|gradient_u.f90|gradient_v.f90|gradient_w|\ gamma.f90|gamma_inc.f90|general_gamma.f90|condensation.f90" # if [ "$SUF" = "f" ] then spllbase="spll_$BASENAME2" spllfile="$spllbase.$SUF" echo "!depfile:$BASENAME2.D" > $DIRNAME/$spllfile cat $file >> $DIRNAME/$spllfile echo "#=========== $BASENAME2.$SUF dependence ==========================" > $DIRNAME/$BASENAME2.D echo $spllbase.o : $spllfile >> $DIRNAME/$BASENAME2.D echo " "' $(F77) -I$(OBJDIR)/MOD $(INC) -c $(F77FLAGS) $<' >> $DIRNAME/$BASENAME2.D echo " -mv $spllbase.o $spllbase.lst "' $(OBJDIR)/. || '"echo OK $spllbase.o " >> $DIRNAME/$BASENAME2.D echo " -rm -f ${spllbase}_1.acc.? || echo OK $spllbase.acc " >> $DIRNAME/$BASENAME2.D else TMP=/tmp/split.${USER}.$$ mkdir $TMP trap "[ -d $TMP ] && rm -rf $TMP" 0 export LOC_INTFBDIR=$TMP export INTFBDIR=$TMP #cp $file $TMP/fichier_a_split.f90 cp $file $TMP/$BASENAME echo DIRNAME=$DIRNAME BASENAME=$BASENAME # # Split des sources # ( cd $TMP spl ${BASENAME} > liste_file ) # #generation de l'interface # ( cd $TMP if [ "`ls modi_* 2>/dev/null`" = "" ] then if [ "`echo $BASENAME | egrep -i $FILE_WITHOUT_INTERFACE_NEDEED `" = "" ] then for sfile in `cat liste_file` do if [ "`egrep -i '^ *module|^ *program' $sfile`" = "" ] then if [ "$SUF" = "f90" ] then if [ "${CHECK_MODI}" != "" ] then #echo "HELLO JUAN OK :: $sfile " BASENAME_MODI=$( basename $sfile .$SUF ) echo "!auto_modi_in_contains" > $sfile.tmp echo "module modi_${BASENAME_MODI}" >> $sfile.tmp echo " contains " >> $sfile.tmp cat $sfile >> $sfile.tmp echo "end module modi_${BASENAME_MODI}" >> $sfile.tmp mv $sfile.tmp $sfile else make_intfbl_f90.pl $sfile fi elif [ "$SUF" = "fx90" ] then make_intfbl_f77.pl $sfile fi fi done fi fi ls -1 $TMP > liste_file egrep -v "liste_file" liste_file > liste_file2 ) # # génération des dependances # ( cd $TMP echo "#=========== $BASENAME2.$SUF dependence ==========================" > $DIRNAME/$BASENAME2.D for sfile in `cat liste_file2` do # # preparation of splitted file # base=`echo $sfile | awk -F'.' '{print$1}'` spllbase="spll_$base" spllfile="$spllbase.$SUF" echo "#---------------------- splitted $spllfile dependence -----------" >> $DIRNAME/$BASENAME2.D # echo "!depfile:$BASENAME2.D" > $spllfile # if [ "`grep -l '^[^\!]*\$n' $sfile`" != "" ] then # clonage of "$n" file let iloop=0 while [ $iloop -lt $NSOURCE ] do let iloop=iloop+1 sed -e 's/$n/'$iloop'/g' $sfile >> $spllfile done else cat $sfile >> $spllfile fi # # if splitted file differente of old one, update ... # if [ "`diff $spllfile $DIRNAME/$spllfile 2>&1 `" != "" ] then cp $spllfile $DIRNAME/$spllfile touch $DIRNAME/$BASENAME2.D fi dep=`egrep -i "^[[:space:]]*use " $spllfile | sed -e 's/,/ /g' | awk '{ print '${TOCASE}'($2)".mod"}' | sort -u ` mod=`egrep -i "^[[:space:]]*module " $spllfile | sed -e 's/,/ /g' | awk '{ print '${TOCASE}'($2)".mod"}' | sort -u | grep -iv procedure ` if [ "x$mod" != "x" ] then echo $spllbase.o : >> $DIRNAME/$BASENAME2.D echo $mod : $spllfile $dep >> $DIRNAME/$BASENAME2.D else echo $spllbase.o : $spllfile $dep >> $DIRNAME/$BASENAME2.D fi if [ "$SUF" = "f90" ] then echo " "' $(F90) -I$(OBJDIR)/MOD $(INC) -c $(F90FLAGS) $<' >> $DIRNAME/$BASENAME2.D else echo " "' cp $< $(OBJDIR)/$(*F).f ' >> $DIRNAME/$BASENAME2.D echo " "' $(FX90) -I$(OBJDIR)/MOD $(INC) -c $(FX90FLAGS) $(OBJDIR)/$(*F).f ' >> $DIRNAME/$BASENAME2.D echo " "' rm $(OBJDIR)/$(*F).f ' >> $DIRNAME/$BASENAME2.D fi echo " -mv $spllbase.o $spllbase.lst "' $(OBJDIR)/. || '"echo OK $spllbase.o " >> $DIRNAME/$BASENAME2.D echo " -rm -f ${spllbase}_1.acc.? || echo OK $spllbase.acc " >> $DIRNAME/$BASENAME2.D for filemod in $mod do echo " -mv $filemod "' $(OBJDIR)/MOD/. || '"echo OK $filemod " >> $DIRNAME/$BASENAME2.D done unset dep mod done touch $DIRNAME/$BASENAME2.D ) rm -fr $TMP fi