#!/bin/bash
#
# This script extracts nproc[xyz] from cparam.local and writes them to nprocs.inc.
#
npxline=`grep '^[^!]*nprocx *=' cparam.local | sed -e's/!.*$//'`
npyline=`grep '^[^!]*nprocy *=' cparam.local | sed -e's/!.*$//'`
npzline=`grep '^[^!]*nprocz *=' cparam.local | sed -e's/!.*$//'`
#
# Extracts nproc[xyz] defined by numerals and writes to nprocs.inc.
#
# MacOS doesn't like semicolon
#echo $npxline | sed -e's/.*nprocx *= *\([0-9][0-9]*\) *,.*$/nprocx:=\1/;t;d;' > nprocs.inc
#echo $npyline | sed -e's/.*nprocy *= *\([0-9][0-9]*\) *,.*$/nprocy:=\1/;t;d;' >> nprocs.inc
#echo $npzline | sed -e's/.*nprocz *= *\([0-9][0-9]*\) *,.*$/nprocz:=\1/;t;d;' >> nprocs.inc
echo $npxline | sed -e's/.*nprocx *= *\([0-9][0-9]*\) *,.*$/nprocx:=\1/' -e't' -e'd' > nprocs.inc
echo $npyline | sed -e's/.*nprocy *= *\([0-9][0-9]*\) *,.*$/nprocy:=\1/' -e't' -e'd' >> nprocs.inc
echo $npzline | sed -e's/.*nprocz *= *\([0-9][0-9]*\) *,.*$/nprocz:=\1/' -e't' -e'd' >> nprocs.inc

#echo $npxline | sed -e's/.*nprocx *= *\([0-9][0-9]*\) *$/nprocx:=\1/;t;d' >> nprocs.inc
#echo $npyline | sed -e's/.*nprocy *= *\([0-9][0-9]*\) *$/nprocy:=\1/;t;d' >> nprocs.inc
#echo $npzline | sed -e's/.*nprocz *= *\([0-9][0-9]*\) *$/nprocz:=\1/;t;d' >> nprocs.inc
echo $npxline | sed -e's/.*nprocx *= *\([0-9][0-9]*\) *$/nprocx:=\1/' -e't' -e'd' >> nprocs.inc
echo $npyline | sed -e's/.*nprocy *= *\([0-9][0-9]*\) *$/nprocy:=\1/' -e't' -e'd' >> nprocs.inc
echo $npzline | sed -e's/.*nprocz *= *\([0-9][0-9]*\) *$/nprocz:=\1/' -e't' -e'd' >> nprocs.inc
#
# Extract nproc[xyz] defined by expressions.
#
#npxexpr=`echo $npxline | sed -e's/^.*nprocx *= *\([^,]*[A-Za-z_][^,]*\).*$/\1/;t cont;d;t;:cont;s/\([a-zA-Z_][a-zA-Z_]*\)/$(\1)/g;s/^\(.*\)$/nprocx= \1/'`
#npyexpr=`echo $npyline | sed -e's/^.*nprocy *= *\([^,]*[A-Za-z_][^,]*\).*$/\1/;t cont;d;t;:cont;s/\([a-zA-Z_][a-zA-Z_]*\)/$(\1)/g;s/^\(.*\)$/nprocy= \1/'`
#npzexpr=`echo $npzline | sed -e's/^.*nprocz *= *\([^,]*[A-Za-z_][^,]*\).*$/\1/;t cont;d;t;:cont;s/\([a-zA-Z_][a-zA-Z_]*\)/$(\1)/g;s/^\(.*\)$/nprocz= \1/'`
npxexpr=`echo $npxline | sed -e's/^.*nprocx *= *\([^,]*[A-Za-z_][^,]*\).*$/\1/' -e't cont' -e'd' -e't' -e':cont' -e's/\([a-zA-Z_][a-zA-Z_]*\)/$(\1)/g' -e's/^\(.*\)$/nprocx= \1/'`
npyexpr=`echo $npyline | sed -e's/^.*nprocy *= *\([^,]*[A-Za-z_][^,]*\).*$/\1/' -e't cont' -e'd' -e't' -e':cont' -e's/\([a-zA-Z_][a-zA-Z_]*\)/$(\1)/g' -e's/^\(.*\)$/nprocy= \1/'`
npzexpr=`echo $npzline | sed -e's/^.*nprocz *= *\([^,]*[A-Za-z_][^,]*\).*$/\1/' -e't cont' -e'd' -e't' -e':cont' -e's/\([a-zA-Z_][a-zA-Z_]*\)/$(\1)/g' -e's/^\(.*\)$/nprocz= \1/'`
#
# Write expressions to nprocs.inc.
#
echo $npxexpr >> nprocs.inc
echo $npyexpr >> nprocs.inc
echo $npzexpr >> nprocs.inc
#
# Sort evaluations of expressions according to dependencies.
#
if [[ $npxexpr =~ ^.*=.*nprocy.*$ ]]; then                        # does nprocx depend on nprocy etc.
  if [[ $npyexpr =~ ^.*=.*nprocz.*$ ]]; then
    echo 'nprocz := $(shell echo $$(($(nprocz))))' >> nprocs.inc;
    echo 'nprocy := $(shell echo $$(($(nprocy))))' >> nprocs.inc;
    echo 'nprocx := $(shell echo $$(($(nprocx))))' >> nprocs.inc;
  else
    echo 'nprocy := $(shell echo $$(($(nprocy))))' >> nprocs.inc;
    if [[ $npxexpr =~ ^.*=.*nprocz.*$ ]]; then
      echo 'nprocz := $(shell echo $$(($(nprocz))))' >> nprocs.inc;
      echo 'nprocx := $(shell echo $$(($(nprocx))))' >> nprocs.inc;
    else
      echo 'nprocx := $(shell echo $$(($(nprocx))))' >> nprocs.inc;
      echo 'nprocz := $(shell echo $$(($(nprocz))))' >> nprocs.inc;
    fi
  fi
else
  if [[ $npxexpr =~ ^.*=.*nprocz.*$ ]]; then
    if [[ $npzexpr =~ ^.*=.*nprocy.*$ ]]; then
      echo 'nprocy := $(shell echo $$(($(nprocy))))' >> nprocs.inc;
      echo 'nprocz := $(shell echo $$(($(nprocz))))' >> nprocs.inc;
      echo 'nprocx := $(shell echo $$(($(nprocx))))' >> nprocs.inc;
    else
      echo 'nprocz := $(shell echo $$(($(nprocz))))' >> nprocs.inc;
      echo 'nprocx := $(shell echo $$(($(nprocx))))' >> nprocs.inc;
      echo 'nprocy := $(shell echo $$(($(nprocy))))' >> nprocs.inc;
    fi
  else
    echo 'nprocx := $(shell echo $$(($(nprocx))))' >> nprocs.inc;
    if [[ $npyexpr =~ ^.*=.*nprocz.*$ ]]; then
      echo 'nprocz := $(shell echo $$(($(nprocz))))' >> nprocs.inc;
      echo 'nprocy := $(shell echo $$(($(nprocy))))' >> nprocs.inc;
    else
      echo 'nprocy := $(shell echo $$(($(nprocy))))' >> nprocs.inc;
      echo 'nprocz := $(shell echo $$(($(nprocz))))' >> nprocs.inc;
    fi
  fi
fi
