Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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 this issue Feb 18, 2024 · 2 comments

Comments

@barracuda156
Copy link

@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
Copy link
Owner

luspi commented Feb 20, 2024

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
Copy link
Author

@luspi Thank you, I will try that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants