luspi / photoqt

PhotoQt Image Viewer (mirror repo) - https://photoqt.org
GNU General Public License v2.0
54 stars 12 forks source link

4.2 fails on macOS Sonoma: `error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?` #22

Open barracuda156 opened 9 months ago

barracuda156 commented 9 months ago

@luspi Tried to build 4.2 with Qt6 now, however it fails on the following:

[ 61%] Building CXX object CMakeFiles/photoqt.dir/cplusplus/other/pqc_validate.cpp.o
/usr/bin/clang++ -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16 -DPQMEXIV2 -DPQMEXIV2_ENABLE_BMFF -DPQMIMAGEMAGICK -DPQMLIBARCHIVE -DPQMLIBVIPS -DPQMLOCATION -DPQMMOTIONPHOTO -DPQMPOPPLER -DPQMPUGIXML -DPQMRAW -DPQMVERSION=\"4.2\" -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_DBUS_LIB -DQT_GUI_LIB -DQT_MESSAGELOGCONTEXT -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_KEYWORDS -DQT_OPENGL_LIB -DQT_PRINTSUPPORT_LIB -DQT_QMLINTEGRATION_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_QUICK_LIB -DQT_SQL_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -I/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/build/photoqt_autogen/include -I/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2 -I/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/header -I/opt/local/include -I/opt/local/include/ImageMagick-6 -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -isystem /opt/local/libexec/qt6/lib/QtQml.framework/Headers/6.4.3 -isystem /opt/local/libexec/qt6/lib/QtQml.framework/Headers/6.4.3/QtQml -isystem /opt/local/libexec/qt6/lib/QtCore.framework/Headers/6.4.3 -isystem /opt/local/libexec/qt6/lib/QtCore.framework/Headers/6.4.3/QtCore -isystem /opt/local/libexec/qt6/lib/QtCore.framework/Headers -iframework /opt/local/libexec/qt6/lib -isystem /opt/local/libexec/qt6/mkspecs/macx-clang -isystem /opt/local/libexec/qt6/include -isystem /opt/local/libexec/qt6/lib/QtQml.framework/Headers -isystem /opt/local/libexec/qt6/include/QtQmlIntegration -isystem /opt/local/libexec/qt6/lib/QtNetwork.framework/Headers -isystem /opt/local/libexec/qt6/lib/QtQuick.framework/Headers -isystem /opt/local/libexec/qt6/lib/QtGui.framework/Headers -isystem /opt/local/libexec/qt6/lib/QtQmlModels.framework/Headers -isystem /opt/local/libexec/qt6/lib/QtOpenGL.framework/Headers -isystem /opt/local/libexec/qt6/lib/QtWidgets.framework/Headers -isystem /opt/local/libexec/qt6/lib/QtSql.framework/Headers -isystem /opt/local/libexec/qt6/lib/QtSvg.framework/Headers -isystem /opt/local/libexec/qt6/lib/QtConcurrent.framework/Headers -isystem /opt/local/libexec/qt6/lib/QtMultimedia.framework/Headers -isystem /opt/local/libexec/qt6/lib/QtPrintSupport.framework/Headers -isystem /opt/local/libexec/qt6/lib/QtDBus.framework/Headers -pipe -Os -DNDEBUG -I/opt/local/include -stdlib=libc++ -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -std=gnu++17 -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -mmacosx-version-min=14.0 -MD -MT CMakeFiles/photoqt.dir/cplusplus/other/pqc_validate.cpp.o -MF CMakeFiles/photoqt.dir/cplusplus/other/pqc_validate.cpp.o.d -o CMakeFiles/photoqt.dir/cplusplus/other/pqc_validate.cpp.o -c /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/other/pqc_validate.cpp
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
In file included from /opt/local/include/exiv2/metadatum.hpp:27:
/opt/local/include/exiv2/value.hpp:54:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<Value> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
In file included from /opt/local/include/exiv2/metadatum.hpp:27:
/opt/local/include/exiv2/value.hpp:256:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<DataValue> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
In file included from /opt/local/include/exiv2/metadatum.hpp:27:
/opt/local/include/exiv2/value.hpp:338:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<StringValueBase> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
In file included from /opt/local/include/exiv2/metadatum.hpp:27:
/opt/local/include/exiv2/value.hpp:420:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<StringValue> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
In file included from /opt/local/include/exiv2/metadatum.hpp:27:
/opt/local/include/exiv2/value.hpp:452:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<AsciiValue> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
In file included from /opt/local/include/exiv2/metadatum.hpp:27:
/opt/local/include/exiv2/value.hpp:540:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<CommentValue> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
In file included from /opt/local/include/exiv2/metadatum.hpp:27:
/opt/local/include/exiv2/value.hpp:627:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<XmpValue> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
In file included from /opt/local/include/exiv2/metadatum.hpp:27:
/opt/local/include/exiv2/value.hpp:718:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<XmpTextValue> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
In file included from /opt/local/include/exiv2/metadatum.hpp:27:
/opt/local/include/exiv2/value.hpp:800:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<XmpArrayValue> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
In file included from /opt/local/include/exiv2/metadatum.hpp:27:
/opt/local/include/exiv2/value.hpp:893:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<LangAltValue> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
In file included from /opt/local/include/exiv2/metadatum.hpp:27:
/opt/local/include/exiv2/value.hpp:981:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<DateValue> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
In file included from /opt/local/include/exiv2/metadatum.hpp:27:
/opt/local/include/exiv2/value.hpp:1082:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<TimeValue> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
In file included from /opt/local/include/exiv2/metadatum.hpp:27:
/opt/local/include/exiv2/value.hpp:1238:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<ValueType<T> > AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
In file included from /opt/local/include/exiv2/datasets.hpp:33:
/opt/local/include/exiv2/metadatum.hpp:47:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<Key> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:26:
/opt/local/include/exiv2/datasets.hpp:278:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<IptcKey> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:27:
/opt/local/include/exiv2/basicio.hpp:58:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<BasicIo> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:27:
/opt/local/include/exiv2/basicio.hpp:524:9: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        std::auto_ptr<Impl> p_;
        ^~~~~~~~~~~~~
        auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:27:
