blob: 73490448516fc05642217428c3fdbf54ba6ea099 [file] [log] [blame]
#!/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"