|  | #!/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" |