| 1 |
#! /usr/bin/env bash |
| 2 |
|
| 3 |
# $Header: $ |
| 4 |
# $Name: $ |
| 5 |
|
| 6 |
mkfile='Makefile' |
| 7 |
if [ $# -ge 1 ] ; then |
| 8 |
if test $1 = '-h' ; then |
| 9 |
echo "Usage: `basename $0` MAKEFILE (default: 'Makefile') ; [-h] print this" |
| 10 |
exit 9 |
| 11 |
fi |
| 12 |
mkfile=$1 |
| 13 |
fi |
| 14 |
|
| 15 |
if test ! -f $mkfile ; then |
| 16 |
echo "`basename $0` error: missing file '$mkfile'" |
| 17 |
exit 8 |
| 18 |
fi |
| 19 |
|
| 20 |
cmdline=`grep '^# .*genmake2 ' $mkfile | sed 's/^# *//'` |
| 21 |
echo " get Command-Line from file '$mkfile' :" |
| 22 |
echo $cmdline |
| 23 |
|
| 24 |
printf "=== Parse Options ===\n" |
| 25 |
CMDLINE= |
| 26 |
MODS= |
| 27 |
flg=0 |
| 28 |
MPI=0 |
| 29 |
prev= |
| 30 |
dbq=0 ; sgq=0 ; keep= |
| 31 |
# put newline between word in cmdline: |
| 32 |
# CMDLINE=`echo $cmdline | awk '{ for(i=1;i<=NF;i++) print $i}'` |
| 33 |
#echo "CMDLINE='$CMDLINE'" |
| 34 |
for xx in $cmdline |
| 35 |
do |
| 36 |
arg=`echo $xx` |
| 37 |
# glue multiple words argument (unbalanced starting & ending double quote) |
| 38 |
n1=`echo $xx | grep -c '^"'` |
| 39 |
n2=`echo $xx | grep -c '"$'` |
| 40 |
if [ $n1 -eq 1 -a $n2 -eq 0 ] ; then |
| 41 |
dbq=1; keep=$xx |
| 42 |
continue |
| 43 |
fi |
| 44 |
if [ $n1 -eq 0 -a $dbq -eq 1 ] ; then |
| 45 |
if [ $n2 -eq 1 ] ; then |
| 46 |
n1=$dbq ; dbq=0 |
| 47 |
xx="$keep $xx" |
| 48 |
else |
| 49 |
keep="$keep $xx" |
| 50 |
continue |
| 51 |
fi |
| 52 |
fi |
| 53 |
# remove starting & ending double quote |
| 54 |
if [ $n1 -eq 1 -a $n2 -eq 1 ] ; then |
| 55 |
arg=`echo $xx | sed 's/^"//' | sed 's/"$//'` |
| 56 |
fi |
| 57 |
# glue multiple words argument (unbalanced starting & ending single quote) |
| 58 |
n1=`echo $xx | grep -c "^'"` |
| 59 |
n2=`echo $xx | grep -c "'$"` |
| 60 |
if [ $n1 -eq 1 -a $n2 -eq 0 ] ; then |
| 61 |
sgq=1; keep=$xx |
| 62 |
continue |
| 63 |
fi |
| 64 |
if [ $n1 -eq 0 -a $sgq -eq 1 ] ; then |
| 65 |
if [ $n2 -eq 1 ] ; then |
| 66 |
n1=$sgq ; sgq=0 |
| 67 |
xx="$keep $xx" |
| 68 |
else |
| 69 |
keep="$keep $xx" |
| 70 |
continue |
| 71 |
fi |
| 72 |
fi |
| 73 |
# remove starting & ending single quote |
| 74 |
if [ $n1 -eq 1 -a $n2 -eq 1 ] ; then |
| 75 |
arg=`echo $xx | sed "s/^'//" | sed "s/'$//"` |
| 76 |
fi |
| 77 |
# process "arg" |
| 78 |
opt=`expr "x$arg" : 'x[^=]*=\(.*\)'` |
| 79 |
# echo "xx='$xx' ; arg='$arg' ; opt='$opt'" |
| 80 |
# sav "arg" to CMDLINE <- not actually used |
| 81 |
#eqs=`echo $arg | grep -c '='` |
| 82 |
#if [ $eqs -gt 0 ] ; then |
| 83 |
# pfx=`echo $arg | sed 's/=.*$/=/'` |
| 84 |
# nw=`echo $opt | wc -w` |
| 85 |
# if test $nw = '1' ; then |
| 86 |
# CMDLINE="$CMDLINE $pfx$opt" |
| 87 |
# else |
| 88 |
# CMDLINE="$CMDLINE $pfx'$opt'" |
| 89 |
# fi |
| 90 |
#else |
| 91 |
nw=`echo $arg | wc -w` |
| 92 |
if test $nw = '1' ; then |
| 93 |
CMDLINE="$CMDLINE $arg" |
| 94 |
else |
| 95 |
CMDLINE="$CMDLINE '$arg'" |
| 96 |
fi |
| 97 |
#fi |
| 98 |
if test -n "$prev" -a $flg = '1' ; then |
| 99 |
eval "$prev=\$arg" |
| 100 |
prev= |
| 101 |
continue |
| 102 |
fi |
| 103 |
case $arg in |
| 104 |
-mpi | --mpi | -mpi=* | --mpi=* ) |
| 105 |
MPI=`expr $MPI + 1` ;; |
| 106 |
-mods | --mods | -mo | --mo ) |
| 107 |
prev=MODS |
| 108 |
flg=`expr $flg + 1` ;; |
| 109 |
-mods=* | --mods=* | -mo=* | --mo=* ) |
| 110 |
MODS=$opt |
| 111 |
flg=`expr $flg + 1` ;; |
| 112 |
*) ;; |
| 113 |
esac |
| 114 |
done |
| 115 |
|
| 116 |
printf "=== \n" |
| 117 |
echo " Set MPI='$MPI' ; MODS='$MODS'" |
| 118 |
#echo "flg='$flg'" |
| 119 |
|
| 120 |
if [ $flg -lt 1 ] ; then |
| 121 |
echo "`basename $0` error: no '-mods' found" |
| 122 |
exit 4 |
| 123 |
fi |
| 124 |
if [ $flg -gt 1 ] ; then |
| 125 |
echo "`basename $0` error: found multiple '-mods' ($flg)" |
| 126 |
exit 3 |
| 127 |
fi |
| 128 |
if [ $MPI -gt 1 ] ; then |
| 129 |
echo "`basename $0` error: found multiple '-mpi' ($MPI)" |
| 130 |
exit 2 |
| 131 |
fi |
| 132 |
|
| 133 |
#---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
| 134 |
|
| 135 |
printf "=== Link / Unlink *_mpi files from 'MODS' dirs ===\n" |
| 136 |
printf " MODS dir: " |
| 137 |
MPI_LNKF= |
| 138 |
for d in $MODS ; do |
| 139 |
if test ! -d $d ; then |
| 140 |
echo |
| 141 |
echo "Error: MODS directory \"$d\" not found!" |
| 142 |
exit 1 |
| 143 |
else |
| 144 |
printf "$d " |
| 145 |
#SOURCEDIRS="$SOURCEDIRS $d" |
| 146 |
#INCLUDEDIRS="$INCLUDEDIRS $d" |
| 147 |
#------------------------------------------------------- |
| 148 |
# Put special links so that MPI specific files are used |
| 149 |
MPI_FILES=`(cd $d ; find . -name "*_mpi" -print)` |
| 150 |
for i in $MPI_FILES ; do |
| 151 |
ii=`echo $i | sed 's:^\./::'` |
| 152 |
name=`echo $ii | sed 's:_mpi::' ` |
| 153 |
if test $MPI = 0 ; then |
| 154 |
# NO: We undo an _mpi symbolically linked file |
| 155 |
if test -L $name ; then |
| 156 |
cmp $name "$d/$ii" > /dev/null 2>&1 |
| 157 |
RETVAL=$? |
| 158 |
if test "x$RETVAL" = x0 ; then |
| 159 |
printf "Un-linking $name ; " |
| 160 |
rm -f $name |
| 161 |
fi |
| 162 |
fi |
| 163 |
else |
| 164 |
# YES: We symbolically link this file (with conditions if already there) |
| 165 |
src="$d/$ii" |
| 166 |
if test $name = "SIZE.h" -a -f SIZE.h.mpi ; then src="SIZE.h.mpi" ; fi |
| 167 |
if test -L $name ; then |
| 168 |
cmp $src $name > /dev/null 2>&1 |
| 169 |
RETVAL=$? |
| 170 |
yy=0 ; |
| 171 |
for xx in $MPI_LNKF ; do if test $xx = $name ; then yy=1 ; fi ; done |
| 172 |
if test "x$RETVAL" != x0 -a $yy = 0 ; then |
| 173 |
# remove sym-link if different and has not just been linked |
| 174 |
printf "Un-link + " |
| 175 |
rm -f $name |
| 176 |
fi |
| 177 |
if test "x$RETVAL" = x0 ; then |
| 178 |
# if identical, keep sym-link and keep record of it |
| 179 |
MPI_LNKF="$MPI_LNKF $name" |
| 180 |
fi |
| 181 |
fi |
| 182 |
if ! test -f $name ; then |
| 183 |
# make sym-link and keep record of it |
| 184 |
printf "Linking $src to $name ; " |
| 185 |
ln -sf $src $name |
| 186 |
MPI_LNKF="$MPI_LNKF $name" |
| 187 |
fi |
| 188 |
fi |
| 189 |
done |
| 190 |
#------------------------------------------------------- |
| 191 |
fi |
| 192 |
done |
| 193 |
echo |
| 194 |
echo "MPI_LNKF='$MPI_LNKF'" |
| 195 |
|
| 196 |
#---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
| 197 |
printf "=== Generate new Makefile ===\n" |
| 198 |
#echo $CMDLINE |
| 199 |
#eval $CMDLINE |
| 200 |
echo $cmdline |
| 201 |
eval $cmdline |