#!/bin/bash # Copyright (c) 2014, Siemens AG. All rights reserved. # # 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. # # 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 HOLDER 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() { echo "Create a tarball of the project. Specify the project root with"; echo "-d parameter."; echo ""; echo "Version number and project name is automatically derived from CMakeLists.txt in the project root."; echo "Tarball that will be created: [PROJECT_NAME]_[VERSION_NUMBER].tar.gz"; echo "Example call (from the scripts directory as working directory):"; echo "$0 -d ../"; echo ""; echo "Usage: $0 [-d ]" 1>&2; exit 1; } while getopts ":d:" o; do case "${o}" in d) d=${OPTARG} ;; *) usage ;; esac done shift $((OPTIND-1)) if [ -z "${d}" ]; then usage fi if [ ! -d "$d" ]; then echo "Error, directory $d does not exist or is not a directory!" echo "" usage fi CMAKEFILE="$d/CMakeLists.txt" if [ ! -f "$CMAKEFILE" ]; then echo "Error, could no locate CMakeLists.txt" echo "" usage fi #derive version number from cmake script VERSION_MAJOR=`cat $CMAKEFILE | grep EMBB_BASE_VERSION_MAJOR | sed "s/^[^0-9]*\([0-9]\+\)[^0-9]*$/\1/g"` VERSION_MINOR=`cat $CMAKEFILE | grep EMBB_BASE_VERSION_MINOR | sed "s/^[^0-9]*\([0-9]\+\)[^0-9]*$/\1/g"` VERSION_PATCH=`cat $CMAKEFILE | grep EMBB_BASE_VERSION_PATCH | sed "s/^[^0-9]*\([0-9]\+\)[^0-9]*$/\1/g"` VERSION_NUMBER="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" PROJECT_NAME=`cat $CMAKEFILE | grep project.*\(.*\) | sed "s/^[^(]*(\([^)]*\)).*$/\1/g" | tr '[:upper:]' '[:lower:]'` n="${PROJECT_NAME}-${VERSION_NUMBER}" TARBALL_NAME="${n}.tar.gz" if ! [[ $TARBALL_NAME =~ ^[a-zA-Z0-9|\.|\_|-]+$ ]]; then echo "Want to create tarball with name $TARBALL_NAME." >&2 echo 'Filename not valid, only a-z, A-Z, .,- and _ characters are allowed' >&2 # write to stderr exit 1 fi echo "Do you wish to create a tarball with the name $TARBALL_NAME in the current directory?" select yn in "Yes" "No"; do case $yn in Yes ) break;; No ) echo Leaving tarball creation; exit;; esac done if [ -f "$TARBALL_NAME" ]; then echo "File $TARBALL_NAME exists. Delete file?" select yn in "Yes" "No"; do case $yn in Yes ) break;; No ) echo Leaving tarball creation; exit;; esac done rm $TARBALL_NAME if [ -f "$TARBALL_NAME" ]; then echo "Could not delete $TARBALL_NAME" exit fi fi MYTMPDIR=`mktemp -d` echo "Using temporary directory $MYTMPDIR" trap "rm -rf $MYTMPDIR" EXIT echo "Calling rsync to temporary folder" rsync \ --exclude ".git" \ --exclude ".gitignore" \ --exclude "build*/" \ --exclude "scripts/*.tar.gz" \ --exclude "scripts/cpplint.py" \ --exclude "scripts/create_tarball.sh" \ --exclude "scripts/insert_license.sh" \ --exclude "scripts/license.*" \ --exclude "scripts/license_*" \ --exclude "scripts/remove_license.sh" \ --exclude "mtapi/MTAPI.mm" \ --exclude ".cproject" \ --exclude ".gitattributes" \ --exclude ".project" \ --exclude "*.blg" \ --exclude "*.fls" \ --exclude "*.bbl" \ --exclude "*.fdb_latexmk" \ --exclude "*.log" \ --exclude "*.out" \ --exclude "*.toc" \ --exclude "*.aux" \ --exclude "doc/tutorial/sty" \ --exclude "doc/tutorial/pics" \ --exclude "doc/tutorial/content" \ --exclude "doc/tutorial/*.tex" \ --exclude "doc/tutorial/*.bib" \ --exclude "doc/examples/insert_snippets.py" \ --archive --recursive ${d} $MYTMPDIR/${n} echo "Replace version number in README" README_FILE="$MYTMPDIR/${n}/README.txt" if [ -f $README_FILE ]; then sed -i "s/\[VERSION_NUMBER_TEMPLATE\]/$VERSION_NUMBER/g" $README_FILE fi echo "Checking line endings" WINLINES=`find $MYTMPDIR/${n} -not -type d -exec file "{}" ";" | grep CRLF` if [ -n "$WINLINES" ]; then echo "Detected Dos line endings in following files:" echo "$WINLINES" echo "Warning: The project guidelines forbid Dos line endings. Continue creating tarball?" select yn in "Yes" "No"; do case $yn in Yes ) break;; No ) echo Leaving tarball creation; exit;; esac done fi echo "Calling tar" tar -czf $TARBALL_NAME -C $MYTMPDIR ${n} echo "Done. Created $TARBALL_NAME."