From b0c252a82f518743f21117709a3f2364909186be Mon Sep 17 00:00:00 2001 From: Roland Kaminski Date: Thu, 8 Jul 2021 19:27:15 +0200 Subject: [PATCH 1/7] cleanup + switch to c++17 --- CMakeLists.txt | 13 +---- include/plasp/sas/Description.h | 4 +- lib/colorlog/CMakeLists.txt | 22 -------- lib/colorlog/src/CMakeLists.txt | 4 +- lib/pddl/CMakeLists.txt | 22 -------- lib/pddl/include/pddl/AST.h | 18 +++---- lib/pddl/include/pddl/ASTForward.h | 2 +- lib/pddl/include/pddl/Exception.h | 6 +-- lib/pddl/include/pddl/NormalizedAST.h | 12 ++--- lib/pddl/include/pddl/Parse.h | 2 +- lib/pddl/include/pddl/detail/ASTContext.h | 4 +- .../include/pddl/detail/SignatureMatching.h | 6 +-- lib/pddl/include/pddl/detail/VariableStack.h | 2 +- .../pddl/detail/parsing/AtomicFormula.h | 2 +- .../include/pddl/detail/parsing/Constant.h | 2 +- lib/pddl/include/pddl/detail/parsing/Effect.h | 2 +- .../include/pddl/detail/parsing/Expressions.h | 52 +++++++++---------- lib/pddl/include/pddl/detail/parsing/Fact.h | 2 +- lib/pddl/include/pddl/detail/parsing/Parser.h | 4 +- .../pddl/detail/parsing/Precondition.h | 4 +- .../include/pddl/detail/parsing/Predicate.h | 2 +- .../include/pddl/detail/parsing/Requirement.h | 2 +- lib/pddl/include/pddl/detail/parsing/Term.h | 2 +- .../include/pddl/detail/parsing/Variable.h | 2 +- lib/pddl/src/CMakeLists.txt | 8 +-- .../src/pddl/detail/SignatureMatching.cpp | 6 +-- lib/pddl/src/pddl/detail/VariableStack.cpp | 4 +- .../src/pddl/detail/parsing/AtomicFormula.cpp | 4 +- lib/pddl/src/pddl/detail/parsing/Constant.cpp | 12 ++--- .../src/pddl/detail/parsing/Description.cpp | 2 +- lib/pddl/src/pddl/detail/parsing/Effect.cpp | 22 ++++---- lib/pddl/src/pddl/detail/parsing/Fact.cpp | 6 +-- .../src/pddl/detail/parsing/Precondition.cpp | 8 +-- .../src/pddl/detail/parsing/Predicate.cpp | 6 +-- .../parsing/PrimitiveTypeDeclaration.cpp | 4 +- .../src/pddl/detail/parsing/Requirement.cpp | 4 +- lib/pddl/src/pddl/detail/parsing/Term.cpp | 6 +-- lib/pddl/src/pddl/detail/parsing/Type.cpp | 2 +- lib/pddl/src/pddl/detail/parsing/Variable.cpp | 6 +-- lib/pddl/tests/TestIssues.cpp | 4 +- lib/pddl/tests/TestNormalization.cpp | 4 +- lib/pddl/tests/TestParserBasics.cpp | 4 +- lib/pddl/tests/TestParserCorrectness.cpp | 4 +- lib/pddl/tests/TestParserSuccess.cpp | 8 +-- lib/pddl/tests/TestSignatureMatching.cpp | 4 +- lib/tokenize/CMakeLists.txt | 23 -------- lib/tokenize/include/tokenize/Stream.h | 6 +-- src/plasp/sas/Description.cpp | 4 +- 48 files changed, 138 insertions(+), 216 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f9682f0..be24c9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,9 @@ -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.8) project(plasp CXX) option(PLASP_BUILD_TESTS "Build unit tests" OFF) option(PLASP_BUILD_STATIC "Build static binaries" OFF) -set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic -Werror ${CMAKE_CXX_FLAGS}") -set(CMAKE_CXX_FLAGS_DEBUG "-g ${CMAKE_CXX_FLAGS_DEBUG}") - set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) @@ -22,14 +19,6 @@ if(PLASP_BUILD_STATIC) set(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS) endif() -if (CMAKE_GENERATOR STREQUAL "Ninja" AND - ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9) OR - (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5))) - # Force colored warnings in Ninja's output, if the compiler has -fdiagnostics-color support. - # Rationale in https://github.com/ninja-build/ninja/issues/814 - set(CMAKE_CXX_FLAGS "-fdiagnostics-color=always ${CMAKE_CXX_FLAGS}") -endif() - add_subdirectory(lib/tokenize) add_subdirectory(lib/colorlog) add_subdirectory(lib/pddl) diff --git a/include/plasp/sas/Description.h b/include/plasp/sas/Description.h index 1c9e8cf..a8a0b90 100644 --- a/include/plasp/sas/Description.h +++ b/include/plasp/sas/Description.h @@ -1,7 +1,7 @@ #ifndef __PLASP__SAS__DESCRIPTION_H #define __PLASP__SAS__DESCRIPTION_H -#include +#include #include #include #include @@ -31,7 +31,7 @@ class Description public: static Description fromTokenizer(tokenize::Tokenizer<> &&tokenizer); static Description fromStream(std::istream &istream); - static Description fromFile(const std::experimental::filesystem::path &path); + static Description fromFile(const std::filesystem::path &path); public: bool usesActionCosts() const; diff --git a/lib/colorlog/CMakeLists.txt b/lib/colorlog/CMakeLists.txt index 7555f01..febd4f0 100644 --- a/lib/colorlog/CMakeLists.txt +++ b/lib/colorlog/CMakeLists.txt @@ -1,23 +1 @@ -cmake_minimum_required(VERSION 2.6) -project(colorlog) - -set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic -Werror ${CMAKE_CXX_FLAGS}") -set(CMAKE_CXX_FLAGS_DEBUG "-g ${CMAKE_CXX_FLAGS_DEBUG}") - -set(CMAKE_CXX_STANDARD 14) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - -if (CMAKE_GENERATOR STREQUAL "Ninja" AND - ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9) OR - (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5))) - # Force colored warnings in Ninja's output, if the compiler has -fdiagnostics-color support. - # Rationale in https://github.com/ninja-build/ninja/issues/814 - set(CMAKE_CXX_FLAGS "-fdiagnostics-color=always ${CMAKE_CXX_FLAGS}") -endif() - add_subdirectory(src) diff --git a/lib/colorlog/src/CMakeLists.txt b/lib/colorlog/src/CMakeLists.txt index ac13a4b..c1027c9 100644 --- a/lib/colorlog/src/CMakeLists.txt +++ b/lib/colorlog/src/CMakeLists.txt @@ -4,8 +4,8 @@ file(GLOB core_sources "colorlog/*.cpp") file(GLOB core_headers "../include/colorlog/*.h") set(includes - ${PROJECT_SOURCE_DIR}/include - ${PROJECT_SOURCE_DIR}/../../lib/tokenize/include + ../include + ${PROJECT_SOURCE_DIR}/lib/tokenize/include ) set(sources diff --git a/lib/pddl/CMakeLists.txt b/lib/pddl/CMakeLists.txt index caf5e50..edc4627 100644 --- a/lib/pddl/CMakeLists.txt +++ b/lib/pddl/CMakeLists.txt @@ -1,27 +1,5 @@ -cmake_minimum_required(VERSION 2.6) -project(pddl) - option(PDDL_BUILD_TESTS "Build unit tests" OFF) -set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic -Werror ${CMAKE_CXX_FLAGS}") -set(CMAKE_CXX_FLAGS_DEBUG "-g ${CMAKE_CXX_FLAGS_DEBUG}") - -set(CMAKE_CXX_STANDARD 14) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - -if (CMAKE_GENERATOR STREQUAL "Ninja" AND - ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9) OR - (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5))) - # Force colored warnings in Ninja's output, if the compiler has -fdiagnostics-color support. - # Rationale in https://github.com/ninja-build/ninja/issues/814 - set(CMAKE_CXX_FLAGS "-fdiagnostics-color=always ${CMAKE_CXX_FLAGS}") -endif() - add_subdirectory(src) if(PDDL_BUILD_TESTS) add_subdirectory(tests) diff --git a/lib/pddl/include/pddl/AST.h b/lib/pddl/include/pddl/AST.h index 1804e18..81b61fe 100644 --- a/lib/pddl/include/pddl/AST.h +++ b/lib/pddl/include/pddl/AST.h @@ -2,7 +2,7 @@ #define __PDDL__AST_H #include -#include +#include #include #include #include @@ -43,7 +43,7 @@ struct Constant struct ConstantDeclaration { - explicit ConstantDeclaration(std::string &&name, std::experimental::optional &&type = std::experimental::nullopt) + explicit ConstantDeclaration(std::string &&name, std::optional &&type = std::nullopt) : name{std::move(name)}, type{std::move(type)} { @@ -56,7 +56,7 @@ struct ConstantDeclaration std::string name; // TODO: check whether “either” types should actually be allowed at all - std::experimental::optional type; + std::optional type; }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -115,7 +115,7 @@ struct Variable struct VariableDeclaration { - explicit VariableDeclaration(std::string &&name, std::experimental::optional type = std::experimental::nullopt) + explicit VariableDeclaration(std::string &&name, std::optional type = std::nullopt) : name{std::move(name)}, type{std::move(type)} { @@ -127,7 +127,7 @@ struct VariableDeclaration VariableDeclaration &operator=(VariableDeclaration &&other) = delete; std::string name; - std::experimental::optional type; + std::optional type; }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -404,8 +404,8 @@ struct Action std::string name; VariableDeclarations parameters; - std::experimental::optional precondition; - std::experimental::optional effect; + std::optional precondition; + std::optional effect; }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -462,7 +462,7 @@ struct Problem Requirements requirements; ConstantDeclarations objects; InitialState initialState; - std::experimental::optional goal; + std::optional goal; }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -506,7 +506,7 @@ struct Description Description &operator=(Description &&other) = default; DomainPointer domain; - std::experimental::optional problem; + std::optional problem; }; //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/include/pddl/ASTForward.h b/lib/pddl/include/pddl/ASTForward.h index 69203bc..a3841d9 100644 --- a/lib/pddl/include/pddl/ASTForward.h +++ b/lib/pddl/include/pddl/ASTForward.h @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include diff --git a/lib/pddl/include/pddl/Exception.h b/lib/pddl/include/pddl/Exception.h index ca869e4..f3b3c19 100644 --- a/lib/pddl/include/pddl/Exception.h +++ b/lib/pddl/include/pddl/Exception.h @@ -2,7 +2,7 @@ #define __PDDL__EXCEPTION_H #include -#include +#include #include #include @@ -57,7 +57,7 @@ class Exception: public std::exception return m_message.c_str(); } - const std::experimental::optional &location() const + const std::optional &location() const { return m_location; } @@ -68,7 +68,7 @@ class Exception: public std::exception } private: - std::experimental::optional m_location; + std::optional m_location; std::string m_message; }; diff --git a/lib/pddl/include/pddl/NormalizedAST.h b/lib/pddl/include/pddl/NormalizedAST.h index 2848aa4..3f094af 100644 --- a/lib/pddl/include/pddl/NormalizedAST.h +++ b/lib/pddl/include/pddl/NormalizedAST.h @@ -2,7 +2,7 @@ #define __PDDL__NORMALIZED_AST_H #include -#include +#include #include #include #include @@ -36,8 +36,8 @@ struct Action std::string name; VariableDeclarations parameters; - std::experimental::optional precondition; - std::experimental::optional effect; + std::optional precondition; + std::optional effect; }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -95,7 +95,7 @@ struct DerivedPredicateDeclaration std::vector parameters; VariableDeclarations existentialParameters; - std::experimental::optional precondition; + std::optional precondition; }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -133,7 +133,7 @@ struct Problem DerivedPredicateDeclarations derivedPredicates; ConstantDeclarations objects; InitialState initialState; - std::experimental::optional goal; + std::optional goal; }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -148,7 +148,7 @@ struct Description Description &operator=(Description &&other) = default; DomainPointer domain; - std::experimental::optional problem; + std::optional problem; }; //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/include/pddl/Parse.h b/lib/pddl/include/pddl/Parse.h index 953896a..cdd980b 100644 --- a/lib/pddl/include/pddl/Parse.h +++ b/lib/pddl/include/pddl/Parse.h @@ -1,7 +1,7 @@ #ifndef __PDDL__PARSE_H #define __PDDL__PARSE_H -#include +#include #include #include diff --git a/lib/pddl/include/pddl/detail/ASTContext.h b/lib/pddl/include/pddl/detail/ASTContext.h index a1f27f7..988e7fa 100644 --- a/lib/pddl/include/pddl/detail/ASTContext.h +++ b/lib/pddl/include/pddl/detail/ASTContext.h @@ -19,7 +19,7 @@ struct ASTContext { ASTContext(ast::Description &description) : domain{description.domain.get()}, - problem{description.problem.value() ? std::experimental::optional(description.problem.value().get()) : std::experimental::nullopt} + problem{description.problem.value() ? std::optional(description.problem.value().get()) : std::nullopt} { } @@ -35,7 +35,7 @@ struct ASTContext } ast::Domain *domain; - std::experimental::optional problem; + std::optional problem; VariableStack variables; }; diff --git a/lib/pddl/include/pddl/detail/SignatureMatching.h b/lib/pddl/include/pddl/detail/SignatureMatching.h index 6690334..0ebc53f 100644 --- a/lib/pddl/include/pddl/detail/SignatureMatching.h +++ b/lib/pddl/include/pddl/detail/SignatureMatching.h @@ -20,9 +20,9 @@ bool matches(const ast::PrimitiveTypeDeclaration &lhs, const ast::PrimitiveTypeD bool matches(const ast::Either &lhs, const ast::PrimitiveTypeDeclaration &rhs); bool matches(const ast::PrimitiveTypeDeclaration &lhs, const ast::Either &rhs); bool matches(const ast::Either &lhs, const ast::Either &rhs); -bool matches(const ast::VariableDeclaration &lhs, const std::experimental::optional &rhs); -bool matches(const ast::ConstantDeclaration &lhs, const std::experimental::optional &rhs); -bool matches(const ast::Term &lhs, const std::experimental::optional &rhs); +bool matches(const ast::VariableDeclaration &lhs, const std::optional &rhs); +bool matches(const ast::ConstantDeclaration &lhs, const std::optional &rhs); +bool matches(const ast::Term &lhs, const std::optional &rhs); bool matches(const std::string &predicateName, const ast::Predicate::Arguments &predicateArguments, const ast::PredicateDeclaration &predicateDeclaration); diff --git a/lib/pddl/include/pddl/detail/VariableStack.h b/lib/pddl/include/pddl/detail/VariableStack.h index 2da4b4e..8a73979 100644 --- a/lib/pddl/include/pddl/detail/VariableStack.h +++ b/lib/pddl/include/pddl/detail/VariableStack.h @@ -23,7 +23,7 @@ class VariableStack void push(Layer layer); void pop(); - std::experimental::optional findVariableDeclaration(const std::string &variableName) const; + std::optional findVariableDeclaration(const std::string &variableName) const; bool contains(const ast::VariableDeclaration &variableDeclaration) const; private: diff --git a/lib/pddl/include/pddl/detail/parsing/AtomicFormula.h b/lib/pddl/include/pddl/detail/parsing/AtomicFormula.h index 7709196..0009316 100644 --- a/lib/pddl/include/pddl/detail/parsing/AtomicFormula.h +++ b/lib/pddl/include/pddl/detail/parsing/AtomicFormula.h @@ -17,7 +17,7 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseAtomicFormula(Context &context, ASTContext &astContext, VariableStack &variableStack); +std::optional parseAtomicFormula(Context &context, ASTContext &astContext, VariableStack &variableStack); //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/include/pddl/detail/parsing/Constant.h b/lib/pddl/include/pddl/detail/parsing/Constant.h index 854bb81..5d5dbd4 100644 --- a/lib/pddl/include/pddl/detail/parsing/Constant.h +++ b/lib/pddl/include/pddl/detail/parsing/Constant.h @@ -16,7 +16,7 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseConstant(Context &context, ASTContext &astContext); +std::optional parseConstant(Context &context, ASTContext &astContext); //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/include/pddl/detail/parsing/Effect.h b/lib/pddl/include/pddl/detail/parsing/Effect.h index 942447b..5f1b8f0 100644 --- a/lib/pddl/include/pddl/detail/parsing/Effect.h +++ b/lib/pddl/include/pddl/detail/parsing/Effect.h @@ -17,7 +17,7 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseEffect(Context &context, ASTContext &astContext, VariableStack &variableStack); +std::optional parseEffect(Context &context, ASTContext &astContext, VariableStack &variableStack); //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/include/pddl/detail/parsing/Expressions.h b/lib/pddl/include/pddl/detail/parsing/Expressions.h index 970aad2..a31dc68 100644 --- a/lib/pddl/include/pddl/detail/parsing/Expressions.h +++ b/lib/pddl/include/pddl/detail/parsing/Expressions.h @@ -20,32 +20,32 @@ namespace detail //////////////////////////////////////////////////////////////////////////////////////////////////// template -std::experimental::optional> parseAnd(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); +std::optional> parseAnd(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); template -std::experimental::optional> parseAt(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); +std::optional> parseAt(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); template -std::experimental::optional> parseEither(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); +std::optional> parseEither(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); template -std::experimental::optional> parseEquals(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentLeftParser parseArgumentLeft, ArgumentRightParser parseArgumentRight); +std::optional> parseEquals(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentLeftParser parseArgumentLeft, ArgumentRightParser parseArgumentRight); template -std::experimental::optional> parseExists(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); +std::optional> parseExists(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); template -std::experimental::optional> parseForAll(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); +std::optional> parseForAll(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); template -std::experimental::optional> parseImply(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); +std::optional> parseImply(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); template -std::experimental::optional> parseNot(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); +std::optional> parseNot(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); template -std::experimental::optional> parseOr(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); +std::optional> parseOr(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); template -std::experimental::optional> parseWhen(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentLeftParser parseArgumentLeft, ArgumentRightParser parseArgumentRight); +std::optional> parseWhen(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentLeftParser parseArgumentLeft, ArgumentRightParser parseArgumentRight); //////////////////////////////////////////////////////////////////////////////////////////////////// // Expressions: Base Classes //////////////////////////////////////////////////////////////////////////////////////////////////// template -std::experimental::optional> parseBinary(Context &context, +std::optional> parseBinary(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentLeftParser parseArgumentLeft, ArgumentRightParser parseArgumentRight) { @@ -57,7 +57,7 @@ std::experimental::optional> parseBinary(Context &conte || !tokenizer.testIdentifierAndSkip(Derived::Identifier)) { tokenizer.seek(position); - return std::experimental::nullopt; + return std::nullopt; } tokenizer.skipWhiteSpace(); @@ -81,7 +81,7 @@ std::experimental::optional> parseBinary(Context &conte //////////////////////////////////////////////////////////////////////////////////////////////////// template -std::experimental::optional> parseNAry(Context &context, +std::optional> parseNAry(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) { auto &tokenizer = context.tokenizer; @@ -92,7 +92,7 @@ std::experimental::optional> parseNAry(Context &context || !tokenizer.testIdentifierAndSkip(Derived::Identifier)) { tokenizer.seek(position); - return std::experimental::nullopt; + return std::nullopt; } typename Derived::Arguments arguments; @@ -123,7 +123,7 @@ std::experimental::optional> parseNAry(Context &context //////////////////////////////////////////////////////////////////////////////////////////////////// template -std::experimental::optional> parseQuantified(Context &context, +std::optional> parseQuantified(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) { auto &tokenizer = context.tokenizer; @@ -134,7 +134,7 @@ std::experimental::optional> parseQuantified(Context &c || !tokenizer.testIdentifierAndSkip(Derived::Identifier)) { tokenizer.seek(position); - return std::experimental::nullopt; + return std::nullopt; } // Parse variable list @@ -164,7 +164,7 @@ std::experimental::optional> parseQuantified(Context &c //////////////////////////////////////////////////////////////////////////////////////////////////// template -std::experimental::optional> parseAnd(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) +std::optional> parseAnd(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) { return parseNAry, ArgumentParser>(context, astContext, variableStack, parseArgument); } @@ -172,7 +172,7 @@ std::experimental::optional> parseAnd(Context &context //////////////////////////////////////////////////////////////////////////////////////////////////// template -std::experimental::optional> parseEither(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) +std::optional> parseEither(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) { return parseNAry, ArgumentParser>(context, astContext, variableStack, parseArgument); } @@ -180,7 +180,7 @@ std::experimental::optional> parseEither(Context &c //////////////////////////////////////////////////////////////////////////////////////////////////// template -std::experimental::optional> parseEquals(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentLeftParser parseArgumentLeft, ArgumentRightParser parseArgumentRight) +std::optional> parseEquals(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentLeftParser parseArgumentLeft, ArgumentRightParser parseArgumentRight) { return parseBinary, ArgumentLeftParser, ArgumentRightParser>(context, astContext, variableStack, parseArgumentLeft, parseArgumentRight); } @@ -188,7 +188,7 @@ std::experimental::optional> par //////////////////////////////////////////////////////////////////////////////////////////////////// template -std::experimental::optional> parseExists(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) +std::optional> parseExists(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) { return parseQuantified, ArgumentParser>(context, astContext, variableStack, parseArgument); } @@ -196,7 +196,7 @@ std::experimental::optional> parseExists(Context &c //////////////////////////////////////////////////////////////////////////////////////////////////// template -std::experimental::optional> parseForAll(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) +std::optional> parseForAll(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) { return parseQuantified, ArgumentParser>(context, astContext, variableStack, parseArgument); } @@ -204,7 +204,7 @@ std::experimental::optional> parseForAll(Context &c //////////////////////////////////////////////////////////////////////////////////////////////////// template -std::experimental::optional> parseImply(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) +std::optional> parseImply(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) { return parseBinary, ArgumentParser, ArgumentParser>(context, astContext, variableStack, parseArgument, parseArgument); } @@ -212,7 +212,7 @@ std::experimental::optional> parseImply(Context &con //////////////////////////////////////////////////////////////////////////////////////////////////// template -std::experimental::optional> parseNot(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) +std::optional> parseNot(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) { auto &tokenizer = context.tokenizer; @@ -222,7 +222,7 @@ std::experimental::optional> parseNot(Context &context || !tokenizer.testIdentifierAndSkip("not")) { tokenizer.seek(position); - return std::experimental::nullopt; + return std::nullopt; } tokenizer.skipWhiteSpace(); @@ -241,7 +241,7 @@ std::experimental::optional> parseNot(Context &context //////////////////////////////////////////////////////////////////////////////////////////////////// template -std::experimental::optional> parseOr(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) +std::optional> parseOr(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) { return parseNAry, ArgumentParser>(context, astContext, variableStack, parseArgument); } @@ -249,7 +249,7 @@ std::experimental::optional> parseOr(Context &context, //////////////////////////////////////////////////////////////////////////////////////////////////// template -std::experimental::optional> parseWhen(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentLeftParser parseArgumentLeft, ArgumentRightParser parseArgumentRight) +std::optional> parseWhen(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentLeftParser parseArgumentLeft, ArgumentRightParser parseArgumentRight) { return parseBinary, ArgumentLeftParser, ArgumentRightParser>(context, astContext, variableStack, parseArgumentLeft, parseArgumentRight); } diff --git a/lib/pddl/include/pddl/detail/parsing/Fact.h b/lib/pddl/include/pddl/detail/parsing/Fact.h index cb5e480..421e352 100644 --- a/lib/pddl/include/pddl/detail/parsing/Fact.h +++ b/lib/pddl/include/pddl/detail/parsing/Fact.h @@ -17,7 +17,7 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseFact(Context &context, ASTContext &astContext, VariableStack &variableStack); +std::optional parseFact(Context &context, ASTContext &astContext, VariableStack &variableStack); //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/include/pddl/detail/parsing/Parser.h b/lib/pddl/include/pddl/detail/parsing/Parser.h index 90fdd70..a2dc753 100644 --- a/lib/pddl/include/pddl/detail/parsing/Parser.h +++ b/lib/pddl/include/pddl/detail/parsing/Parser.h @@ -22,13 +22,13 @@ struct Parser }; template -std::experimental::optional parse(Context &context, ASTContext &astContext, ArgumentParser... argumentParsers) +std::optional parse(Context &context, ASTContext &astContext, ArgumentParser... argumentParsers) { return detail::Parser().parse(context, astContext, argumentParsers...); } template -std::experimental::optional parse(Context &context, ASTContext &astContext) +std::optional parse(Context &context, ASTContext &astContext) { return detail::Parser().parse(context, astContext); } diff --git a/lib/pddl/include/pddl/detail/parsing/Precondition.h b/lib/pddl/include/pddl/detail/parsing/Precondition.h index d9c316e..6c70291 100644 --- a/lib/pddl/include/pddl/detail/parsing/Precondition.h +++ b/lib/pddl/include/pddl/detail/parsing/Precondition.h @@ -17,8 +17,8 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parsePrecondition(Context &context, ASTContext &astContext, VariableStack &variableStack); -std::experimental::optional parsePreconditionBody(Context &context, ASTContext &astContext, VariableStack &variableStack); +std::optional parsePrecondition(Context &context, ASTContext &astContext, VariableStack &variableStack); +std::optional parsePreconditionBody(Context &context, ASTContext &astContext, VariableStack &variableStack); //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/include/pddl/detail/parsing/Predicate.h b/lib/pddl/include/pddl/detail/parsing/Predicate.h index f90bce9..e6bdca8 100644 --- a/lib/pddl/include/pddl/detail/parsing/Predicate.h +++ b/lib/pddl/include/pddl/detail/parsing/Predicate.h @@ -18,7 +18,7 @@ namespace detail //////////////////////////////////////////////////////////////////////////////////////////////////// // TODO: rename consistently -std::experimental::optional parsePredicate(Context &context, ASTContext &astContext, VariableStack &variableStack); +std::optional parsePredicate(Context &context, ASTContext &astContext, VariableStack &variableStack); //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/include/pddl/detail/parsing/Requirement.h b/lib/pddl/include/pddl/detail/parsing/Requirement.h index 3f56f0f..8c39ff7 100644 --- a/lib/pddl/include/pddl/detail/parsing/Requirement.h +++ b/lib/pddl/include/pddl/detail/parsing/Requirement.h @@ -15,7 +15,7 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseRequirement(Context &context); +std::optional parseRequirement(Context &context); const char *toString(const ast::Requirement &requirement); //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/include/pddl/detail/parsing/Term.h b/lib/pddl/include/pddl/detail/parsing/Term.h index 6304e9e..857a330 100644 --- a/lib/pddl/include/pddl/detail/parsing/Term.h +++ b/lib/pddl/include/pddl/detail/parsing/Term.h @@ -17,7 +17,7 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseTerm(Context &context, ASTContext &astContext, VariableStack &variableStack); +std::optional parseTerm(Context &context, ASTContext &astContext, VariableStack &variableStack); //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/include/pddl/detail/parsing/Variable.h b/lib/pddl/include/pddl/detail/parsing/Variable.h index 504d116..6391ad7 100644 --- a/lib/pddl/include/pddl/detail/parsing/Variable.h +++ b/lib/pddl/include/pddl/detail/parsing/Variable.h @@ -16,7 +16,7 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseVariable(Context &context, VariableStack &variableStack); +std::optional parseVariable(Context &context, VariableStack &variableStack); //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/src/CMakeLists.txt b/lib/pddl/src/CMakeLists.txt index 92a6a70..0c51af5 100644 --- a/lib/pddl/src/CMakeLists.txt +++ b/lib/pddl/src/CMakeLists.txt @@ -13,10 +13,10 @@ file(GLOB detail_normalization_sources "pddl/detail/normalization/*.cpp") file(GLOB detail_normalization_headers "../include/pddl/detail/normalization/*.h") set(includes - ${PROJECT_SOURCE_DIR}/include - ${PROJECT_SOURCE_DIR}/../../lib/colorlog/include - ${PROJECT_SOURCE_DIR}/../../lib/tokenize/include - ${PROJECT_SOURCE_DIR}/../../lib/variant/include + ../include + ${PROJECT_SOURCE_DIR}/lib/colorlog/include + ${PROJECT_SOURCE_DIR}/lib/tokenize/include + ${PROJECT_SOURCE_DIR}/lib/variant/include ) set(sources diff --git a/lib/pddl/src/pddl/detail/SignatureMatching.cpp b/lib/pddl/src/pddl/detail/SignatureMatching.cpp index 651c1b5..92fef1e 100644 --- a/lib/pddl/src/pddl/detail/SignatureMatching.cpp +++ b/lib/pddl/src/pddl/detail/SignatureMatching.cpp @@ -84,7 +84,7 @@ bool matches(const ast::Type &lhs, const ast::Type &rhs) //////////////////////////////////////////////////////////////////////////////////////////////////// -bool matches(const ast::VariableDeclaration &lhs, const std::experimental::optional &rhs) +bool matches(const ast::VariableDeclaration &lhs, const std::optional &rhs) { if (!lhs.type && !rhs) return true; @@ -98,7 +98,7 @@ bool matches(const ast::VariableDeclaration &lhs, const std::experimental::optio //////////////////////////////////////////////////////////////////////////////////////////////////// -bool matches(const ast::ConstantDeclaration &lhs, const std::experimental::optional &rhs) +bool matches(const ast::ConstantDeclaration &lhs, const std::optional &rhs) { if (!lhs.type && !rhs) return true; @@ -112,7 +112,7 @@ bool matches(const ast::ConstantDeclaration &lhs, const std::experimental::optio //////////////////////////////////////////////////////////////////////////////////////////////////// -bool matches(const ast::Term &lhs, const std::experimental::optional &rhs) +bool matches(const ast::Term &lhs, const std::optional &rhs) { return lhs.match([&](const auto &x){return matches(*x->declaration, rhs);}); } diff --git a/lib/pddl/src/pddl/detail/VariableStack.cpp b/lib/pddl/src/pddl/detail/VariableStack.cpp index 1921db4..2647774 100644 --- a/lib/pddl/src/pddl/detail/VariableStack.cpp +++ b/lib/pddl/src/pddl/detail/VariableStack.cpp @@ -29,7 +29,7 @@ void VariableStack::pop() //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional VariableStack::findVariableDeclaration(const std::string &variableName) const +std::optional VariableStack::findVariableDeclaration(const std::string &variableName) const { const auto variableDeclarationMatches = [&variableName](const auto &variableDeclaration) @@ -46,7 +46,7 @@ std::experimental::optional VariableStack::findVaria return matchingVariableDeclaration->get(); } - return std::experimental::nullopt; + return std::nullopt; } //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/src/pddl/detail/parsing/AtomicFormula.cpp b/lib/pddl/src/pddl/detail/parsing/AtomicFormula.cpp index 3bd7117..30b88d8 100644 --- a/lib/pddl/src/pddl/detail/parsing/AtomicFormula.cpp +++ b/lib/pddl/src/pddl/detail/parsing/AtomicFormula.cpp @@ -16,9 +16,9 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseAtomicFormula(Context &context, ASTContext &astContext, VariableStack &variableStack) +std::optional parseAtomicFormula(Context &context, ASTContext &astContext, VariableStack &variableStack) { - std::experimental::optional atomicFormula; + std::optional atomicFormula; if ((atomicFormula = parseEquals(context, astContext, variableStack, parseTerm, parseTerm))) return std::move(atomicFormula.value()); diff --git a/lib/pddl/src/pddl/detail/parsing/Constant.cpp b/lib/pddl/src/pddl/detail/parsing/Constant.cpp index 367f33c..af0f4ea 100644 --- a/lib/pddl/src/pddl/detail/parsing/Constant.cpp +++ b/lib/pddl/src/pddl/detail/parsing/Constant.cpp @@ -14,7 +14,7 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional findConstant(const std::string &constantName, ast::ConstantDeclarations &constantDeclarations) +std::optional findConstant(const std::string &constantName, ast::ConstantDeclarations &constantDeclarations) { const auto matchingConstant = std::find_if(constantDeclarations.begin(), constantDeclarations.end(), [&](const auto &constantDeclaration) @@ -23,14 +23,14 @@ std::experimental::optional findConstant(const std::string }); if (matchingConstant == constantDeclarations.end()) - return std::experimental::nullopt; + return std::nullopt; return std::make_unique(matchingConstant->get()); } //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional findConstant(const std::string &constantName, ASTContext &astContext) +std::optional findConstant(const std::string &constantName, ASTContext &astContext) { auto constant = findConstant(constantName, astContext.domain->constants); @@ -45,12 +45,12 @@ std::experimental::optional findConstant(const std::string return std::move(constant.value()); } - return std::experimental::nullopt; + return std::nullopt; } //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseConstant(Context &context, ASTContext &astContext) +std::optional parseConstant(Context &context, ASTContext &astContext) { auto &tokenizer = context.tokenizer; @@ -58,7 +58,7 @@ std::experimental::optional parseConstant(Context &context auto constant = findConstant(constantName, astContext); if (!constant) - return std::experimental::nullopt; + return std::nullopt; return std::move(constant.value()); } diff --git a/lib/pddl/src/pddl/detail/parsing/Description.cpp b/lib/pddl/src/pddl/detail/parsing/Description.cpp index 9b13900..4dde5a0 100644 --- a/lib/pddl/src/pddl/detail/parsing/Description.cpp +++ b/lib/pddl/src/pddl/detail/parsing/Description.cpp @@ -42,7 +42,7 @@ ast::Description DescriptionParser::parse() // If no problem is given, return just the domain if (m_problemPosition == tokenize::InvalidStreamPosition) - return {std::move(domain), std::experimental::nullopt}; + return {std::move(domain), std::nullopt}; tokenizer.seek(m_problemPosition); diff --git a/lib/pddl/src/pddl/detail/parsing/Effect.cpp b/lib/pddl/src/pddl/detail/parsing/Effect.cpp index b82ef85..5a1ed3f 100644 --- a/lib/pddl/src/pddl/detail/parsing/Effect.cpp +++ b/lib/pddl/src/pddl/detail/parsing/Effect.cpp @@ -18,19 +18,19 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseEffectBody(Context &context, ASTContext &astContext, VariableStack &variableStack); -std::experimental::optional parseConditionalEffect(Context &context, ASTContext &astContext, VariableStack &variableStack); -std::experimental::optional parseConditionalEffectBody(Context &context, ASTContext &astContext, VariableStack &variableStack); +std::optional parseEffectBody(Context &context, ASTContext &astContext, VariableStack &variableStack); +std::optional parseConditionalEffect(Context &context, ASTContext &astContext, VariableStack &variableStack); +std::optional parseConditionalEffectBody(Context &context, ASTContext &astContext, VariableStack &variableStack); //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseEffect(Context &context, ASTContext &astContext, VariableStack &variableStack) +std::optional parseEffect(Context &context, ASTContext &astContext, VariableStack &variableStack) { auto &tokenizer = context.tokenizer; tokenizer.skipWhiteSpace(); - std::experimental::optional effect; + std::optional effect; if ((effect = parseAnd(context, astContext, variableStack, parseEffect)) || (effect = parseForAll(context, astContext, variableStack, parseEffect)) @@ -44,7 +44,7 @@ std::experimental::optional parseEffect(Context &context, ASTContex //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseEffectBody(Context &context, ASTContext &astContext, VariableStack &variableStack) +std::optional parseEffectBody(Context &context, ASTContext &astContext, VariableStack &variableStack) { auto &tokenizer = context.tokenizer; @@ -70,7 +70,7 @@ std::experimental::optional parseEffectBody(Context &context, ASTCo tokenizer.seek(position); // Now, test supported expressions - std::experimental::optional effect; + std::optional effect; if ((effect = parseNot(context, astContext, variableStack, parseAtomicFormula)) || (effect = parseAtomicFormula(context, astContext, variableStack))) @@ -87,13 +87,13 @@ std::experimental::optional parseEffectBody(Context &context, ASTCo //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseConditionalEffect(Context &context, ASTContext &astContext, VariableStack &variableStack) +std::optional parseConditionalEffect(Context &context, ASTContext &astContext, VariableStack &variableStack) { auto &tokenizer = context.tokenizer; tokenizer.skipWhiteSpace(); - std::experimental::optional conditionalEffect; + std::optional conditionalEffect; if ((conditionalEffect = parseAnd(context, astContext, variableStack, parseConditionalEffectBody))) return std::move(conditionalEffect.value()); @@ -103,7 +103,7 @@ std::experimental::optional parseConditionalEffect(Conte //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseConditionalEffectBody(Context &context, ASTContext &astContext, VariableStack &variableStack) +std::optional parseConditionalEffectBody(Context &context, ASTContext &astContext, VariableStack &variableStack) { auto &tokenizer = context.tokenizer; @@ -130,7 +130,7 @@ std::experimental::optional parseConditionalEffectBody(Context &co tokenizer.seek(position); // Now, test supported expressions - std::experimental::optional literal; + std::optional literal; if ((literal = parseNot(context, astContext, variableStack, parseAtomicFormula)) || (literal = parseAtomicFormula(context, astContext, variableStack))) diff --git a/lib/pddl/src/pddl/detail/parsing/Fact.cpp b/lib/pddl/src/pddl/detail/parsing/Fact.cpp index f1dd0c8..1e090f7 100644 --- a/lib/pddl/src/pddl/detail/parsing/Fact.cpp +++ b/lib/pddl/src/pddl/detail/parsing/Fact.cpp @@ -16,7 +16,7 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseFact(Context &context, ASTContext &astContext, VariableStack &variableStack) +std::optional parseFact(Context &context, ASTContext &astContext, VariableStack &variableStack) { auto &tokenizer = context.tokenizer; @@ -32,7 +32,7 @@ std::experimental::optional parseFact(Context &context, ASTContext &a tokenizer.seek(position); // Now, test supported expressions - std::experimental::optional fact; + std::optional fact; if ((fact = parseNot(context, astContext, variableStack, parseAtomicFormula)) || (fact = parseAtomicFormula(context, astContext, variableStack))) @@ -45,7 +45,7 @@ std::experimental::optional parseFact(Context &context, ASTContext &a if (tokenizer.testIdentifierAndReturn("at")) throw exceptUnsupportedExpression(position, context); - return std::experimental::nullopt; + return std::nullopt; } //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/src/pddl/detail/parsing/Precondition.cpp b/lib/pddl/src/pddl/detail/parsing/Precondition.cpp index 40bba56..057adbb 100644 --- a/lib/pddl/src/pddl/detail/parsing/Precondition.cpp +++ b/lib/pddl/src/pddl/detail/parsing/Precondition.cpp @@ -17,7 +17,7 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parsePrecondition(Context &context, ASTContext &astContext, VariableStack &variableStack) +std::optional parsePrecondition(Context &context, ASTContext &astContext, VariableStack &variableStack) { auto &tokenizer = context.tokenizer; @@ -34,7 +34,7 @@ std::experimental::optional parsePrecondition(Context &contex tokenizer.seek(position); // Now, test supported expressions - std::experimental::optional precondition; + std::optional precondition; if ((precondition = parseAnd(context, astContext, variableStack, parsePrecondition)) || (precondition = parseForAll(context, astContext, variableStack, parsePrecondition))) @@ -48,7 +48,7 @@ std::experimental::optional parsePrecondition(Context &contex //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parsePreconditionBody(Context &context, ASTContext &astContext, VariableStack &variableStack) +std::optional parsePreconditionBody(Context &context, ASTContext &astContext, VariableStack &variableStack) { auto &tokenizer = context.tokenizer; @@ -78,7 +78,7 @@ std::experimental::optional parsePreconditionBody(Context &co tokenizer.seek(position); // Now, test supported expressions - std::experimental::optional precondition; + std::optional precondition; if ((precondition = parseAnd(context, astContext, variableStack, parsePrecondition)) || (precondition = parseOr(context, astContext, variableStack, parsePrecondition)) diff --git a/lib/pddl/src/pddl/detail/parsing/Predicate.cpp b/lib/pddl/src/pddl/detail/parsing/Predicate.cpp index 2de02c3..2e3fa3d 100644 --- a/lib/pddl/src/pddl/detail/parsing/Predicate.cpp +++ b/lib/pddl/src/pddl/detail/parsing/Predicate.cpp @@ -16,7 +16,7 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parsePredicate(Context &context, ASTContext &astContext, VariableStack &variableStack) +std::optional parsePredicate(Context &context, ASTContext &astContext, VariableStack &variableStack) { auto &tokenizer = context.tokenizer; tokenizer.skipWhiteSpace(); @@ -26,7 +26,7 @@ std::experimental::optional parsePredicate(Context &conte if (!tokenizer.testAndSkip("(")) { tokenizer.seek(previousPosition); - return std::experimental::nullopt; + return std::nullopt; } const auto name = tokenizer.getIdentifier(); @@ -49,7 +49,7 @@ std::experimental::optional parsePredicate(Context &conte // If the term couldn’t be parsed, this is not a valid predicate tokenizer.seek(previousPosition); - return std::experimental::nullopt; + return std::nullopt; } const auto &predicates = astContext.domain->predicates; diff --git a/lib/pddl/src/pddl/detail/parsing/PrimitiveTypeDeclaration.cpp b/lib/pddl/src/pddl/detail/parsing/PrimitiveTypeDeclaration.cpp index 10e3c69..a1ba28e 100644 --- a/lib/pddl/src/pddl/detail/parsing/PrimitiveTypeDeclaration.cpp +++ b/lib/pddl/src/pddl/detail/parsing/PrimitiveTypeDeclaration.cpp @@ -15,7 +15,7 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional findPrimitiveTypeDeclaration(ast::Domain &domain, const std::string &typeName) +std::optional findPrimitiveTypeDeclaration(ast::Domain &domain, const std::string &typeName) { auto &types = domain.types; @@ -28,7 +28,7 @@ std::experimental::optional findPrimitiv if (matchingPrimitiveType != types.end()) return &*matchingPrimitiveType; - return std::experimental::nullopt; + return std::nullopt; } //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/src/pddl/detail/parsing/Requirement.cpp b/lib/pddl/src/pddl/detail/parsing/Requirement.cpp index e6da39a..ca3bfa1 100644 --- a/lib/pddl/src/pddl/detail/parsing/Requirement.cpp +++ b/lib/pddl/src/pddl/detail/parsing/Requirement.cpp @@ -55,7 +55,7 @@ static const RequirementNameMap requirementNameMap = //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseRequirement(Context &context) +std::optional parseRequirement(Context &context) { auto &tokenizer = context.tokenizer; @@ -69,7 +69,7 @@ std::experimental::optional parseRequirement(Context &context) if (context.mode == Mode::Compatibility && (requirementName == "goal-utilities" || requirementName == "domain-axioms")) context.warningCallback(tokenizer.location(), "“" + requirementName + "” requirement is not part of the PDDL 3.1 specification, ignoring requirement"); - return std::experimental::nullopt; + return std::nullopt; } //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/src/pddl/detail/parsing/Term.cpp b/lib/pddl/src/pddl/detail/parsing/Term.cpp index 5e3d04c..bc817b3 100644 --- a/lib/pddl/src/pddl/detail/parsing/Term.cpp +++ b/lib/pddl/src/pddl/detail/parsing/Term.cpp @@ -15,13 +15,13 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseTerm(Context &context, ASTContext &astContext, VariableStack &variableStack) +std::optional parseTerm(Context &context, ASTContext &astContext, VariableStack &variableStack) { auto &tokenizer = context.tokenizer; tokenizer.skipWhiteSpace(); - std::experimental::optional term; + std::optional term; if ((term = parseVariable(context, variableStack)) || (term = parseConstant(context, astContext))) @@ -29,7 +29,7 @@ std::experimental::optional parseTerm(Context &context, ASTContext &a return std::move(term.value()); } - return std::experimental::nullopt; + return std::nullopt; } //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/pddl/src/pddl/detail/parsing/Type.cpp b/lib/pddl/src/pddl/detail/parsing/Type.cpp index 8705faa..ee2cc95 100644 --- a/lib/pddl/src/pddl/detail/parsing/Type.cpp +++ b/lib/pddl/src/pddl/detail/parsing/Type.cpp @@ -25,7 +25,7 @@ ast::Type parseType(Context &context, ast::Domain &domain) { // TODO: refactor auto parsePrimitiveTypeWrapper = - [](auto &context, auto &astContext, auto &) -> std::experimental::optional + [](auto &context, auto &astContext, auto &) -> std::optional { return parsePrimitiveType(context, *astContext.domain); }; diff --git a/lib/pddl/src/pddl/detail/parsing/Variable.cpp b/lib/pddl/src/pddl/detail/parsing/Variable.cpp index 201a0eb..5b25d45 100644 --- a/lib/pddl/src/pddl/detail/parsing/Variable.cpp +++ b/lib/pddl/src/pddl/detail/parsing/Variable.cpp @@ -14,12 +14,12 @@ namespace detail // //////////////////////////////////////////////////////////////////////////////////////////////////// -std::experimental::optional parseVariable(Context &context, VariableStack &variableStack) +std::optional parseVariable(Context &context, VariableStack &variableStack) { auto &tokenizer = context.tokenizer; if (!tokenizer.testAndReturn("?")) - return std::experimental::nullopt; + return std::nullopt; tokenizer.expect("?"); @@ -27,7 +27,7 @@ std::experimental::optional parseVariable(Context &context auto variableDeclaration = variableStack.findVariableDeclaration(variableName); if (!variableDeclaration) - return std::experimental::nullopt; + return std::nullopt; return std::make_unique(variableDeclaration.value()); } diff --git a/lib/pddl/tests/TestIssues.cpp b/lib/pddl/tests/TestIssues.cpp index 9dbf818..a2e8cd5 100644 --- a/lib/pddl/tests/TestIssues.cpp +++ b/lib/pddl/tests/TestIssues.cpp @@ -1,11 +1,11 @@ #include -#include +#include #include #include -namespace fs = std::experimental::filesystem; +namespace fs = std::filesystem; const pddl::Context::WarningCallback ignoreWarnings = [](const auto &, const auto &){}; diff --git a/lib/pddl/tests/TestNormalization.cpp b/lib/pddl/tests/TestNormalization.cpp index 0bd989f..3e38d12 100644 --- a/lib/pddl/tests/TestNormalization.cpp +++ b/lib/pddl/tests/TestNormalization.cpp @@ -1,12 +1,12 @@ #include -#include +#include #include #include #include -namespace fs = std::experimental::filesystem; +namespace fs = std::filesystem; const pddl::Context::WarningCallback ignoreWarnings = [](const auto &, const auto &){}; diff --git a/lib/pddl/tests/TestParserBasics.cpp b/lib/pddl/tests/TestParserBasics.cpp index 9ddcb65..cf01194 100644 --- a/lib/pddl/tests/TestParserBasics.cpp +++ b/lib/pddl/tests/TestParserBasics.cpp @@ -1,11 +1,11 @@ #include -#include +#include #include #include -namespace fs = std::experimental::filesystem; +namespace fs = std::filesystem; const pddl::Context::WarningCallback ignoreWarnings = [](const auto &, const auto &){}; const auto pddlInstanceBasePath = fs::path("data") / "pddl-instances"; diff --git a/lib/pddl/tests/TestParserCorrectness.cpp b/lib/pddl/tests/TestParserCorrectness.cpp index 5ad3977..764d8f2 100644 --- a/lib/pddl/tests/TestParserCorrectness.cpp +++ b/lib/pddl/tests/TestParserCorrectness.cpp @@ -1,11 +1,11 @@ #include -#include +#include #include #include -namespace fs = std::experimental::filesystem; +namespace fs = std::filesystem; const pddl::Context::WarningCallback ignoreWarnings = [](const auto &, const auto &){}; const auto pddlInstanceBasePath = fs::path("data") / "pddl-instances"; diff --git a/lib/pddl/tests/TestParserSuccess.cpp b/lib/pddl/tests/TestParserSuccess.cpp index 281c36c..936bd01 100644 --- a/lib/pddl/tests/TestParserSuccess.cpp +++ b/lib/pddl/tests/TestParserSuccess.cpp @@ -1,17 +1,17 @@ #include -#include +#include #include #include #include -namespace fs = std::experimental::filesystem; +namespace fs = std::filesystem; const pddl::Context::WarningCallback ignoreWarnings = [](const auto &, const auto &){}; const auto pddlInstanceBasePath = fs::path("data") / "pddl-instances"; -const std::set unsupportedDomains = +const std::set unsupportedDomains = { // “:functions” sections unsupported pddlInstanceBasePath / "ipc-2002" / "domains" / "depots-numeric-automatic" / "domain.pddl", @@ -94,7 +94,7 @@ const std::set unsupportedDomains = }; -const std::set unsupportedInstances = +const std::set unsupportedInstances = { }; diff --git a/lib/pddl/tests/TestSignatureMatching.cpp b/lib/pddl/tests/TestSignatureMatching.cpp index 610d222..14e0695 100644 --- a/lib/pddl/tests/TestSignatureMatching.cpp +++ b/lib/pddl/tests/TestSignatureMatching.cpp @@ -1,11 +1,11 @@ #include -#include +#include #include #include -namespace fs = std::experimental::filesystem; +namespace fs = std::filesystem; const pddl::Context::WarningCallback ignoreWarnings = [](const auto &, const auto &){}; diff --git a/lib/tokenize/CMakeLists.txt b/lib/tokenize/CMakeLists.txt index d6730c3..c6f4b29 100644 --- a/lib/tokenize/CMakeLists.txt +++ b/lib/tokenize/CMakeLists.txt @@ -1,27 +1,4 @@ -cmake_minimum_required(VERSION 2.6) -project(tokenize) - option(TOKENIZE_BUILD_TESTS "Build unit tests" OFF) - -set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic -Werror") -set(CMAKE_CXX_FLAGS_DEBUG "-g") - -set(CMAKE_CXX_STANDARD 14) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - -if (CMAKE_GENERATOR STREQUAL "Ninja" AND - ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9) OR - (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5))) - # Force colored warnings in Ninja's output, if the compiler has -fdiagnostics-color support. - # Rationale in https://github.com/ninja-build/ninja/issues/814 - set(CMAKE_CXX_FLAGS "-fdiagnostics-color=always ${CMAKE_CXX_FLAGS}") -endif() - if(TOKENIZE_BUILD_TESTS) add_subdirectory(tests) endif(TOKENIZE_BUILD_TESTS) diff --git a/lib/tokenize/include/tokenize/Stream.h b/lib/tokenize/include/tokenize/Stream.h index c52ec2f..a012d5d 100644 --- a/lib/tokenize/include/tokenize/Stream.h +++ b/lib/tokenize/include/tokenize/Stream.h @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include @@ -79,9 +79,9 @@ class Stream m_sections.back().newlines.emplace_back(i); } - void read(const std::experimental::filesystem::path &path) + void read(const std::filesystem::path &path) { - if (!std::experimental::filesystem::is_regular_file(path)) + if (!std::filesystem::is_regular_file(path)) throw std::runtime_error("File does not exist: “" + path.string() + "”"); std::ifstream fileStream(path.string(), std::ios::in); diff --git a/src/plasp/sas/Description.cpp b/src/plasp/sas/Description.cpp index 04e344b..5bc9a45 100644 --- a/src/plasp/sas/Description.cpp +++ b/src/plasp/sas/Description.cpp @@ -50,9 +50,9 @@ Description Description::fromStream(std::istream &istream) //////////////////////////////////////////////////////////////////////////////////////////////////// -Description Description::fromFile(const std::experimental::filesystem::path &path) +Description Description::fromFile(const std::filesystem::path &path) { - if (!std::experimental::filesystem::is_regular_file(path)) + if (!std::filesystem::is_regular_file(path)) throw std::runtime_error("File does not exist: “" + path.string() + "”"); tokenize::Tokenizer<> tokenizer; From c3335a7553db3ce5c7f137f36c853ef539f4598a Mon Sep 17 00:00:00 2001 From: Roland Kaminski Date: Thu, 8 Jul 2021 20:14:58 +0200 Subject: [PATCH 2/7] make tokenizer work on macos --- lib/pddl/tests/CMakeLists.txt | 8 +-- lib/pddl/tests/TestParserSuccess.cpp | 6 +- lib/tokenize/include/tokenize/Tokenizer.h | 88 +++++++++++++++++------ lib/tokenize/tests/CMakeLists.txt | 4 +- 4 files changed, 75 insertions(+), 31 deletions(-) diff --git a/lib/pddl/tests/CMakeLists.txt b/lib/pddl/tests/CMakeLists.txt index 41d82b8..11229a0 100644 --- a/lib/pddl/tests/CMakeLists.txt +++ b/lib/pddl/tests/CMakeLists.txt @@ -3,10 +3,10 @@ set(target pddl-tests) file(GLOB core_sources "*.cpp") set(includes - ${PROJECT_SOURCE_DIR}/include - ${PROJECT_SOURCE_DIR}/../../lib/catch/single_include - ${PROJECT_SOURCE_DIR}/../../lib/tokenize/include - ${PROJECT_SOURCE_DIR}/../../lib/variant/include + ../include + ${PROJECT_SOURCE_DIR}/lib/catch/single_include + ${PROJECT_SOURCE_DIR}/lib/tokenize/include + ${PROJECT_SOURCE_DIR}/lib/variant/include ) set(libraries diff --git a/lib/pddl/tests/TestParserSuccess.cpp b/lib/pddl/tests/TestParserSuccess.cpp index 936bd01..4b183d8 100644 --- a/lib/pddl/tests/TestParserSuccess.cpp +++ b/lib/pddl/tests/TestParserSuccess.cpp @@ -112,7 +112,7 @@ TEST_CASE("[parser success] All official PDDL domains are parsed without errors" if (!fs::is_directory(domainDirectory)) continue; - const auto domainFile = domainDirectory / "domain.pddl"; + const auto domainFile = domainDirectory.path() / "domain.pddl"; if (unsupportedDomains.find(domainFile) != unsupportedDomains.cend()) continue; @@ -146,8 +146,8 @@ TEST_CASE("[parser success] The first instance for all official PDDL domains is if (!fs::is_directory(domainDirectory)) continue; - const auto domainFile = domainDirectory / "domain.pddl"; - const auto instanceFile = domainDirectory / "instances" / "instance-1.pddl"; + const auto domainFile = domainDirectory.path() / "domain.pddl"; + const auto instanceFile = domainDirectory.path() / "instances" / "instance-1.pddl"; if (unsupportedDomains.find(domainFile) != unsupportedDomains.cend() || unsupportedInstances.find(instanceFile) != unsupportedInstances.cend()) diff --git a/lib/tokenize/include/tokenize/Tokenizer.h b/lib/tokenize/include/tokenize/Tokenizer.h index 9befcd5..7e864da 100644 --- a/lib/tokenize/include/tokenize/Tokenizer.h +++ b/lib/tokenize/include/tokenize/Tokenizer.h @@ -73,18 +73,22 @@ class Tokenizer : public Stream, public TokenizerPolicy private: std::string getImpl(Tag); char getImpl(Tag); - uint64_t getImpl(Tag); - int64_t getImpl(Tag); - uint32_t getImpl(Tag); - int32_t getImpl(Tag); + unsigned long long getImpl(Tag); + unsigned long getImpl(Tag); + unsigned int getImpl(Tag); + signed long long getImpl(Tag); + signed long getImpl(Tag); + signed int getImpl(Tag); bool getImpl(Tag); bool testImpl(const std::string &expectedValue); bool testImpl(char expectedValue); - bool testImpl(uint64_t expectedValue); - bool testImpl(int64_t expectedValue); - bool testImpl(uint32_t expectedValue); - bool testImpl(int32_t expectedValue); + bool testImpl(unsigned long long expectedValue); + bool testImpl(signed long long expectedValue); + bool testImpl(unsigned long expectedValue); + bool testImpl(signed long expectedValue); + bool testImpl(unsigned int expectedValue); + bool testImpl(signed int expectedValue); bool testImpl(bool expectedValue); uint64_t getIntegerBody(); @@ -427,7 +431,7 @@ uint64_t Tokenizer::getIntegerBody() //////////////////////////////////////////////////////////////////////////////////////////////////// template -int64_t Tokenizer::getImpl(Tag) +signed long long Tokenizer::getImpl(Tag) { skipWhiteSpace(); @@ -441,7 +445,23 @@ int64_t Tokenizer::getImpl(Tag) //////////////////////////////////////////////////////////////////////////////////////////////////// template -uint64_t Tokenizer::getImpl(Tag) +signed long Tokenizer::getImpl(Tag) +{ + return static_cast(getImpl(Tag())); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +template +signed int Tokenizer::getImpl(Tag) +{ + return static_cast(getImpl(Tag())); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +template +unsigned long long Tokenizer::getImpl(Tag) { skipWhiteSpace(); @@ -454,17 +474,17 @@ uint64_t Tokenizer::getImpl(Tag) //////////////////////////////////////////////////////////////////////////////////////////////////// template -int32_t Tokenizer::getImpl(Tag) +unsigned long Tokenizer::getImpl(Tag) { - return static_cast(getImpl(Tag())); + return static_cast(getImpl(Tag())); } //////////////////////////////////////////////////////////////////////////////////////////////////// template -uint32_t Tokenizer::getImpl(Tag) +unsigned int Tokenizer::getImpl(Tag) { - return static_cast(getImpl(Tag())); + return static_cast(getImpl(Tag())); } //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -522,9 +542,29 @@ bool Tokenizer::testImpl(char expectedValue) //////////////////////////////////////////////////////////////////////////////////////////////////// template -bool Tokenizer::testImpl(int64_t expectedValue) +bool Tokenizer::testImpl(signed long long expectedValue) +{ + const auto value = getImpl(Tag()); + + return (value == expectedValue); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +template +bool Tokenizer::testImpl(unsigned long long expectedValue) +{ + const auto value = getImpl(Tag()); + + return (value == expectedValue); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +template +bool Tokenizer::testImpl(signed long expectedValue) { - const auto value = getImpl(Tag()); + const auto value = getImpl(Tag()); return (value == expectedValue); } @@ -532,9 +572,9 @@ bool Tokenizer::testImpl(int64_t expectedValue) //////////////////////////////////////////////////////////////////////////////////////////////////// template -bool Tokenizer::testImpl(uint64_t expectedValue) +bool Tokenizer::testImpl(unsigned long expectedValue) { - const auto value = getImpl(Tag()); + const auto value = getImpl(Tag()); return (value == expectedValue); } @@ -542,17 +582,21 @@ bool Tokenizer::testImpl(uint64_t expectedValue) //////////////////////////////////////////////////////////////////////////////////////////////////// template -bool Tokenizer::testImpl(int32_t expectedValue) +bool Tokenizer::testImpl(signed int expectedValue) { - return testImpl(static_cast(expectedValue)); + const auto value = getImpl(Tag()); + + return (value == expectedValue); } //////////////////////////////////////////////////////////////////////////////////////////////////// template -bool Tokenizer::testImpl(uint32_t expectedValue) +bool Tokenizer::testImpl(unsigned int expectedValue) { - return testImpl(static_cast(expectedValue)); + const auto value = getImpl(Tag()); + + return (value == expectedValue); } //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/lib/tokenize/tests/CMakeLists.txt b/lib/tokenize/tests/CMakeLists.txt index a5a84d5..fce8c98 100644 --- a/lib/tokenize/tests/CMakeLists.txt +++ b/lib/tokenize/tests/CMakeLists.txt @@ -3,8 +3,8 @@ set(target tokenize-tests) file(GLOB core_sources "*.cpp") set(includes - ${PROJECT_SOURCE_DIR}/include - ${PROJECT_SOURCE_DIR}/../../lib/catch/single_include + ../include + ${PROJECT_SOURCE_DIR}/lib/catch/single_include ) add_executable(${target} ${core_sources}) From 9e32fa80340e40594f3914193831db010165f2ce Mon Sep 17 00:00:00 2001 From: Roland Kaminski Date: Thu, 8 Jul 2021 23:13:32 +0200 Subject: [PATCH 3/7] use find_package for filesystem and pthreads --- CMakeLists.txt | 5 +++++ app/src/CMakeLists.txt | 2 +- lib/pddl/tests/CMakeLists.txt | 2 +- src/CMakeLists.txt | 2 +- tests/CMakeLists.txt | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index be24c9a..23ffb86 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,11 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + +find_package(Filesystem REQUIRED) +find_package(Threads REQUIRED) + if(PLASP_BUILD_STATIC) set(CMAKE_EXE_LINKER_FLAGS "-static") set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") diff --git a/app/src/CMakeLists.txt b/app/src/CMakeLists.txt index d04ca1f..ed57b10 100644 --- a/app/src/CMakeLists.txt +++ b/app/src/CMakeLists.txt @@ -24,7 +24,7 @@ set(sources ) set(libraries - stdc++fs + std::filesystem plasp ) diff --git a/lib/pddl/tests/CMakeLists.txt b/lib/pddl/tests/CMakeLists.txt index 11229a0..422d6f5 100644 --- a/lib/pddl/tests/CMakeLists.txt +++ b/lib/pddl/tests/CMakeLists.txt @@ -10,7 +10,7 @@ set(includes ) set(libraries - stdc++fs + std::filesystem pddl ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8dfe5d4..52eac76 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -49,7 +49,7 @@ set(sources set(libraries colorlog pddl - pthread + Threads::Threads ) add_library(${target} ${sources}) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 573f118..4a5b306 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -12,7 +12,7 @@ set(includes ) set(libraries - stdc++fs + std::filesystem plasp ) From 25d1c13b5d38f0c2152fe8eb3d33d98fd0791fc7 Mon Sep 17 00:00:00 2001 From: Roland Kaminski Date: Thu, 8 Jul 2021 23:19:52 +0200 Subject: [PATCH 4/7] add findfilesystem --- cmake/FindFilesystem.cmake | 248 +++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 cmake/FindFilesystem.cmake diff --git a/cmake/FindFilesystem.cmake b/cmake/FindFilesystem.cmake new file mode 100644 index 0000000..4f51b53 --- /dev/null +++ b/cmake/FindFilesystem.cmake @@ -0,0 +1,248 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: + +FindFilesystem +############## + +This module supports the C++17 standard library's filesystem utilities. Use the +:imp-target:`std::filesystem` imported target to + +Options +******* + +The ``COMPONENTS`` argument to this module supports the following values: + +.. find-component:: Experimental + :name: fs.Experimental + + Allows the module to find the "experimental" Filesystem TS version of the + Filesystem library. This is the library that should be used with the + ``std::experimental::filesystem`` namespace. + +.. find-component:: Final + :name: fs.Final + + Finds the final C++17 standard version of the filesystem library. + +If no components are provided, behaves as if the +:find-component:`fs.Final` component was specified. + +If both :find-component:`fs.Experimental` and :find-component:`fs.Final` are +provided, first looks for ``Final``, and falls back to ``Experimental`` in case +of failure. If ``Final`` is found, :imp-target:`std::filesystem` and all +:ref:`variables ` will refer to the ``Final`` version. + + +Imported Targets +**************** + +.. imp-target:: std::filesystem + + The ``std::filesystem`` imported target is defined when any requested + version of the C++ filesystem library has been found, whether it is + *Experimental* or *Final*. + + If no version of the filesystem library is available, this target will not + be defined. + + .. note:: + This target has ``cxx_std_17`` as an ``INTERFACE`` + :ref:`compile language standard feature `. Linking + to this target will automatically enable C++17 if no later standard + version is already required on the linking target. + + +.. _fs.variables: + +Variables +********* + +.. variable:: CXX_FILESYSTEM_IS_EXPERIMENTAL + + Set to ``TRUE`` when the :find-component:`fs.Experimental` version of C++ + filesystem library was found, otherwise ``FALSE``. + +.. variable:: CXX_FILESYSTEM_HAVE_FS + + Set to ``TRUE`` when a filesystem header was found. + +.. variable:: CXX_FILESYSTEM_HEADER + + Set to either ``filesystem`` or ``experimental/filesystem`` depending on + whether :find-component:`fs.Final` or :find-component:`fs.Experimental` was + found. + +.. variable:: CXX_FILESYSTEM_NAMESPACE + + Set to either ``std::filesystem`` or ``std::experimental::filesystem`` + depending on whether :find-component:`fs.Final` or + :find-component:`fs.Experimental` was found. + + +Examples +******** + +Using `find_package(Filesystem)` with no component arguments: + +.. code-block:: cmake + + find_package(Filesystem REQUIRED) + + add_executable(my-program main.cpp) + target_link_libraries(my-program PRIVATE std::filesystem) + + +#]=======================================================================] + + +if(TARGET std::filesystem) + # This module has already been processed. Don't do it again. + return() +endif() + +cmake_minimum_required(VERSION 3.10) + +include(CMakePushCheckState) +include(CheckIncludeFileCXX) + +# If we're not cross-compiling, try to run test executables. +# Otherwise, assume that compile + link is a sufficient check. +if(CMAKE_CROSSCOMPILING) + include(CheckCXXSourceCompiles) + macro(_cmcm_check_cxx_source code var) + check_cxx_source_compiles("${code}" ${var}) + endmacro() +else() + include(CheckCXXSourceRuns) + macro(_cmcm_check_cxx_source code var) + check_cxx_source_runs("${code}" ${var}) + endmacro() +endif() + +cmake_push_check_state() + +set(CMAKE_REQUIRED_QUIET ${Filesystem_FIND_QUIETLY}) + +# All of our tests required C++17 or later +set(CMAKE_CXX_STANDARD 17) + +# Normalize and check the component list we were given +set(want_components ${Filesystem_FIND_COMPONENTS}) +if(Filesystem_FIND_COMPONENTS STREQUAL "") + set(want_components Final) +endif() + +# Warn on any unrecognized components +set(extra_components ${want_components}) +list(REMOVE_ITEM extra_components Final Experimental) +foreach(component IN LISTS extra_components) + message(WARNING "Extraneous find_package component for Filesystem: ${component}") +endforeach() + +# Detect which of Experimental and Final we should look for +set(find_experimental TRUE) +set(find_final TRUE) +if(NOT "Final" IN_LIST want_components) + set(find_final FALSE) +endif() +if(NOT "Experimental" IN_LIST want_components) + set(find_experimental FALSE) +endif() + +if(find_final) + check_include_file_cxx("filesystem" _CXX_FILESYSTEM_HAVE_HEADER) + mark_as_advanced(_CXX_FILESYSTEM_HAVE_HEADER) + if(_CXX_FILESYSTEM_HAVE_HEADER) + # We found the non-experimental header. Don't bother looking for the + # experimental one. + set(find_experimental FALSE) + endif() +else() + set(_CXX_FILESYSTEM_HAVE_HEADER FALSE) +endif() + +if(find_experimental) + check_include_file_cxx("experimental/filesystem" _CXX_FILESYSTEM_HAVE_EXPERIMENTAL_HEADER) + mark_as_advanced(_CXX_FILESYSTEM_HAVE_EXPERIMENTAL_HEADER) +else() + set(_CXX_FILESYSTEM_HAVE_EXPERIMENTAL_HEADER FALSE) +endif() + +if(_CXX_FILESYSTEM_HAVE_HEADER) + set(_have_fs TRUE) + set(_fs_header filesystem) + set(_fs_namespace std::filesystem) + set(_is_experimental FALSE) +elseif(_CXX_FILESYSTEM_HAVE_EXPERIMENTAL_HEADER) + set(_have_fs TRUE) + set(_fs_header experimental/filesystem) + set(_fs_namespace std::experimental::filesystem) + set(_is_experimental TRUE) +else() + set(_have_fs FALSE) +endif() + +set(CXX_FILESYSTEM_HAVE_FS ${_have_fs} CACHE BOOL "TRUE if we have the C++ filesystem headers") +set(CXX_FILESYSTEM_HEADER ${_fs_header} CACHE STRING "The header that should be included to obtain the filesystem APIs") +set(CXX_FILESYSTEM_NAMESPACE ${_fs_namespace} CACHE STRING "The C++ namespace that contains the filesystem APIs") +set(CXX_FILESYSTEM_IS_EXPERIMENTAL ${_is_experimental} CACHE BOOL "TRUE if the C++ filesystem library is the experimental version") + +set(_found FALSE) + +if(CXX_FILESYSTEM_HAVE_FS) + # We have some filesystem library available. Do link checks + string(CONFIGURE [[ + #include + #include <@CXX_FILESYSTEM_HEADER@> + + int main() { + auto cwd = @CXX_FILESYSTEM_NAMESPACE@::current_path(); + printf("%s", cwd.c_str()); + return EXIT_SUCCESS; + } + ]] code @ONLY) + + # Check a simple filesystem program without any linker flags + _cmcm_check_cxx_source("${code}" CXX_FILESYSTEM_NO_LINK_NEEDED) + + set(can_link ${CXX_FILESYSTEM_NO_LINK_NEEDED}) + + if(NOT CXX_FILESYSTEM_NO_LINK_NEEDED) + set(prev_libraries ${CMAKE_REQUIRED_LIBRARIES}) + # Add the libstdc++ flag + set(CMAKE_REQUIRED_LIBRARIES ${prev_libraries} -lstdc++fs) + _cmcm_check_cxx_source("${code}" CXX_FILESYSTEM_STDCPPFS_NEEDED) + set(can_link ${CXX_FILESYSTEM_STDCPPFS_NEEDED}) + if(NOT CXX_FILESYSTEM_STDCPPFS_NEEDED) + # Try the libc++ flag + set(CMAKE_REQUIRED_LIBRARIES ${prev_libraries} -lc++fs) + _cmcm_check_cxx_source("${code}" CXX_FILESYSTEM_CPPFS_NEEDED) + set(can_link ${CXX_FILESYSTEM_CPPFS_NEEDED}) + endif() + endif() + + if(can_link) + add_library(std::filesystem INTERFACE IMPORTED) + set_property(TARGET std::filesystem APPEND PROPERTY INTERFACE_COMPILE_FEATURES cxx_std_17) + set(_found TRUE) + + if(CXX_FILESYSTEM_NO_LINK_NEEDED) + # Nothing to add... + elseif(CXX_FILESYSTEM_STDCPPFS_NEEDED) + set_property(TARGET std::filesystem APPEND PROPERTY INTERFACE_LINK_LIBRARIES -lstdc++fs) + elseif(CXX_FILESYSTEM_CPPFS_NEEDED) + set_property(TARGET std::filesystem APPEND PROPERTY INTERFACE_LINK_LIBRARIES -lc++fs) + endif() + endif() +endif() + +cmake_pop_check_state() + +set(Filesystem_FOUND ${_found} CACHE BOOL "TRUE if we can run a program using std::filesystem" FORCE) + +if(Filesystem_FIND_REQUIRED AND NOT Filesystem_FOUND) + message(FATAL_ERROR "Cannot run simple program using std::filesystem") +endif() + From c7b80a8cd8dd139129c82fa65539966d8d42f0d2 Mon Sep 17 00:00:00 2001 From: Roland Kaminski Date: Thu, 8 Jul 2021 23:55:31 +0200 Subject: [PATCH 5/7] include clocale --- lib/tokenize/include/tokenize/Stream.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/tokenize/include/tokenize/Stream.h b/lib/tokenize/include/tokenize/Stream.h index a012d5d..22108d4 100644 --- a/lib/tokenize/include/tokenize/Stream.h +++ b/lib/tokenize/include/tokenize/Stream.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include From 014d682ba40c460ea81ebf9289471d6d6d8300a1 Mon Sep 17 00:00:00 2001 From: Roland Kaminski Date: Fri, 9 Jul 2021 14:05:42 +0200 Subject: [PATCH 6/7] cleanup cmake files --- CMakeLists.txt | 15 +++++++++ app/CMakeLists.txt | 17 +++++++++- app/src/CMakeLists.txt | 34 ------------------- lib/colorlog/CMakeLists.txt | 16 ++++++++- lib/colorlog/src/CMakeLists.txt | 21 ------------ lib/pddl/CMakeLists.txt | 19 ++++++++++- lib/pddl/src/CMakeLists.txt | 41 ----------------------- lib/pddl/tests/CMakeLists.txt | 18 +++-------- lib/tokenize/CMakeLists.txt | 18 +++++++++++ lib/tokenize/tests/CMakeLists.txt | 8 +---- src/CMakeLists.txt | 54 ++++--------------------------- tests/CMakeLists.txt | 20 +++--------- 12 files changed, 97 insertions(+), 184 deletions(-) delete mode 100644 app/src/CMakeLists.txt delete mode 100644 lib/colorlog/src/CMakeLists.txt delete mode 100644 lib/pddl/src/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 23ffb86..a0874ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,21 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") find_package(Filesystem REQUIRED) find_package(Threads REQUIRED) +add_library(catch INTERFACE) +target_include_directories(catch + INTERFACE "$" +) + +add_library(cxxopts INTERFACE) +target_include_directories(cxxopts + INTERFACE "$" +) + +add_library(variant INTERFACE) +target_include_directories(variant + INTERFACE "$" +) + if(PLASP_BUILD_STATIC) set(CMAKE_EXE_LINKER_FLAGS "-static") set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index febd4f0..9dfb7a2 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -1 +1,16 @@ -add_subdirectory(src) +set(target plasp-app) + +file(GLOB_RECURSE core_sources "src/*.cpp") +file(GLOB_RECURSE core_headers "include/*.h") + +set(sources + ${core_sources} + ${core_headers} +) + +add_executable(${target} ${sources}) +target_include_directories(${target} + PRIVATE "$" +) +target_link_libraries(${target} PRIVATE std::filesystem cxxopts plasp) +set_target_properties(${target} PROPERTIES OUTPUT_NAME plasp) diff --git a/app/src/CMakeLists.txt b/app/src/CMakeLists.txt deleted file mode 100644 index ed57b10..0000000 --- a/app/src/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -set(target plasp-app) - -file(GLOB core_sources "plasp-app/*.cpp") -file(GLOB core_headers "../include/plasp-app/*.h") - -file(GLOB commands_sources "plasp-app/commands/*.cpp") -file(GLOB commands_headers "../include/plasp-app/commands/*.h") - -set(includes - ${PROJECT_SOURCE_DIR}/include - ${PROJECT_SOURCE_DIR}/lib/tokenize/include - ${PROJECT_SOURCE_DIR}/lib/colorlog/include - ${PROJECT_SOURCE_DIR}/lib/variant/include - ${PROJECT_SOURCE_DIR}/lib/pddl/include - ${PROJECT_SOURCE_DIR}/lib/cxxopts/include - ${PROJECT_SOURCE_DIR}/app/include -) - -set(sources - ${core_sources} - ${core_headers} - ${commands_sources} - ${commands_headers} -) - -set(libraries - std::filesystem - plasp -) - -add_executable(${target} ${sources}) -target_include_directories(${target} PRIVATE ${includes}) -target_link_libraries(${target} ${libraries}) -set_target_properties(${target} PROPERTIES OUTPUT_NAME plasp) diff --git a/lib/colorlog/CMakeLists.txt b/lib/colorlog/CMakeLists.txt index febd4f0..b32fd53 100644 --- a/lib/colorlog/CMakeLists.txt +++ b/lib/colorlog/CMakeLists.txt @@ -1 +1,15 @@ -add_subdirectory(src) +set(target colorlog) + +file(GLOB core_sources "src/colorlog/*.cpp") +file(GLOB core_headers "include/colorlog/*.h") + +set(sources + ${core_sources} + ${core_headers} +) + +add_library(${target} ${sources}) +target_include_directories(${target} + PUBLIC "$" +) +target_link_libraries(${target} PUBLIC tokenize) diff --git a/lib/colorlog/src/CMakeLists.txt b/lib/colorlog/src/CMakeLists.txt deleted file mode 100644 index c1027c9..0000000 --- a/lib/colorlog/src/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -set(target colorlog) - -file(GLOB core_sources "colorlog/*.cpp") -file(GLOB core_headers "../include/colorlog/*.h") - -set(includes - ../include - ${PROJECT_SOURCE_DIR}/lib/tokenize/include -) - -set(sources - ${core_sources} - ${core_headers} -) - -set(libraries -) - -add_library(${target} ${sources}) -target_include_directories(${target} PRIVATE ${includes}) -target_link_libraries(${target} ${libraries}) diff --git a/lib/pddl/CMakeLists.txt b/lib/pddl/CMakeLists.txt index edc4627..fa00e57 100644 --- a/lib/pddl/CMakeLists.txt +++ b/lib/pddl/CMakeLists.txt @@ -1,6 +1,23 @@ +set(target pddl) + option(PDDL_BUILD_TESTS "Build unit tests" OFF) -add_subdirectory(src) +file(GLOB_RECURSE core_sources "src/pddl/*.cpp") +file(GLOB_RECURSE core_headers "include/pddl/*.h") + +set(sources + ${core_sources} + ${core_headers} +) + +add_library(${target} ${sources}) +target_include_directories(${target} + PUBLIC "$" +) +target_link_libraries(${target} + PUBLIC colorlog tokenize variant +) + if(PDDL_BUILD_TESTS) add_subdirectory(tests) endif(PDDL_BUILD_TESTS) diff --git a/lib/pddl/src/CMakeLists.txt b/lib/pddl/src/CMakeLists.txt deleted file mode 100644 index 0c51af5..0000000 --- a/lib/pddl/src/CMakeLists.txt +++ /dev/null @@ -1,41 +0,0 @@ -set(target pddl) - -file(GLOB core_sources "pddl/*.cpp") -file(GLOB core_headers "../include/pddl/*.h") - -file(GLOB detail_sources "pddl/detail/*.cpp") -file(GLOB detail_headers "../include/pddl/detail/*.h") - -file(GLOB detail_parsing_sources "pddl/detail/parsing/*.cpp") -file(GLOB detail_parsing_headers "../include/pddl/detail/parsing/*.h") - -file(GLOB detail_normalization_sources "pddl/detail/normalization/*.cpp") -file(GLOB detail_normalization_headers "../include/pddl/detail/normalization/*.h") - -set(includes - ../include - ${PROJECT_SOURCE_DIR}/lib/colorlog/include - ${PROJECT_SOURCE_DIR}/lib/tokenize/include - ${PROJECT_SOURCE_DIR}/lib/variant/include -) - -set(sources - ${core_sources} - ${core_headers} - - ${detail_sources} - ${detail_headers} - - ${detail_parsing_sources} - ${detail_parsing_headers} - - ${detail_normalization_sources} - ${detail_normalization_headers} -) - -set(libraries -) - -add_library(${target} ${sources}) -target_include_directories(${target} PRIVATE ${includes}) -target_link_libraries(${target} ${libraries}) diff --git a/lib/pddl/tests/CMakeLists.txt b/lib/pddl/tests/CMakeLists.txt index 422d6f5..50fa9c5 100644 --- a/lib/pddl/tests/CMakeLists.txt +++ b/lib/pddl/tests/CMakeLists.txt @@ -2,21 +2,11 @@ set(target pddl-tests) file(GLOB core_sources "*.cpp") -set(includes - ../include - ${PROJECT_SOURCE_DIR}/lib/catch/single_include - ${PROJECT_SOURCE_DIR}/lib/tokenize/include - ${PROJECT_SOURCE_DIR}/lib/variant/include -) - -set(libraries - std::filesystem - pddl -) - add_executable(${target} ${core_sources}) -target_include_directories(${target} PRIVATE ${includes}) -target_link_libraries(${target} ${libraries}) +target_include_directories(${target} + PUBLIC "$" +) +target_link_libraries(${target} PUBLIC std::filesystem pddl) add_custom_target(run-pddl-tests COMMAND ${CMAKE_BINARY_DIR}/bin/pddl-tests --use-colour=yes diff --git a/lib/tokenize/CMakeLists.txt b/lib/tokenize/CMakeLists.txt index c6f4b29..71ad958 100644 --- a/lib/tokenize/CMakeLists.txt +++ b/lib/tokenize/CMakeLists.txt @@ -1,4 +1,22 @@ +set(target tokenize) + option(TOKENIZE_BUILD_TESTS "Build unit tests" OFF) + +file(GLOB core_headers "include/*.h") + +set(sources + ${core_headers} +) + +if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.19") + add_library(${target} INTERFACE ${sources}) +else() + add_library(${target} INTERFACE) +endif() +target_include_directories(${target} + INTERFACE "$" +) + if(TOKENIZE_BUILD_TESTS) add_subdirectory(tests) endif(TOKENIZE_BUILD_TESTS) diff --git a/lib/tokenize/tests/CMakeLists.txt b/lib/tokenize/tests/CMakeLists.txt index fce8c98..e9c712f 100644 --- a/lib/tokenize/tests/CMakeLists.txt +++ b/lib/tokenize/tests/CMakeLists.txt @@ -2,14 +2,8 @@ set(target tokenize-tests) file(GLOB core_sources "*.cpp") -set(includes - ../include - ${PROJECT_SOURCE_DIR}/lib/catch/single_include -) - add_executable(${target} ${core_sources}) -target_include_directories(${target} PRIVATE ${includes}) -target_link_libraries(${target}) +target_link_libraries(${target} PRIVATE catch tokenize) add_custom_target(run-tokenize-tests COMMAND ${CMAKE_BINARY_DIR}/bin/tokenize-tests --use-colour=yes diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 52eac76..70d0cc1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,57 +1,15 @@ set(target plasp) -file(GLOB core_sources "plasp/*.cpp") -file(GLOB core_headers "../include/plasp/*.h") - -file(GLOB pddl_sources "plasp/pddl/*.cpp") -file(GLOB pddl_headers "../include/plasp/pddl/*.h") - -file(GLOB pddl_translation_sources "plasp/pddl/translation/*.cpp") -file(GLOB pddl_translation_headers "../include/plasp/pddl/translation/*.h") - -file(GLOB sas_sources "plasp/sas/*.cpp") -file(GLOB sas_headers "../include/plasp/sas/*.h") - -set(includes - ${PROJECT_SOURCE_DIR}/include - ${PROJECT_SOURCE_DIR}/lib/tokenize/include - ${PROJECT_SOURCE_DIR}/lib/colorlog/include - ${PROJECT_SOURCE_DIR}/lib/variant/include - ${PROJECT_SOURCE_DIR}/lib/pddl/include -) +file(GLOB_RECURSE core_sources "*.cpp") +file(GLOB_RECURSE core_headers "../include/*.h") set(sources ${core_sources} ${core_headers} - - ${pddl_sources} - ${pddl_headers} - - ${pddl_expressions_sources} - ${pddl_expressions_headers} - - ${pddl_translation_sources} - ${pddl_translation_headers} - - ${sas_sources} - ${sas_headers} - - ${input_sources} - ${input_headers} - - ${output_sources} - ${output_headers} - - ${utils_sources} - ${utils_headers} -) - -set(libraries - colorlog - pddl - Threads::Threads ) add_library(${target} ${sources}) -target_include_directories(${target} PRIVATE ${includes}) -target_link_libraries(${target} ${libraries}) +target_include_directories(${target} + PUBLIC "$" +) +target_link_libraries(${target} PUBLIC Threads::Threads pddl) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 4a5b306..a7faf57 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -2,23 +2,11 @@ set(target tests) file(GLOB core_sources "*.cpp") -set(includes - ${PROJECT_SOURCE_DIR}/include - ${PROJECT_SOURCE_DIR}/lib/catch/single_include - ${PROJECT_SOURCE_DIR}/lib/tokenize/include - ${PROJECT_SOURCE_DIR}/lib/colorlog/include - ${PROJECT_SOURCE_DIR}/lib/variant/include - ${PROJECT_SOURCE_DIR}/lib/pddl/include -) - -set(libraries - std::filesystem - plasp -) - add_executable(${target} ${core_sources}) -target_include_directories(${target} PRIVATE ${includes}) -target_link_libraries(${target} ${libraries}) +target_include_directories(${target} + PRIVATE "$" +) +target_link_libraries(${target} PRIVATE catch std::filesystem plasp) add_custom_target(run-tests COMMAND ${CMAKE_BINARY_DIR}/bin/tests --use-colour=yes From 02b00cba67e4fe1f1edc0e31d8be70388fcef866 Mon Sep 17 00:00:00 2001 From: Roland Kaminski Date: Fri, 9 Jul 2021 14:08:59 +0200 Subject: [PATCH 7/7] add an install target for the plasp app --- CMakeLists.txt | 2 ++ app/CMakeLists.txt | 1 + 2 files changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index a0874ba..b04575e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,8 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +include(GNUInstallDirs) + find_package(Filesystem REQUIRED) find_package(Threads REQUIRED) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 9dfb7a2..ca93104 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -14,3 +14,4 @@ target_include_directories(${target} ) target_link_libraries(${target} PRIVATE std::filesystem cxxopts plasp) set_target_properties(${target} PROPERTIES OUTPUT_NAME plasp) +install(TARGETS ${target} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})