InfiniTime.git

commit 1ad78400727871a4b8dbfe90ef52c7be998c1518

Author: Jean-François Milants <jf@codingfield.com>

Watch face selection at build time

Replace the options that allowed to select the user apps independently by a single string variable that contains the ordered list of apps to build.

 CMakeLists.txt | 40 ++++++----------------------------------
 doc/code/Apps.md | 16 ++--------------


diff --git a/CMakeLists.txt b/CMakeLists.txt
index c5d30874dd2383ef3e39214386e87a44de1a5679..1537bda6c3e30d22b7a9d55915c08c5093af3117 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -34,18 +34,11 @@
 set(TARGET_DEVICE "PINETIME" CACHE STRING "Target device")
 set_property(CACHE TARGET_DEVICE PROPERTY STRINGS PINETIME MOY_TFK5 MOY_TIN5 MOY_TON5 MOY_UNK)
 
-option(ENABLE_APP_STOPWATCH "Enable the Stopwatch application" True)
-option(ENABLE_APP_ALARM "Enable the Alarm application" True)
-option(ENABLE_APP_TIMER "Enable the Timer application" True)
-option(ENABLE_APP_STEPS "Enable the Steps application" True)
-option(ENABLE_APP_HEARTRATE "Enable the HeartRate application" True)
-option(ENABLE_APP_MUSIC "Enable the Music application" True)
-option(ENABLE_APP_PAINT "Enable the Paint application" True)
-option(ENABLE_APP_PADDLE "Enable the Paddle game" True)
-option(ENABLE_APP_TWOS "Enable the Twos game" True)
-option(ENABLE_APP_METRONOME "Enable the Metronome application" True)
-option(ENABLE_APP_NAVIGATION "Enable the Navigation application" True)
-option(ENABLE_APP_MOTION "Enable the Motion application" False)
+if(ENABLE_USERAPPS)
+  set(USERAPP_TYPES ${ENABLE_USERAPPS})
+else ()
+  set(USERAPP_TYPES "Apps::Navigation, Apps::StopWatch, Apps::Alarm, Apps::Timer, Apps::Steps, Apps::HeartRate, Apps::Music, Apps::Paint, Apps::Paddle, Apps::Twos, Apps::Metronome")
+endif ()
 
 set(PROJECT_GIT_COMMIT_HASH "")
 
@@ -77,34 +70,13 @@   message("    * Build resources : Enabled")
 else()
   message("    * Build resources : Disabled")
 endif()
+message("    * User apps : " ${USERAPP_TYPES})
 
 set(VERSION_EDIT_WARNING "// Do not edit this file, it is automatically generated by CMAKE!")
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/Version.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/Version.h)
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docker/post_build.sh.in ${CMAKE_CURRENT_BINARY_DIR}/post_build.sh)
 
-function(AddToListIfEnabled list enabled type)
-  if(${enabled})
-    list(APPEND ${list} ${type})
-  endif ()
-  #return(PROPAGATE ${list})
-  set(${list} "${${list}}" PARENT_SCOPE)
-endfunction()
-
 # Generate the list of user apps to be compiled into the firmware
-AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_STOPWATCH} "Apps::StopWatch")
-AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_ALARM} "Apps::Alarm")
-AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_TIMER} "Apps::Timer")
-AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_STEPS} "Apps::Steps")
-AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_HEARTRATE} "Apps::HeartRate")
-AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_MUSIC} "Apps::Music")
-AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_PAINT} "Apps::Paint")
-AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_PADDLE} "Apps::Paddle")
-AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_TWOS} "Apps::Twos")
-AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_METRONOME} "Apps::Metronome")
-AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_NAVIGATION} "Apps::Navigation")
-AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_MOTION} "Apps::Motion")
-
-list(JOIN USERAPP_TYPES_LIST "," USERAPP_TYPES)
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/displayapp/Apps.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/displayapp/Apps.h)
 
 add_subdirectory(src)




diff --git a/doc/code/Apps.md b/doc/code/Apps.md
index 2d49c60e977fdcc4599fa0802234a859da559c82..16cb3992f7addf5aca65acc917fc609b48663f66 100644
--- a/doc/code/Apps.md
+++ b/doc/code/Apps.md
@@ -159,22 +159,10 @@ If your application is a **user** application, you don't need to add anything in DisplayApp,
 everything will be automatically generated for you.
 The user application will also be automatically be added to the app launcher menu.
 
-Since the list of **user** application is generated by CMake, add a new `option` in the main [CMakeLists.txt file](../../CMakeLists.txt). The application will be built by default if the value is set to `True`. : 
-
-```cmake
-option(ENABLE_APP_MYAPP "Enable the MyApp application" True)
-```
-
-The default value can be overridden by passing an additional parameter to the command line of CMake : 
-
-```cmake
-$ cmake ... -DENABLE_APP_MYAPP=True ...
-```
-
-Then add your **user app** to the list of apps by calling `AddToListIfEnabled()` : 
+Since the list of **user** application is generated by CMake, you need to add the variable `ENABLE_USERAPPS` to the command line of CMake. This variable must be set with a string composed of an ordered list of the **user** applications that must be built into the firmware. The items of the list are fields from the enumeration `Apps`. Ex : build the firmware with 3 user application : Alarm, Timer and MyApp (the application will be listed in this specific order in the application menu).
 
 ```cmake
-AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_MYAPP} "Apps::MyApp")
+$ cmake ... -DENABLE_USERAPPS="Apps::Alarm, Apps::Timer, Apps::MyApp" ... 
 ```
 
 You should now be able to [build](../buildAndProgram.md) the firmware