I prefer option 2 if it is possible. I do not think it is useful to have the full path name (of the build directory) in shipped binaries.
On Sun, Jan 2, 2022 at 7:11 AM Robert Middleton <rmiddle...@apache.org> wrote: > PR #75 adds a new option for displaying the short filename of the log > location, which is probably a good idea to have, as in my experience, > the whole path of the file is not that useful, especially when the > binary is from a build server where the path is something like > /var/lib/jenkins/project-name/src/main/directory/foo.cpp. > > The current PR does this with some string manipulation at runtime, and > is different from the const char* that is currently used, so it > doesn't fit that well with the rest of the class. Since C++11 we can > now do constexpr functions, so we should be able to do this at compile > time(assuming you have optimizations turned on of course). > > We can do this one of several ways: > 1. Take the PR as is(use strings and calculate at runtime) > 2. Create a constexpr function that we control to calculate the > filename at compile time as either an offset into the filename or a > separate const char*. The advantage to this is that it doesn't > require any other libraries for pre-C++17 compilers. > 3. Use std::string_view(for C++17) or boost::string_view(pre-c++17). > The following would work for this solution: > std::string_view str{"/foo/bar/what.cpp"}; > const int location = str.find_last_of( '/' ) + 1; > printf( "fullPath: %s\n", str.data() ); > printf( "fileName: %s\n", &str[location] ); > > Does anybody have a preference or a better way to do it? I'm inclined > to go with (3), since that does provide a good fallback for compilers > that don't support C++17, and only requires boost for older compilers. > > -Robert Middleton >