Extend compile test for standard filesystem

Apparently the current compile check is not sufficient:

```
[   54s] -- The C compiler identification is GNU 8.2.1
[   54s] -- The CXX compiler identification is GNU 8.2.1
[   54s] -- Check for working C compiler: /usr/bin/gcc-8
[   54s] -- Check for working C compiler: /usr/bin/gcc-8 - works
[   54s] -- Detecting C compiler ABI info
[   54s] -- Detecting C compiler ABI info - done
[   54s] -- Detecting C compile features
[   54s] -- Detecting C compile features - done
[   54s] -- Check for working CXX compiler: /usr/bin/g++-8
[   55s] -- Check for working CXX compiler: /usr/bin/g++-8 - works
…
[   55s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_0
[   55s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_0 - Success
[   55s] -- Linking tageditor against special library for std::filesystem support is not required.
…
[  109s] FAILED: tageditor
[  109s] : && /usr/bin/g++-8  -fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -DNDEBUG -O2 -g -DNDEBUG  -Wl,--as-needed -Wl,--no-undefined -Wl,-z,now    -rdynamic CMakeFiles/tageditor.dir/tageditor_autogen/mocs_compilation.cpp.o CMakeFiles/tageditor.dir/application/main.cpp.o CMakeFiles/tageditor.dir/cli/attachmentinfo.cpp.o CMakeFiles/tageditor.dir/cli/fieldmapping.cpp.o CMakeFiles/tageditor.dir/cli/helper.cpp.o CMakeFiles/tageditor.dir/cli/mainfeatures.cpp.o CMakeFiles/tageditor.dir/application/knownfieldmodel.cpp.o CMakeFiles/tageditor.dir/application/targetlevelmodel.cpp.o CMakeFiles/tageditor.dir/application/settings.cpp.o CMakeFiles/tageditor.dir/gui/fileinfomodel.cpp.o CMakeFiles/tageditor.dir/misc/htmlinfo.cpp.o CMakeFiles/tageditor.dir/misc/utility.cpp.o CMakeFiles/tageditor.dir/gui/attachmentsedit.cpp.o CMakeFiles/tageditor.dir/gui/attachmentsmodel.cpp.o CMakeFiles/tageditor.dir/gui/codeedit.cpp.o CMakeFiles/tageditor.dir/gui/entertargetdialog.cpp.o CMakeFiles/tageditor.dir/gui/mainwindow.cpp.o CMakeFiles/tageditor.dir/gui/minimumemptyspinbox.cpp.o CMakeFiles/tageditor.dir/gui/notificationlabel.cpp.o CMakeFiles/tageditor.dir/gui/notificationmodel.cpp.o CMakeFiles/tageditor.dir/gui/pathlineedit.cpp.o CMakeFiles/tageditor.dir/gui/picturepreviewselection.cpp.o CMakeFiles/tageditor.dir/gui/filefilterproxymodel.cpp.o CMakeFiles/tageditor.dir/gui/initiate.cpp.o CMakeFiles/tageditor.dir/gui/javascripthighlighter.cpp.o CMakeFiles/tageditor.dir/gui/renamefilesdialog.cpp.o CMakeFiles/tageditor.dir/gui/settingsdialog.cpp.o CMakeFiles/tageditor.dir/gui/tagedit.cpp.o CMakeFiles/tageditor.dir/gui/tagfieldedit.cpp.o CMakeFiles/tageditor.dir/gui/tageditorwidget.cpp.o CMakeFiles/tageditor.dir/dbquery/dbquery.cpp.o CMakeFiles/tageditor.dir/dbquery/musicbrainz.cpp.o CMakeFiles/tageditor.dir/dbquery/makeitpersonal.cpp.o CMakeFiles/tageditor.dir/dbquery/lyricswikia.cpp.o CMakeFiles/tageditor.dir/gui/dbquerywidget.cpp.o CMakeFiles/tageditor.dir/misc/networkaccessmanager.cpp.o CMakeFiles/tageditor.dir/renamingutility/filesystemitem.cpp.o CMakeFiles/tageditor.dir/renamingutility/filesystemitemmodel.cpp.o CMakeFiles/tageditor.dir/renamingutility/filteredfilesystemitemmodel.cpp.o CMakeFiles/tageditor.dir/renamingutility/renamingengine.cpp.o CMakeFiles/tageditor.dir/renamingutility/tageditorobject.cpp.o CMakeFiles/tageditor.dir/tageditor_autogen/3YJK5W5UP7/qrc_icons.cpp.o CMakeFiles/tageditor.dir/tageditor_autogen/3YJK5W5UP7/qrc_scripts.cpp.o CMakeFiles/tageditor.dir/tageditor_autogen/JU62CA5L7X/qrc_tageditor_translations.cpp.o  -o tageditor  /usr/lib64/libqtutilities.so.6.4.1  /usr/lib64/libtagparser.so.10.0.0  /usr/lib64/libQt5Concurrent.so.5.12.7  /usr/lib64/libQt5WebEngineWidgets.so.5.15.3  /usr/lib64/libc++utilities.so.5.10.4  /usr/lib64/libQt5WebEngineCore.so.5.15.3  /usr/lib64/libQt5WebChannel.so.5.12.7  /usr/lib64/libQt5Positioning.so.5.12.7  /usr/lib64/libQt5Quick.so.5.12.7  /usr/lib64/libQt5Qml.so.5.12.7  /usr/lib64/libQt5Network.so.5.12.7  /usr/lib64/libQt5PrintSupport.so.5.12.7  /usr/lib64/libQt5Widgets.so.5.12.7  /usr/lib64/libQt5Gui.so.5.12.7  /usr/lib64/libQt5Core.so.5.12.7 && :
[  109s] /usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld: CMakeFiles/tageditor.dir/cli/mainfeatures.cpp.o: in function `Cli::setTagInfo(Cli::SetTagInfoArgs const&)':
[  109s] /home/abuild/rpmbuild/BUILD/tageditor-3.4.0/build/../cli/mainfeatures.cpp:889: undefined reference to `std::filesystem::last_write_time(std::filesystem::__cxx11::path const&, std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l> > >, std::error_code&)'
[  109s] collect2: error: ld returned 1 exit status
```

