Come up with a way to shorten long lines that reference __FILE__
- Dominant language
- Fortran
- Stars
- 13
- Forks
- 17
- PR merge metrics
- No merged PRs in 30d
Description
_From @billsacks on September 23, 2017 12:18_
The pgi compiler enforces a line length of (I think) 264 characters after doing macro expansion. This can cause problems for lines using the `__FILE__` macro, because this expands to the absolute path to that file. This was causing problems in CESM for some automated tests that had long paths to the bld directory. I have fixed that problem with a cime change, but this too-long-line problem is likely to come back to bite us at some point.
Some possible solutions:
1. Do what CLM does: In each file, have:
```fortran
character(len=*), parameter, private :: sourcefile = &
__FILE__
```
then use sourcefile rather than `__FILE__` in lines of code. This will still fail if the absolute path to the file is longer than about 256 characters, but it at least buys us some characters (because you're not adding the file path length to the source file line in which it's referenced).
2. If the problem just occurs for source files that appear in the bld directory (because paths to the bld directory may be longer than paths to the source tree), then we could fix this just for files that are copied or generated in the bld directory. For example, for auto-generated io files, we could change references to `__FILE__` to instead just give the file name without a path.
3. We could consider a solution that uses just the file name itself rather than the full path, for all files. Some possibilities:
a. Hard-code at the top of each file something like:
```fortran
character(len=*), parameter, private :: sourcefile = "myfilename.F90"
```
b. Apparently PIO created its own `_FILE_` macro in the past, which gave just the file name rather than its full path, though I don't understand exactly how it was done. (At a glance, it looks like PIO now uses solution (a).)
c. There may be a way to do this via cmake. For example, see the cmake-based solution here: . However, comments around that make it sound like a fragile solution. I've seen some other cmake-based solutions via googling, but they all seem either complex or fragile.
_Copied from original issue: E3SM-Project/cism-piscees#64_
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.