From af45b72f9edff371227f7ce0ca263c99875c29b3 Mon Sep 17 00:00:00 2001 From: Paul Hollinsky Date: Tue, 20 Nov 2018 17:14:59 -0500 Subject: [PATCH] Add Sphinx documentation --- CMakeLists.txt | 35 +++- cmake/FindSphinx.cmake | 14 ++ {api/icsneocpp => docs}/Doxyfile.template | 6 +- docs/conf.py.template | 174 ++++++++++++++++++ docs/icsneoc.rst | 44 +++++ docs/icsneocpp.rst | 31 ++++ docs/index.rst | 9 + .../icsneo/communication/message/neomessage.h | 2 +- 8 files changed, 309 insertions(+), 6 deletions(-) create mode 100644 cmake/FindSphinx.cmake rename {api/icsneocpp => docs}/Doxyfile.template (99%) create mode 100644 docs/conf.py.template create mode 100644 docs/icsneoc.rst create mode 100644 docs/icsneocpp.rst create mode 100644 docs/index.rst diff --git a/CMakeLists.txt b/CMakeLists.txt index 13b3e9c..d0b81d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,8 @@ set(CMAKE_CXX_STANDARD 11) include(GNUInstallDirs) +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + # macOS Homebrew Boost Fix if(NOT MSVC) include_directories(AFTER /usr/local/include) @@ -36,10 +38,11 @@ endif(WIN32) # doxygen find_package(Doxygen) -if (DOXYGEN_FOUND) +if(DOXYGEN_FOUND) set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/generated/Doxyfile) + set(ICSNEO_DOCS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/docs) - configure_file(api/icsneocpp/Doxyfile.template ${DOXYGEN_OUT} @ONLY) + configure_file(${ICSNEO_DOCS_DIR}/Doxyfile.template ${DOXYGEN_OUT} @ONLY) message("Doxygen build started") add_custom_target(libicsneo_doxygen ALL @@ -48,6 +51,34 @@ if (DOXYGEN_FOUND) COMMENT "Generating API documentation with Doxygen" VERBATIM DEPENDS icsneocpp icsneoc icsneolegacy) + + # sphinx + find_package(Sphinx) + if(SPHINX_EXECUTABLE) + # configured documentation tools and intermediate build results + set(SPHINX_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/_build) + + # Sphinx cache with pickled ReST documents + set(SPHINX_CACHE_DIR ${CMAKE_CURRENT_BINARY_DIR}/_doctrees) + + # HTML output directory + set(SPHINX_HTML_DIR ${CMAKE_CURRENT_BINARY_DIR}/doc_sphinx) + + configure_file( + "${ICSNEO_DOCS_DIR}/conf.py.template" + "${SPHINX_BUILD_DIR}/conf.py" + @ONLY) + + add_custom_target(libicsneo_sphinx ALL + ${SPHINX_EXECUTABLE} + -q -b html + -c "${SPHINX_BUILD_DIR}" + -d "${SPHINX_CACHE_DIR}" + "${ICSNEO_DOCS_DIR}" + "${SPHINX_HTML_DIR}" + COMMENT "Building HTML documentation with Sphinx" + DEPENDS icsneocpp icsneoc icsneolegacy libicsneo_doxygen) + endif() endif() if(WIN32) diff --git a/cmake/FindSphinx.cmake b/cmake/FindSphinx.cmake new file mode 100644 index 0000000..4f35b21 --- /dev/null +++ b/cmake/FindSphinx.cmake @@ -0,0 +1,14 @@ +find_program(SPHINX_EXECUTABLE NAMES sphinx-build + HINTS + $ENV{SPHINX_DIR} + PATH_SUFFIXES bin + DOC "Sphinx documentation generator" +) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(Sphinx DEFAULT_MSG + SPHINX_EXECUTABLE +) + +mark_as_advanced(SPHINX_EXECUTABLE) \ No newline at end of file diff --git a/api/icsneocpp/Doxyfile.template b/docs/Doxyfile.template similarity index 99% rename from api/icsneocpp/Doxyfile.template rename to docs/Doxyfile.template index 3af9f7b..4e7fc55 100644 --- a/api/icsneocpp/Doxyfile.template +++ b/docs/Doxyfile.template @@ -1936,7 +1936,7 @@ MAN_LINKS = NO # captures the structure of the code including all documentation. # The default value is: NO. -GENERATE_XML = NO +GENERATE_XML = YES # The XML_OUTPUT tag is used to specify where the XML pages will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -2049,7 +2049,7 @@ ENABLE_PREPROCESSING = YES # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -MACRO_EXPANSION = NO +MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then # the macro expansion is limited to the macros specified with the PREDEFINED and @@ -2089,7 +2089,7 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = +PREDEFINED = DLLExport= # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The diff --git a/docs/conf.py.template b/docs/conf.py.template new file mode 100644 index 0000000..a3d09ba --- /dev/null +++ b/docs/conf.py.template @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# libicsneo documentation build configuration file, created by +# sphinx-quickstart on Tue Nov 20 14:25:27 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ['sphinx.ext.imgmath', 'sphinx.ext.todo', 'breathe' ] + +breathe_projects = { "libicsneo": "@CMAKE_CURRENT_BINARY_DIR@/doc_doxygen/xml/" } +breathe_default_project = "libicsneo" + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'libicsneo' +copyright = '2018, Intrepid Control Systems, Inc' +author = 'Intrepid Control Systems, Inc.' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@' +# The full version, including alpha/beta/rc tags. +release = '@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@ @BUILD_METADATA@' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['@SPHINX_HTML_DIR@/_static'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# This is required for the alabaster theme +# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars +html_sidebars = { + '**': [ + 'relations.html', # needs 'show_related': True theme option to display + 'searchbox.html', + ] +} + + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'libicsneodoc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'libicsneo.tex', 'libicsneo Documentation', + 'Intrepid Control Systems, Inc.', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'libicsneo', 'libicsneo Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'libicsneo', 'libicsneo Documentation', + author, 'libicsneo', 'One line description of project.', + 'Miscellaneous'), +] + + + diff --git a/docs/icsneoc.rst b/docs/icsneoc.rst new file mode 100644 index 0000000..43eb282 --- /dev/null +++ b/docs/icsneoc.rst @@ -0,0 +1,44 @@ +******************** +**C API** (icsneoc) +******************** + +.. Usage +.. ====== + +.. Finding Devices +.. ~~~~~~~~~~~~~~~~ +.. Finding a device is simple + +.. Connecting to Devices +.. ~~~~~~~~~~~~~~~~~~~~~~ + +Reference +========== + +Typedefs +~~~~~~~~~ +.. doxygentypedef:: devicehandle_t +.. doxygentypedef:: neodevice_handle_t +.. doxygentypedef:: devicetype_t + +Structures +~~~~~~~~~~~ +.. doxygenstruct:: neoversion_t + :members: + :undoc-members: + +.. doxygenstruct:: neodevice_t + :members: + :undoc-members: + +.. doxygenstruct:: neomessage_t + :members: + :undoc-members: + +.. doxygenstruct:: neomessage_can_t + :members: + :undoc-members: + +Functions +~~~~~~~~~~ +.. doxygenfile:: icsneoc.h diff --git a/docs/icsneocpp.rst b/docs/icsneocpp.rst new file mode 100644 index 0000000..9eb52cf --- /dev/null +++ b/docs/icsneocpp.rst @@ -0,0 +1,31 @@ +************************ +**C++ API** (icsneocpp) +************************ + +.. Usage +.. ====== + +.. Finding Devices +.. ~~~~~~~~~~~~~~~~ +.. Finding a device is simple + +.. Connecting to Devices +.. ~~~~~~~~~~~~~~~~~~~~~~ + +Reference +========== + +.. Classes +.. ~~~~~~~~ + +.. Structures +.. ~~~~~~~~~~~ + +.. Functions +.. ~~~~~~~~~~ + +.. doxygennamespace:: icsneo + +.. doxygenclass:: icsneo::Device + :members: + :undoc-members: diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..6cf095b --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,9 @@ +Welcome to libicsneo's documentation! +======================================= + +.. toctree:: + :maxdepth: 3 + :caption: Documentation + + icsneocpp + icsneoc diff --git a/include/icsneo/communication/message/neomessage.h b/include/icsneo/communication/message/neomessage.h index 79f2a28..582bea4 100644 --- a/include/icsneo/communication/message/neomessage.h +++ b/include/icsneo/communication/message/neomessage.h @@ -120,7 +120,7 @@ typedef struct { uint16_t netid; uint8_t type; uint8_t dlcOnWire; - char reserved[16]; + uint8_t reserved[16]; } neomessage_can_t; #pragma pack(pop)