pax_global_header 0000666 0000000 0000000 00000000064 14512757614 0014526 g ustar 00root root 0000000 0000000 52 comment=32310f899bd30741b97366dc442bbde2eb8ee7ce
lager-0.1.1/ 0000775 0000000 0000000 00000000000 14512757614 0012617 5 ustar 00root root 0000000 0000000 lager-0.1.1/.clang-format 0000664 0000000 0000000 00000002066 14512757614 0015176 0 ustar 00root root 0000000 0000000 ---
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: 'true'
AlignEscapedNewlines: Right
AlignTrailingComments: 'true'
AllowShortFunctionsOnASingleLine: 'true'
AllowShortBlocksOnASingleLine: 'true'
AlwaysBreakTemplateDeclarations: 'true'
AccessModifierOffset: -4
BinPackArguments: 'false'
BinPackParameters: 'false'
BreakBeforeBraces: Mozilla
BreakBeforeInheritanceComma: 'true'
BreakBeforeTernaryOperators: 'true'
BreakConstructorInitializers: BeforeComma
BreakStringLiterals: 'true'
ColumnLimit: '80'
CompactNamespaces: 'false'
ConstructorInitializerAllOnOneLineOrOnePerLine: 'false'
FixNamespaceComments: 'true'
IndentCaseLabels: 'false'
IndentWidth: '4'
IndentWrappedFunctionNames: 'false'
KeepEmptyLinesAtTheStartOfBlocks: 'false'
Language: Cpp
MaxEmptyLinesToKeep: '1'
NamespaceIndentation: None
PointerAlignment: Left
ReflowComments: 'true'
SortIncludes: 'true'
SortUsingDeclarations: 'true'
SpaceAfterCStyleCast: 'true'
SpaceAfterTemplateKeyword: 'true'
SpaceBeforeAssignmentOperators: 'true'
SpaceBeforeParens: ControlStatements
TabWidth: '4'
UseTab: Never
...
lager-0.1.1/.dir-locals.el 0000664 0000000 0000000 00000000315 14512757614 0015247 0 ustar 00root root 0000000 0000000 ((nil .
((indent-tabs-mode . nil)
(show-trailing-whitespace . t)))
(c-mode .
((mode . c++)))
(c++-mode .
((eval add-hook 'before-save-hook #'clang-format-buffer nil t))))
lager-0.1.1/.github/ 0000775 0000000 0000000 00000000000 14512757614 0014157 5 ustar 00root root 0000000 0000000 lager-0.1.1/.github/FUNDING.yml 0000664 0000000 0000000 00000000125 14512757614 0015772 0 ustar 00root root 0000000 0000000 github: arximboldi
patreon: sinusoidal
custom: ["paypal.me/sinusoidal", sinusoid.al]
lager-0.1.1/.github/workflows/ 0000775 0000000 0000000 00000000000 14512757614 0016214 5 ustar 00root root 0000000 0000000 lager-0.1.1/.github/workflows/test.yml 0000664 0000000 0000000 00000005766 14512757614 0017734 0 ustar 00root root 0000000 0000000 name: test
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: cachix/install-nix-action@v22
with:
nix_path: nixpkgs=channel:nixos-unstable
- uses: cachix/cachix-action@v12
with:
name: arximboldi
signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}'
- run: nix-build
macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: cachix/install-nix-action@v22
with:
nix_path: nixpkgs=channel:nixos-unstable
- uses: cachix/cachix-action@v12
with:
name: arximboldi
signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}'
- run: nix-shell --run 'mkdir build-mac'
- name: configure cmake
run: |
nix-shell --run "
cd build-mac && cmake .. \
-DCMAKE_BUILD_TYPE=Debug
"
- run: nix-shell --run "cd build-mac && make check -j`nproc`"
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- uses: cachix/install-nix-action@v22
with:
nix_path: nixpkgs=channel:nixos-unstable
- uses: cachix/cachix-action@v12
with:
name: arximboldi
signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}'
- run: nix-shell --run "mkdir build"
- run: nix-shell --run "cd build && cmake .."
- run: nix-shell --run "cd build && make docs"
- uses: shimataro/ssh-key-action@v2
if: github.ref == 'refs/heads/master'
with:
key: ${{ secrets.SINUSOIDES_SSH_KEY }}
known_hosts: ${{ secrets.SINUSOIDES_KNOWN_HOSTS }}
- run: nix-shell --run "cd build && make upload-docs"
if: github.ref == 'refs/heads/master'
check:
strategy:
matrix:
type: [Debug, Release]
compiler: [gcc9]
opts: [[]]
include:
- type: Debug
compiler: gcc9
opts: ['coverage']
- type: Debug
compiler: clang_10
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: cachix/install-nix-action@v22
with:
nix_path: nixpkgs=channel:nixos-unstable
- uses: cachix/cachix-action@v12
with:
name: arximboldi
signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}'
- run: nix-shell --argstr compiler ${{ matrix.compiler }} --run "mkdir build"
- name: configure cmake
run: |
nix-shell --argstr compiler ${{ matrix.compiler }} --run "
cd build && cmake .. \
-DCMAKE_BUILD_TYPE=${{ matrix.type }} \
-DENABLE_COVERAGE=${{ contains(matrix.opts, 'coverage') }}
"
- run: nix-shell --argstr compiler ${{ matrix.compiler }} --run "cd build && make check -j`nproc`"
- run: nix-shell --argstr compiler ${{ matrix.compiler }} --run "bash <(curl -s https://codecov.io/bash)"
if: ${{ contains(matrix.opts, 'coverage') }}
lager-0.1.1/.gitignore 0000664 0000000 0000000 00000000544 14512757614 0014612 0 ustar 00root root 0000000 0000000 bazel-*/
build/*
build-*/*
result
resources/gui/*.css
resources/gui/*.css.map
# I am too stupid to now how to make `elm` work properly inside Nix,
# so let's distribute this suck that building the package does not
# need to call `elm-make`
# resources/gui/*.js
resources/gui/elm-stuff
.sass-cache
doc/_build
doc/_doxygen
tools/travis/ssh-key
*.qmlc
/.vs
lager-0.1.1/.gitmodules 0000664 0000000 0000000 00000000223 14512757614 0014771 0 ustar 00root root 0000000 0000000 [submodule "tools/sinusoidal-sphinx-theme"]
path = tools/sinusoidal-sphinx-theme
url = https://github.com/arximboldi/sinusoidal-sphinx-theme.git
lager-0.1.1/BUILD 0000664 0000000 0000000 00000000566 14512757614 0013410 0 ustar 00root root 0000000 0000000 package(default_visibility = ["//visibility:public"])
cc_library(
name = "lager",
hdrs = glob([
"lager/**/*.hpp",
]),
deps = [
"@boost//:hana",
"@boost//:intrusive",
"@boost//:intrusive_ptr",
"@zug//:zug",
"@cereal//:cereal",
],
includes = [".", "lager/"],
visibility = ["//visibility:public"],
)
lager-0.1.1/CMakeLists.txt 0000664 0000000 0000000 00000012642 14512757614 0015364 0 ustar 00root root 0000000 0000000 cmake_minimum_required(VERSION 3.8)
cmake_policy(SET CMP0048 NEW) # enable project VERSION
cmake_policy(SET CMP0056 NEW) # honor link flags in try_compile()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
project(lager VERSION 0.1.0)
if(MSVC)
set(CMAKE_CXX_STANDARD 20)
add_compile_options(/Wall /Zc:preprocessor /bigobj)
else()
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif()
set(CMAKE_EXPORT_COMPILE_COMMANDS on)
set(CMAKE_CXX_EXTENSIONS off)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments")
endif()
include(GNUInstallDirs)
option(lager_BUILD_TESTS "Build tests" ON)
option(lager_BUILD_FAILURE_TESTS "Build failure tests" ON)
option(lager_BUILD_EXAMPLES "Build examples" ON)
option(lager_BUILD_DEBUGGER_EXAMPLES "Build examples that showcase the web based debugger" ON)
option(lager_BUILD_DOCS "Build docs" ON)
option(lager_EMBED_RESOURCES_PATH "Embed installation paths for easier, non-portable resource location" ON)
option(lager_DISABLE_STORE_DEPENDENCY_CHECKS "Disable compile-time checks for store dependencies" OFF)
if (NOT lager_EMBED_RESOURCES_PATH AND lager_BUILD_EXAMPLES)
message(FATAL_ERROR "Examples require embedded resources path")
endif()
if (MSVC AND NOT lager_DISABLE_STORE_DEPENDENCY_CHECKS)
message(WARNING "compile-time checks for store dependencies are currently not supported with msvc")
set(lager_DISABLE_STORE_DEPENDENCY_CHECKS ON)
endif()
if (NOT lager_BUILD_EXAMPLES AND lager_BUILD_DEBUGGER_EXAMPLES)
message(WARNING "examples using the web-based debugger are disabled when examples are disabled")
set(lager_BUILD_DEBUGGER_EXAMPLES OFF)
endif()
find_program(CCACHE ccache)
if (CCACHE)
message(STATUS "Using ccache: ${CCACHE}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE})
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE})
else()
message(STATUS "Could not find ccache")
endif()
# Targets
# =======
# the library
add_library(lager INTERFACE)
target_include_directories(lager INTERFACE
$
$
$)
if(lager_DISABLE_STORE_DEPENDENCY_CHECKS)
message(STATUS "Disabling compile-time checks for store dependencies")
target_compile_definitions(lager INTERFACE LAGER_DISABLE_STORE_DEPENDENCY_CHECKS)
endif()
install(TARGETS lager EXPORT LagerConfig)
# requirements for tests and examples
if (lager_BUILD_TESTS OR lager_BUILD_EXAMPLES)
find_package(Boost 1.56 COMPONENTS system REQUIRED)
find_package(Threads REQUIRED)
find_package(Immer REQUIRED)
find_package(Zug REQUIRED)
endif()
# the library, local development target
if(lager_BUILD_TESTS)
find_package(Catch2 REQUIRED)
add_library(lager-dev INTERFACE)
target_include_directories(lager-dev SYSTEM INTERFACE
${lager_SOURCE_DIR}
${Boost_INCLUDE_DIR}
)
target_link_libraries(lager-dev INTERFACE lager
${Boost_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
immer
zug
)
if (ENABLE_COVERAGE)
target_compile_options(lager-dev INTERFACE "--coverage")
target_link_libraries(lager-dev INTERFACE "--coverage")
endif()
if (ENABLE_ASAN)
target_compile_options(lager-dev INTERFACE
-fno-omit-frame-pointer -fsanitize=address)
target_link_options(lager-dev INTERFACE -fsanitize=address)
endif()
enable_testing()
add_custom_target(check
COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Build and run all the tests and examples.")
add_subdirectory(test)
endif()
# the library, with http debugger
if (lager_BUILD_EXAMPLES)
add_library(lager-example INTERFACE)
target_include_directories(lager-example INTERFACE
$
$
$
${Boost_INCLUDE_DIR}
)
target_link_libraries(lager-example INTERFACE
lager
immer
${CMAKE_THREAD_LIBS_INIT}
${Boost_LIBRARIES}
)
install(TARGETS lager-example EXPORT LagerConfig)
# examples with the http debugger
if (lager_BUILD_DEBUGGER_EXAMPLES)
add_library(lager-debugger-example INTERFACE)
target_link_libraries(lager-debugger-example INTERFACE
lager-example
Boost::system)
if (NOT APPLE)
add_custom_target(gui ALL
COMMAND make
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/resources/gui"
COMMENT "Build debugger web UI")
endif()
install(TARGETS lager-debugger-example EXPORT LagerConfig)
install(FILES
resources/gui/gui.js
resources/gui/gui.css
resources/gui/index.html
DESTINATION "${CMAKE_INSTALL_DATADIR}/lager/gui")
endif()
add_subdirectory(example)
endif()
if (lager_BUILD_DOCS)
add_subdirectory(doc)
endif()
# Also configure and install the resources_path.hpp file if wanted
if (lager_EMBED_RESOURCES_PATH)
set(LAGER_PREFIX_PATH ${CMAKE_INSTALL_PREFIX})
configure_file(lager/resources_path.hpp.in
${CMAKE_BINARY_DIR}/include/lager/resources_path.hpp)
target_include_directories(lager
INTERFACE $)
install(FILES ${CMAKE_BINARY_DIR}/include/lager/resources_path.hpp DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/lager")
endif()
install(EXPORT LagerConfig DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Lager")
install(DIRECTORY lager DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" PATTERN "*.hpp")
lager-0.1.1/LICENSE 0000664 0000000 0000000 00000002103 14512757614 0013620 0 ustar 00root root 0000000 0000000 MIT License
Copyright (c) 2017-present, Juan Pedro Bolivar Puente
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
lager-0.1.1/LICENSES/ 0000775 0000000 0000000 00000000000 14512757614 0014024 5 ustar 00root root 0000000 0000000 lager-0.1.1/LICENSES/OFL-1.1-RFN.txt 0000664 0000000 0000000 00000007660 14512757614 0016136 0 ustar 00root root 0000000 0000000 SIL OPEN FONT LICENSE
Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the copyright statement(s).
"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting, or substituting — in part or in whole — any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.
"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
lager-0.1.1/README.rst 0000664 0000000 0000000 00000015356 14512757614 0014320 0 ustar 00root root 0000000 0000000 .. image:: https://github.com/arximboldi/lager/workflows/test/badge.svg
:target: https://github.com/arximboldi/lager/actions?query=workflow%3Atest+branch%3Amaster
:alt: Github Actions Badge
.. image:: https://codecov.io/gh/arximboldi/lager/branch/master/graph/badge.svg
:target: https://codecov.io/gh/arximboldi/lager
:alt: CodeCov Badge
.. image:: https://cdn.jsdelivr.net/gh/arximboldi/lager/doc/_static/sinusoidal-badge.svg
:target: https://sinusoid.al
:alt: Sinusoidal Engineering badge
:align: right
.. raw:: html
.. include:introduction/start
**lager** is a C++ library to assist `value-oriented design`_ by
implementing the `unidirectional data-flow architecture`_. It is
heavily inspired by Elm_ and Redux_, and enables composable designs by
promoting the use of simple value types and testable application logic
via pure functions. And you get time-travel for free!
.. _unidirectional data-flow architecture: https://www.exclamationlabs.com/blog/the-case-for-unidirectional-data-flow
.. _Elm: https://guide.elm-lang.org/architecture
.. _Redux: https://redux.js.org/introduction/getting-started
.. _value-oriented design: https://www.youtube.com/watch?v=_oBx_NbLghY
* **Documentation** (Contents_)
* **Code** (GitHub_)
* **CppRussia-Piter 2019 Talk**: *Squaring the circle* (`YouTube
`_, `Slides
`_)
* **CppCon 2018 Talk**: *The most valuable values* (`YouTube
`_, `Slides
`_)
* **C++ on Sea 2019 Talk**: *Postmodern immutable data-structures*
(`YouTube `_, `Slides
`_)
.. _contents: https://sinusoid.es/lager/#contents
.. _github: https://github.com/arximboldi/lager
.. raw:: html
This project is part of a long-term vision helping interactive and
concurrent C++ programs become easier to write. **Help this project's
long term sustainability by becoming a patron or buying a
sponsorship package:** juanpe@sinusoid.al
.. include:index/end
Examples
--------
For a guided introductory tour with **code samples**, please read the
`architecture overview`_ section. Other examples:
.. _architecture overview: https://sinusoid.es/lager/architecture.html
* **Counter**, a minimalistic example with multiple UIs (`link
`_).
* **Autopong**, a basic game using SDL2 (`link
`_).
* **Ewig**, a terminal text editor with undo, asynchronous loading,
and more (`link `_).
Why?
----
Most interactive software of the last few decades has been written
using an object-oriented interpretation of the `Model View
Controller`_ design. This architecture provides nice separation of
concerns, allowing the core application logic to be separate from the
UI, and a good sense of modularity. However, its reliance on stateful
object graphs makes the software hard to test or parallelize. It's
reliance on fine-grained callbacks makes composition hard, resulting
in subtle problems that are hard to debug.
*Value-based unidirectional data-flow* tackles a few of these
problems:
* Thanks to immutability_ and value-types, it is very easy to add
**concurrency** as threads can operate on their local copies of the
data without mutexes or other flaky synchronization mechanisms.
Instead, worker threads communicate their results back by *dispatching*
actions to the main thread.
* The application logic is made of `pure functions`_ that can be easily
**tested** and are fully reproducible. They interact with the world
via special side-effects procedures loosely coupled to the services
they need via `dependency injection`_.
* This also means that data and call-graphs are always trees or
`DAGs`_ (instead of cyclical graphs), with *explicit composition*
that is to trace and **debug**. You can also always
*snapshot* the state, making undo and time-travel easy peasy!
.. _immutability: https://github.com/arximboldi/immer
.. _pure functions: https://en.wikipedia.org/wiki/Pure_function
.. _model view controller:
https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
.. _dependency injection:
https://en.wikipedia.org/wiki/Dependency_injection
.. _DAGs: https://en.wikipedia.org/wiki/Directed_acyclic_graph
Dependencies
------------
This library is written in **C++17** and a compliant compiler and
standard library necessary. It is `continuously tested`_ with GCC 7,
but it might work with other compilers and versions.
It also depends on `Zug`_ and `Boost Hana`_. Some optional extensions and modules
may have other dependencies documented in their respective sections.
.. _Zug: https://github.com/arximboldi/zug/
.. _Boost Hana: https://boostorg.github.io/hana
.. _continuously tested: https://travis-ci.org/arximboldi/immer
Usage
-----
This is a **header only** you can just copy the ``lager`` subfolder
somewhere in your *include path*.
Some components, like the time-travelling debugger, also require the
installation of extra files.
You can use `CMake`_ to install the library in your system once you
have manually cloned the repository::
mkdir -p build && cd build
cmake .. && sudo make install
.. _nix package manager: https://nixos.org/nix
.. _cmake: https://cmake.org/
Development
-----------
In order to develop the library, you will need to compile and run the
examples, tests and benchmarks. These require some additional tools.
The easiest way to install them is by using the `Nix package
manager`_. At the root of the repository just type::
nix-shell
This will download all required dependencies and create an isolated
environment in which you can use these dependencies, without polluting
your system.
Then you can proceed to generate a development project using `CMake`_::
mkdir build && cd build
cmake ..
From then on, one may build and run all tests by doing::
make check
License
-------
.. image:: https://raw.githubusercontent.com/arximboldi/lager/docs/doc/_static/mit.png
:alt: Boost logo
:target: https://opensource.org/licenses/MIT
:align: right
:width: 140 px
**This software is licensed under the MIT license**.
The full text of the license is can be accessed `via this link
`_ and is also included in the
``LICENSE`` file of this software package.
lager-0.1.1/WORKSPACE 0000664 0000000 0000000 00000001045 14512757614 0014100 0 ustar 00root root 0000000 0000000 git_repository(
name = "com_github_nelhage_rules_boost",
commit = "eafab11dbd1d4cd1151f8407bd6ed81d1240d122",
remote = "https://github.com/nelhage/rules_boost",
)
git_repository(
name = "zug",
commit = "913fed55a158f7da70ccf4b7f359d056b77c7f7c",
remote = "https://github.com/arximboldi/zug",
)
git_repository(
name = "cereal",
commit = "72d3eb200dc0568277255f960bc2bd7eccf8bafc",
remote = "https://github.com/USCiLab/cereal",
)
load("@com_github_nelhage_rules_boost//:boost/boost.bzl", "boost_deps")
boost_deps()
lager-0.1.1/cmake/ 0000775 0000000 0000000 00000000000 14512757614 0013677 5 ustar 00root root 0000000 0000000 lager-0.1.1/cmake/FindSDL2_ttf.cmake 0000664 0000000 0000000 00000011045 14512757614 0017064 0 ustar 00root root 0000000 0000000 # Locate SDL_ttf library
#
# This module defines:
#
# ::
#
# SDL2_TTF_LIBRARIES, the name of the library to link against
# SDL2_TTF_INCLUDE_DIRS, where to find the headers
# SDL2_TTF_FOUND, if false, do not try to link against
# SDL2_TTF_VERSION_STRING - human-readable string containing the version of SDL_ttf
#
#
#
# For backward compatibility the following variables are also set:
#
# ::
#
# SDLTTF_LIBRARY (same value as SDL2_TTF_LIBRARIES)
# SDLTTF_INCLUDE_DIR (same value as SDL2_TTF_INCLUDE_DIRS)
# SDLTTF_FOUND (same value as SDL2_TTF_FOUND)
#
#
#
# $SDLDIR is an environment variable that would correspond to the
# ./configure --prefix=$SDLDIR used in building SDL.
#
# Created by Eric Wing. This was influenced by the FindSDL.cmake
# module, but with modifications to recognize OS X frameworks and
# additional Unix paths (FreeBSD, etc).
#=============================================================================
# Copyright 2005-2009 Kitware, Inc.
# Copyright 2012 Benjamin Eikel
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
find_path(SDL2_TTF_INCLUDE_DIR SDL_ttf.h
HINTS
ENV SDL2TTFDIR
ENV SDL2DIR
PATH_SUFFIXES SDL2
# path suffixes to search inside ENV{SDLDIR}
include/SDL2 include
PATHS ${SDL2_TTF_PATH}
)
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
set(VC_LIB_PATH_SUFFIX lib/x64)
else ()
set(VC_LIB_PATH_SUFFIX lib/x86)
endif ()
find_library(SDL2_TTF_LIBRARY
NAMES SDL2_ttf
HINTS
ENV SDL2TTFDIR
ENV SDL2DIR
PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX}
PATHS ${SDL2_TTF_PATH}
)
if (SDL2_TTF_INCLUDE_DIR AND EXISTS "${SDL2_TTF_INCLUDE_DIR}/SDL_ttf.h")
file(STRINGS "${SDL2_TTF_INCLUDE_DIR}/SDL_ttf.h" SDL2_TTF_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_TTF_MAJOR_VERSION[ \t]+[0-9]+$")
file(STRINGS "${SDL2_TTF_INCLUDE_DIR}/SDL_ttf.h" SDL2_TTF_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_TTF_MINOR_VERSION[ \t]+[0-9]+$")
file(STRINGS "${SDL2_TTF_INCLUDE_DIR}/SDL_ttf.h" SDL2_TTF_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_TTF_PATCHLEVEL[ \t]+[0-9]+$")
string(REGEX REPLACE "^#define[ \t]+SDL_TTF_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_TTF_VERSION_MAJOR "${SDL2_TTF_VERSION_MAJOR_LINE}")
string(REGEX REPLACE "^#define[ \t]+SDL_TTF_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_TTF_VERSION_MINOR "${SDL2_TTF_VERSION_MINOR_LINE}")
string(REGEX REPLACE "^#define[ \t]+SDL_TTF_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_TTF_VERSION_PATCH "${SDL2_TTF_VERSION_PATCH_LINE}")
set(SDL2_TTF_VERSION_STRING ${SDL2_TTF_VERSION_MAJOR}.${SDL2_TTF_VERSION_MINOR}.${SDL2_TTF_VERSION_PATCH})
unset(SDL2_TTF_VERSION_MAJOR_LINE)
unset(SDL2_TTF_VERSION_MINOR_LINE)
unset(SDL2_TTF_VERSION_PATCH_LINE)
unset(SDL2_TTF_VERSION_MAJOR)
unset(SDL2_TTF_VERSION_MINOR)
unset(SDL2_TTF_VERSION_PATCH)
endif ()
set(SDL2_TTF_LIBRARIES ${SDL2_TTF_LIBRARY})
set(SDL2_TTF_INCLUDE_DIRS ${SDL2_TTF_INCLUDE_DIR})
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_ttf
REQUIRED_VARS SDL2_TTF_LIBRARIES SDL2_TTF_INCLUDE_DIRS
VERSION_VAR SDL2_TTF_VERSION_STRING)
# for backward compatibility
set(SDLTTF_LIBRARY ${SDL2_TTF_LIBRARIES})
set(SDLTTF_INCLUDE_DIR ${SDL2_TTF_INCLUDE_DIRS})
set(SDLTTF_FOUND ${SDL2_TTF_FOUND})
lager-0.1.1/cmake/icm_build_failure_testing.cmake 0000664 0000000 0000000 00000020730 14512757614 0022076 0 ustar 00root root 0000000 0000000 # icm_build_failure_testing
#
# SPDX-License-Identifier: MIT
# MIT License:
# Copyright (c) 2022 Borislav Stanimirov
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files(the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and / or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions :
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# VERSION HISTORY
#
# 1.00 (2022-xx-xx) Initial release
#
# NOTES
# This file is bundled with icm_build_failure_parse_and_run.cmake and expects
# it to be in the same directory
include_guard(GLOBAL)
# store current dir to find icm_build_failure_parse_and_run
set(ICM_BUILD_FAILURE_TEST_SCRIPT_DIR "${CMAKE_CURRENT_LIST_DIR}")
# icm_add_build_failure_test
#
# Add a build failure test to a project
#
# Args:
# * NAME name - Name of the test (for CTest)
# * TARGET target - Optional.
# Name of the target executable (whose build will fail).
# Defaults to '-test' if not provided
#
# * SOURCES sources - Sources for the executable
# * PARSE src - Optional. One of the sources can be marked as PARSE. If
# such is present, it will be parsed for expected errors
#
# * LIBRARIES libs - Optional. Link libraries for the executable
# * LABELS labels - Optional. CTest labels for the test
# If none are provided, "build-failure" will be added
# * FOLDER folder - Optional. MSVC solution folder for the target
#
# * ERROR_MATCHES mathes - Optional. Strings with which to match the build
# output of the executable
#
# Notes:
# * If neither ERROR_MATCHES nor a PARSE source is present, the test will only
# check that the build of the target fails. This is not recommended
# * If both are present, the PARSE source takes precedence
# * ERROR_MATCHES are a list of strings. The test will check that at least one
# of provided strings matches the output of the build
# * To list errors in the PARSE source, it must be on a line prepended with:
# "// build error:". Example:
#
# // x.cpp:
# // build error: custom error was triggered
# static_assert(false, "custom error was triggered")
#
# If multimple "// build error: lines" are present, at least one of them
# needs to match for a successful test.
#
# Example:
# icm_add_build_failure_test(
# NAME mylib-bf-foo-func-first-arg-trivial
# LIBRARIES mylib
# SOURCES
# test-helper.cpp
# PARSE bf-foo-func-first-arg-trivial.cpp
# LABELS bf mylib
# )
function(icm_add_build_failure_test)
cmake_parse_arguments(ARG "" "NAME;TARGET;FOLDER" "SOURCES;LIBRARIES;ERROR_MATCHES;LABELS" ${ARGN})
if(DEFINED ARG_UNPARSED_ARGUMENTS)
message(NOTICE "icm_add_build_failure_test called with unknown arguments")
endif()
# check sources for a file to parse
cmake_parse_arguments(ARG "" "PARSE" "" ${ARG_SOURCES})
set(ARG_SOURCES "${ARG_UNPARSED_ARGUMENTS}")
if(NOT DEFINED ARG_TARGET)
set(ARG_TARGET "${ARG_NAME}-test")
endif()
# add an executable
# an object library will be sufficient for compilation errors,
# but an executable will help with linker errors as well
add_executable(${ARG_TARGET} ${ARG_SOURCES})
set_target_properties(${ARG_TARGET} PROPERTIES
EXCLUDE_FROM_ALL TRUE
EXCLUDE_FROM_DEFAULT_BUILD TRUE
)
if(DEFINED ARG_LIBRARIES)
target_link_libraries(${ARG_TARGET} PRIVATE ${ARG_LIBRARIES})
endif()
if(DEFINED ARG_FOLDER)
set_target_properties(${ARG_TARGET} PROPERTIES FOLDER ${ARG_FOLDER})
endif()
if(DEFINED ARG_PARSE)
# we find error matches from a parsed file
# also add the parsed source to the executable's sources
target_sources(${ARG_TARGET} PRIVATE "${ARG_PARSE}")
# this var is used in the configured file bellow
get_filename_component(parsedSourcePath "${ARG_PARSE}" ABSOLUTE)
# configure in binary dir based on target name
# it's safe as no two targets can have the same name anyway
# TODO: when minimal supported version of CMake is 3.18, embed the
# helper script [=[here]=] and use file(CONFIGURE)
configure_file(
"${ICM_BUILD_FAILURE_TEST_SCRIPT_DIR}/icm_build_failure_parse_and_run.cmake"
"${CMAKE_BINARY_DIR}/${ARG_TARGET}.cmake"
@ONLY
)
add_test(
NAME ${ARG_NAME}
# provide the config as a command line arg here
# we cannot configure the file with a generator expression
COMMAND ${CMAKE_COMMAND} -DCFG=$ -P ${ARG_TARGET}.cmake
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
else()
# we look for error matches in arguments
add_test(
NAME ${ARG_NAME}
COMMAND ${CMAKE_COMMAND} --build . --target ${ARG_TARGET} --config $
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
if(DEFINED ARG_ERROR_MATCHES)
# matches are provided for all test runs
set_tests_properties(${ARG_NAME} PROPERTIES
PASS_REGULAR_EXPRESSION "${ARG_ERROR_MATCHES}")
else()
# no matches are provided so just expect the build to fail
set_tests_properties(${ARG_NAME} PROPERTIES
WILL_FAIL TRUE)
endif()
endif()
if(NOT DEFINED ARG_LABELS)
# if labels are not provided, still add "build-failure"
set(ARG_LABELS "build-failure")
endif()
set_tests_properties(${ARG_NAME} PROPERTIES LABELS "${ARG_LABELS}")
endfunction()
# icm_add_multiple_build_failure_tests
#
# Add a multiple build failure tests to a project via multiple calls to
# icm_add_build_failure_test
#
# Args:
# * SOURCES sources - List of sources to add. Each source will lead to a new
# test being added
# * PREFIX prefix - Optional. Prefix string to add to each test name
#
# * LIBRARIES, LABELS, FOLDER, ERROR_MATCHES
# forwarded to icm_add_build_failure_test
#
# Notes:
# If ERROR_MATCHES is not present, each source is forwarded as PARSE
#
function(icm_add_multiple_build_failure_tests)
cmake_parse_arguments(ARG "" "PREFIX;FOLDER" "SOURCES;LIBRARIES;ERROR_MATCHES;LABELS" ${ARGN})
if(DEFINED ARG_UNPARSED_ARGUMENTS)
message(NOTICE "icm_add_multiple_build_failure_tests called with unknown arguments")
endif()
foreach(sourceFile ${ARG_SOURCES})
# replace spaces and path separators with '-'
string(REGEX REPLACE "[// ]" "-" testName "${sourceFile}")
# strip extenstion for target name
get_filename_component(testName ${testName} NAME_WLE)
if(NOT DEFINED ARG_ERROR_MATCHES)
set(sourceFile "PARSE;${sourceFile}")
endif()
if(DEFINED ARG_PREFIX)
set(testName ${ARG_PREFIX}-${testName})
endif()
# add test and forward args
icm_add_build_failure_test(
NAME ${testName}
SOURCES "${sourceFile}"
LIBRARIES ${ARG_LIBRARIES}
LABELS ${ARG_LABELS}
ERROR_MATCHES "${ARG_ERROR_MATCHES}"
FOLDER ${ARG_FOLDER}
)
endforeach()
endfunction()
# icm_glob_build_failure_tests
#
# add multiple sources to icm_add_multiple_build_failure_tests via a
# file(GLOB pattern)
#
# Args:
# * PATTERN pat - GLOB pattern to use
# The rest of the argument are forwarded verbatim to
# icm_add_multiple_build_failure_tests
function(icm_glob_build_failure_tests)
cmake_parse_arguments(ARG "" "PATTERN" "" ${ARGN})
file(GLOB srcs
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
LIST_DIRECTORIES OFF
${ARG_PATTERN}
)
icm_add_multiple_build_failure_tests(
SOURCES ${srcs}
${ARG_UNPARSED_ARGUMENTS}
)
endfunction()
lager-0.1.1/codecov.yml 0000664 0000000 0000000 00000000036 14512757614 0014763 0 ustar 00root root 0000000 0000000 ignore:
- tools
- example
lager-0.1.1/default.nix 0000664 0000000 0000000 00000001566 14512757614 0014773 0 ustar 00root root 0000000 0000000 with import {};
let
deps = import ./nix/deps.nix {};
in
stdenv.mkDerivation rec {
name = "lager-git";
version = "git";
src = builtins.filterSource (path: type:
baseNameOf path != ".git" &&
baseNameOf path != "build" &&
baseNameOf path != "_build" &&
baseNameOf path != "reports" &&
baseNameOf path != "tools")
./.;
buildInputs = [
ncurses
SDL2
SDL2_ttf
];
nativeBuildInputs = [
cmake
gcc7
sass
pkgconfig
];
cmakeFlags = [
"-Dlager_BUILD_TESTS=OFF"
"-Dlager_BUILD_EXAMPLES=OFF"
];
propagatedBuildInputs = [
boost
deps.cereal
deps.immer
deps.zug
];
meta = {
homepage = "https://github.com/arximboldi/lager";
description = "library for functional interactive c++ programs";
license = lib.licenses.mit;
};
}
lager-0.1.1/doc/ 0000775 0000000 0000000 00000000000 14512757614 0013364 5 ustar 00root root 0000000 0000000 lager-0.1.1/doc/CMakeLists.txt 0000664 0000000 0000000 00000000774 14512757614 0016134 0 ustar 00root root 0000000 0000000
# Targets
# =======
add_custom_target(doxygen
COMMAND doxygen doxygen.config
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
add_custom_target(docs
COMMAND make html
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
add_dependencies(docs doxygen)
set(lager_ssh_method
ssh -p 5488
-o StrictHostKeyChecking=no)
add_custom_target(upload-docs
COMMAND
rsync -av -e \"${lager_ssh_method}\"
${CMAKE_CURRENT_SOURCE_DIR}/_build/html/*
raskolnikov@sinusoid.es:public/lager/)
lager-0.1.1/doc/Makefile 0000664 0000000 0000000 00000016716 14512757614 0015037 0 ustar 00root root 0000000 0000000 # Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help
help:
@echo "Please use \`make ' where is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " applehelp to make an Apple Help Book"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " epub3 to make an epub3"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " coverage to run coverage check of the documentation (if enabled)"
@echo " dummy to check syntax errors of document sources"
.PHONY: clean
clean:
rm -rf $(BUILDDIR)/*
.PHONY: html
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
bash sphinx-html-hack.bash
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
.PHONY: dirhtml
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
.PHONY: singlehtml
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
.PHONY: pickle
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
.PHONY: json
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
.PHONY: htmlhelp
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
.PHONY: qthelp
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/lager.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/lager.qhc"
.PHONY: applehelp
applehelp:
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
@echo
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
@echo "N.B. You won't be able to view it unless you put it in" \
"~/Library/Documentation/Help or install it in your application" \
"bundle."
.PHONY: devhelp
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/lager"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/lager"
@echo "# devhelp"
.PHONY: epub
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
.PHONY: epub3
epub3:
$(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3
@echo
@echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
.PHONY: latex
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
.PHONY: latexpdf
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: latexpdfja
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: text
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
.PHONY: man
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
.PHONY: texinfo
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
.PHONY: info
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
.PHONY: gettext
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
.PHONY: changes
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
.PHONY: linkcheck
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
.PHONY: doctest
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
.PHONY: coverage
coverage:
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
@echo "Testing of coverage in the sources finished, look at the " \
"results in $(BUILDDIR)/coverage/python.txt."
.PHONY: xml
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
.PHONY: pseudoxml
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
.PHONY: dummy
dummy:
$(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy
@echo
@echo "Build finished. Dummy builder generates no files."
lager-0.1.1/doc/_static/ 0000775 0000000 0000000 00000000000 14512757614 0015012 5 ustar 00root root 0000000 0000000 lager-0.1.1/doc/_static/architecture.svg 0000664 0000000 0000000 00000063400 14512757614 0020220 0 ustar 00root root 0000000 0000000
lager-0.1.1/doc/_static/composition.dia 0000664 0000000 0000000 00000003561 14512757614 0020041 0 ustar 00root root 0000000 0000000 ]mo6_!_Ynma6t@%6WZH:a}ԋ_ْ,h=wyG>悰n`.f6p> hm;B&
$7)٘Aj4_Ʊ I_ˮ")96!Z㻁K6a0H[e|F7Yd04IzBz}n|NxyQ:b&rȉZ (\8~]8ȪRD_z]3qTwL泹5O]]^_7b\rDdcbop{#\):X RSH/]r<5RM|CHrhTV"Gq$#qǥj`'xfZnHE3HZe͆M^lױk""OPlT#9 4M!n$)'5+xE=,9*
W䩮^*d r23M?rS#m2MLtt )sv=̏qc|H!Wi8 _|{NIR@)Libm{