commit 5e41f19cd38eea9f2323185102e2013288aabe77 Author: tastytea Date: Sat May 11 02:52:33 2019 +0200 Laid out the project structure. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..84c048a --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/build/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..39ae764 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,57 @@ +cmake_minimum_required (VERSION 3.2) +project(remwharead + VERSION 0.0.0 + LANGUAGES CXX +) + +set(WITH_MAN "YES" CACHE STRING "WITH_MAN defaults to \"YES\"") +set(WITH_TESTS "NO" CACHE STRING "WITH_TESTS defaults to \"NO\"") + +include(GNUInstallDirs) +find_package(PkgConfig REQUIRED) +pkg_check_modules(CURLPP REQUIRED curlpp) + +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +set(CMAKE_CXX_FLAGS_DEBUG + "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra -Wpedantic -ftrapv \ +-fsanitize=undefined -g -Og -fno-omit-frame-pointer") + +include_directories(${PROJECT_SOURCE_DIR}/src) +Include_directories(${PROJECT_BINARY_DIR}) + +include_directories(${CURLPP_INCLUDE_DIRS}) + +link_directories(${CURLPP_LIBRARY_DIRS}) + +# Write version in header +configure_file( + "${PROJECT_SOURCE_DIR}/src/version.hpp.in" + "${PROJECT_BINARY_DIR}/version.hpp" +) + +file(GLOB sources src/*.cpp) +add_executable(${PROJECT_NAME} "${sources}") +target_link_libraries(${PROJECT_NAME} ${CURLPP_LIBRARIES}) +install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) + +if (WITH_MAN) + add_custom_command( + OUTPUT "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.1" + WORKING_DIRECTORY "${PROJECT_BINARY_DIR}" + DEPENDS "${CMAKE_SOURCE_DIR}/${PROJECT_NAME}.1.adoc" + COMMAND ${CMAKE_SOURCE_DIR}/build_manpage.sh + ARGS ${PROJECT_VERSION}) + add_custom_target(run ALL DEPENDS "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.1") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.1 + DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) +endif() + +if(WITH_TESTS) + add_library(${PROJECT_NAME}_testlib SHARED ${sources}) + target_link_libraries(${PROJECT_NAME}_testlib ${CURLPP_LIBRARIES}) + include(tests.CMakeLists.txt) +endif() diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000..24ba720 --- /dev/null +++ b/README.adoc @@ -0,0 +1,93 @@ += remwharead + +*remwharead* helps you remembering what you read, and when. + +== Usage + +See https://schlomp.space/tastytea/remwharead/src/branch/master/remwharead.1.adoc[manpage]. + +== Install + +//// +=== Gentoo + +Add my https://schlomp.space/tastytea/overlay[repository] and install it from +there. + +[source,shellsession] +---- +eselect repository enable tastytea +echo "www-misc/remwharead ~amd64" >> /etc/portage/package.accept_keywords/remwharead +emaint sync -r tastytea +emerge -a www-misc/remwharead +---- +//// + +=== From source + +//// +==== Dependencies + +* Tested OS: Linux +* C++ compiler (tested: https://gcc.gnu.org/[gcc] 5/6/7/8, + https://llvm.org/[clang] 3/5/6) +* https://cmake.org/[cmake] (at least: 3.6) +* https://pkgconfig.freedesktop.org/wiki/[pkgconfig] (tested: 0.29) +* http://www.curlpp.org/[curlpp] (tested: 0.8) +* Optional: +** Manpage: http://asciidoc.org/[asciidoc] (tested: 8.6) + +===== Debian stretch + +[source,shellsession] +---- +echo "APT::Default-Release \"stretch\";" >> /etc/apt/apt.conf.d/00default_release +echo "deb http://deb.debian.org/debian sid main" >> /etc/apt/sources.list.d/sid.list +apt-get update +apt-get install build-essential cmake pkg-config libcurl4-openssl-dev asciidoc +apt-get install -t sid libcurlpp-dev +---- +//// + +==== Get sourcecode + +//// +===== Releases + +Download the current release at +https://schlomp.space/tastytea/remwharead/releases[schlomp.space]. +//// + +===== Development version + +[source,shellsession] +---- +git clone https://schlomp.space/tastytea/remwharead.git +---- + +==== Compile + +[source,shellsession] +---- +mkdir build +cd build/ +cmake .. +cmake --build . +---- + +.cmake options: +* `-DCMAKE_BUILD_TYPE=Debug` for a debug build. +* `-DWITH_MAN=NO` to not compile the manpage. +* `WITH_TESTS=YES` to compile the tests. + +You can run the tests with `ctest` inside the build directory. Install with +`make install`. + +== Copyright + +---- +Copyright © 2019 tastytea . +License GPLv3: GNU GPL version 3 . +This program comes with ABSOLUTELY NO WARRANTY. This is free software, +and you are welcome to redistribute it under certain conditions. +---- diff --git a/build_manpage.sh b/build_manpage.sh new file mode 100755 index 0000000..aee2631 --- /dev/null +++ b/build_manpage.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +name="remwharead" + +if [ -n "${1}" ]; then + dir="$(dirname ${0})" + version=${1} + cp -vf "${dir}/${name}.1.adoc" . + sed -Ei "s/(Revision: +)[0-9]+\.[0-9]\.[0-9]/\1${version}/" "${name}.1.adoc" + a2x --doctype manpage --format manpage --no-xmllint "${name}.1.adoc" +else + echo "usage: ${0} VERSION" >&2 +fi diff --git a/remwharead.1.adoc b/remwharead.1.adoc new file mode 100644 index 0000000..f327fc3 --- /dev/null +++ b/remwharead.1.adoc @@ -0,0 +1,42 @@ += remwharead(1) +:doctype: manpage +:Author: tastytea +:Email: tastytea@tastytea.de +:Date: 2019-05-11 +:Revision: 0.0.0 +:man source: remwharead +:man version: {revision} +:man manual: General Commands Manual + +== NAME + +remwharead - Remember what you read, and when + +== SYNOPSIS + +*remwharead* [_url_|_--version_] [_arguments_] + +//// +== DESCRIPTION +//// + +== OPTIONS + +*--version*:: +Print version, copyright and license. + +//// +== EXAMPLES + +== FILES + +* *Configuration file*: `${XDG_CONFIG_HOME}/remwharead.cfg` + +`${XDG_CONFIG_HOME}` is usually `~/.config`. +//// + +== REPORTING BUGS + +Bugtracker: https://schlomp.space/tastytea/remwharead/issues + +E-mail: tastytea@tastytea.de diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..30ecc79 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,20 @@ +/* This file is part of remwharead. + * Copyright © 2019 tastytea + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +int main() +{ + return 0; +} diff --git a/src/version.hpp.in b/src/version.hpp.in new file mode 100644 index 0000000..cec7915 --- /dev/null +++ b/src/version.hpp.in @@ -0,0 +1,9 @@ +#ifndef VERSION_HPP +#define VERSION_HPP + +namespace global +{ + static constexpr char version[] = "@PROJECT_VERSION@"; +} + +#endif // VERSION_HPP diff --git a/tests.CMakeLists.txt b/tests.CMakeLists.txt new file mode 100644 index 0000000..164eb2d --- /dev/null +++ b/tests.CMakeLists.txt @@ -0,0 +1,24 @@ +include(CTest) +file(GLOB sources_tests tests/test_*.cpp) + +find_package(Catch2) +if(Catch2_FOUND) # Catch 2.x + include(Catch) + add_executable(all_tests tests/main.cpp ${sources_tests}) + target_link_libraries(all_tests Catch2::Catch2 ${PROJECT_NAME}_testlib) + target_include_directories(all_tests PRIVATE "/usr/include/catch2") + catch_discover_tests(all_tests EXTRA_ARGS "${EXTRA_TEST_ARGS}") +else() # Catch 1.x + if(EXISTS "/usr/include/catch.hpp") + message(STATUS "Catch 1.x found.") + foreach(src ${sources_tests}) + get_filename_component(bin ${src} NAME_WE) + add_executable(${bin} tests/main.cpp ${src}) + target_link_libraries(${bin} ${PROJECT_NAME}_testlib) + add_test(${bin} ${bin} "${EXTRA_TEST_ARGS}") + endforeach() + else() + message(FATAL_ERROR + "Neither Catch 2.x nor Catch 1.x could be found.") + endif() +endif() diff --git a/tests/main.cpp b/tests/main.cpp new file mode 100644 index 0000000..946a98e --- /dev/null +++ b/tests/main.cpp @@ -0,0 +1,19 @@ +/* This file is part of remwharead. + * Copyright © 2019 tastytea + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#define CATCH_CONFIG_MAIN + +#include