#!/bin/bash # # Copyright 2015-2018 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 repos.conf . populate "${DIR}" 664 Makefile.am . populate "${DIR}" 664 Makefile-bootstrap . 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"