NCAR / hrldas

HRLDAS (High Resolution Land Data Assimilation System)
Other
50 stars 52 forks source link

newer versions of perl may not have 'switch' -- relevant for config #213

Open bsu-wrudisill opened 1 day ago

bsu-wrudisill commented 1 day ago

It appears that not all versions of perl have the 'switch' module installed as a default, and I found it somewhat difficult to install the switch module on my system.

See here: https://github.com/NCAR/hrldas/blob/e6853efc84d884836122e42e02a9ea2e748ec75b/hrldas/configure#L26C13-L26C14

Based on my reading it sounds like the 'given/when' syntax is preferred with new versions of perl.

With the aid of a ChatGPT, I was able to replace the switch statements with given/when which appears to work:


!/usr/bin/perl

use feature 'switch';

if ($#ARGV == 0) { $response = shift(@ARGV); print("Configure HRLDAS: $response \n"); } else { print "Please select from the following supported architectures: \n\n";

print "   1. Linux PGI compiler serial \n";
print "   2. Linux PGI compiler MPI \n";
print "   3. Linux intel compiler serial \n";
print "   4. Linux intel compiler MPI \n";
print "   5. Linux intel compiler MPI (NCAR/Derecho) \n";
print "   6. Linux gfortran/gcc compiler serial \n";
print "   7. Linux gfortran/gcc compiler MPI \n";
print "   8. Linux gfortran/gcc compiler MPI (NCAR/Derecho) \n";
print "   9. Linux gfortran/gcc compiler MPI (Docker container) \n";
print "   0. exit only \n";

printf "\nEnter selection [%d-%d] : ", 0, 9;

$response = <STDIN>;
chomp($response);

}

given ($response) { when (1) {

serial PGI

    system "cp arch/user_build_options.pgi.serial user_build_options";
}
when (2) {
    # MPI PGI
    system "cp arch/user_build_options.pgi.mpi user_build_options";
}
when (3) {
    # serial intel
    system "cp arch/user_build_options.ifort.serial user_build_options";
}
when (4) {
    # MPI intel
    system "cp arch/user_build_options.ifort.mpi user_build_options";
}
when (5) {
    # MPI intel (NCAR/Derecho)
    system "cp arch/user_build_options.ifort.mpi.derecho user_build_options";
}
when (6) {
    # serial GFORTRAN
    system "cp arch/user_build_options.gfortran.serial user_build_options";
}
when (7) {
    # MPI GFORTRAN
    system "cp arch/user_build_options.gfortran.mpi user_build_options";
}
when (8) {
    # MPI GFORTRAN (NCAR/Derecho)
    system "cp arch/user_build_options.gfortran.mpi.derecho user_build_options";
}
when (9) {
    # MPI GFORTRAN for Docker container
    system "cp arch/user_build_options.gfortran.mpi.container user_build_options";
}
default {
    print "no selection $response\n";
    last;
}

}

print "The user_build_options file used for compiling source code has been successfully generated. \n"; print "Please check and change the software package path in the generated user_build_options file before compiling! \n";