def find_executables(self):
assert self._is_customised<EOL>exe_cache = self._exe_cache<EOL>def cached_find_executable(exe):<EOL><INDENT>if exe in exe_cache:<EOL><INDENT>return exe_cache[exe]<EOL><DEDENT>fc_exe = find_executable(exe)<EOL>exe_cache[exe] = exe_cache[fc_exe] = fc_exe<EOL>return fc_exe<EOL><DEDENT>def verify_command_form(name, value):<EOL><INDENT>if value is not None and not is_sequence_of_strings(value):<EOL><INDENT>raise ValueError(<EOL>"<STR_LIT>" %<EOL>(name, value, self.__class__.__name__))<EOL><DEDENT><DEDENT>def set_exe(exe_key, f77=None, f90=None):<EOL><INDENT>cmd = self.executables.get(exe_key, None)<EOL>if not cmd:<EOL><INDENT>return None<EOL><DEDENT>exe_from_environ = getattr(self.command_vars, exe_key)<EOL>if not exe_from_environ:<EOL><INDENT>possibles = [f90, f77] + self.possible_executables<EOL><DEDENT>else:<EOL><INDENT>possibles = [exe_from_environ] + self.possible_executables<EOL><DEDENT>seen = set()<EOL>unique_possibles = []<EOL>for e in possibles:<EOL><INDENT>if e == '<STR_LIT>':<EOL><INDENT>e = f77<EOL><DEDENT>elif e == '<STR_LIT>':<EOL><INDENT>e = f90<EOL><DEDENT>if not e or e in seen:<EOL><INDENT>continue<EOL><DEDENT>seen.add(e)<EOL>unique_possibles.append(e)<EOL><DEDENT>for exe in unique_possibles:<EOL><INDENT>fc_exe = cached_find_executable(exe)<EOL>if fc_exe:<EOL><INDENT>cmd[<NUM_LIT:0>] = fc_exe<EOL>return fc_exe<EOL><DEDENT><DEDENT>self.set_command(exe_key, None)<EOL>return None<EOL><DEDENT>ctype = self.compiler_type<EOL>f90 = set_exe('<STR_LIT>')<EOL>if not f90:<EOL><INDENT>f77 = set_exe('<STR_LIT>')<EOL>if f77:<EOL><INDENT>log.warn('<STR_LIT>' % ctype)<EOL><DEDENT>else:<EOL><INDENT>raise CompilerNotFound('<STR_LIT>' % ctype)<EOL><DEDENT><DEDENT>else:<EOL><INDENT>f77 = set_exe('<STR_LIT>', f90=f90)<EOL>if not f77:<EOL><INDENT>log.warn('<STR_LIT>' % ctype)<EOL><DEDENT>set_exe('<STR_LIT>', f90=f90)<EOL><DEDENT>set_exe('<STR_LIT>', f77=f77, f90=f90)<EOL>set_exe('<STR_LIT>', f77=f77, f90=f90)<EOL>set_exe('<STR_LIT>', f77=f77, f90=f90)<EOL>set_exe('<STR_LIT>')<EOL>set_exe('<STR_LIT>')<EOL>
Go through the self.executables dictionary, and attempt to
        find and assign appropiate executables.

        Executable names are looked for in the environment (environment
        variables, the distutils.cfg, and command line), the 0th-element of
        the command list, and the self.possible_executables list.

        Also, if the 0th element is "<F77>" or "<F90>", the Fortran 77
        or the Fortran 90 compiler executable is used, unless overridden
        by an environment setting.

        Subclasses should call this if overriden.