/opt/local/include/exiv2/basicio.hpp:724:9: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        std::auto_ptr<Impl> p_;
        ^~~~~~~~~~~~~
        auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_graphics_photoqt/photoqt/work/photoqt-4.2/cplusplus/main.cpp:98:
In file included from /opt/local/include/exiv2/exiv2.hpp:28:
In file included from /opt/local/include/exiv2/bmffimage.hpp:27:
In file included from /opt/local/include/exiv2/image.hpp:28:
In file included from /opt/local/include/exiv2/exif.hpp:35:
/opt/local/include/exiv2/tags.hpp:143:17: error: no template named 'auto_ptr' in namespace 'std'; did you mean simply 'auto_ptr'?
        typedef std::auto_ptr<ExifKey> AutoPtr;
                ^~~~~~~~~~~~~
                auto_ptr
/opt/local/include/exiv2/config.h:105:3: note: 'auto_ptr' declared here
  using auto_ptr = std::unique_ptr<T>;
  ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.

Is it does to version incompatibility or something else? Macports has 0.27.6 at the moment: https://github.com/macports/macports-ports/blob/7aa619147e087b71b2da4a2f916adeb96cbb5859/graphics/exiv2/Portfile#L9

luspi commented 9 months ago

I believe this is due to a mismatch in C++ version requirements. Qt6 requires C++17 and Exiv2 0.27.x requires C++03. Typically that is no problem, however, std::auto_ptr was removed in C++17. This is fixed in Exiv2 0.28.x.

It is possible, however, to re-enable auto_ptr for Clang. To do so, add this line anywhere in the CMakeLists.txt file, for example around line 22:

add_definitions(-D_HAS_AUTO_PTR_ETC=1)
barracuda156 commented 9 months ago

@luspi Thank you, I will try that.