diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2014-08-29 17:21:24 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2014-08-29 17:21:24 -0600 |
commit | 2cf971ec3c7618023859a54a07c7017177f98e73 (patch) | |
tree | 7dfccc6b8585d6727e237b07980fc84fe1d80875 /nuttx/tools | |
parent | bb528eb25b415e8da7fe24178cd80887c3d454d3 (diff) | |
download | nuttx-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-x | nuttx/tools/refresh.sh | 185 |
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 |