SCons / scons

SCons - a software construction tool
http://scons.org
MIT License
2.06k stars 314 forks source link

Intel Fortran Compiler (ifort tool) .F files no longer recognized on some platforms #2114

Open bdbaddog opened 6 years ago

bdbaddog commented 6 years ago

This issue was originally created at: 2008-06-22 23:30:51. This issue was reported by: audiofanatic. audiofanatic said at 2008-06-22 23:30:51

In moving from 0.98.0 to 0.98.5 we observed that some .F files were no longer being recognized as fortran files on certain platforms. Specifically, using the ifort compiler (same version before and after scons upgrade) and only seen on SLED10 (32- and 64-bit) but not SLED9.3 or Fedora 8, scons does very odd things with .F files ranging from trying to compile them with GCC to using the library archiver ar on the source files.

A workaround for us was to add the following lines to the Tools/ifort.py file just before the call to add_all_to_env(env):

env['FORTRANFILESUFFIXES'].append('.F')
env['FORTRANFILESUFFIXES'].append('.F90')
env['FORTRANFILESUFFIXES'].append('.FOR')
env['FORTRANFILESUFFIXES'].append('.FTN')
env['FORTRANFILESUFFIXES'].append('.FPP')

These are the missing file extensions that ifort supports according to the ifort documentation for ifort 9.1.032.

stevenknight said at 2008-06-23 05:35:20

Reassigning to David. Assign it back if appropriate. --SK

cournape said at 2008-06-25 00:03:58

Mmh, this is strange. If it did not work at all, I would have understood, but the fact that it depends on the version of Linux is strange.

Craig, would you ming dumping your environment (env.Dump()) and put the output here ?

audiofanatic said at 2008-06-26 00:25:14

Dump follows:


{ 'AR': 'ar',
'ARCOM': '$AR $ARFLAGS $TARGET $SOURCES',
'ARFLAGS': ['rc'],
'AS': 'as',
'ASCOM': '$AS $ASFLAGS -o $TARGET $SOURCES',
'ASFLAGS': [],
'ASPPCOM': '$CC $ASPPFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES',
'ASPPFLAGS': '$ASFLAGS',
'BIBTEX': 'bibtex',
'BIBTEXCOM': 'cd ${TARGET.dir} && $BIBTEX $BIBTEXFLAGS ${SOURCE.filebase}',
'BIBTEXFLAGS': [],
'BUILDERS': {'CFile': <SCons.Builder.CompositeBuilder instance at 0x2b63cfae2320>, 'DVI': <SCons.Builder.CompositeBuilder instance at 0x2b63cfae0f38>, 'Zip': <SCons.Builder.BuilderBase instance at 0x2b63cfacb560>, 'StaticLibrary': <SCons.Builder.BuilderBase instance at 0x2b63cfadcab8>, 'M4': <SCons.Builder.BuilderBase instance at 0x2b63cfae26c8>, 'Program': <SCons.Builder.BuilderBase instance at 0x2b63cfacb998>, 'RPCGenHeader': <SCons.Builder.BuilderBase instance at 0x2b63cfae2e18>, 'CXXFile': <SCons.Builder.CompositeBuilder instance at 0x2b63cfae2638>, 'Object': <SCons.Builder.CompositeBuilder instance at 0x2b63cfacbdd0>, 'PostScript': <SCons.Builder.BuilderBase instance at 0x2b63cfae0128>, 'JavaClassDir': <SCons.Builder.BuilderBase instance at 0x2b63cfae0ab8>, 'LoadableModule': <SCons.Builder.BuilderBase instance at 0x2b63cfacbab8>, 'CopyAs': <SCons.Builder.BuilderBase instance at 0x2b63cfadcd40>, 'SharedLibrary': <SCons.Builder.BuilderBase instance at 0x2b63cfacb908>, 'RPCGenXDR': <SCons.Builder.BuilderBase instance at 0x2b63cfae2d40>, 'CopyTo': <SCons.Builder.BuilderBase instance at 0x2b63cfadca70>, 'PDF': <SCons.Builder.CompositeBuilder instance at 0x2b63cfae00e0>, 'StaticObject': <SCons.Builder.CompositeBuilder instance at 0x2b63cfacbdd0>, 'SharedObject': <SCons.Builder.CompositeBuilder instance at 0x2b63cfad8170>, 'Tar': <SCons.Builder.BuilderBase instance at 0x2b63cfab0ea8>, 'JavaClassFile': <SCons.Builder.BuilderBase instance at 0x2b63cfae0908>, 'Rpm': <SCons.Builder.BuilderBase instance at 0x2b63cfacb710>, 'RPCGenService': <SCons.Builder.BuilderBase instance at 0x2b63cfae2dd0>, 'Library': <SCons.Builder.BuilderBase instance at 0x2b63cfadcab8>, 'JavaFile': <SCons.Builder.CompositeBuilder instance at 0x2b63cfae07a0>, 'RPCGenClient': <SCons.Builder.BuilderBase instance at 0x2b63cfae2c68>},
'Build_2DdataSeries': True,
'Build_BackEnds': True,
...
# some more Build_... stuff omitted from here for privacy reasons ---
...
'CC': 'gcc',
'CCCOM': '$CC -o $TARGET -c $CFLAGS $CCFLAGS $_CCCOMCOM $SOURCES',
'CCFLAGS': ['-Wall', '-g', '-O'],
'CCVERSION': '4.1.2',
'CFILESUFFIX': '.c',
'CFLAGS': [],
'CONFIGUREDIR': '#/.sconf_temp',
'CONFIGURELOG': '#/config.log',
'COPYSTR': 'Copy file(s): "$SOURCES" to "$TARGETS"',
'CPPDEFPREFIX': '-D',
'CPPDEFSUFFIX': '',
'CPPPATH': [ '.',
'#Source',
'/pathChanged/Install/include',
'/pathChanged/Tools/ThirdParty/include'],
'CPPSUFFIXES': [ '.c',
'.C',
'.cxx',
'.cpp',
'.c++',
'.cc',
'.h',
'.H',
'.hxx',
'.hpp',
'.hh',
'.F',
'.fpp',
'.FPP',
'.m',
'.mm',
'.S',
'.spp',
'.SPP'],
'CVS': 'cvs',
'CVSCOFLAGS': [],
'CVSCOM': '$CVS $CVSFLAGS co $CVSCOFLAGS ${TARGET.posix}',
'CVSFLAGS': ['-d', '$CVSREPOSITORY'],
'CXX': 'g++',
'CXXCOM': '$CXX -o $TARGET -c $CXXFLAGS $CCFLAGS $_CCCOMCOM $SOURCES',
'CXXFILESUFFIX': '.cc',
'CXXFLAGS': ['-fvisibility=hidden'],
'CXXVERSION': '4.1.2',
'DSUFFIXES': ['.d'],
'DVIPDF': 'dvipdf',
'DVIPDFCOM': 'cd ${TARGET.dir} && $DVIPDF $DVIPDFFLAGS ${SOURCE.file} ${TARGET.file}',
'DVIPDFFLAGS': [],
'DVIPS': 'dvips',
'DVIPSFLAGS': [],
'Dir': <SCons.Defaults.Variable_Method_Caller instance at 0x2b63cf227878>,
'Dirs': <SCons.Defaults.Variable_Method_Caller instance at 0x2b63cf2278c0>,
# some things changed to XXX's from the following ENV for privacy reasons ---
'ENV': {'MODULE_VERSION': '3.1.6', 'GROUP': 'CMIS-CFD', 'JAVA_ROOT': '/usr/lib/jvm/jre', 'LESS': '-M -I', 'MINICOM': '-c on', 'CSHEDIT': 'emacs', 'HOSTTYPE': 'x86_64', 'LESSOPEN': 'lessopen.sh %s', 'QT_SYSTEM_DIR': '/usr/share/desktop-data', 'GFS_NP': '50000', 'SSH_CLIENT': 'X.X.X.X XXXXX 22', 'CVS_RSH': 'ssh', 'LOGNAME': 'XXXXXX', 'USER': 'XXXXXX', 'INPUTRC': '/etc/inputrc', 'QTDIR': './Tools/ThirdParty', 'PS_PRINTER': 'laser6', 'HOME': '/home/XXXXXX', 'DISPLAY': 'localhost:13.0', 'MORE': '-sl', 'LANG': 'en_US.UTF-8', 'INFOPATH': '/usr/local/info:/usr/share/info:/usr/info:/opt/gnome/share/info', 'TERM': 'xterm', 'SHELL': '/usr/local/bin/tcsh', '_MODULESBEGINENV_': '/home/XXXXXX/.modulesbeginenv', 'TEXINPUTS': ':/home/XXXXXX/.TeX:/usr/share/doc/.TeX:/usr/doc/.TeX', 'SHLVL': '1', 'G_BROKEN_FILENAMES': '1', 'GFS_NGRP': '2', 'LD_LIBRARY_PATH': '/pathChanged/Tools/ThirdParty/lib:./Tools/ThirdParty/lib:/usr/lib/qt3/lib64:/usr/local/lib', 'LS_COLORS': 'no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=41;33;01:ex=00;32:*.cmd=00;32:*.exe=01;32:*.com=01;32:*.bat=01;32:*.btm=01;32:*.dll=01;32:*.tar=00;31:*.tbz=00;31:*.tgz=00;31:*.rpm=00;31:*.deb=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.zoo=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.tb2=00;31:*.tz2=00;31:*.tbz2=00;31:*.avi=01;35:*.bmp=01;35:*.fli=01;35:*.gif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mng=01;35:*.mov=01;35:*.mpg=01;35:*.pcx=01;35:*.pbm=01;35:*.pgm=01;35:*.png=01;35:*.ppm=01;35:*.tga=01;35:*.tif=01;35:*.xbm=01;35:*.xpm=01;35:*.dl=01;35:*.gl=01;35:*.wmv=01;35:*.aiff=00;32:*.au=00;32:*.mid=00;32:*.mp3=00;32:*.ogg=00;32:*.voc=00;32:*.wav=00;32:', 'LESS_ADVANCED_PREPROCESSOR': 'no', 'EDITOR': 'vi', 'MANPATH': /usr/share/man:/opt/gnome/share/man:/usr/X11R6/man:/usr/local/man', '_LMFILES_': '/tools/modules/modulefiles/intel-fc/9.1.032', 'OSTYPE': 'linux', 'GTK_PATH': '/usr/local/lib/gtk-2.0:/opt/gnome/lib/gtk-2.0:/usr/lib/gtk-2.0', 'JAVA_HOME': '/usr/lib/jvm/jre', 'MODULESHOME': '/usr/share/modules', 'MODULEPATH': '/usr/share/modules:/usr/share/modules/modulefiles:/tools/modules/modulefiles', 'VENDOR': 'suse', 'INFODIR': '/usr/local/info:/usr/share/info:/usr/info', 'ACLOCAL_FLAGS': '-I /opt/gnome/share/aclocal', 'CPU': 'x86_64', 'GROFF_NO_SGR': 'yes', 'NNTPSERVER': 'news', 'MODULE_VERSION_STACK': '3.1.6', 'PATH': '/pathChanged/Tools/ThirdParty/bin:./Tools/ThirdParty/bin:/tools/intel/fce/9.1.032/bin:/usr/bin:/bin:/usr/sbin:/sbin:/home/sco265/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/usr/bin/X11:/usr/lib/mit/bin:/usr/lib/mit/sbin:/usr/lib/qt3/bin', 'HOST': 'ardeer', 'FROM_HEADER': '', 'XKEYSYMDB': '/usr/X11R6/lib/X11/XKeysymDB', 'ENV': '/etc/bash.bashrc', 'LESSKEY': '/etc/lesskey.bin', 'PKG_CONFIG_PATH': '/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig:/opt/kde3/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/share/pkgconfig', 'XDG_CONFIG_DIRS': '/usr/local/etc/xdg/:/etc/xdg/:/etc/opt/gnome/xdg/', 'LS_OPTIONS': '-N --color=tty -T 0', 'NLSPATH': '/tools/intel/fce/9.1.032/lib/%N', 'XNLSPATH': '/usr/X11R6/lib/X11/nls', 'GFS_NOB': '3', 'GTK_PATH64': '/usr/local/lib64/gtk-2.0:/opt/gnome/lib64/gtk-2.0:/usr/lib64/gtk-2.0', 'GNOME2_PATH': '/usr/local:/opt/gnome:/usr', 'G_FILENAME_ENCODING': '@locale,UTF-8,ISO-8859-1,CP1252', 'JAVA_BINDIR': '/usr/lib/jvm/jre/bin', 'MACHTYPE': 'x86_64-suse-linux', 'LESSCLOSE': 'lessclose.sh %s %s', 'MAIL': '/var/mail/XXXXXX', 'PYTHONSTARTUP': '/etc/pythonstart', 'SSH_TTY': '/dev/pts/22', 'LOADEDMODULES': 'intel-fc/9.1.032', 'WINDOWMANAGER': '/usr/bin/X11/gnome', 'SSH_SENDS_LOCALE': 'yes', 'XDG_DATA_DIRS': '/usr/local/share/:/usr/share/:/etc/opt/kde3/share/:/opt/kde3/share/:/opt/gnome/share/', 'PWD': '/pathChanged', 'HOSTNAME': 'XXXXXX.XXX.XXXX.XXXXX.XX', 'COLORTERM': '1', 'IFC_LIB': '/tools/intel/fce/9.1.032/lib', 'HaveSourced': 'yes', 'CSHRCREAD': 'true', 'SSH_CONNECTION': 'X.X.X.X XXXXX X.X.X.X 22', 'PAGER': 'less', 'XAUTHLOCALHOSTNAME': 'XXXXXX', 'JRE_HOME': '/usr/lib/jvm/jre'},
'ESCAPE': <function escape at 0x2b63cfa6ad70>,
'F77': 'ifort',
'F77COM': '$F77 -o $TARGET -c $F77FLAGS $_F77INCFLAGS $SOURCES',
'F77FLAGS': [],
'F77PPCOM': '$F77 -o $TARGET -c $F77FLAGS $CPPFLAGS $_CPPDEFFLAGS $_F77INCFLAGS $SOURCES',
'F90': 'ifort',
'F90COM': '$F90 -o $TARGET -c $F90FLAGS $_F90INCFLAGS $_FORTRANMODFLAG $SOURCES',
'F90FILESUFFIXES': ['.i90'],
'F90FLAGS': [],
'F90PPCOM': '$F90 -o $TARGET -c $F90FLAGS $CPPFLAGS $_CPPDEFFLAGS $_F90INCFLAGS $_FORTRANMODFLAG $SOURCES',
'F95': 'ifort',
'F95COM': '$F95 -o $TARGET -c $F95FLAGS $_F95INCFLAGS $_FORTRANMODFLAG $SOURCES',
'F95FLAGS': [],
'F95PPCOM': '$F95 -o $TARGET -c $F95FLAGS $CPPFLAGS $_CPPDEFFLAGS $_F95INCFLAGS $_FORTRANMODFLAG $SOURCES',
'FORTRAN': 'ifort',
'FORTRANCOM': '$FORTRAN -o $TARGET -c $FORTRANFLAGS $_FORTRANINCFLAGS $_FORTRANMODFLAG $SOURCES',
'FORTRANFILESUFFIXES': ['.i'],
'FORTRANFLAGS': [],
'FORTRANMODDIR': '',
'FORTRANMODDIRPREFIX': '',
'FORTRANMODDIRSUFFIX': '',
'FORTRANMODPREFIX': '',
'FORTRANMODSUFFIX': '.mod',
'FORTRANPPCOM': '$FORTRAN -o $TARGET -c $FORTRANFLAGS $CPPFLAGS $_CPPDEFFLAGS $_FORTRANINCFLAGS $_FORTRANMODFLAG $SOURCES',
'FORTRANSUFFIXES': [ '.i',
'.fpp',
'.FPP',
'.I',
'.f77',
'.F77',
'.i90',
'.I90',
'.f95',
'.F95'],
'FRAMEWORKPATH': [],
'FRAMEWORKS': [],
'File': <SCons.Defaults.Variable_Method_Caller instance at 0x2b63cf227908>,
'GS': 'gs',
'GSCOM': '$GS $GSFLAGS -sOutputFile=$TARGET $SOURCES',
'GSFLAGS': ['-dNOPAUSE', '-dBATCH', '-sDEVICE=pdfwrite'],
'IDLSUFFIXES': ['.idl', '.IDL'],
'INCF77PREFIX': '$INCPREFIX',
'INCF77SUFFIX': '$INCSUFFIX',
'INCF90PREFIX': '$INCPREFIX',
'INCF90SUFFIX': '$INCSUFFIX',
'INCF95PREFIX': '$INCPREFIX',
'INCF95SUFFIX': '$INCSUFFIX',
'INCFORTRANPREFIX': '$INCPREFIX',
'INCFORTRANSUFFIX': '$INCSUFFIX',
'INCPREFIX': '-I',
'INCSUFFIX': '',
'INSTALL_ROOT': '/pathChanged/Install',
'JAVABOOTCLASSPATH': [],
'JAVAC': 'javac',
'JAVACCOM': "${TEMPFILE('$_JAVACCOM')}",
'JAVACFLAGS': [],
'JAVACLASSPATH': [],
'JAVACLASSSUFFIX': '.class',
'JAVASOURCEPATH': [],
'JAVASUFFIX': '.java',
'LATEX': 'latex',
'LATEXCOM': 'cd ${TARGET.dir} && $LATEX $LATEXFLAGS ${SOURCE.file}',
'LATEXFLAGS': [],
'LATEXRETRIES': 3,
'LATEXSUFFIXES': ['.tex', '.ltx', '.latex'],
'LDMODULE': '$SHLINK',
'LDMODULECOM': '$SHLINKCOM',
'LDMODULEFLAGS': '$SHLINKFLAGS',
'LDMODULEPREFIX': '$SHLIBPREFIX',
'LDMODULESUFFIX': '$SHLIBSUFFIX',
'LEX': 'flex',
'LEXCOM': '$LEX $LEXFLAGS -t $SOURCES > $TARGET',
'LEXFLAGS': [],
'LIBDIRPREFIX': '-L',
'LIBDIRSUFFIX': '',
'LIBLINKPREFIX': '-l',
'LIBLINKSUFFIX': '',
'LIBPATH': ['/pathChanged/Tools/ThirdParty/lib'],
'LIBPREFIX': 'lib',
'LIBPREFIXES': ['$LIBPREFIX'],
'LIBSUFFIX': '.a',
'LIBSUFFIXES': ['$LIBSUFFIX', '$SHLIBSUFFIX'],
'LINK': '$SMARTLINK',
'LINKCOM': '$LINK -o $TARGET $LINKFLAGS $SOURCES $_LIBDIRFLAGS $_LIBFLAGS',
'LINKFLAGS': ['$__RPATH', '$__RPATHLINK'],
'M4': 'm4',
'M4COM': 'cd ${SOURCE.rsrcdir} && $M4 $M4FLAGS < ${SOURCE.file} > ${TARGET.abspath}',
'M4FLAGS': ['-E'],
'MAKEINDEX': 'makeindex',
'MAKEINDEXCOM': 'cd ${TARGET.dir} && $MAKEINDEX $MAKEINDEXFLAGS ${SOURCE.file}',
'MAKEINDEXFLAGS': [],
'MAXLINELENGTH': 128072,
'OBJPREFIX': '',
'OBJSUFFIX': '.o',
'OSNAME': 'x86_64',
'PDFCOM': ['$DVIPDFCOM'],
'PDFLATEX': 'pdflatex',
'PDFLATEXCOM': 'cd ${TARGET.dir} && $PDFLATEX $PDFLATEXFLAGS ${SOURCE.file}',
'PDFLATEXFLAGS': [],
'PDFPREFIX': '',
'PDFSUFFIX': '.pdf',
'PDFTEX': 'pdftex',
'PDFTEXCOM': 'cd ${TARGET.dir} && $PDFTEX $PDFTEXFLAGS ${SOURCE.file}',
'PDFTEXFLAGS': [],
'PLATFORM': 'posix',
'PROGPREFIX': '',
'PROGSUFFIX': '',
'PSCOM': 'cd ${TARGET.dir} && $DVIPS $DVIPSFLAGS -o ${TARGET.file} ${SOURCE.file}',
'PSPAWN': <function piped_env_spawn at 0x2b63cfa6e320>,
'PSPREFIX': '',
'PSSUFFIX': '.ps',
'RANLIB': 'ranlib',
'RANLIBCOM': '$RANLIB $RANLIBFLAGS $TARGET',
'RANLIBFLAGS': [],
'RDirs': <SCons.Defaults.Variable_Method_Caller instance at 0x2b63cf227950>,
'RPATHLINKPREFIX': '-Wl,--rpath-link=',
'RPATHLINKSUFFIX': '',
'RPATHPREFIX': '-Wl,-rpath=',
'RPATHSUFFIX': '',
'RPCGEN': 'rpcgen',
'RPCGENCLIENTFLAGS': [],
'RPCGENFLAGS': [],
'RPCGENHEADERFLAGS': [],
'RPCGENSERVICEFLAGS': [],
'RPCGENXDRFLAGS': [],
'RPM': 'LC_ALL=c rpmbuild',
'RPMCOM': <SCons.Action.FunctionAction instance at 0x2b63cfacb7a0>,
'RPMFLAGS': ['-ta'],
'RPMSUFFIX': '.rpm',
'SCANNERS': [],
'SHCC': '$CC',
'SHCCCOM': '$SHCC -o $TARGET -c $SHCFLAGS $SHCCFLAGS $_CCCOMCOM $SOURCES',
'SHCCFLAGS': ['$CCFLAGS', '-fPIC'],
'SHCFLAGS': ['$CFLAGS'],
'SHCXX': '$CXX',
'SHCXXCOM': '$SHCXX -o $TARGET -c $SHCXXFLAGS $SHCCFLAGS $_CCCOMCOM $SOURCES',
'SHCXXFLAGS': ['$CXXFLAGS'],
'SHELL': 'sh',
'SHF77': '$F77',
'SHF77COM': '$SHF77 -o $TARGET -c $SHF77FLAGS $_F77INCFLAGS $SOURCES',
'SHF77FLAGS': ['$F77FLAGS', '-fPIC'],
'SHF77PPCOM': '$SHF77 -o $TARGET -c $SHF77FLAGS $CPPFLAGS $_CPPDEFFLAGS $_F77INCFLAGS $SOURCES',
'SHF90': '$F90',
'SHF90COM': '$SHF90 -o $TARGET -c $SHF90FLAGS $_F90INCFLAGS $_FORTRANMODFLAG $SOURCES',
'SHF90FLAGS': ['$F90FLAGS', '-fPIC'],
'SHF90PPCOM': '$SHF90 -o $TARGET -c $SHF90FLAGS $CPPFLAGS $_CPPDEFFLAGS $_F90INCFLAGS $_FORTRANMODFLAG $SOURCES',
'SHF95': '$F95',
'SHF95COM': '$SHF95 -o $TARGET -c $SHF95FLAGS $_F95INCFLAGS $_FORTRANMODFLAG $SOURCES',
'SHF95FLAGS': ['$F95FLAGS', '-fPIC'],
'SHF95PPCOM': '$SHF95 -o $TARGET -c $SHF95FLAGS $CPPFLAGS $_CPPDEFFLAGS $_F95INCFLAGS $_FORTRANMODFLAG $SOURCES',
'SHFORTRAN': '$FORTRAN',
'SHFORTRANCOM': '$SHFORTRAN -o $TARGET -c $SHFORTRANFLAGS $_FORTRANINCFLAGS $_FORTRANMODFLAG $SOURCES',
'SHFORTRANFLAGS': ['$FORTRANFLAGS', '-fPIC'],
'SHFORTRANPPCOM': '$SHFORTRAN -o $TARGET -c $SHFORTRANFLAGS $CPPFLAGS $_CPPDEFFLAGS $_FORTRANINCFLAGS $_FORTRANMODFLAG $SOURCES',
'SHLIBEMITTER': [ <function shlib_emitter at 0x2b63cfa81050>,
<function shlib_emitter at 0x2b63cfa81050>],
'SHLIBPREFIX': '$LIBPREFIX',
'SHLIBSUFFIX': '.so',
'SHLINK': '$LINK',
'SHLINKCOM': '$SHLINK -o $TARGET $SHLINKFLAGS $SOURCES $_LIBDIRFLAGS $_LIBFLAGS',
'SHLINKFLAGS': ['$LINKFLAGS', '-shared'],
'SHOBJPREFIX': '$OBJPREFIX',
'SHOBJSUFFIX': '.os',
'SMARTLINK': <function smart_link at 0x2b63cfa75f50>,
'SPAWN': <function spawnvpe_spawn at 0x2b63cfa6e0c8>,
'STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME': 0,
'TAR': 'tar',
'TARCOM': '$TAR $TARFLAGS -f $TARGET $SOURCES',
'TARFLAGS': ['-c'],
'TARSUFFIX': '.tar',
'TEMPFILE': <class SCons.Platform.TempFileMunge at 0x2b63cf2f9650>,
'TEMPFILEPREFIX': '@',
'TEX': 'tex',
'TEXCOM': 'cd ${TARGET.dir} && $TEX $TEXFLAGS ${SOURCE.file}',
'TEXFLAGS': [],
'TOOLDIR': '/pathChanged/Tools/ThirdParty',
'TOOLS': [ 'custombase',
'default',
'gnulink',
'gcc',
'g++',
'ifort',
'gas',
'ar',
'CVS',
'filesystem',
'dvipdf',
'dvips',
'gs',
'javac',
'latex',
'lex',
'm4',
'pdflatex',
'pdftex',
'rpcgen',
'tar',
'tex',
'yacc',
'zip',
'rpm',
'gnulink',
'gcc',
'g++',
'ar',
'customdefault'],
'USE_LICENSING': False,
'WIXCANDLE': 'candle.exe',
'WIXLIGHT': 'light.exe',
'YACC': 'bison',
'YACCCOM': '$YACC $YACCFLAGS -o $TARGET $SOURCES',
'YACCFLAGS': [],
'YACCHFILESUFFIX': '.h',
'YACCHXXFILESUFFIX': '.hpp',
'YACCVCGFILESUFFIX': '.vcg',
'ZIP': 'zip',
'ZIPCOM': <SCons.Action.FunctionAction instance at 0x2b63cfacb5a8>,
'ZIPCOMPRESSION': 8,
'ZIPFLAGS': [],
'ZIPSUFFIX': '.zip',
'_CCCOMCOM': '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS',
'_CPPDEFFLAGS': '${_defines(CPPDEFPREFIX, CPPDEFINES, CPPDEFSUFFIX, __env__)}',
'_CPPINCFLAGS': '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
'_F77INCFLAGS': '$( ${_concat(INCF77PREFIX, F77PATH, INCF77SUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
'_F90INCFLAGS': '$( ${_concat(INCF90PREFIX, F90PATH, INCF90SUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
'_F95INCFLAGS': '$( ${_concat(INCF95PREFIX, F95PATH, INCF95SUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
'_FORTRANINCFLAGS': '$( ${_concat(INCFORTRANPREFIX, FORTRANPATH, INCFORTRANSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
'_FORTRANMODFLAG': '$( ${_concat(FORTRANMODDIRPREFIX, FORTRANMODDIR, FORTRANMODDIRSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
'_JAVABOOTCLASSPATH': '${_javapathopt("-bootclasspath", "JAVABOOTCLASSPATH")} ',
'_JAVACCOM': '$JAVAC $JAVACFLAGS $_JAVABOOTCLASSPATH $_JAVACLASSPATH -d ${TARGET.attributes.java_classdir} $_JAVASOURCEPATH $SOURCES',
'_JAVACLASSPATH': '${_javapathopt("-classpath", "JAVACLASSPATH")} ',
'_JAVASOURCEPATH': '${_javapathopt("-sourcepath", "JAVASOURCEPATH", "_JAVASOURCEPATHDEFAULT")} ',
'_JAVASOURCEPATHDEFAULT': '${TARGET.attributes.java_sourcedir}',
'_LIBDIRFLAGS': '$( ${_concat(LIBDIRPREFIX, LIBPATH, LIBDIRSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
'_LIBFLAGS': '${_stripixes(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, LIBPREFIXES, LIBSUFFIXES, __env__)}',
'_RPATH': '${_concat(RPATHPREFIX, RPATH, RPATHSUFFIX, __env__)}',
'_RPATHLINK': '${_concat(RPATHLINKPREFIX,RPATHLINK,RPATHLINKSUFFIX,__env__)}',
'__RPATH': '$_RPATH',
'__RPATHLINK': '$_RPATHLINK',
'_concat': <function _concat at 0x2b63cf229b90>,
'_defines': <function _defines at 0x2b63cf229cf8>,
'_javapathopt': <class SCons.Tool.javac.pathopt at 0x2b63cfa992f0>,
'_stripixes': <function _stripixes at 0x2b63cf229c80>,
'build_dir': '',
'debug': True,
'docs': False,
'examples': False,
'lsb': False,
'optimize': True,
'profile': False,
'stlport': False,
'tests': True,
'vendorID': ['XXXXXXXXXXXXXX']}

audiofanatic said at 2008-06-26 00:31:44

As additional info, we have some customizations applied to our use of fortran rather than using the fortran tool directly. The fortran-specific bit follows (there are other global customizations applied before it, but I don't see much in there which is likely to be related to this - can send privately if required). There are some windows-specific things done for ifort which might not be needed anymore (haven't checked), but again that's unrelated to this problem since we are seeing it on linux.

contents of customfortran.py:


# -*- coding: utf_8 -*-
"""SCons.Tool.customfortran

def GetTools(env): import SCons.Tool libTool = SCons.Tool.FindTool(['mslib', 'ar'], env) forTool = SCons.Tool.FindTool(['ifort', 'f90', 'fortran'], env) return (libTool, forTool)

def generate(env): import SCons.Tool libTool, forTool = GetTools(env) env.Tool(forTool) env.Tool(libTool)

# Handling of the .mod file compiler option is fairly
# uniform. Only ifort for win32 changes this to something
# different (see below).
env['FORTRANMODDIRPREFIX'] = '-module '
env['FORTRANMODDIRSUFFIX'] = ''

# Set some defaults for things that can be overridden by some compilers/platforms.
# This ensures that the symbols are defined for this environment, even if they
# are empty.
env.Replace(FORTRANFLAGSPIC   = '')
env.Replace(LINKERDYNAMICLIBS = '')

# Now specify some flags to be enforced for all builds by default
import sys
if sys.platform == 'osf1V5':
# For some reason, profiling IMPROVES speed on DEC alpha (NOTE: now a suspect statement)
    env.Append(FORTRANFLAGS = ['-p'])
    env.Append(LINKFLAGS    = ['-p'])

    if env['debug']:
        env.Append(FORTRANFLAGS = ['-g'])
        env.Append(LINKFLAGS    = ['-g'])
    if env['optimize']:
        env.Append(FORTRANFLAGS = ['-O'])
        env.Append(LINKFLAGS    = ['-O'])
    else:
        env.Append(FORTRANFLAGS = ['-O0'])
        env.Append(LINKFLAGS    = ['-O0'])

    env.Append(FORTRANFLAGS = ['-warn', 'unused'])
    env.Append(FORTRANFLAGS = ['-warn', 'argument_checking'])
    env.Append(FORTRANFLAGS = ['-warn', 'declarations'])

    # -fPIC is undocumented for DEC Alpha, but seems to be accepted by the f90 compiler
    env.Replace(FORTRANFLAGSPIC = '-fPIC')

elif forTool == 'ifort':
    if sys.platform == 'win32':
        env['FORTRAN']        = 'ifort'
        env['FORTRANCOM']     = '$FORTRAN $FORTRANFLAGS $_FORTRANMODFLAG $_FORTRANINCFLAGS /c ${SOURCES.win32} /object:${TARGET.win32}'
        env['FORTRANPPCOM']   = '$FORTRAN $FORTRANFLAGS $CPPFLAGS $_CPPDEFFLAGS $_FORTRANMODFLAG $_FORTRANINCFLAGS /c ${SOURCES.win32} /object:${TARGET.win32}'
        env['SHFORTRANCOM']   = '$SHFORTRAN $SHFORTRANFLAGS $_FORTRANMODFLAG $_FORTRANINCFLAGS /c ${SOURCES.win32} /object:${TARGET.win32}'
        env['SHFORTRANPPCOM'] = '$SHFORTRAN $SHFORTRANFLAGS $CPPFLAGS $_CPPDEFFLAGS $_FORTRANMODFLAG $_FORTRANINCFLAGS /c ${SOURCES.win32} /object:${TARGET.win32}'
        env['OBJSUFFIX']      = '.obj'
        env['FORTRANMODDIR']  = '${TARGET.dir}'
        env['FORTRANMODDIRPREFIX'] = '/module:'
        env['FORTRANMODDIRSUFFIX'] = ''

        # /LIBPATH: is not supported directly by ifort, but it *is*
        # by the underlying linker. Therefore, we have to make the
        # library paths get passed through rather than relying on
        # the ifort front-end to handle it.
        env['LIBDIRPREFIX']   = '/Qoption,link,/LIBPATH:'
        env['LINK']           = 'ifort'
        env['LINKCOM']        = '${TEMPFILE("$LINK $LINKFLAGS /exe:$TARGET.win32 $( $_LIBDIRFLAGS $) $_LIBFLAGS $_PDB $SOURCES.win32")}'

        if env['debug']:
            env.Append(FORTRANFLAGS = ['/traceback'])
            env.Append(FORTRANFLAGS = ['/debug'])
            env.Append(FORTRANFLAGS = ['/MDd'])
            env.Append(LINKFLAGS    = ['/MDd'])
        else:
            env.Append(FORTRANFLAGS = ['/MD'])
            env.Append(LINKFLAGS    = ['/MD'])

        if env['optimize']:
            env.Append(FORTRANFLAGS = ['/O2'])
            env.Append(LINKFLAGS    = ['/O2'])
        else:
            env.Append(FORTRANFLAGS = ['/Od'])
            env.Append(LINKFLAGS    = ['/Od'])

        env.Append(FORTRANFLAGS = ['/fpe:0'])  # Abort execution on divide by zero
        env.Append(FORTRANFLAGS = ['/warn:unused'])
        env.Append(FORTRANFLAGS = ['/warn:truncated_source'])
        env.Append(FORTRANFLAGS = ['/warn:declarations'])
        env.Append(FORTRANFLAGS = ['/nologo'])

    else:
        if env['debug']:
            env.Append(FORTRANFLAGS = ['-traceback'])
            env.Append(FORTRANFLAGS = ['-g'])
            env.Append(LINKFLAGS    = ['-g'])
        if env['optimize']:
            env.Append(FORTRANFLAGS = ['-O'])
            env.Append(LINKFLAGS    = ['-O'])
        else:
            env.Append(FORTRANFLAGS = ['-O0'])
            env.Append(LINKFLAGS    = ['-O0'])
        env.Append(FORTRANFLAGS = ['-fpe0'])  # Abort execution on divide by zero
        env.Append(FORTRANFLAGS = ['-warn', 'unused'])
        env.Append(FORTRANFLAGS = ['-warn', 'truncated_source'])
        env.Append(FORTRANFLAGS = ['-warn', 'declarations'])
        env.Append(LINKFLAGS    = ['-static-libcxa'])

        env.Replace(FORTRANFLAGSPIC   = '-fpic')
        env.Replace(LINKERDYNAMICLIBS = '-i-dynamic')

        # Somewhere between versions 2.16.91 and 2.17.50 an option
        # --build-id was added to ld and the various GCC compilers.
        # When packaging an RPM, if this option was not specified
        # to the linker the packaging scripts can complain about
        # a missing build ID note. The following checks if the ld
        # command accepts the --build-id option and adds it if it does.

        import os
        if os.system('ld -v --build-id > /dev/null 2>&1') == 0:
            env.AppendUnique(LINKFLAGS = ['-Wl,--build-id'])

# Fortunately, the compiler flag for indicating that all subroutines and
# functions should be compiled with support for recursive calling is the
# same option for linux, windows and OSF1. It would seem reasonable to
# assume that other compilers will probably follow suit, so we just make
# this option depend only on platform and not on the compiler selected.
if sys.platform == 'win32':
    env['FORTRANRECURSIVE'] = '/recursive'
else:
    env['FORTRANRECURSIVE'] = '-recursive'

def exists(env): libTool, forTool = GetTools(env) if not libTool: return 0 if not forTool: return 0 return 1


cournape said at 2008-06-29 01:36:40
>Ok, the problem looks pretty clear: .f is not added as a fortran file suffix (FORTRANSUFFIXES variable), meaning scons does not really know how to deal with .f files.
> 
>By default, .f (and .F for case insensitive fs) are in this list. But if you define the FORTRANFILESUFFIXES env variable before ifort tool is initialized, the ifort tool will only use the value of env['FORTRANFILESUFFIXES']. I agree this is not great, but I have not seen a better way to handle this; in particular, if instead of overriding, I would have concatenate the old values and the new values, there would not have been a way to remove some file suffixes. 
> 
>But, in the code you posted I do not see any FORTRANFILESUFFIXES use. Can you check whether you define this variable before initializing the ifort tool ? If not, there is a bug somewhere. If not, this is expected behavior (although not documented anywhere).
> 
>I also still do not understand why different linux versions behave differently (they all use ifort and the same version of scons, right ?).

cournape said at 2008-06-29 01:38:40
>Sorry, this should read:
> 
>"Can you check whether you define this variable before initializing the ifort tool ? If not, there is a bug somewhere. If yes, this is expected behavior (although not documented anywhere)."
> 
> 

audiofanatic said at 2008-06-29 17:17:54
>Hmmm.... you seem to be using both FORTRANSUFFIXES and FORTRANFILESUFFIXES somewhatinterchangably. In the ifort.py and ifl.py files, you have exclusively only FORTRANFILESUFFIXES, but in FortranCommon.py you have mostly FORTRANSUFFIXES and only one use of FORTRANFILESUFFIXES. Perhaps these are meant to all be the one and the same?
> 
>Also, note that on some platforms, .f and .F file suffixes mean different things to ifort. A .F file will be run through the preprocessor, whereas a .f file will not. Don't know what they do under Windows!

cournape said at 2008-06-30 05:51:04
>No, not really. FORTRANSUFFIXES is the variable used by scons, and FORTRANFILESUFFIXES is the user-defined variable (which can be empty). 
> 
>Those are different because as you mentioned, on windows, for any lower case suffix in FORTRANFILESUFFIXES, I need to add the upper case as well (as you can see in FortranCommon code in ComputeFortranSuffixes. And those were available before in scons anyway, so I cannot remove them.
> 
>But the underlying problem is that there is no easy way to customize the suffix <-> action in scons once it is set in a tool or somewhere else.

stevenknight said at 2008-07-01 11:08:53
>Target milestone and priority per bug party triage.

garyo said at 2008-08-20 04:27:59
>Steven says:
> 
>Need more info from David.  I agree w/his analysis that there's an underlying issue re: not being able to configure file suffixes, which is out of scope for 1.0.x.  But the specific symptom of .F files not being recognized still sounds like a regression.  Is it?

cournape said at 2008-08-28 03:46:26
>It is a regression in the stated case, but I don't see any way to avoid the regression while keeping the possibility of file suffix customization. The later seems more important to me, but maybe it is not.
> 
>I am not sure how to document this, because there is a documentation problem in any cases.

audiofanatic said at 2008-10-05 19:31:25
>We all seem to agree that it is a regression, it's more about a possible fix then from what I'm reading. After digging a bit more deeply, I have one possible scenario which might shed some light. What happens if the ifort tool is included more than once into an environment? For example, a trimmed down version of our particular case which exhibits different behavior on the systems tested follows: 
```py
import os
env['ENV'] = os.environ
env.Tool('default')
env.PrependENVPath('PATH', env.Dir('bin', toolDir).abspath)
env.PrependENVPath('LD_LIBRARY_PATH', env.Dir('lib', toolDir).abspath)

import SCons.Tool
env.Tool(SCons.Tool.FindTool(['gnulink', 'mslink', 'ilink'], env))
env.Tool(SCons.Tool.FindTool(['gcc', 'msvc', 'icc', 'cc'], env))
env.Tool(SCons.Tool.FindTool(['g++', 'msvc', 'icc', 'c++'], env))

libTool = SCons.Tool.FindTool(['mslib', 'ar'], env)
forTool = SCons.Tool.FindTool(['ifort', 'f90', 'fortran'], env)

env.Tool(libTool)
env.Tool(forTool)

On the systems which work okay, the generate function in ifort.py only seems to get called once in the above code, but on the problematic systems, it gets called twice. The ifort command is on the environment's PATH in all cases.

gregnoel said at 2010-07-21 16:58:12

Bug party triage. Bump this issue to P1 so it will be reviewed at next bug party.

gregnoel said at 2010-08-08 13:03:32

Bug party triage.

mwichmann commented 3 years ago

This is quite old, still an issue?

bdbaddog commented 3 years ago

Hmm. Looking at the code, I'd guess it's still an issue. ifort.py sets FORTRANFILESUFFIXES, and then calls the default fortran initializers.

    if 'FORTRANFILESUFFIXES' not in env:
        env['FORTRANFILESUFFIXES'] = ['.i']
    else:
        env['FORTRANFILESUFFIXES'].append('.i')

Which then does this:

    try:
        FortranSuffixes = env['FORTRANFILESUFFIXES']
    except KeyError:
        FortranSuffixes = ['.f', '.for', '.ftn']

So if I'm reading it right you end up with just .i as the known suffixes.

mwichmann commented 2 years ago

Move add_all_to_env up above the adding of the .i and .i90 suffixes?

mwichmann commented 2 years ago

Move add_all_to_env up above the adding of the .i and .i90 suffixes?

Well, no, that doesn't work, because it's in the various add_*_to_env routines where the known suffixes are added to the Object and SharedObject builders, so it's no good to add to that list later (unless the tool is prepared to do that addition itself).

dnwillia-work commented 1 year ago

@mwichmann Hi Mats, I ran into this as well but it's that it does not support .f90 either. I worked around it like this:

https://github.com/dnwillia-work/scons/commit/16e3cd2585a172ebd868d8bf8228c310beb0eadc

but ideally I think what you want here is that the Tool appends the additional suffixes. What I was finding is that the tool is overwriting but in this case Intel Fortran supports all the standard suffixes out of the box.

mwichmann commented 1 year ago

Was just poking at the FortranCommon part of this equation the other day, but I'm not sure the Intel variant is plugged in quite the same way. Be lovely if somebody gave me a spec for how everything does/should work, then we could just code it up :) Tools in general shouldn't overwrite construction variables, they should preserve what someone may have set if it makes sense. That's a widespread problem, unfortunately.

dnwillia-work commented 1 year ago

Personally I think the right thing to do is remove the .i based suffixes entirely. So you could delete the code from the Intel Fortran modules that is setting that up and it will be fine.

If you look at the latest documentation those suffixes are not even mentioned anywhere.

As far as a spec goes, I don't think there is a standard reference for that, but it's basically like this:

Regarding the version specific file extensions there is/was a convention I think that the module or code within uses features of that standard but that's not necessarily enforced by the compilers I think. Projects might adopt this convention because they have both modern and legacy Fortran.