From e961eb97260a3b61680d47306b60da77355dc9d6 Mon Sep 17 00:00:00 2001 From: Martchus Date: Thu, 17 Jun 2021 16:17:56 +0200 Subject: [PATCH] Extend compile test for standard filesystem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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::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. ``` --- cmake/modules/3rdParty.cmake | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/cmake/modules/3rdParty.cmake b/cmake/modules/3rdParty.cmake index f2fa51b..c991a13 100644 --- a/cmake/modules/3rdParty.cmake +++ b/cmake/modules/3rdParty.cmake @@ -331,9 +331,14 @@ function (use_standard_filesystem) # check whether an additional library for std::filesystem support is required set(TEST_PROGRAM [[ + #include + #include #include 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(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}")