Update doc & use gitbook to enhance doc generation
authorRomain Forlot <romain.forlot@iot.bzh>
Tue, 4 Jul 2017 17:00:40 +0000 (19:00 +0200)
committerRomain Forlot <romain.forlot@iot.bzh>
Tue, 4 Jul 2017 17:00:40 +0000 (19:00 +0200)
Change-Id: If42c916f7664ea67b818a21b8f50c66c41e11f89
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
25 files changed:
.gitignore
LICENSE [new file with mode: 0644]
README.md
book.json [new file with mode: 0644]
docs/0-Doc-Revisions.md [new file with mode: 0644]
docs/README.md [new file with mode: 0644]
docs/SUMMARY.md [new file with mode: 0644]
docs/_layouts/ebook/page.html [new file with mode: 0644]
docs/_layouts/ebook/pdf_footer.html [new file with mode: 0644]
docs/_layouts/ebook/pdf_header.html [new file with mode: 0644]
docs/_layouts/ebook/summary.html [new file with mode: 0644]
docs/_layouts/layout.html [new file with mode: 0644]
docs/cover.jpg [new file with mode: 0644]
docs/cover_small.jpg [new file with mode: 0644]
docs/dev_guide/0_Abstract.md [new file with mode: 0644]
docs/dev_guide/1_Quickstart.md [new file with mode: 0644]
docs/dev_guide/2_project_architecture.md [new file with mode: 0644]
docs/dev_guide/3_advanced_usage.md [new file with mode: 0644]
docs/dev_guide/4_advanced_customization.md [new file with mode: 0644]
docs/dev_guide/5_autobuild.md [new file with mode: 0644]
docs/dev_guide/pictures/iotbzh_logo_small.png [new file with mode: 0644]
docs/resources/cover.svg [new file with mode: 0644]
docs/resources/ebook.css [new file with mode: 0644]
docs/resources/make_cover.sh [new file with mode: 0755]
gendocs.sh [new file with mode: 0755]

index 8164213..507c195 100644 (file)
@@ -9,3 +9,4 @@ nbproject
 .vscode
 *.tar.gz
 .*.sw*
