summaryrefslogtreecommitdiff
path: root/nuttx/tools
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-08-29 17:21:24 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-08-29 17:21:24 -0600
commit2cf971ec3c7618023859a54a07c7017177f98e73 (patch)
tree7dfccc6b8585d6727e237b07980fc84fe1d80875 /nuttx/tools
parentbb528eb25b415e8da7fe24178cd80887c3d454d3 (diff)
downloadnuttx-2cf971ec3c7618023859a54a07c7017177f98e73.tar.gz
nuttx-2cf971ec3c7618023859a54a07c7017177f98e73.tar.bz2
nuttx-2cf971ec3c7618023859a54a07c7017177f98e73.zip
Add a tool to make refreshing configurations easier when you wnat to do a lot of them
Diffstat (limited to 'nuttx/tools')
-rwxr-xr-xnuttx/tools/refresh.sh185
1 files changed, 185 insertions, 0 deletions
diff --git a/nuttx/tools/refresh.sh b/nuttx/tools/refresh.sh
new file mode 100755
index 000000000..54ec12724
--- /dev/null
+++ b/nuttx/tools/refresh.sh
@@ -0,0 +1,185 @@
+#!/bin/sh
+# refresh.sh
+#
+# Copyright (C) 2014 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+USAGE="USAGE: $0 [--dry-run|--debug|--help] <board>/<config>"
+ADVICE="Try '$0 --help' for more information"
+
+unset CONFIG
+DRYRUN=n
+
+while [ ! -z "$1" ]; do
+ case $1 in
+ --dry-run )
+ DRYRUN=y
+ ;;
+ --debug )
+ set -x
+ ;;
+ --help )
+ echo "$0 is a tool for refreshing board configurations"
+ echo ""
+ echo $USAGE
+ echo ""
+ echo "Where:"
+ echo " --dry-run"
+ echo " Do no change the defconfig file"
+ echo " --debug"
+ echo " Enable script debug"
+ echo " --help"
+ echo " Show this help message and exit"
+ echo " <board>"
+ echo " The board directory under nuttx/configs"
+ echo " <config>"
+ echo " The board configuration directory under nuttx/configs/<board>"
+ exit 0
+ ;;
+ * )
+ CONFIG=$1
+ break
+ ;;
+ esac
+ shift
+done
+
+# Get the board configuration
+
+if [ -z "$1" ]; then
+ echo "ERROR: No configuration provided"
+ echo $USAGE
+ echo $ADVICE
+ exit 1
+fi
+
+BOARDSUBDIR=`echo $1 | cut -d'/' -f1`
+CONFIGSUBDIR=`echo $1 | cut -d'/' -f2`
+
+# Where are we
+
+MYNAME=`basename $0`
+
+if [ -x ./${MYNAME} ] ; then
+ cd .. || { echo "ERROR: cd .. failed" ; exit 1 ; }
+fi
+
+if [ ! -x tools/${MYNAME} ] ; then
+ echo "ERROR: This file must be executed from the top-level NuttX directory: $PWD"
+ exit 1
+fi
+
+# Set up the environment
+
+WD=${PWD}
+
+BOARDDIR=configs/$BOARDSUBDIR
+CONFIGDIR=$BOARDDIR/$CONFIGSUBDIR
+DEFCONFIG=$CONFIGDIR/defconfig
+
+CMPCONFIG_TARGET=cmpconfig
+CMPCONFIG1=tools/cmpconfig
+CMPCONFIG2=tools/cmpconfig.exe
+CMPCONFIGMAKEFILE=Makefile.host
+CMPCONFIGMAKEDIR=tools
+
+# Check the board configuration directory
+
+if [ ! -d "$BOARDDIR" ]; then
+ echo "No board directory found at $BOARDDIR"
+ exit 1
+fi
+
+if [ ! -d "$CONFIGDIR" ]; then
+ echo "No configuration directory found at $CONFIGDIR"
+ exit 1
+fi
+
+if [ ! -r "$DEFCONFIG" ]; then
+ echo "No readable defconfig file in $DEFCONFIG"
+ exit 1
+fi
+
+# If the cmpconfig executable does not exist, then build it
+
+if [ -x ${CMPCONFIG1} ]; then
+ CMPCONFIG=${CMPCONFIG1}
+else
+ if [ -x ${CMPCONFIG2} ]; then
+ CMPCONFIG=${CMPCONFIG2}
+ else
+ make -C ${CMPCONFIGMAKEDIR} -f ${CMPCONFIGMAKEFILE} ${CMPCONFIG_TARGET} || \
+ { echo "ERROR: make ${CMPCONFIG1} failed" ; exit 1 ; }
+ fi
+fi
+
+if [ -x ${CMPCONFIG1} ]; then
+ CMPCONFIG=${CMPCONFIG1}
+else
+ if [ -x ${CMPCONFIG2} ]; then
+ CMPCONFIG=${CMPCONFIG2}
+ else
+ echo "ERROR: Failed to create ${CMPCONFIG1}"
+ exit 1
+ fi
+fi
+
+# Copy the .config to the toplevel directory
+
+rm -f SAVEconfig
+if [ -e .config ]; then
+ mv .config SAVEconfig || \
+ { echo "ERROR: Failed to move .config to SAVEconfig"; exit 1; }
+fi
+
+cp -a $DEFCONFIG .config || \
+ { echo "ERROR: Failed to copy $DEFCONFIG to .config"; exit 1; }
+
+# Then run oldconfig
+
+make oldconfig
+
+# Show differences
+
+$CMPCONFIG $DEFCONFIG .config
+
+if [ "X$DRYRUN" = "Xn" ]; then
+ echo "Saving the new configuration file"
+ sed -i -e "s/^CONFIG_APPS_DIR/# CONFIG_APPS_DIR/g" .config
+ mv .config $DEFCONFIG || \
+ { echo "ERROR: Failed to move .config to $DEFCONFIG"; exit 1; }
+ chmod 644 $DEFCONFIG
+fi
+
+if [ -e SAVEconfig ]; then
+ mv SAVEconfig .config || \
+ { echo "ERROR: Failed to move SAVEconfig to .config"; exit 1; }
+fi