From 5dc047811e29670f924f9123b6b96949b24e3363 Mon Sep 17 00:00:00 2001 From: tastytea Date: Fri, 3 Jan 2020 08:30:29 +0100 Subject: Add skeleton. --- .editorconfig | 20 +++++++++++++++++ .gitignore | 2 ++ CMakeLists.txt | 39 +++++++++++++++++++++++++++++++++ cmake/debug_flags.cmake | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ include/mastodonpp.hpp | 39 +++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 27 +++++++++++++++++++++++ src/mastodonpp.cpp | 31 ++++++++++++++++++++++++++ 7 files changed, 216 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 cmake/debug_flags.cmake create mode 100644 include/mastodonpp.hpp create mode 100644 src/CMakeLists.txt create mode 100644 src/mastodonpp.cpp diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..ad5e59f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,20 @@ +# Configuration file for EditorConfig. +# More information is available under . + +root = true + +[*] +indent_style = space +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 80 + +[*.?pp] +indent_size = 4 +tab_width = 4 + +[{CMakeLists.txt,*.cmake}] +indent_size = 2 +tab_width = 2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cace064 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/build/ +/doc/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..7d56a9d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,39 @@ +# Support version 3.9 and above, but use policy settings up to 3.14. +# 3.9 is needed for project description. +cmake_minimum_required(VERSION 3.9...3.14) +# Ranges are supported from 3.12, set policy to current for < 3.12. +if(${CMAKE_VERSION} VERSION_LESS 3.12) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +endif() + +# Global build options. +set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The type of build.") +option(BUILD_SHARED_LIBS "Build shared libraries." YES) + +project(mastodonpp + VERSION 0.0.0 + DESCRIPTION "C++ wrapper for the Mastodon API." + LANGUAGES CXX) + +list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") + +# Project build options. +# option(WITH_TESTS "Compile tests." NO) +# option(WITH_DOC "Generate HTML documentation." YES) +# option(WITH_EXAMPLES "Compile examples." NO) +# option(WITH_DEB "Prepare for the building of .deb packages." NO) +# option(WITH_RPM "Prepare for the building of .rpm packages." NO) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +include(debug_flags) + +add_subdirectory(src) + +# if(WITH_TESTS) +# add_subdirectory(tests) +# endif() + +# include(cmake/packages.cmake) diff --git a/cmake/debug_flags.cmake b/cmake/debug_flags.cmake new file mode 100644 index 0000000..0009039 --- /dev/null +++ b/cmake/debug_flags.cmake @@ -0,0 +1,58 @@ +# Set compiler flags for Debug builds. +# Only has an effect on GCC/Clang >= 5.0. + +set(DEBUG_CXXFLAGS "") +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" + AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5") + list(APPEND DEBUG_CXXFLAGS + "-Wall" + "-Wextra" + "-Wpedantic" + "-Wuninitialized" + "-Wshadow" + "-Wnon-virtual-dtor" + "-Wconversion" + "-Wsign-conversion" + "-Wold-style-cast" + "-Wzero-as-null-pointer-constant" + "-Wmissing-declarations" + "-Wcast-align" + "-Wunused" + "-Woverloaded-virtual" + "-Wdouble-promotion" + "-Wformat=2" + "-ftrapv" + "-fsanitize=undefined" + "-g" + "-Og" + "-fno-omit-frame-pointer") + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + list(APPEND DEBUG_CXXFLAGS + "-Wlogical-op" + "-Wuseless-cast") + if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6") + list(APPEND DEBUG_CXXFLAGS + "-Wmisleading-indentation" + "-Wduplicated-cond" + "-Wnull-dereference") + if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7") + list(APPEND DEBUG_CXXFLAGS + "-Wduplicated-branches") + endif() + endif() + endif() + add_compile_options("$<$:${DEBUG_CXXFLAGS}>") + + set(DEBUG_LDFLAGS + "-fsanitize=undefined") + # add_link_options was introduced in version 3.13. + if(${CMAKE_VERSION} VERSION_LESS 3.13) + set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${DEBUG_LDFLAGS}") + else() + add_link_options("$<$:${DEBUG_LDFLAGS}>") + endif() +else() + message(STATUS + "No additional compiler flags were set, " + "because your compiler was not anticipated.") +endif() diff --git a/include/mastodonpp.hpp b/include/mastodonpp.hpp new file mode 100644 index 0000000..713712d --- /dev/null +++ b/include/mastodonpp.hpp @@ -0,0 +1,39 @@ +/* This file is part of mastodonpp. + * Copyright © 2020 tastytea + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#ifndef MASTODONPP_HPP +#define MASTODONPP_HPP + +#include + +namespace mastodonpp +{ + +using std::string; + +class API +{ +public: + explicit API(string instance, string access_token); + +private: + const string _instance; + const string _access_token; +}; + +} // namespace mastodonpp + +#endif // MASTODONPP_HPP diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..e5c64f6 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,27 @@ +include(GNUInstallDirs) + +file(GLOB_RECURSE sources_lib *.cpp) +file(GLOB_RECURSE headers_lib ../include/*.hpp) + +add_library(${PROJECT_NAME} "${sources_lib}" "${headers_lib}") + +set_target_properties(${PROJECT_NAME} PROPERTIES + VERSION ${PROJECT_VERSION} + SOVERSION ${${PROJECT_NAME}_VERSION_MAJOR}) + +target_include_directories(${PROJECT_NAME} + PRIVATE + "$" # version.hpp + PUBLIC + "$" + "$") + +# target_link_libraries(${PROJECT_NAME} +# PRIVATE +# PUBLIC) + + +install(TARGETS ${PROJECT_NAME} + EXPORT "${PROJECT_NAME}Targets" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/src/mastodonpp.cpp b/src/mastodonpp.cpp new file mode 100644 index 0000000..7890ed6 --- /dev/null +++ b/src/mastodonpp.cpp @@ -0,0 +1,31 @@ +/* This file is part of mastodonpp. + * Copyright © 2020 tastytea + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#include "mastodonpp.hpp" + +#include + +namespace mastodonpp +{ + +using std::move; + +API::API(string instance, string access_token) + : _instance{move(instance)} + , _access_token{move(access_token)} +{} + +} // namespace mastodonpp -- cgit v1.2.3-54-g00ecf