def METHOD_NAME(self, x, globals=None, locals=None):
    """
    Compile fortran code ``x`` and adds the functions in it to
    ``globals``.
    INPUT:
    - ``x`` -- Fortran code
    - ``globals`` -- a dict to which to add the functions from the
      fortran module
    - ``locals`` -- ignored
    EXAMPLES::
        sage: # needs numpy
        sage: code = '''
        ....: C FILE: FIB1.F
        ....:       SUBROUTINE FIB(A,N)
        ....: C
        ....: C     CALCULATE FIRST N FIBONACCI NUMBERS
        ....: C
        ....:       INTEGER N
        ....:       REAL*8 A(N)
        ....:       DO I=1,N
        ....:          IF (I.EQ.1) THEN
        ....:             A(I) = 0.0D0
        ....:          ELSEIF (I.EQ.2) THEN
        ....:             A(I) = 1.0D0
        ....:          ELSE
        ....:             A(I) = A(I-1) + A(I-2)
        ....:          ENDIF
        ....:       ENDDO
        ....:       END
        ....: C END FILE FIB1.F
        ....: '''
        sage: fortran(code, globals())
        sage: import numpy
        sage: a = numpy.array(range(10), dtype=float)
        sage: fib(a, 10)
        sage: a
        array([  0.,   1.,   1.,   2.,   3.,   5.,   8.,  13.,  21.,  34.])
    TESTS::
        sage: os.chdir(DOT_SAGE)
        sage: fortran.eval("SYNTAX ERROR !@#$")
        Traceback (most recent call last):
        ...
        RuntimeError: failed to compile Fortran code:...
        sage: os.getcwd() == os.path.realpath(DOT_SAGE)
        True
    """
    if globals is None:
        globals = self.globs
        if globals is None:
            from sage.repl.user_globals import get_globals
            globals = get_globals()
    # Create everything in a temporary directory
    mytmpdir = tmp_dir()
    try:
        old_cwd = os.getcwd()
        os.chdir(mytmpdir)
        name = "fortran_module"  # Python module name
        # if the first line has !f90 as a comment, gfortran will
        # treat it as Fortran 90 code
        if x.startswith('!f90'):
            fortran_file = name + '.f90'
        else:
            fortran_file = name + '.f'
        s_lib_path = ['-L' + p for p in self.library_paths]
        s_lib = ['-l' + l for l in self.libraries]
        with open(fortran_file, 'w') as fobj:
            fobj.write(x)
        # This is basically the same as what f2py.compile() does, but we
        # do it manually here in order to customize running the subprocess
        # a bit more (in particular to capture stderr)
        cmd = [sys.executable, '-c', 'import numpy.f2py; numpy.f2py.main()']
        # What follows are the arguments to f2py itself (appended later
        # just for logical separation)
        cmd += ['-c', '-m', name, fortran_file, '--quiet',
                '--f77exec=sage-inline-fortran',
                '--f90exec=sage-inline-fortran'] + s_lib_path + s_lib
        try:
            out = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
        except subprocess.CalledProcessError as exc:
            raise RuntimeError(
                "failed to compile Fortran code:\n{}".format(exc.output))
        # Note that f2py() doesn't raise an exception if it fails.
        # In that case, the import below will fail.
        try:
            mod = _import_module_from_path(name, [mytmpdir])
        except ImportError as exc:
            # Failed to import the module; include any output from building
            # the module (even though it was ostensibly successful) in case
            # it might help
            msg = "failed to load compiled Fortran code: {}".format(exc)
            if out:
                msg += '\n' + out
            raise RuntimeError(msg)
        if self.verbose:
            print(out)
    finally:
        os.chdir(old_cwd)
        if sys.platform != 'cygwin':
            # Do not delete temporary DLLs on Cygwin; this will cause
            # future forks of this process to fail.  Instead temporary DLLs
            # will be cleaned up upon process exit
            try:
                shutil.rmtree(mytmpdir)
            except OSError:
                # This can fail for example over NFS
                pass
    for k, x in mod.__dict__.items():
        if k[0] != '_':
            globals[k] = x