Add small helpers to start from scratch with a new ptxconfig and/or
platformconfig. We do that by creating a standard directory structure,
then creating a minimal config file, selecting it, and calling oldconfig
on the created file while setting PTXDIST_FORCE to ignore all errors
about it not being a valid configuration file.

When initialising a new BSP, create the platformconfig first so the
selection of the ptxconfig does not complain about a missing
platformconfig.

Signed-off-by: Roland Hieber <[email protected]>

---

I was also thinking about using 'alldefconfig' instead of 'oldconfig' so
that PTXdist does not ask so many questions for every package that can
be enabled in the ptxconfig, but then several important settings get
lost, like project name, toolchain/compiler version, compiler triplet
etc. Maybe we can ask those up front instead and pre-prime the config
accordingly, like it is already done now for the platform name in
PLATFORM.
---
 bin/ptxdist                  | 19 ++++++++++++
 doc/ref_parameter.inc        |  5 ++++
 scripts/lib/ptxd_lib_init.sh | 57 ++++++++++++++++++++++++++++++++++++
 3 files changed, 81 insertions(+)
 create mode 100644 scripts/lib/ptxd_lib_init.sh

diff --git a/bin/ptxdist b/bin/ptxdist
index cd673a9f3dd6..e1e0f5f7503d 100755
--- a/bin/ptxdist
+++ b/bin/ptxdist
@@ -938,6 +938,9 @@ PTXdist $(printf "%-24s" ${PTXDIST_VERSION_FULL}) Build 
System for Embedded Linu
 
 Setup and Project Actions:
 
+  init [<platformname>]                initialise a new BSP in the current 
directory
+  init-platform [<name>]       initialise a new platform in the current BSP
+
   menu                         enter main control menu
 
   setup                                setup per-user preferences
@@ -2035,6 +2038,22 @@ EOF
                        do_${cmd}
                        exit
                        ;;
+               init)
+                       ptxd_lib_init_platform "$@" &&
+                       ptxd_lib_init &&
+                       ptxd_dialog_msgbox \
+                               "Adapt the new BSP to your needs by 
running:\n\n" \
+                               "    ptxdist menuconfig\n" \
+                               "    ptxdist menuconfig platform"
+                       exit
+                       ;;
+               init-platform)
+                       ptxd_lib_init_platform "$@" &&
+                       ptxd_dialog_msgbox \
+                               "Adapt the new platform to your needs by 
running:\n\n" \
+                               "    ptxdist menuconfig platform"
+                       exit
+                       ;;
                image)
                        if [ ${#} -eq 0 ]; then
                                echo "No image given."
diff --git a/doc/ref_parameter.inc b/doc/ref_parameter.inc
index 74689b9d3cff..29203713f879 100644
--- a/doc/ref_parameter.inc
+++ b/doc/ref_parameter.inc
@@ -1,6 +1,11 @@
 Setup and Project Actions
 ~~~~~~~~~~~~~~~~~~~~~~~~~
 
+``init <platformname>``, ``init-platform <platformname>``
+  initialise a new BSP in the current directory, or add a new platform to the
+  current BSP. This action creates all required config files, and then calls
+  *menuconfig* on them, and can be used to start a new BSP from scratch.
+
 ``menu``
   this starts a dialog based frontend for those who do not like typing
   commands. It will gain us access to the most common parameters to
diff --git a/scripts/lib/ptxd_lib_init.sh b/scripts/lib/ptxd_lib_init.sh
new file mode 100644
index 000000000000..a5ff71f557f9
--- /dev/null
+++ b/scripts/lib/ptxd_lib_init.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+ptxd_lib_init() {
+       PTXDIST_PTXCONFIG="configs/ptxconfig"
+
+       if [ -z "${PTXDIST_FORCE}" ] && [ -e "${PTXDIST_PTXCONFIG}" ]; then
+               echo -e \
+                       "error: the file '${PTXDIST_PTXCONFIG}' already 
exists,\n" \
+                       "       use '--force' to overwrite it."
+               return 1
+       fi
+
+       if [ -z "${PTXDIST_FORCE}" ] && [ -e "${PTXDIST_PTXCONFIG_DEFAULT}" ]; 
then
+               ptxd_dialog_msgbox \
+                       "error: the file '${PTXDIST_PTXCONFIG_DEFAULT}' already 
exists,\n" \
+                       "       use '--force' to overwrite it."
+               return 1
+       fi
+
+       PTXDIST_FORCE=1
+       mkdir -p "$(dirname "${PTXDIST_PTXCONFIG}")" &&
+       echo > "${PTXDIST_PTXCONFIG}" &&
+       do_select ptxconfig "${PTXDIST_PTXCONFIG}" &&
+       do_config alldefconfig
+}
+
+ptxd_lib_init_platform() {
+       local platformname="$1"
+       if [ -z "$platformname" ]; then
+               read -p 'New platform name? ' platformname
+       fi
+       if [ -z "$platformname" ]; then
+               echo "Platform name cannot be empty."
+               return 1
+       fi
+       PTXDIST_PLATFORMCONFIG="configs/platform-${platformname}/platformconfig"
+
+       if [ -z "${PTXDIST_FORCE}" ] && [ -e "${PTXDIST_PLATFORMCONFIG}" ]; then
+               ptxd_dialog_msgbox \
+                       "error: the file '${PTXDIST_PLATFORMCONFIG}' already 
exists,\n" \
+                       "       use '--force' to overwrite it."
+               return 1
+       fi
+
+       if [ -z "${PTXDIST_FORCE}" ] && [ -e 
"${PTXDIST_PLATFORMCONFIG_DEFAULT}" ]; then
+               ptxd_dialog_msgbox \
+                       "error: the file '${PTXDIST_PLATFORMCONFIG_DEFAULT}' 
already exists,\n" \
+                       "       use '--force' to overwrite it."
+               return 1
+       fi
+
+       PTXDIST_FORCE=1
+       mkdir -p "$(dirname "${PTXDIST_PLATFORMCONFIG}")" &&
+       echo "PTXCONF_PLATFORM=\"${platformname}\"" > 
"${PTXDIST_PLATFORMCONFIG}" &&
+       do_select platformconfig "${PTXDIST_PLATFORMCONFIG}" &&
+       do_config oldconfig platform
+}
-- 
2.24.0


_______________________________________________
ptxdist mailing list
[email protected]

Reply via email to