I've tweaked the IRAF spec files some more.  They are in

https://github.com/joequant/iraf in the debug branch under the rpm directory.  The main changes involved setting up the environment variables to be a bit more robust.

I've also done work on getting IRAF to work with gfortran.  It's not working, but I've gotten it to compile, and I think I know what the main problem is.  The trouble is that rpp generates code that looks like

Integer Memi(1)
Common /mem/ memd
equivalence (memi, memd)

The trouble is that in f90, the compiler optimizes out array overflows, so that this won't work to get a memory pointer.  I tried a few workarounds, they work, but they aren't clean.  The correct fix should be to generate code that looks like

Integer, pointer:: memi
memi = memd