| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file LICENSE.rst or https://cmake.org/licensing for details. */ | |
| #pragma once | |
| #include "cmConfigure.h" // IWYU pragma: keep | |
| #include <iosfwd> | |
| #include <memory> | |
| #include <string> | |
| #include <cm/optional> | |
| #include <cm/string_view> | |
| #if !defined(CMake_USE_XCOFF_PARSER) | |
| # error "This file may be included only if CMake_USE_XCOFF_PARSER is enabled." | |
| #endif | |
| class cmXCOFFInternal; | |
| /** \class cmXCOFF | |
| * \brief XCOFF parser. | |
| */ | |
| class cmXCOFF | |
| { | |
| public: | |
| enum class Mode | |
| { | |
| ReadOnly, | |
| ReadWrite | |
| }; | |
| /** Construct with the name of the XCOFF input file to parse. */ | |
| cmXCOFF(char const* fname, Mode = Mode::ReadOnly); | |
| /** Destruct. */ | |
| ~cmXCOFF(); | |
| cmXCOFF(cmXCOFF&&) noexcept; | |
| cmXCOFF(cmXCOFF const&) = delete; | |
| cmXCOFF& operator=(cmXCOFF&&) noexcept; | |
| cmXCOFF& operator=(cmXCOFF const&) = delete; | |
| /** Get the error message if any. */ | |
| std::string const& GetErrorMessage() const { return this->ErrorMessage; } | |
| /** Boolean conversion. True if the XCOFF file is valid. */ | |
| explicit operator bool() const { return this->Valid(); } | |
| /** Get the LIBPATH (RPATH) parsed from the file, if any. */ | |
| cm::optional<cm::string_view> GetLibPath() const; | |
| /** Set the LIBPATH (RPATH). | |
| Works only if cmXCOFF was constructed with Mode::ReadWrite. */ | |
| bool SetLibPath(cm::string_view libPath); | |
| /** Remove the LIBPATH (RPATH). | |
| Works only if cmXCOFF was constructed with Mode::ReadWrite. */ | |
| bool RemoveLibPath(); | |
| private: | |
| friend class cmXCOFFInternal; | |
| bool Valid() const; | |
| std::unique_ptr<cmXCOFFInternal> Internal; | |
| std::string ErrorMessage; | |
| }; |