use ExtUtils::MakeMaker; use PDL::Core::Dev; PDL::Core::Dev->import(); $abort = 0; BEGIN { eval "use ExtUtils::F77"; if ($@ ne "") { warn "\n\tExtUtils::F77 module not found. Will not build PDL::Opt::NonLinear\n\n" ; exit(1); } else { $f77 = 'ExtUtils::F77'; } $compiler_available = $f77->testcompiler; if (!$compiler_available) { warn "\n\n\tNo fortran compiler found. Will not build PDL::Opt::NonLinear on this system\n\n"; exit(1); } } return if $abort; @pack = (["nonlinear.pd",NonLinear,PDL::Opt::NonLinear]); @opti_libfiles = map {s/^opti_lib\///; s/\.f$//; $_} glob("opti_lib/*.f"); %hash = pdlpp_stdargs(@::pack); $hash{INC} .= " -Iopti_lib"; # uncomment as required $hash{OBJECT} .= " opti_lib/hooke.o opti_lib/asa.o opti_lib/asa_usr.o opti_lib/dhc.o opti_lib/de36.o "; $fobj = join '', map {" opti_lib/$_.o "} @opti_libfiles; $hash{OBJECT} .= $fobj; $hash{LDFROM} .= " hooke.o asa.o asa_usr.o dhc.o de36.o ".$fobj."NonLinear.o"; $hash{LIBS}[0] .= $f77->runtime ; $hash{LIBS}[0] .= ' -L/usr/local/lib -lport -lblas' ; $hash{clean}{FILES} .= " f77_underscore" . join '', map {" opti_lib/$_.o "} @opti_libfiles; $hash{clean}{FILES} .= " hooke.o "; # Handle multiple compilers $f2cbased = ($f77->runtime =~ /-lf2c/); $g2cbased = ($f77->runtime =~ /-lg2c/) unless $f2cbased; $trail = $f77->trail_; # Create flag file according to whether or not to use # underscores (pretty hacky) unlink("f77_underscore") if -e "f77_underscore"; if ($trail) { open OUT, ">f77_underscore" or die "unable to write scratch file"; close OUT; } WriteMakefile( %hash, VERSION_FROM => "", # This is overridden by VERSION_FROM in %hash VERSION => "0.03", 'PREREQ_PM' => { PDL, PDL::LinearAlgebra } ); sub MY::postamble { $mycompiler = $f77->compiler(); $mycflags = $f77->cflags();#." -ff2c "; my $orig = pdlpp_postamble(@::pack); $orig =~ s/:\s*nonlinear\.pd/: nonlinear.pd/; $orig .join "\n",map { (" opti_lib/$_\$(OBJ_EXT): opti_lib/$_.f $mycompiler -c -o opti_lib/$_\$(OBJ_EXT) $mycflags -O3 -fPIC opti_lib/$_.f " )} @opti_libfiles; }