+_book
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..93b07d3
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2017 claneys
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
index 6dce651..94aa6be 100644 (file)
--- a/README.md
+++ b/README.md
@@ -18,7 +18,78 @@ You'll find usage samples here:
 - [audio-binding](https://github.com/iotbzh/audio-binding)
 - [unicens2-binding](https://github.com/iotbzh/unicens2-binding)
 
-## Typical project architecture
+## Quickstart
+
+### Initialization
+
+To use these templates files on your project just install the reference files using
+**git submodule** then use `config.cmake` file to configure your project specificities :
+
+```bash
+git submodule add https://gerrit.automotivelinux.org/gerrit/apps/app-templatesconf.d/app-templates conf.d/app-templates
+mkdir conf.d/cmake
+cp conf.d/app-templates/cmake/config.cmake.sample conf.d/cmake/config.cmake
+```
+
+Edit the copied config.cmake file to fit your needs.
+
+Now, create your top CMakeLists.txt file which include `config.cmake` file.
+
+An example is available in **app-templates** submodule that you can copy and
+use:
+
+```bash
+cp conf.d/app-templates/cmake/CMakeLists.txt CMakeLists.txt
+```
+
+### Create your CMake targets
+
+For each target part of your project, you need to use ***PROJECT_TARGET_ADD***
+to include this target to your project.
+
+Using it, make available the cmake variable ***TARGET_NAME*** until the next
+***PROJECT_TARGET_ADD*** is invoked with a new target name. 
+
+So, typical usage defining a target is:
+
+```cmake
+PROJECT_TARGET_ADD(SuperExampleName) --> Adding target to your project
+
+add_executable/add_library(${TARGET_NAME}.... --> defining your target sources
+
+SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES.... --> fit target properties
+for macros usage
+
+INSTALL(TARGETS ${TARGET_NAME}....
+```
+
+### Targets PROPERTIES
+
+You should set properties on your targets that will be used to package your
+apps in a widget file that could be installed on an AGL system.
+
+Specify what is the type of your targets that you want to be included in the
+widget package with the property **LABELS**:
+
+Choose between:
+
+- **BINDING**: Shared library that be loaded by the AGL Application Framework
+- **HTDOCS**: Root directory of a web app
+- **DATA**: Resources used by your application
+- **EXECUTABLE**: Entry point of your application executed by the AGL
+ Application Framework
+
+```cmake
+SET_TARGET_PROPERTIES(${TARGET_NAME}
+       PREFIX "afb-"
+       LABELS "BINDING"
+       OUTPUT_NAME "file_output_name")
+```
+
+> **TIP** you should use the prefix _afb-_ with your **BINDING* targets which
+> stand for **Application Framework Binding**.
+
+## More details: Typical project architecture
 
 A typical project architecture would be :
 
@@ -86,21 +157,6 @@ A typical project architecture would be :
 | \<libs\> | \<root-path\> | External dependencies libraries. This isn't to be used to include header file but build and link statically specifics libraries. | Library sources files. Can be a decompressed library archive file or project fork. |
 | \<target\> | \<root-path\> | A target to build, typically library, executable, etc. |
 
-## Usage
-
-### Initialization
-
-To use these templates files on your project just install the reference files using
-**git submodule** then use `config.cmake` file to configure your project specificities :
-
-```bash
-git submodule add https://gerrit.automotivelinux.org/gerrit/apps/app-templatesconf.d/app-templates conf.d/app-templates
-mkdir conf.d/cmake
-cp conf.d/app-templates/cmake/config.cmake.sample conf.d/cmake/config.cmake
-```
-
-Edit the copied config.cmake file to fit your needs.
-
 ### Update app-templates submodule
 
 You may have some news bug fixes or features available from app-templates
@@ -127,29 +183,6 @@ cd ../..
 git commit -s conf.d/app-templates
 ```
 
-### Create  CMake targets
-
-For each target part of your project, you need to use ***PROJECT_TARGET_ADD***
-to include this target to your project.
-
-Using it, make available the cmake variable ***TARGET_NAME*** until the next
-***PROJECT_TARGET_ADD*** is invoked with a new target name. 
-
-So, typical usage defining a target is:
-
-```cmake
-PROJECT_TARGET_ADD(SuperExampleName) --> Adding target to your project
-
-add_executable/add_library(${TARGET_NAME}.... --> defining your target sources
-
-SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES.... --> fit target properties
-for macros usage
-
-INSTALL(TARGETS ${TARGET_NAME}....
-
-populate_widget() --> add target to widget tree depending upon target properties
-```
-
 ### Build a widget
 
 #### config.xml.in file
@@ -179,6 +212,14 @@ target type.
 As the type is not always specified for some custom targets, like an ***HTML5***
 application, macros make the difference using ***LABELS*** property.
 
+Choose between:
+
+- **BINDING**: Shared library that be loaded by the AGL Application Framework
+- **HTDOCS**: Root directory of a web app
+- **DATA**: Resources used by your application
+- **EXECUTABLE**: Entry point of your application executed by the AGL
+ Application Framework
+
 Example:
 
 ```cmake
@@ -235,6 +276,44 @@ anything:
 project_subdirs_add("[0-9]-*")
 ```
 
+## Advanced customization
+
+### Including additionnals cmake files
+
+Advanced tuning is possible using addionnals cmake files that are included
+automatically from some specifics locations. They are included in that order:
+
+- Project CMake files normaly located in _<project-root-path>/conf.d/app-templates/cmake/cmake.d_
+- Home CMake files located in _$HOME/.config/app-templates/cmake.d_
+- System CMake files located in _/etc/app-templates/cmake.d_
+
+CMake files has to be named using the following convention: `XX-***.cmake`,
+where `XX` are numbers, `***` file name (ie. `99-my_customs.cmake`).
+
+So, saying that you should be aware that every normal cmake variables used at
+project level could be overwrited by home or system located cmake files if
+variables got the same name. Exceptions are cached variables set using
+**CACHE** keyword:
+
+Example:
+
+```cmake
+set(VARIABLE_NAME 'value string random' CACHE STRING 'docstring')
+```
+
+### Include customs templated scripts
+
+As well as for additionnals cmake files you can include your own templated
+scripts that will be passed to cmake command `configure_file`.
+
+Just create your own script to the following directories:
+
+- Home location in _$HOME/.config/app-templates/scripts_
+- System location in _/etc/app-templates/scripts_
+
+Scripts only needs to use the extension `.in` to be parsed and configured by
+CMake command.
+
 ## Autobuild script usage
 
 ### Generation
@@ -275,4 +354,4 @@ Usage example:
 
 ```bash
 ./conf.d/autobuild/wgt/autobuild package DEST=/tmp
-```
\ No newline at end of file
+```
diff --git a/book.json b/book.json
new file mode 100644 (file)
index 0000000..dafc6ae
--- /dev/null
+++ b/book.json
@@ -0,0 +1,94 @@
+{
+    "title": "CMake Application templates",
+    "subtitle": "Developer Documentation",
+    "description": "CMake templates used to build an AGL apps and widget",
+    "keywords": "AGL, Development, Iotbzh",
+    "author": "IoT.Bzh Team",
+    "website": "http://iot.bzh",
+    "published": "July 2017",
+    "version": "1.0",
+
+    "gitbook": "3.2.2",
+    "root": "docs",
+    "pdf": {
+        "fontFamily": "Verdana",
+        "fontSize": 12,
+        "paperSize": "a4",
+        "pageBreaksBefore": "//h:div[@class=\"page-break\"]"
+    },
+    "styles": {
+        "website": "resources/ebook.css",
+        "ebook": "resources/ebook.css",
+        "pdf": "resources/ebook.css"
+    },
+
+    "hidepageheaders": [2, 3],
+    "hidepagefooters": [2, 3],
+
+    "plugins": [
+        "regexplace"
+    ],
+    "pluginsConfig": {
+        "regexplace": {
+            "removeFirstPartsInSectionNumber": true,
+            "substitutes": [{
+                    "pattern": "<!-- pagebreak -->",
+                    "flags": "g",
+                    "substitute": "<div class=\"page-break\"></div>"
+                },
+                {
+                    "pattern": "<!-- clear -->",
+                    "flags": "g",
+                    "substitute": "<div class=\"clear\"></div>"
+                },
+                {
+                    "pattern": "<!-- nopagebreak -->",
+                    "flags": "g",
+                    "substitute": "<div class=\"nopb\">"
+                },
+                {
+                    "pattern": "<!-- endnopagebreak -->",
+                    "flags": "g",
+                    "substitute": "</div>"
+                },
+                {
+                    "pattern": "<!-- note -->",
+                    "flags": "g",
+                    "substitute": "<div class=\"note\">"
+                },
+                {
+                    "pattern": "<!-- endnote -->",
+                    "flags": "g",
+                    "substitute": "</div>"
+                },
+                {
+                    "pattern": "!\\[(.*?)\\]\\((.*?)(?:\\s+\"(.*)\")?\\){0,}{caption=1([^\\}]*)}",
+                    "flags": "gmi",
+                    "substitute": "<figure id=\"fig_PAGE_LEVEL_._INDEX_\"><img $3 alt=\"$1\" title=\"$1\" href=\"$2\"><figcaption></figcaption></figure>",
+                    "decode": true
+                },
+                {
+                    "pattern": "<img ([^>]*) {0,}\/{0,}> {0,}{caption=1([^\\}]*)}",
+                    "flags": "g",
+                    "substitute": "<figure id=\"fig_PAGE_LEVEL_._INDEX_\"><img $2 $1><figcaption></figcaption></figure>",
+                    "decode": true
+                },
+                {
+                    "pattern": "<img (.*)alt=\"([^\"]*)\"(.*) {0,1}\/{0,1}><figcaption></figcaption>",
+                    "flags": "g",
+                    "substitute": "<img$1alt=\"$2\"$3><figcaption><span>Picture _PAGE_LEVEL_._INDEX_</span>: $2</figcaption>",
+                    "store": {
+                        "substitute": "<a href=\"_PAGE_PATH_#fig_PAGE_LEVEL_._INDEX_\">Pic. _PAGE_LEVEL_._INDEX_</a> <span>$2</span>",
+                        "variable_name": "pictures"
+                    }
+                },
+                {
+                    "pattern": "<img ([^>]*)> {0,}{style {1,}([^}]*)}",
+                    "flags": "g",
+                    "substitute": "<img $1 style=\"$2\">",
+                    "decode": true
+                }
+            ]
+        }
+    }
+}
diff --git a/docs/0-Doc-Revisions.md b/docs/0-Doc-Revisions.md
new file mode 100644 (file)
index 0000000..38b6e74
--- /dev/null
@@ -0,0 +1,6 @@
+Document revisions
+==================
+
+| Date        | Version | Designation                          | Author                  |
+|-------------|---------|--------------------------------------|-------------------------|
+| 4 Jul 2017  |   1.0   | Initial release                      | R. Forlot   [ Iot.bzh ] |
diff --git a/docs/README.md b/docs/README.md
new file mode 100644 (file)
index 0000000..39f9209
--- /dev/null
@@ -0,0 +1,22 @@
+# Introduction
+
+This document explain how to use the CMake templates files and associated
+files to ease developement of AGL application.
+
+<br>
+<br>
+<br>
+<br>
+<br>
+
+| *Meta* | *Data* |
+| -- | -- |
+| **Title** | {{ config.title }} |
+| **Author** | {{ config.author }} |
+| **Description** | {{ config.description }} |
+| **Keywords** | {{ config.keywords }} |
+| **Language** | English |
+| **Published** | Published {{ config.published }} as an electronic book |
+| **Updated** | {{ gitbook.time }} |
+| **Collection** | Open-source |
+| **Website** | [{{ config.website }}]({{ config.website }}) |
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
new file mode 100644 (file)
index 0000000..f475678
--- /dev/null
@@ -0,0 +1,10 @@
+# Summary
+
+* [Document revisions](0-Doc-Revisions.md)
+
+* [Developper guide](dev_guide/0_Abstract.md)
+  * [Quickstart](dev_guide/1_Quickstart.md)
+  * [Project architecture](dev_guide/2_project_architecture.md)
+  * [Advanced usage](dev_guide/3_advanced_usage.md)
+  * [Customization](dev_guide/4_advanced_customization.md)
+  * [Autobuild](dev_guide/5_autobuild.md)
diff --git a/docs/_layouts/ebook/page.html b/docs/_layouts/ebook/page.html
new file mode 100644 (file)
index 0000000..bf325e9
--- /dev/null
@@ -0,0 +1,36 @@
+{% extends "layout.html" %}
+
+{% block title %}{{ page.title }}{% endblock %}
+{% block description %}{{ page.description }}{% endblock %}
+
+{% block style %}
+    {### Include theme css before plugins css ###}
+    {% if not fileExists(config.styles.print) %}
+        {% if options.format %}
+        <link rel="stylesheet" href="{{ (options.format + ".css")|resolveAsset }}">
+        {% else %}
+        <link rel="stylesheet" href="{{ "ebook.css"|resolveAsset }}">
+        {% endif %}
+    {% endif %}
+
+    {{ super() }}
+
+    {### Custom stylesheets for the book ###}
+
+    {% for type, style in config.styles %}
+        {% if fileExists(style) and (type == "ebook" or type == "print" or type == options.format) %}
+        <link rel="stylesheet" href="{{ style|resolveFile }}">
+        {% endif %}
+    {% endfor %}
+{% endblock %}
+
+{% block body %}
+<div class="page">
+    {% block page %}
+        <h1 class="book-chapter book-chapter-{{ page.depth }}">{{ page.title }}</h1>
+        <div class="section">
+            {{ page.content|safe }}
+        </div>
+    {% endblock %}
+</div>
+{% endblock %}
diff --git a/docs/_layouts/ebook/pdf_footer.html b/docs/_layouts/ebook/pdf_footer.html
new file mode 100644 (file)
index 0000000..679e562
--- /dev/null
@@ -0,0 +1,13 @@
+{% extends "./page.html" %}
+{% block body %}
+<div id="pdf-footer" class="pdf-footer">
+    <span class="footer-left">Version {{ config.version }}</span>
+    <span class="footer-right">{{ page.num }}</span>
+    <span class="footer-center">{{ config.published }}</span>
+</div>
+
+<!-- Allow to hide footer for some pages using hidepagefooters config in book.json -->
+<script>
+    if (({% for num in config.hidepagefooters %}{{ page.num }} == {{ num }} || {% endfor %}false)) document.getElementById('pdf-footer').style.display = 'none'
+</script>
+{% endblock %}
diff --git a/docs/_layouts/ebook/pdf_header.html b/docs/_layouts/ebook/pdf_header.html
new file mode 100644 (file)
index 0000000..ef49641
--- /dev/null
@@ -0,0 +1,13 @@
+{% extends "./page.html" %}
+{% block body %}
+<div id="pdf-header" class="pdf-header">
+    <span class="header-left">IoT.Bzh</span>
+    <span class="header-right">{{ config.title }}</span>
+</div>
+
+<!-- Allow to hide header for some pages using hidepageheaders config in book.json -->
+<script>
+    if (({% for num in config.hidepageheaders %}{{ page.num }} == {{ num }} || {% endfor %}false)) document.getElementById('pdf-header').style.display = 'none'
+</script>
+
+{% endblock %}
\ No newline at end of file
diff --git a/docs/_layouts/ebook/summary.html b/docs/_layouts/ebook/summary.html
new file mode 100644 (file)
index 0000000..be328a4
--- /dev/null
@@ -0,0 +1,58 @@
+{% extends "./page.html" %}
+
+{% block title %}{{ "SUMMARY"|t }}{% endblock %}
+
+{% macro articles(_articles) %}
+    {% for article in _articles %}
+        <li>
+            <span class="inner">
+                {% if article.path or article.url %}
+                    {% if article.path %}
+                        <a href="{{ article.path|contentURL }}{{ article.anchor }}">{{ article.title }}</a>
+                    {% else %}
+                        <a target="_blank" href="{{ article.url }}">{{ article.title }}</a>
+                    {% endif %}
+                {% else %}
+                    <span>{{ article.title }}</span>
+                {% endif %}
+                {% if 1 %}
+                <span class="page">{{ article.level }}</span>
+                {% endif %}
+            </span>
+            {% if article.articles.length > 0 %}
+            <ol>
+                {{ articles(article.articles) }}
+            </ol>
+            {% endif %}
+        </li>
+    {% endfor %}
+{% endmacro %}
+
+{% block page %}
+<div class="section toc">
+    <h1>{{ "SUMMARY"|t }}</h1>
+    <ol>
+        {% for part in summary.parts %}
+            {% if part.title %}
+            <li class="part-title">
+                <h2>{{ part.title }}</h2>
+            </li>
+            {% endif %}
+            {{ articles(part.articles) }}
+
+            {% if not loop.last %}
+            <li class="divider"></li>
+            {% endif %}
+        {% endfor %}
+
+        {% if glossary.path %}
+        <li>
+            <span class="inner">
+                <a href="{{ ('/' + glossary.path)|contentURL }}">{{ "GLOSSARY"|t }}</a>
+            </span>
+        </li>
+        {% endif %}
+    </ol>
+</div>
+{% endblock %}
+
diff --git a/docs/_layouts/layout.html b/docs/_layouts/layout.html
new file mode 100644 (file)
index 0000000..3d5aca6
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML>
+<html lang="{{ config.language }}" {% if page.dir == "rtl" %}dir="rtl"{% endif %}>
+    <head>
+        <meta charset="UTF-8">
+        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
+        <title>{% block title %}{{ config.title|d("GitBook", true) }}{% endblock %}</title>
+        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+        <meta name="description" content="{% block description %}{% endblock %}">
+        <meta name="generator" content="GitBook {{ gitbook.version }}">
+        {% if config.author %}<meta name="author" content="{{ config.author }}">{% endif %}
+        {% if config.isbn %}<meta name="identifier" content="{{ config.isbn }}" scheme="ISBN">{% endif %}
+        {% block style %}
+            {% for resource in plugins.resources.css %}
+                {% if resource.url %}
+                <link rel="stylesheet" href="{{ resource.url }}">
+                {% else %}
+                <link rel="stylesheet" href="{{ resource.path|resolveAsset }}">
+                {% endif %}
+            {% endfor %}
+        {% endblock %}
+
+        {% block head %}{% endblock %}
+    </head>
+    <body>
+        {% block body %}{% endblock %}
+        {% block javascript %}{% endblock %}
+    </body>
+</html>
diff --git a/docs/cover.jpg b/docs/cover.jpg
new file mode 100644 (file)
index 0000000..4e04b0c
Binary files /dev/null and b/docs/cover.jpg differ
diff --git a/docs/cover_small.jpg b/docs/cover_small.jpg
new file mode 100644 (file)
index 0000000..315816b
Binary files /dev/null and b/docs/cover_small.jpg differ
diff --git a/docs/dev_guide/0_Abstract.md b/docs/dev_guide/0_Abstract.md
new file mode 100644 (file)
index 0000000..a04cc87
--- /dev/null
@@ -0,0 +1,21 @@
+# Developper Guide: use AGL CMake Templates
+
+## Abstract
+
+Files used to build an application, or binding, project with the
+AGL Application Framework.
+
+To build your AGL project using these templates, you have to install
+them within your project and adjust compilation option in `config.cmake`.
+For technical reasons, you also have to specify **cmake** target in
+sub CMakeLists.txt installed. Make a globbing search to find source files
+isn't recommended now to handle project build especially in a multiuser
+project because CMake will not be aware of new or removed source files.
+
+You'll find usage samples here:
+
+- [helloworld-service](https://github.com/iotbzh/helloworld-service)
+- [low-level-can-service](https://gerrit.automotivelinux.org/gerrit/apps/low-level-can-service)
+- [high-level-viwi-service](https://github.com/iotbzh/high-level-viwi-service)
+- [audio-binding](https://github.com/iotbzh/audio-binding)
+- [unicens2-binding](https://github.com/iotbzh/unicens2-binding)
diff --git a/docs/dev_guide/1_Quickstart.md b/docs/dev_guide/1_Quickstart.md
new file mode 100644 (file)
index 0000000..fe11970
--- /dev/null
@@ -0,0 +1,71 @@
+
+# Quickstart
+
+## Initialization
+
+To use these templates files on your project just install the reference files using
+**git submodule** then use `config.cmake` file to configure your project specificities :
+
+```bash
+git submodule add https://gerrit.automotivelinux.org/gerrit/apps/app-templatesconf.d/app-templates conf.d/app-templates
+mkdir conf.d/cmake
+cp conf.d/app-templates/cmake/config.cmake.sample conf.d/cmake/config.cmake
+```
+
+Edit the copied config.cmake file to fit your needs.
+
+Now, create your top CMakeLists.txt file which include `config.cmake` file.
+
+An example is available in **app-templates** submodule that you can copy and
+use:
+
+```bash
+cp conf.d/app-templates/cmake/CMakeLists.txt CMakeLists.txt
+```
+
+## Create your CMake targets
+
+For each target part of your project, you need to use ***PROJECT_TARGET_ADD***
+to include this target to your project.
+
+Using it, make available the cmake variable ***TARGET_NAME*** until the next
+***PROJECT_TARGET_ADD*** is invoked with a new target name. 
+
+So, typical usage defining a target is:
+
+```cmake
+PROJECT_TARGET_ADD(SuperExampleName) --> Adding target to your project
+
+add_executable/add_library(${TARGET_NAME}.... --> defining your target sources
+
+SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES.... --> fit target properties
+for macros usage
+
+INSTALL(TARGETS ${TARGET_NAME}....
+```
+
+## Targets PROPERTIES
+
+You should set properties on your targets that will be used to package your
+apps in a widget file that could be installed on an AGL system.
+
+Specify what is the type of your targets that you want to be included in the
+widget package with the property **LABELS**:
+
+Choose between:
+
+- **BINDING**: Shared library that be loaded by the AGL Application Framework
+- **HTDOCS**: Root directory of a web app
+- **DATA**: Resources used by your application
+- **EXECUTABLE**: Entry point of your application executed by the AGL
+ Application Framework
+
+```cmake
+SET_TARGET_PROPERTIES(${TARGET_NAME}
+       PREFIX "afb-"
+       LABELS "BINDING"
+       OUTPUT_NAME "file_output_name")
+```
+
+> **TIP** you should use the prefix _afb-_ with your **BINDING* targets which
+> stand for **Application Framework Binding**.
diff --git a/docs/dev_guide/2_project_architecture.md b/docs/dev_guide/2_project_architecture.md
new file mode 100644 (file)
index 0000000..0cae607
--- /dev/null
@@ -0,0 +1,98 @@
+# Project architecture
+
+A typical project architecture would be :
+
+```tree
+<project-root-path>
+│
+├── conf.d/
+│   â”œâ”€â”€ autobuild/
+│   â”‚   â”œâ”€â”€ agl
+│   â”‚   â”‚   â””── autobuild
+│   â”‚   â”œâ”€â”€ linux
+│   â”‚   â”‚   â””── autobuild
+│   â”‚   â””── windows
+│   â”‚       â””── autobuild
+│   â”œâ”€â”€ app-templates/
+│   â”‚   â”œâ”€â”€ README.md
+│   â”‚   â”œâ”€â”€ autobuild/
+│   â”‚   â”‚   â”œâ”€â”€ agl
+│   â”‚   â”‚   â”‚   â””── autobuild.in
+│   â”‚   â”‚   â”œâ”€â”€ linux
+│   â”‚   â”‚   â”‚   â””── autobuild.in
+│   â”‚   â”‚   â””── windows
+│   â”‚   â”‚       â””── autobuild.in
+│   â”‚   â”œâ”€â”€ cmake/
+│   â”‚   â”‚   â”œâ”€â”€ config.cmake.sample
+│   â”‚   â”‚   â”œâ”€â”€ export.map
+│   â”‚   â”‚   â””── macros.cmake
+│   â”‚   â”œâ”€â”€ deb/
+│   â”‚   â”‚   â””── config.deb.in
+│   â”‚   â”œâ”€â”€ rpm/
+│   â”‚   â”‚   â””── config.spec.in
+│   â”‚   â””── wgt/
+│   â”‚       â”œâ”€â”€ config.xml.in
+│   â”‚       â”œâ”€â”€ config.xml.in.sample
+│   â”‚       â”œâ”€â”€ icon-default.png
+│   â”‚       â”œâ”€â”€ icon-html5.png
+│   â”‚       â”œâ”€â”€ icon-native.png
+│   â”‚       â”œâ”€â”€ icon-qml.png
+│   â”‚       â””── icon-service.png
+│   â”œâ”€â”€ packaging/
+│   â”‚   â”œâ”€â”€ config.spec
+│   â”‚   â””── config.deb
+│   â”œâ”€â”€ cmake
+│   â”‚   â””── config.cmake
+│   â””── wgt
+│      â””── config.xml.in
+├── <libs>
+├── <target>
+│   â””── <files>
+├── <target>
+│   â””── <file>
+└── <target>
+    â””── <files>
+```
+
+| # | Parent | Description |
+| - | -------| ----------- |
+| \<root-path\> | - | Path to your project. Hold master CMakeLists.txt and general files of your projects. |
+| conf.d | \<root-path\> | Holds needed files to build, install, debug, package an AGL app project |
+| app-templates | conf.d | Git submodule to app-templates AGL repository which provides CMake helpers macros library, and build scripts. config.cmake is a copy of config.cmake.sample configured for the projects. SHOULD NOT BE MODIFIED MANUALLY !|
+| autobuild | conf.d | Scripts generated from app-templates to build packages the same way for differents platforms.|
+| cmake | conf.d | Contains at least config.cmake file modified from the sample provided in app-templates submodule. |
+| wgt | conf.d | Contains at least config.xml.in template file modified from the sample provided in app-templates submodule for the needs of project (See config.xml.in.sample file for more details). |
+| packaging | conf.d | Contains output files used to build packages. |
+| \<libs\> | \<root-path\> | External dependencies libraries. This isn't to be used to include header file but build and link statically specifics libraries. | Library sources files. Can be a decompressed library archive file or project fork. |
+| \<target\> | \<root-path\> | A target to build, typically library, executable, etc. |
+
+## Manage app-templates submodule
+
+### Update
+
+You may have some news bug fixes or features available from app-templates
+repository that you want. To update your submodule proceed like the following:
+
+```bash
+git submodule update --remote
+git commit -s conf.d/app-templates
+```
+
+This will update the submodule to the HEAD of master branch repository. Save
+the modification by commiting it in your master git project.
+
+### Checkout submodule to a git tag
+
+You could just want to update at a specified repository tag or branch or commit
+, here are the method to do so:
+
+```bash
+cd conf.d/app-templates
+# Choose one of the following depending what you want
+git checkout <tag_name>
+git checkout --detach <branch_name>
+git checkout --detach <commit_id>
+# Then commit
+cd ../..
+git commit -s conf.d/app-templates
+```
diff --git a/docs/dev_guide/3_advanced_usage.md b/docs/dev_guide/3_advanced_usage.md
new file mode 100644 (file)
index 0000000..8994b41
--- /dev/null
@@ -0,0 +1,92 @@
+# Build a widget
+
+## config.xml.in file
+
+To build a widget you need a _config.xml_ file describing what is your apps and
+how Application Framework would launch it. This repo provide a simple default
+file _config.xml.in_ that should work for simple application without
+interactions with others bindings.
+
+It is recommanded that you use the sample one which is more complete. You can
+find it at the same location under the name _config.xml.in.sample_ (stunning
+isn't it). Just copy the sample file to your _conf.d/wgt_ directory and name it
+_config.xml.in_, then edit it to fit your needs.
+
+> ***CAUTION*** : The default file is only meant to be use for a
+> simple widget app, more complicated ones which needed to export
+> their api, or ship several app in one widget need to use the provided
+> _config.xml.in.sample_ which had all new Application Framework
+> features explained and examples.
+
+## Using cmake template macros
+
+To leverage all cmake templates features, you have to specify ***properties***
+on your targets. Some macros will not works without specifying which is the
+target type.
+
+As the type is not always specified for some custom targets, like an ***HTML5***
+application, macros make the difference using ***LABELS*** property.
+
+Choose between:
+
+- **BINDING**: Shared library that be loaded by the AGL Application Framework
+- **HTDOCS**: Root directory of a web app
+- **DATA**: Resources used by your application
+- **EXECUTABLE**: Entry point of your application executed by the AGL
+ Application Framework
+
+Example:
+
+```cmake
+SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
+               LABELS "HTDOCS"
+               OUTPUT_NAME dist.prod
+       )
+```
+
+If your target output is not named as the ***TARGET_NAME***, you need to specify
+***OUTPUT_NAME*** property that will be used by the ***populate_widget*** macro.
+
+Use the ***populate_widget*** macro as latest statement of your target
+definition. Then at the end of your project definition you should use the macro
+***build_widget*** that make an archive from the populated widget tree using the
+`wgtpkg-pack` Application Framework tools.
+
+## Macro reference
+
+### PROJECT_TARGET_ADD
+
+Typical usage would be to add the target to your project using macro
+`PROJECT_TARGET_ADD` with the name of your target as parameter.
+
+Example:
+
+```cmake
+PROJECT_TARGET_ADD(low-can-demo)
+```
+
+> ***NOTE***: This will make available the variable `${TARGET_NAME}`
+> set with the specificied name. This variable will change at the next call
+> to this macros.
+
+### project_subdirs_add
+
+This macro will search in all subfolder any `CMakeLists.txt` file. If found then
+it will be added to your project. This could be use in an hybrid application by
+example where the binding lay in a sub directory.
+
+Usage :
+
+```cmake
+project_subdirs_add()
+```
+
+You also can specify a globbing pattern as argument to filter which folders
+will be looked for.
+
+To filter all directories that begin with a number followed by a dash the
+anything:
+
+```cmake
+project_subdirs_add("[0-9]-*")
+```
diff --git a/docs/dev_guide/4_advanced_customization.md b/docs/dev_guide/4_advanced_customization.md
new file mode 100644 (file)
index 0000000..796232f
--- /dev/null
@@ -0,0 +1,37 @@
+# Advanced customization
+
+## Including additionnals cmake files
+
+Advanced tuning is possible using addionnals cmake files that are included
+automatically from some specifics locations. They are included in that order:
+
+- Project CMake files normaly located in _<project-root-path>/conf.d/app-templates/cmake/cmake.d_
+- Home CMake files located in _$HOME/.config/app-templates/cmake.d_
+- System CMake files located in _/etc/app-templates/cmake.d_
+
+CMake files has to be named using the following convention: `XX-***.cmake`,
+where `XX` are numbers, `***` file name (ie. `99-my_customs.cmake`).
+
+So, saying that you should be aware that every normal cmake variables used at
+project level could be overwrited by home or system located cmake files if
+variables got the same name. Exceptions are cached variables set using
+**CACHE** keyword:
+
+Example:
+
+```cmake
+set(VARIABLE_NAME 'value string random' CACHE STRING 'docstring')
+```
+
+## Include customs templated scripts
+
+As well as for additionnals cmake files you can include your own templated
+scripts that will be passed to cmake command `configure_file`.
+
+Just create your own script to the following directories:
+
+- Home location in _$HOME/.config/app-templates/scripts_
+- System location in _/etc/app-templates/scripts_
+
+Scripts only needs to use the extension `.in` to be parsed and configured by
+CMake command.
diff --git a/docs/dev_guide/5_autobuild.md b/docs/dev_guide/5_autobuild.md
new file mode 100644 (file)
index 0000000..fe1c63d
--- /dev/null
@@ -0,0 +1,41 @@
+# Autobuild script usage
+
+## Generation
+
+To be integrated in the Yocto build workflow you have to generate `autobuild`
+scripts using _autobuild_ target.
+
+To generate those scripts proceeds:
+
+```bash
+mkdir -p build
+cd build
+cmake .. && make autobuild
+```
+
+You should see _conf.d/autobuild/agl/autobuild_ file now.
+
+## Available targets
+
+Here are the available targets available from _autobuild_ scripts:
+
+- **clean** : clean build directory from object file and targets results.
+- **distclean** : delete build directory
+- **configure** : generate project Makefile from CMakeLists.txt files.
+- **build** : compile all project targets.
+- **package** : build and output a wgt package.
+
+You can specify variables that modify the behavior of compilation using
+the following variables:
+
+- **CONFIGURE_ARGS** : Variable used at **configure** time.
+- **BUILD_ARGS** : Variable used at **build** time.
+- **DEST** : Directory where to output ***wgt*** file.
+
+Variable as to be in CMake format. (ie: BUILD_ARGS="-DC_FLAGS='-g -O2'")
+
+Usage example:
+
+```bash
+./conf.d/autobuild/wgt/autobuild package DEST=/tmp
+```
diff --git a/docs/dev_guide/pictures/iotbzh_logo_small.png b/docs/dev_guide/pictures/iotbzh_logo_small.png
new file mode 100644 (file)
index 0000000..6a98c60
Binary files /dev/null and b/docs/dev_guide/pictures/iotbzh_logo_small.png differ
diff --git a/docs/resources/cover.svg b/docs/resources/cover.svg
new file mode 100644 (file)
index 0000000..6726de7
--- /dev/null
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="1800"
+   height="2360"
+   viewBox="0 0 1800 2360"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="cover.svg">
+  <defs
+     id="defs4175">
+    <filter
+       style="color-interpolation-filters:sRGB"
+       inkscape:label="Drop Shadow"
+       id="filter4000">
+      <feFlood
+         result="flood"
+         flood-color="rgb(0,0,0)"
+         flood-opacity="0.475"
+         id="feFlood4002" />
+      <feComposite
+         result="composite1"
+         operator="in"
+         in="flood"
+         in2="SourceGraphic"
+         id="feComposite4004" />
+      <feGaussianBlur
+         result="blur"
+         stdDeviation="5"
+         id="feGaussianBlur4006" />
+      <feOffset
+         result="offset"
+         dy="8"
+         dx="8"
+         id="feOffset4008" />
+      <feComposite
+         result="composite2"
+         operator="over"
+         in="SourceGraphic"
+         in2="offset"
+         id="feComposite4010" />
+    </filter>
+    <filter
+       style="color-interpolation-filters:sRGB"
+       id="filter4000-6"
+       inkscape:label="Drop Shadow">
+      <feFlood
+         id="feFlood4002-4"
+         flood-opacity="0.475"
+         flood-color="rgb(0,0,0)"
+         result="flood" />
+      <feComposite
+         id="feComposite4004-6"
+         in2="SourceGraphic"
+         in="flood"
+         operator="in"
+         result="composite1" />
+      <feGaussianBlur
+         id="feGaussianBlur4006-2"
+         stdDeviation="5"
+         result="blur" />
+      <feOffset
+         id="feOffset4008-8"
+         dx="8"
+         dy="8"
+         result="offset" />
+      <feComposite
+         id="feComposite4010-9"
+         in2="offset"
+         in="SourceGraphic"
+         operator="over"
+         result="composite2" />
+    </filter>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.24748737"
+     inkscape:cx="928.3577"
+     inkscape:cy="404.58117"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:snap-text-baseline="false"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1171"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     showguides="false" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,1307.6379)">
+    <g
+       id="iotbzh-logo"
+       transform="matrix(2.3917866,0,0,2.3917866,216.6324,-1946.4393)"
+       inkscape:export-filename="/home/sdx/Pictures/Logo/logo_iot_bzh_100dpi.png"
+       inkscape:export-xdpi="100.22011"
+       inkscape:export-ydpi="100.22011"
+       style="display:inline;filter:url(#filter4000-6)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text3557-5-3-7-0-7-3"
+         y="519.50671"
+         x="27.886671"
+         style="font-style:normal;font-weight:normal;font-size:97.09867096px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:97.09867096px;line-height:125%;font-family:FreeEuro;-inkscape-font-specification:'FreeEuro Bold';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="519.50671"
+           x="27.886671"
+           id="tspan3559-5-4-1-5-0-6"
+           sodipodi:role="line">IOT</tspan></text>
+      <path
+         inkscape:connector-curvature="0"
+         d="m 286.73007,473.23356 c 28.21686,16.29102 28.75566,58.73779 0.99693,78.53831 -7.67688,5.47598 -8.77935,4.91028 -1.99529,-1.0238 17.47377,-15.28453 17.98492,-42.17775 1.08522,-57.09786 l -3.91266,-3.45435 0.72312,-3.71053 c 0.39771,-2.04076 0.5997,-5.73115 0.44885,-8.20083 -0.33876,-5.54623 0.15803,-6.49185 2.65383,-5.05094 z m -64.76568,11.40332 c 7.06047,-7.74198 18.64659,-14.16089 29.04027,-16.08874 l 6.87489,-1.27521 0.87404,2.89709 c 0.4807,1.59343 0.67439,5.2245 0.43037,8.06906 l -0.44364,5.17195 -6.13887,1.6918 c -10.91241,3.00731 -20.4022,10.85909 -25.4533,21.05979 l -2.41633,4.87984 -2.74281,-0.41238 c -5.14252,-0.77316 -12.72985,-3.97645 -12.79123,-5.40033 -0.092,-2.13451 8.34659,-15.74625 12.76661,-20.59287 z m 33.20546,36.39493 c -28.21687,16.29101 -65.24624,-4.46574 -68.51461,-38.40577 -0.9039,-9.38637 0.13723,-10.0583 1.88428,-1.21608 4.49989,22.77499 27.53453,36.66428 48.90556,29.48876 l 4.94788,-1.66128 2.85184,2.48149 c 1.56852,1.36481 4.66349,3.38493 6.87772,4.48914 4.97257,2.47973 5.54308,3.38282 3.04733,4.82374 z m 22.50729,-61.79039 c 3.17451,9.98553 2.94038,23.22889 -0.58688,33.19399 l -2.33309,6.59143 -2.94597,-0.69161 c -1.6203,-0.38041 -4.86173,-2.02821 -7.2032,-3.6618 l -4.25721,-2.97018 1.60429,-6.16234 c 2.85178,-10.95404 0.79685,-23.09833 -5.51167,-32.57307 l -3.01788,-4.53253 1.72854,-2.16916 c 3.24083,-4.06698 9.80863,-9.03614 11.07242,-8.37738 1.89457,0.98756 9.46336,15.1015 11.45065,21.35265 z m -48.80223,10.31437 c 0,-32.58201 36.49058,-54.27201 67.51771,-40.1325 8.58077,3.9104 8.6421,5.148 0.11108,2.23988 -21.97368,-7.49048 -45.51946,5.51348 -49.99082,27.6091 l -1.03521,5.11561 -3.57498,1.22902 c -1.96621,0.67596 -5.26316,2.34622 -7.32655,3.71171 -4.63379,3.06649 -5.70115,3.10904 -5.70115,0.22718 z m 42.25842,50.3871 c -10.23499,-2.24356 -21.58699,-9.06801 -28.45341,-17.10525 l -4.5418,-5.31622 2.07194,-2.20549 c 1.13957,-1.21302 4.18733,-3.19628 6.77282,-4.40726 l 4.70085,-2.20176 4.53458,4.47053 c 8.06061,7.94674 19.60535,12.23927 30.96496,11.51329 l 5.43422,-0.34731 1.01427,2.58154 c 1.90169,4.84014 2.92124,13.01261 1.71883,13.77769 -1.80254,1.14695 -17.80995,0.64475 -24.21726,-0.75976 z"
+         style="display:inline;fill:#5a2ca0"
+         id="path3415-4-2-2-5-0-3-7-4-4-1-5" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text3557-5-3-7-46-7-3-7"
+         y="519.50671"
+         x="317.95816"
+         style="font-style:normal;font-weight:normal;font-size:97.09867096px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:97.09867096px;line-height:125%;font-family:FreeEuro;-inkscape-font-specification:'FreeEuro Bold';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="519.50671"
+           x="317.95816"
+           id="tspan3559-5-4-1-90-0-2-9"
+           sodipodi:role="line">BZH</tspan></text>
+    </g>
+    <flowRoot
+       xml:space="preserve"
+       id="root-title"
+       transform="matrix(2.3469382,0,0,2.3469382,464.13874,-1200)"><flowRegion
+         id="flowRegion4303"><rect
+           id="rect4305"
+           width="679.99994"
+           height="141.42853"
+           x="-154.28572"
+           y="400"/>
+        </flowRegion>
+        <flowPara
+         id="title"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:87.5px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1">{title}</flowPara></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="root-subtitle"
+       transform="matrix(1.8523279,0,0,1.8523279,553.97647,-380)"><flowRegion
+         id="flowRegion4303-6"><rect
+           id="rect4305-0"
+           width="852.32806"
+           height="154.51677"
+           x="-239.3591"
+           y="290"/>
+        </flowRegion>
+        <flowPara
+         id="subtitle"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:62.5px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1">{subtitle}</flowPara>
+    </flowRoot>
+    <flowRoot
+       id="root-version"
+       xml:space="preserve"
+       transform="translate(-2.0185547,164)"><flowRegion
+         id="flowRegion4169"><rect
+           y="501.68909"
+           x="343.32947"
+           height="99.591171"
+           width="1117.3768"
+           id="rect4171" /></flowRegion><flowPara
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:50px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1"
+         id="version">{version}</flowPara></flowRoot>    <flowRoot
+       transform="translate(-2.0185547,238)"
+       xml:space="preserve"
+       id="root-date"><flowRegion
+         id="flowRegion4170"><rect
+           id="rect4172"
+           width="1117.3768"
+           height="99.591171"
+           x="343.32947"
+           y="501.68909" /></flowRegion><flowPara
+         id="date"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:50px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1">{date}</flowPara></flowRoot>  </g>
+</svg>
diff --git a/docs/resources/ebook.css b/docs/resources/ebook.css
new file mode 100644 (file)
index 0000000..39f126c
--- /dev/null
@@ -0,0 +1,386 @@
+/* IoT.Bzh theaming */
+
+h1 {
+    color: #330066;
+    border-bottom: 2px solid #330066;
+}
+
+h2 {
+    color: #330066;
+}
+
+h3 {
+    color: #330066;
+}
+
+h4 {
+    color: #330066;
+}
+
+
+/* GENERAL ELEMENTS */
+
+/* clear both */
+
+.clear {
+    clear: both;
+}
+
+.section> :last-child {
+    margin-bottom: 0 !important;
+}
+
+.section> :first-child {
+    margin-top: 0 !important;
+}
+
+
+/* SPECIAL ELEMENTS */
+
+
+/* page break always after element on pdf/print definition */
+
+div.pagebreak {
+    page-break-after: always;
+}
+
+
+/* no page break inside element on pdf/print definition */
+
+div.nopb {
+    page-break-inside: avoid !important;
+    margin: 4px 0 4px 0;
+}
+
+
+/* note blocks */
+
+div.note {
+    background: #FCF8E3 none repeat scroll 0% 0%;
+    color: #8A6D3B;
+    padding: 15px;
+    margin-bottom: 10px;
+    border-bottom: 5px solid #DDD;
+    border-color: #FAEBCC;
+    page-break-inside: avoid;
+}
+
+div.note p {
+    padding-bottom: 0;
+    margin-bottom: 0;
+}
+
+
+/* images, figures and captions */
+
+p img {
+    /* center all images */
+    display: block;
+    margin: 0 auto;
+    padding: 10px 0;
+}
+
+figure {
+    margin: 1.0em 0px;
+    padding: 10px 0;
+    text-align: center;
+    page-break-inside: avoid;
+    display: block;
+}
+
+figure img {
+    display: block;
+    margin: 0 auto;
+}
+
+figcaption {
+    clear: left;
+    margin: 1.0em 0 0 0;
+    text-align: center;
+    font-style: italic;
+    line-height: 1.5em;
+    font-size: 80%;
+    color: #666;
+    display: block;
+}
+
+.page .section p img {
+    margin-top: 10px;
+}
+
+
+/* ul, ol list margin fix */
+
+.page .section ol,
+.page .section ul {
+    margin-bottom: 10px;
+}
+
+
+/* blockquotes */
+
+.page .section blockquote {
+    margin: 0 0 0 5%;
+    font-style: italic;
+}
+
+
+/* PAGE SPECIFIC */
+
+
+/* set summary page to right side of the paper */
+
+.page .toc h1 {
+    page-break-before: right;
+}
+
+.page .section.toc {
+    page-break-inside: always;
+}
+
+/* table headers */
+
+div#README\.md table {
+    margin-top: 30px;
+    font-size: 95%;
+}
+
+div#README\.md table thead {
+    display: none;
+}
+
+
+
+/* CITATION AND IMAGES */
+
+
+/* math image styles */
+
+.page .section p img.svg,
+.page .section p img.png {
+    margin-top: 0px;
+    margin-bottom: -2px;
+}
+
+.page .section p img.math {
+    vertical-align: middle;
+    height: auto;
+    width: auto;
+    margin-top: -4px;
+    max-height: 15px;
+}
+
+.page .section p img.math.line1 {
+    margin-top: -7px;
+    max-height: 19px;
+}
+
+.page .section p img.math.line2 {
+    margin-top: -1px;
+    max-height: 30px;
+}
+
+
+/* credits page */
+
+.page .section ul.pictures {
+    margin-left: -30px;
+}
+
+.page .section ul.pictures li {
+    list-style: outside none none;
+}
+
+.page .section ul.pictures li a {
+    float: left;
+}
+
+.page .section ul.pictures li span {
+    display: block;
+    margin-left: 100px;
+}
+
+
+
+/* sub and super script */
+
+.page .section sub {
+    font-size: 80%;
+    margin-left: 1px;
+}
+
+
+/* citations and references */
+
+.page .section sup {
+    margin-left: -1px;
+    margin-right: 2px;
+    font-size: 80%;
+}
+
+.page .section sup:before {
+    content: " ";
+}
+
+.page .section ul.citations,
+.page .section ul.references {
+    margin-left: -30px;
+}
+
+
+.page .section ul.citations li:nth-child(1) {
+    margin-top: 20px;
+    padding-top: 20px;
+    border-top: 1px solid #BBB;
+}
+
+.page .section ul.citations li,
+.page .section ul.references li {
+    list-style: outside none none;
+}
+
+.page .section ul.citations li {
+    font-size: 80%;
+}
+
+.page .section ul.citations li>span:nth-child(1),
+.page .section ul.references li>span:nth-child(1) {
+    display: block;
+    float: left;
+    text-align: left;
+    width: 70px
+}
+
+.page .section ul.citations li>span:nth-child(1) {
+    width: 50px
+}
+
+.page .section ul.references li div {
+    margin-left: 70px;
+}
+
+.page .section ul.citations li div {
+    margin-left: 50px;
+}
+
+.page .section a[href="#"],
+.page .section a[href="#"]:link,
+.page .section a[href="#"]:visited,
+.page .section a[href="#"]:hover,
+.page .section a[href="#"]:focus {
+    text-decoration: none;
+    color: inherit;
+    cursor: text;
+    font-style: italic;
+}
+
+
+/* self referential footnotes */
+
+.page .section div[type="selfref"] a[href="#"],
+.page .section div[type="selfref"] a[href="#"]:link,
+.page .section div[type="selfref"] a[href="#"]:visited,
+.page .section div[type="selfref"] a[href="#"]:hover,
+.page .section div[type="selfref"] a[href="#"]:focus {
+    font-style: normal;
+}
+
+.page .section div[type="selfref"] span:nth-child(1) {
+    display: none;
+}
+
+
+/* page break always after element on pdf/print definition */
+
+div.page-break {
+    page-break-inside: always;
+}
+
+div.page-break:before {
+    content: ' ';
+}
+
+
+/* no page break inside element on pdf/print definition */
+
+div.nopb {
+    page-break-inside: avoid;
+}
+
+/* justify text */
+p {
+    text-align: justify;
+}
+
+/* page header and footer */
+
+.pdf-footer,
+.pdf-header {
+    margin-top: 20px;
+    color: #aaa;
+}
+
+.pdf-header .header-left {
+    float: left;
+    margin-left: 2em;
+    margin-right: auto;
+}
+
+.pdf-header .header-right {
+    display: table;
+    margin-left: auto;
+    margin-right: 2em;
+}
+
+.pdf-footer .sub {
+    padding-top: 8px;
+    font-size: 70%;
+}
+
+.pdf-header .sub {
+    padding-top: 2px;
+    font-size: 70%;
+}
+
+.pdf-footer {
+    padding-top: 10px;
+    border-top: 1px solid #eee;
+}
+
+.pdf-footer .footer-left {
+    float: left;
+    margin-left: 2em;
+    margin-right: auto;
+}
+
+.pdf-footer .footer-center {
+    display: table;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+.pdf-footer .footer-right {
+    float: right;
+    margin-left: auto;
+    margin-right: 2em;
+}
+
+.pdf-header {
+    padding-bottom: 10px;
+    border-bottom: 1px solid #eee;
+}
+
+.pdf-header .header-pages-count {
+    float: right;
+    text-align: right;
+}
+
+.pdf-header .header-pages-count a,
+.pdf-header .header-pages-count a:visited,
+.pdf-header .header-pages-count a:active,
+.pdf-header .header-pages-count a:focus,
+.pdf-header .header-pages-count a:link {
+    text-decoration: none;
+    color: #aaa;
+    cursor: text;
+}
diff --git a/docs/resources/make_cover.sh b/docs/resources/make_cover.sh
new file mode 100755 (executable)
index 0000000..1026ecb
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/bash
+DOCS_DIR=$(cd $(dirname $0)/.. && pwd)
+BOOKFILE=$DOCS_DIR/../book.json
+
+TITLE=$(grep  '"title":' $BOOKFILE | cut -d'"' -f 4)
+SUBTITLE=$(grep  '"subtitle":' $BOOKFILE | cut -d'"' -f 4)
+VERSION="Version $(grep  '"version":' $BOOKFILE | cut -d'"' -f 4)"
+DATE=$(grep  '"published":' $BOOKFILE | cut -d'"' -f 4)
+
+[ -z "$TITLE" ] && { echo "Error TITLE not set!" ; exit 1; }
+[ -z "$VERSION" ] && { echo "Error VERSION not set!" ; exit 1; }
+[ -z "$DATE" ] && { echo "Error DATE not set!" ; exit 1; }
+
+
+cat $(dirname $0)/cover.svg | sed -e "s/{title}/$TITLE/g" \
+    -e "s/font-size:87.5px/font-size:54px/g" \
+    -e "s/{subtitle}/$SUBTITLE/g" \
+    -e "s/font-size:62.5px/font-size:40px/g" \
+    -e "s/{version}/$VERSION/g" \
+    -e "s/{date}/$DATE/g" \
+    > /tmp/cover.svg
+
+# use  imagemagick convert tool  (cover size must be 1800x2360)
+convert -resize "1600x2160!" -border 100 -bordercolor white -background white \
+    -flatten -quality 100 /tmp/cover.svg $DOCS_DIR/cover.jpg
+
+convert -resize "200x262!" $DOCS_DIR/cover.jpg $DOCS_DIR/cover_small.jpg
diff --git a/gendocs.sh b/gendocs.sh
new file mode 100755 (executable)
index 0000000..ea9400a
--- /dev/null
@@ -0,0 +1,79 @@
+#!/bin/bash
+
+OUTFILENAME="Gitbook-Iotbzh-template"
+
+SCRIPT=$(basename $BASH_SOURCE)
+
+function usage() {
+       cat <<EOF >&2
+Usage: $SCRIPT [options] [pdf|serve|doxygen]
+
+Options:
+   --debug
+      enable debug when generating pdf or html documentation
+   -d|--dry
+      dry run
+   -h|--help
+      get this help
+
+Example:
+       $SCRIPT pdf
+
+EOF
+       exit 1
+}
+
+function info() {
+       echo "$@" >&2
+}
+
+#default values
+DEBUG_FLAG=""
+DRY=""
+DO_ACTION=""
+OUT_DIR=./build
+
+[[ $? != 0 ]] && usage
+while [ $# -gt 0 ]; do
+       case "$1" in
+               --debug) DEBUG_FLAG="--log=debug --debug";;
+               -d|--dry) DRY=echo;;
+               -h|--help) usage;;
+        pdf | serve | doxygen) DO_ACTION=$1;;
+               --) break;;
+       esac
+    shift
+done
+
+cd $(dirname $0)
+ROOTDIR=`pwd -P`
+
+# Create out dir if needed
+[ -d $OUT_DIR ] || mkdir -p $OUT_DIR
+
+if [ "$DO_ACTION" = "pdf" -o "$DO_ACTION" = "serve" ]; then
+    GITBOOK=`which gitbook`
+    [ "$?" = "1" ] && { echo "You must install gitbook first, using: sudo npm install -g gitbook-cli"; exit 1; }
+
+    EBCONV=`which ebook-convert`
+    [ "$?" = "1" ] && { echo "You must install calibre first, using: 'sudo apt install calibre' or refer to https://calibre-ebook.com/download"; exit 1; }
+
+    if [ "$DO_ACTION" = "pdf" ]; then
+
+        # Update cover when book.json has been changed
+        [[ $ROOTDIR/book.json -nt $ROOTDIR/docs/cover.jpg ]] && { echo "Update cover files"; $ROOTDIR/docs/resources/make_cover.sh || exit 1; }
+
+           OUTFILE=$OUT_DIR/$OUTFILENAME.pdf
+        $DRY $GITBOOK pdf $ROOTDIR $OUTFILE $DEBUG_FLAG
+        [ "$?" = "0" ] && echo "PDF has been successfully generated in $OUTFILE"
+    else
+        $DRY $GITBOOK serve $DEBUG_FLAG
+    fi
+
+elif [ "$DO_ACTION" = "doxygen" ]; then
+    $DRY cd $OUT_DIR && cmake .. && make doxygen $ROOTDIR/Doxyfile
+
+else
+    echo "Unknown action !"
+    usage
+fi