190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#!/bin/bash
290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
3f71323e297a928af368937089d3ed71239786f86Andreas Huber##  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
5f71323e297a928af368937089d3ed71239786f86Andreas Huber##  Use of this source code is governed by a BSD-style license
6f71323e297a928af368937089d3ed71239786f86Andreas Huber##  that can be found in the LICENSE file in the root of the source
7f71323e297a928af368937089d3ed71239786f86Andreas Huber##  tree. An additional intellectual property rights grant can be found
8f71323e297a928af368937089d3ed71239786f86Andreas Huber##  in the file PATENTS.  All contributing project authors may
9f71323e297a928af368937089d3ed71239786f86Andreas Huber##  be found in the AUTHORS file in the root of the source tree.
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfor opt in "$@"; do
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    optval="${opt#*=}"
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case "$opt" in
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    --bare) bare=true ;;
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    *) break ;;
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdone
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersource_path=${1:-.}
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberout_file=${2}
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberid=${3:-VERSION_STRING}
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubergit_version_id=""
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberif [ -d ${source_path}/.git ]; then
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Source Path is a git working copy. Check for local modifications.
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    export GIT_DIR=${source_path}/.git
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    git_version_id=`git describe --match=v[0-9]* 2>/dev/null`
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberchangelog_version=""
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfor p in "${source_path}" "${source_path}/.."; do
3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ -z "$git_version_id" -a -f "${p}/CHANGELOG" ]; then
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        changelog_version=`head -n1 "${p}/CHANGELOG" | awk '{print $2}'`
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        changelog_version="${changelog_version}"
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        break
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdone
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberversion_str="${changelog_version}${git_version_id}"
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberbare_version=${version_str#v}
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubermajor_version=${bare_version%%.*}
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberbare_version=${bare_version#*.}
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberminor_version=${bare_version%%.*}
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberbare_version=${bare_version#*.}
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberpatch_version=${bare_version%%-*}
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberbare_version=${bare_version#${patch_version}}
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextra_version=${bare_version##-}
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#since they'll be used as integers below make sure they are or force to 0
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfor v in major_version minor_version patch_version; do
5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if eval echo \$$v |grep -E -q '[^[:digit:]]'; then
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        eval $v=0
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdone
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberif [ ${bare} ]; then
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "${changelog_version}${git_version_id}" > $$.tmp
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberelse
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat<<EOF>$$.tmp
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define VERSION_MAJOR  $major_version
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define VERSION_MINOR  $minor_version
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define VERSION_PATCH  $patch_version
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define VERSION_EXTRA  "$extra_version"
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define VERSION_PACKED ((VERSION_MAJOR<<16)|(VERSION_MINOR<<8)|(VERSION_PATCH))
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define ${id}_NOSP "${version_str}"
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define ${id}      " ${version_str}"
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberif [ -n "$out_file" ]; then
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdiff $$.tmp ${out_file} >/dev/null 2>&1 || cat $$.tmp > ${out_file}
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberelse
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercat $$.tmp
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberrm $$.tmp
77