Use variable to handle autobuild target directory
[apps/app-templates.git] / README.md
index d4dc1ef..b28b90a 100644 (file)
--- a/README.md
+++ b/README.md
@@ -11,12 +11,13 @@ 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 simple usage example for different kind of target under the `examples` folder.
-More advanced usage can be saw with the [CAN_signaling binding](https://github.com/iotbzh/CAN_signaling)
-which mix external libraries, binding, and html5 hybrid demo application.
+You'll find simple usage example for different kind of target under the
+`examples` folder. More advanced usage can be saw with the
+[low-level-can-service](https://gerrit.automotivelinux.org/gerrit/apps/low-level-can-service)
+which mix external libraries, binding.
 
 Typical project architecture
------------------------------
+---------------------------------
 
 A typical project architecture would be :
 
@@ -24,7 +25,15 @@ A typical project architecture would be :
 <project-root-path>
 │
 ├── conf.d/
-│   ├── default/
+│   ├── app-templates/
+│   │   ├── README.md
+│   │   ├── autobuild/
+│   │   │   ├── agl
+│   │   │   │   └── autobuild.sh
+│   │   │   ├── linux
+│   │   │   │   └── autobuild.sh
+│   │   │   └── windows
+│   │   │       └── autobuild.bat
 │   │   ├── cmake/
 │   │   │   ├── config.cmake.sample
 │   │   │   ├── export.map
@@ -35,21 +44,19 @@ A typical project architecture would be :
 │   │   │   └── config.spec.in
 │   │   └── wgt/
 │   │       ├── config.xml.in
-│   │       └── icon.png
+│   │       ├── config.xml.in.sample
+│   │       ├── icon-default.png
+│   │       ├── icon-html5.png
+│   │       ├── icon-native.png
+│   │       ├── icon-qml.png
+│   │       └── icon-service.png
 │   ├── packaging/
-│   │   ├── config.xml
 │   │   ├── config.spec
-│   │   ├── icon.png
 │   │   └── config.deb
-│   ├── autobuild/
-│   │   ├── agl
-│   │   │   └── autobuild.sh
-│   │   ├── linux
-│   │   │   └── autobuild.sh
-│   │   └── windows
-│   │       └── autobuild.bat
-│   ├── README.md
-│   └── config.cmake
+│   ├── cmake
+│   │   └── config.cmake
+│   └── wgt
+│      └── config.xml.in
 ├── <libs>
 ├── <target>
 ├── <target>
@@ -60,7 +67,7 @@ A typical project architecture would be :
 | - | -------| ----------- |
 | \<root-path\> | - | Path to your project. Hold master CMakeLists.txt and general files of your projects. |
 | conf.d | \<root-path\> | 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. |
-| default | conf.d | Holds examples files and cmake macros used to build packages |
+| app-templates | conf.d | Holds examples files and cmake macros used to build packages |
 | packaging | conf.d | Contains output files used to build packages. |
 | autobuild | conf.d | Scripts used to build packages the same way for differents platforms. |
 | \<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. |
@@ -69,32 +76,26 @@ A typical project architecture would be :
 Usage
 ------
 
-Install the reference files to the root path of your project, then once
-installed, customize your project with file `\<root-path\>/etc/config.cmake`.
-
-Typically, to copy files use a command like:
+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
-cp -r reference/etc reference/packaging <root-path-to-your-project>
-cp reference/AGLbuild <root-path-to-your-project>
+git submodule add https://gerrit.automotivelinux.org/gerrit/apps/app-templatesconf.d/app-templates
 ```
 
 Specify manually your targets, you should look at samples provided in this
-repository to make yours. Then when you are ready to build, using `AGLbuild`
+repository to make yours. Then when you are ready to build, using `autobuild`
 that will wrap CMake build command:
 
 ```bash
-./build.sh package
+./conf.d/app-templates/autobuild/agl/autobuild.mk package
 ```
 
-AGLbuild is not mandatory to build your project by will be used by `bitbake`
-tool when building application from a Yocto workflow that use this entry point
-to get its widget file.
-
 Or with the classic way :
 
 ```bash
-mkdir -p build && cd build
+mkdir -p build
+cd build
 cmake .. && make
 ```
 
@@ -114,20 +115,38 @@ 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
+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 using provided macros
+### Build a widget
+
+#### config.xml.in file
+
+To build a widget you need to configure file _config.xml_. This repo
+provide a simple default file _config.xml.in_ that will be configured using the
+variable set in _config.cmake_  file.
+
+> ***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 macros 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 target, like an ***HTML5***
+
+As the type is not always specified for some custom targets, like an ***HTML5***
 application, macros make the difference using ***LABELS*** property.
 
+Example:
+
 ```cmake
 SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
                LABELS "HTDOCS"
@@ -144,19 +163,22 @@ definition. Then at the end of your project definition you should use the macro
 `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:
+`PROJECT_TARGET_ADD` with the name of your target as parameter.
+
+Example:
 
 ```cmake
 PROJECT_TARGET_ADD(low-can-demo)
 ```
 
-This will make available the variable `${TARGET_NAME}` set with the specificied
-name.
+> ***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
 
@@ -170,13 +192,26 @@ Usage :
 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]-*")
+```
+
 ### project_targets_populate
 
-Macro use to populate widget tree. To make this works you have to specify some properties to your target :
+Macro use to populate widget tree. To make this works you have to specify some
+properties to your target :
 
-- LABELS : specify *BINDING*, *HTDOCS*, *EXECUTABLE*, *DATA*
-- PREFIX : must be empty **""** when target is a *BINDING* else default prefix *lib* will be applied
-- OUTPUT_NAME : Name of the output file generated, useful when generated file name is different from `${TARGET_NAME}`
+* LABELS : specify *BINDING*, *HTDOCS*, *EXECUTABLE*, *DATA*
+* PREFIX : must be empty **""** when target is a *BINDING* else default prefix
+ *lib* will be applied
+* OUTPUT_NAME : Name of the output file generated, useful when generated file
+ name is different from `${TARGET_NAME}`
 
 Always specify  `populate_widget()` macro as the last statement, especially if
 you use ${TARGET_NAME} variable. Else variable will be set at wrong value with
@@ -185,7 +220,7 @@ the **populate_** target name.
 Usage :
 
 ```cmake
-populate_widget()
+project_targets_populate()
 ```
 
 ### project_package_build
@@ -197,9 +232,10 @@ directory :
 Usage :
 
 ```cmake
-build_widget()
+project_package_build()
 ```
 
 ### project_closing_message
 
-Will display the closing message configured in `config.cmake` file. Put it at the end of your project CMake file.
+Will display the closing message configured in `config.cmake` file. Put it at
+the end of your project CMake file.
\ No newline at end of file