| #!/bin/bash |
| |
| # |
| # Copyright 2015-2016 Nest Labs Inc. All Rights Reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| # |
| # Description: |
| # This file is a convenience script that will create a skeleton |
| # build layout using the nlbuild-autotools package. |
| # |
| |
| YEAR=`date "+%Y"` |
| NAME="" |
| DESCRIPTION="" |
| DIR="" |
| VERSION="1.0" |
| verbose=1 |
| |
| # |
| # usage |
| # |
| # Display program usage. |
| # |
| usage() { |
| name=`basename $0` |
| |
| echo "Usage: ${name} [ options ]" |
| |
| if [ $1 -ne 0 ]; then |
| echo "Try '${name} -h' for more information." |
| fi |
| |
| if [ $1 -ne 1 ]; then |
| echo "" |
| echo " -h, --help Print this help, then exit." |
| echo " -I DIR Specify directory DIR as the root of the " |
| echo " nlbuild-autotools repository." |
| echo " -v, --verbose Verbosely report mkskeleton progress (default: yes)." |
| echo " --package-description DESC Specify description DESC as a the " |
| echo " package description." |
| echo " --package-name NAME Specify name NAME as the package name." |
| echo " --package-version VERSION Specify version VERSION as the initial " |
| echo " version for the package (default: ${VERSION})." |
| echo " --package-year YEAR Specify year YEAR as the creation " |
| echo " year for the package (default: ${YEAR})." |
| echo " -q, --quiet Do not verbosely report mkskeleton progress (default: no)." |
| |
| echo "" |
| fi |
| |
| exit $1 |
| } |
| |
| # |
| # log |
| # |
| log() { |
| if [ ! -z ${verbose} ] && [ ${verbose} -eq 1 ]; then |
| echo $* |
| fi |
| } |
| |
| transform() { |
| local from="${1}" |
| local to="${2}" |
| |
| sed \ |
| -e "s,\@NLBUILD_AUTOTOOLS_STEM\@,${DIR},g" \ |
| -e "s,\@PACKAGE_DESCRIPTION\@,${DESCRIPTION},g" \ |
| -e "s,\@PACKAGE_SHORT_LOWER\@,${LOWER},g" \ |
| -e "s,\@PACKAGE_SHORT_UPPER\@,${UPPER},g" \ |
| -e "s,\@PACKAGE_YEAR\@,${YEAR},g" \ |
| < "${from}" > "${to}" |
| } |
| |
| populate() { |
| local nlbuild="${1}" |
| local perm=${2} |
| local file="${3}" |
| local directory="${4}" |
| local stem="${file%.*}" |
| local extension="${file##*.}" |
| local from |
| local to |
| |
| if [ -r "${nlbuild}/examples/${file}" ]; then |
| from="${nlbuild}/examples/${file}" |
| |
| elif [ -r "${nlbuild}/examples/${stem}-${directory}.${extension}" ]; then |
| from="${nlbuild}/examples/${stem}-${directory}.${extension}" |
| |
| elif [ "${directory}" = "." ] && [ -r "${nlbuild}/examples/${stem}-toplevel.${extension}" ]; then |
| from="${nlbuild}/examples/${stem}-toplevel.${extension}" |
| |
| else |
| echo "Cannot find an example file \"${file}\" for directory \"${directory}\"." |
| exit 1 |
| |
| fi |
| |
| to="${directory}/${file}" |
| |
| log "Creating \"${to}\"..." |
| |
| transform "${from}" "${to}" |
| |
| if [ $? = 0 ]; then |
| chmod ${perm} "${to}" |
| fi |
| } |
| |
| # |
| # link |
| # |
| link() { |
| local nlbuild="${1}" |
| local perm=${2} |
| local source="${3}" |
| local directory="${4}" |
| local from="${nlbuild}/scripts/${source}" |
| local to="${directory}/${source}" |
| |
| log "Creating \"${to}\"..." |
| |
| ln -sf "${from}" "${to}" |
| } |
| |
| # Parse out any command line options |
| |
| while [ ${#} -gt 0 ]; do |
| if [ ${1} == "-h" ] || [ ${1} == "--help" ]; then |
| usage 0 |
| |
| elif [ ${1} == "-I" ]; then |
| DIR="${2}" |
| shift 2 |
| |
| elif [ ${1} == "--package-description" ]; then |
| DESCRIPTION="${2}" |
| shift 2 |
| |
| elif [ ${1} == "--package-name" ]; then |
| NAME="${2}" |
| shift 2 |
| |
| UPPER="`echo ${NAME} | tr '[[:lower:]]' '[[:upper:]]'`" |
| LOWER="`echo ${NAME} | tr '[[:upper:]]' '[[:lower:]]'`" |
| |
| elif [ ${1} == "--package-version" ]; then |
| VERSION="${2}" |
| shift 2 |
| |
| elif [ ${1} == "--package-year" ]; then |
| YEAR="${2}" |
| shift 2 |
| |
| elif [ ${1} == "-q" ] || [ ${1} == "--quiet" ]; then |
| verbose=0 |
| shift 1 |
| |
| elif [ ${1} == "-v" ] || [ ${1} == "--verbose" ]; then |
| verbose=1 |
| shift 1 |
| |
| else |
| usage 1 |
| |
| fi |
| done |
| |
| # Sanity check the command line arguments |
| |
| if [ -z "${DIR}" ]; then |
| echo "$0: No -I option specified. Please provide the location of the nlbuild-autotools directory." |
| exit 1 |
| |
| fi |
| |
| if [ -z "${DESCRIPTION}" ]; then |
| echo "$0: Please provide a package description via --package-description." |
| exit 1 |
| fi |
| |
| if [ -z "${NAME}" ]; then |
| echo "$0: Please provide a package name via --package-name." |
| exit 1 |
| fi |
| |
| if [ -z "${VERSION}" ]; then |
| echo "$0: Please provide a package default version via --package-version." |
| exit 1 |
| fi |
| |
| if [ -z "${YEAR}" ]; then |
| echo "$0: Please provide a package creation year via --package-year." |
| exit 1 |
| fi |
| |
| # Create the skeleton directories |
| |
| DIRS="doc third_party include src tests" |
| |
| for dir in ${DIRS}; do |
| log "Creating \"${dir}\"..." |
| mkdir -p "${dir}" |
| done |
| |
| # Populate the skeleton directories |
| |
| populate "${DIR}" 664 configure.ac . |
| populate "${DIR}" 775 bootstrap . |
| populate "${DIR}" 664 Makefile.am . |
| populate "${DIR}" 664 Makefile.am doc |
| populate "${DIR}" 664 Doxyfile.in doc |
| populate "${DIR}" 664 Makefile.am third_party |
| populate "${DIR}" 664 Makefile.am src |
| populate "${DIR}" 664 Makefile.am tests |
| link "${DIR}" 775 bootstrap-configure . |
| |
| # Create the default package version |
| |
| log "Creating default version ${VERSION}..." |
| |
| echo "${VERSION}" > ".default-version" |