For `c++utilities` itself it doesn't seem to matter:

```
[   33s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_0
[   35s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_0 - Success
[   35s] -- Linking c++utilities against special library for std::filesystem support is not required.
…
[   43s] [22/22] /usr/bin/cmake -E cmake_symlink_library libc++utilities.so.5.10.4  libc++utilities.so.5 libc++utilities.so && :
[   43s] + RPM_EC=0
```

For some reason the AppImage build doesn't have the problem:

```
[   77s] -- The C compiler identification is GNU 8.2.1
[   77s] -- The CXX compiler identification is GNU 8.2.1
[   77s] -- Check for working C compiler: /usr/bin/gcc-8
[   77s] -- Check for working C compiler: /usr/bin/gcc-8 -- works
[   77s] -- Detecting C compiler ABI info
[   78s] -- Detecting C compiler ABI info - done
[   78s] -- Detecting C compile features
[   78s] -- Detecting C compile features - done
[   78s] -- Check for working CXX compiler: /usr/bin/g++-8
[   78s] -- Check for working CXX compiler: /usr/bin/g++-8 -- works
[   78s] -- Detecting CXX compiler ABI info
[   78s] -- Detecting CXX compiler ABI info - done
[   78s] -- Detecting CXX compile features
[   79s] -- Detecting CXX compile features - done
[   79s] -- Looking for iconv
[   79s] -- Looking for iconv - found
[   79s] -- Using iconv from the standard library for target c++utilities.
[   79s] -- Using std::fstream for NativeFileStream
[   79s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_0
[   80s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_0 - Failed
[   80s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_1
[   81s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_1 - Success
[   81s] -- Linking c++utilities against library "-lstdc++fs" for std::filesystem support.
```
This commit is contained in:
Martchus 2021-06-17 16:17:56 +02:00
parent 8bda5ce146
commit e961eb9726
1 changed files with 8 additions and 3 deletions

View File

@ -331,9 +331,14 @@ function (use_standard_filesystem)
# check whether an additional library for std::filesystem support is required
set(TEST_PROGRAM
[[
#include <chrono>
#include <system_error>
#include <filesystem>
int main() {
auto cwd = std::filesystem::current_path();
auto ec = std::error_code();
const auto cwd = std::filesystem::current_path();
const auto t = std::filesystem::last_write_time(cwd, ec);
std::filesystem::last_write_time(cwd, t, ec);
return static_cast<int>(cwd.string().size());
}
]])
@ -368,8 +373,8 @@ function (use_standard_filesystem)
return()
endif ()
# prefer the static version of the library because the ABI might not be stable note: stdc++fs seems to be only available
# as static lib anyways
# prefer the static version of the library because the ABI might not be stable (note: stdc++fs seems to be only available
# as static lib anyways)
configure_static_library_suffixes()
set(USED_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
find_library(STANDARD_FILE_SYSTEM_LIBRARY "${REQUIRED_LIBRARY}")