6d629f90e4607e42c0d1b2fe8dd31a92f965cee3
[WebKit-https.git] / WebKitLibraries / win / tools / scripts / auto-version.sh
1 #!/usr/bin/bash
2
3 # Copyright (C) 2007, 2009 Apple Inc.  All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
8 # 1. Redistributions of source code must retain the above copyright
9 #    notice, this list of conditions and the following disclaimer.
10 # 2. Redistributions in binary form must reproduce the above copyright
11 #    notice, this list of conditions and the following disclaimer in the
12 #    documentation and/or other materials provided with the distribution.
13 #
14 # THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
25
26
27 # Trim any trailing \r or \n from the given variable.
28 chomp()
29 {
30     local old_value=$(eval echo "\$$1");
31     local value=$(echo "$old_value" | sed 's/[\r\n]*$//')
32     eval $1=\$value;
33 }
34
35 if [ "$WEBKITLIBRARIESDIR" != "" ]; then
36     FALLBACK_VERSION_PATH=`cygpath -u "$WEBKITLIBRARIESDIR\\tools\\scripts\\VERSION"`
37     FALLBACK_VERSION=$(cat "$FALLBACK_VERSION_PATH");
38 fi
39
40 OUTPUT_FILE=$(cygpath -u "$1")/include/autoversion.h
41 mkdir -p "$(dirname "$OUTPUT_FILE")"
42
43 # Take the initial version number from RC_PROJECTSOURCEVERSION if it
44 # exists, otherwise fall back to the version number stored in the source.
45 ENVIRONMENT_VERSION="$RC_PROJECTSOURCEVERSION";
46 PROPOSED_VERSION=${ENVIRONMENT_VERSION:-$FALLBACK_VERSION}
47 chomp PROPOSED_VERSION
48
49 # Split out the three components of the dotted version number.  We pad
50 # the input with trailing dots to handle the case where the input version
51 # has fewer components than we expect.
52 BUILD_MAJOR_VERSION=$(echo "$PROPOSED_VERSION.." | cut -d '.' -f 1)
53 BUILD_MINOR_VERSION=$(echo "$PROPOSED_VERSION.." | cut -d '.' -f 2)
54 BUILD_TINY_VERSION=$(echo "$PROPOSED_VERSION.." | cut -d '.' -f 3)
55
56 # Cut the major component down to three characters by dropping any
57 # extra leading digits, then adjust the major version portion of the
58 # version string to match.
59 CHARACTERS_TO_DROP=$(( ${#BUILD_MAJOR_VERSION} - 3 ))
60 BUILD_MAJOR_VERSION=${BUILD_MAJOR_VERSION:$CHARACTERS_TO_DROP}
61 PROPOSED_VERSION=${PROPOSED_VERSION:$CHARACTERS_TO_DROP}
62
63 # Have the minor and tiny components default to zero if not present.
64 BUILD_MINOR_VERSION=${BUILD_MINOR_VERSION:-0}
65 BUILD_TINY_VERSION=${BUILD_TINY_VERSION:-0}
66
67 # Split the first component further by using the first digit for the
68 # major version and the remaining two characters as the minor version.
69 # The minor version is shifted down to the tiny version, with the tiny
70 # version becoming the variant version.
71 MAJOR_VERSION=${BUILD_MAJOR_VERSION:0:1}
72 MINOR_VERSION=${BUILD_MAJOR_VERSION:1}
73 TINY_VERSION=${BUILD_MINOR_VERSION}
74 VARIANT_VERSION=${BUILD_TINY_VERSION}
75
76 VERSION_TEXT=${PROPOSED_VERSION}
77 VERSION_TEXT_SHORT=${VERSION_TEXT}
78
79 if [ -z ${ENVIRONMENT_VERSION} ]; then
80     # If we didn't pull the version number from the environment then we're doing
81     # an engineering build and we'll stamp the build with some more information.
82
83     BUILD_DATE=$(date)
84     SVN_REVISION=$(svn info | grep '^Revision' | sed 's/^Revision: //')
85
86     chomp BUILD_DATE
87     chomp SVN_REVISION
88
89     VERSION_TEXT_SHORT="${VERSION_TEXT_SHORT}+"
90     VERSION_TEXT="${VERSION_TEXT_SHORT} ${USER} - ${BUILD_DATE} - r${SVN_REVISION}"
91 fi
92
93 COPYRIGHT_END_YEAR_PATH=`cygpath -u "$WEBKITLIBRARIESDIR\\tools\\scripts\\COPYRIGHT-END-YEAR"`
94 COPYRIGHT_END_YEAR=$(cat "$COPYRIGHT_END_YEAR_PATH");
95 chomp COPYRIGHT_END_YEAR
96
97 cat > "$OUTPUT_FILE" <<EOF
98 #define __VERSION_TEXT__ "${VERSION_TEXT}"
99 #define __BUILD_NUMBER__ "${VERSION_TEXT}"
100 #define __BUILD_NUMBER_SHORT__ "${VERSION_TEXT_SHORT}"
101 #define __VERSION_MAJOR__ ${MAJOR_VERSION}
102 #define __VERSION_MINOR__ ${MINOR_VERSION}
103 #define __VERSION_TINY__ ${TINY_VERSION}
104 #define __VERSION_BUILD__ ${VARIANT_VERSION}
105 #define __BUILD_NUMBER_MAJOR__ ${BUILD_MAJOR_VERSION}
106 #define __BUILD_NUMBER_MINOR__ ${BUILD_MINOR_VERSION}
107 #define __BUILD_NUMBER_VARIANT__ ${BUILD_TINY_VERSION}
108 #define __SVN_REVISION__ ${SVN_REVISION}
109 #define __COPYRIGHT_YEAR_END_TEXT__ "${COPYRIGHT_END_YEAR}"
110 EOF