#!/usr/bin/env perl

use strict;
use warnings;

my %cpp_options = (
   "ABINITGW"=>"OK",
   "CONTRACT"=>"OK",
   "HAVE_CONFIG_H"=>"OK",
   "MACOSX"=>"OK",
   "T3E"=>"OK",
   "VMS"=>"OK",
   "HAVE_COMPAQ_FFT"=>"OK",
   "HAVE_FFTW"=>"OK",
   "HAVE_FFTWTHREADS"=>"OK",
   "HAVE_HP_MLIB"=>"OK",
   "HAVE_IBM_ESSL"=>"OK",
   "HAVE_IBM_ESSL_OLD"=>"Probably obsolete (cgeicd)",
   "HAVE_NEC_ASL"=>"OK",
   "HAVE_NETCDF"=>"OK",
   "HAVE_NQXC"=>"OK",
   "HAVE_SGI_MATH"=>"OK",
   "HAVE_XMLF90"=>"OK",
   "MPI"=>"OK",
   "MPI1"=>"OK",
   "MPI2"=>"OK",
   "MPI3"=>"OK",
   "MPIO"=>"OK",
   "MPI_EXT"=>"OK",
   "MPI_FFT"=>"OK",
   "MPI_TRACE"=>"OK",
   "ABSOFT_FC"=>"OK",
   "COMPAQ_FC"=>"OK",
   "FUJITSU_FC"=>"OK",
   "HITACHI_FC"=>"OK",
   "HP_FC"=>"OK",
   "IBM_FC"=>"OK",
   "INTEL_FC"=>"OK",
   "MIPSPRO_FC"=>"OK",
   "NAG_FC"=>"OK",
   "NEC_FC"=>"OK",
   "SUN_FC"=>"OK",
   "HAVE_FORTRAN_EXIT"=>"OK",
   "READ_FROM_FILE"=>"OK",
   "__INTEL_COMPILER"=>"OK",
   "i386"=>"OK",
   "TEST_AIM"=>"Unmaintained",
   "OPENMP"=>"Unmaintained",
   "PGIWin"=>"Unmaintained",
   "T3E"=>"Unmaintained",
   "__IFC"=>"Replaced by __INTEL__COMPILER",
   "__VMS"=>"Replaced by VMS",
   "CHGSTDIO"=>"Replaced by READ_FROM_FILE",
   "FFTW"=>"Replaced by HAVE_FFTW",
   "FFTWTHREADS"=>"Replaced by HAVE_FFTWTHREADS",
   "MPIEXT"=>"Replaced by MPI_EXT",
   "NAGf95"=>"Replaced by NAG_FC",
   "P6"=>"Replaced by i386",
   "TRACE"=>"Replaced by MPI_TRACE",
   "bim"=>"Replaced by HAVE_IBM_ESSL",
   "bmi"=>"Replaced by HAVE_IBM_ESSL_OLD",
   "cen"=>"Replaced by HAVE_NEC_ASL or NEC_FC",
   "dec_alpha"=>"Replaced by COMPAQ_FC",
   "hp"=>"Replaced by HAVE_HP_MLIB or HP_FC",
   "hpux"=>"Replaced by HAVE_HP_MLIB",
   "ibm"=>"Replaced by XL_FC",
   "macosx"=>"Replaced by MACOSX",
   "mpi"=>"Replaced by MPI",
   "nec"=>"Replaced by HAVE_NEC_ASL or NEC_FC",
   "nolib"=>"Replaced by HAVE_COMPAQ_FFT",
   "sgi"=>"Replaced by HAVE_SGI_MATH or MIPSPRO_FC",
   "sr8k"=>"Replaced by HITACHI_FC",
   "vpp"=>"Replaced by FUJITSU_FC",
   "OLD_INIT"=>"Removed",
   "ultrix"=>"Removed");

my %options_found;

foreach my $src (split(/\n/,`grep -l '^#' src/*/*.F90`))
{
   open(INP,"<$src");
   while ( <INP> )
   {
      if ( /^#if/ )
      {
         chomp();
         s/^#[\s]*//;
         s/[\s]*$//;

         if ( /^if/ or /^elif/ )
         {
            s/ifdef//;
            s/ifndef//;
            s/if//;
            s/elif//;
            s/defined//g;
            s/[!\(\)]//g;
            s/\&\&//g;
            s/\|\|//g;
            s/^[\s]+//;
            s/[\s]+/ /g;
            s/\\$//;

            foreach my $opt (split(/\s+/,$_))
            {
               if ( $options_found{$opt} )
               {
                  $options_found{$opt}++;
               }
               else
               {
                  $options_found{$opt} = 1;
               }
            }
         }
      }
   }
   close(INP);
}

printf "%-20s %4s   %-40s\n","Option","#","Status";
print  "-------------------- ----   ----------------------------------------\n";
foreach my $opt (sort keys %options_found)
{
   printf "%-20s %4d   ",$opt,$options_found{$opt};

   if ( ! $cpp_options{$opt} )
   {
      print "UNKNOWN\n";
   }
   else
   {
      print "$cpp_options{$opt}\n";
   }
}

foreach my $opt (sort keys %cpp_options)
{
   if ( (! $options_found{$opt}) and ($cpp_options{$opt} eq "OK") )
   {
      printf "%-20s %4d   Unused\n",$opt,0;
   }
}

print  "-------------------- ----   ----------------------------------------\n";
