]> err.no Git - sope/blob - maintenance/syncXcodeVersions.sh
added Changes file for 4.5.4=>4.5.5
[sope] / maintenance / syncXcodeVersions.sh
1 #!/bin/sh
2 # syncXcodeVersions
3
4 set_dylib_version() {
5   # $1 project dir
6   # $2 new version number
7
8   PROJECT=$1/project.pbxproj
9   DYLIB_VERSION=$2
10
11   if [ "$DYLIB_VERSION" = "" ]; then
12     echo "DYLIB_VERSION MUST NOT be empty!"
13     exit 6
14   fi
15
16   # magic happens here
17   sed "s/\(^[   ]*DYLIB_CURRENT_VERSION =[      ]*\)\(.*\)\(;.*$\)/\1${DYLIB_VERSION}\3/" "${PROJECT}" > "${PROJECT}.new"
18   mv ${PROJECT}.new ${PROJECT}
19 }
20
21 set_sope_versions() {
22   # $1 project dir
23   # $2 MAJOR    number
24   # $3 MINOR    number
25   # $4 SUBMINOR number
26
27   PROJECT=$1/project.pbxproj
28   SOPE_MAJOR=$2
29   SOPE_MINOR=$3
30   SOPE_SUBMINOR=$4
31
32   # magic happens here
33   sed -e "s/\(SOPE_MAJOR_VERSION=\)\([1234567890]*\)/\1${SOPE_MAJOR}/" -e "s/\(SOPE_MINOR_VERSION=\)\([1234567890]*\)/\1${SOPE_MINOR}/" -e "s/\(SOPE_SUBMINOR_VERSION=\)\([1234567890]*\)/\1${SOPE_SUBMINOR}/" -e "s/\(WEP_SUBMINOR_VERSION=\)\([1234567890]*\)/\1${SOPE_SUBMINOR}/" "${PROJECT}" > "${PROJECT}.new"
34   mv ${PROJECT}.new ${PROJECT}
35 }
36
37
38 get_dylib_version () {
39   # $1 project dir
40   PROJECT=$1/project.pbxproj
41   if [ ! -f ${PROJECT} ]; then
42     echo ""
43     return
44   fi
45
46   VERSION_NUM=$(sed -n 's/^[    ]*DYLIB_CURRENT_VERSION =[      ]*\(.*\);.*$/\1/p' "${PROJECT}" | sort | uniq)
47   if [ "${VERSION_NUM}" = "" ] ; then
48     echo ""
49   fi
50   echo "${VERSION_NUM}"
51 }
52
53 get_make_version() {
54   # traverse path from PROJECT_ROOT down to least found Version file
55   # $1 project dir
56   PROJECT=$1
57
58   # defaults
59   MAJOR_VERSION=$GLOBAL_MAJOR_VERSION
60   MINOR_VERSION=$GLOBAL_MINOR_VERSION
61
62   CURRENT_PATH=""
63   # split path
64   IFS=/
65   for p in ${PROJECT}
66   do
67     CURRENT_PATH="${CURRENT_PATH}${p}/"
68     read_version_from_version_file "${CURRENT_PATH}Version"
69   done
70   echo "${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION}"
71 }
72
73 read_version_from_version_file() {
74   VERS_FILE=$1
75   if [ ! -r "${VERS_FILE}" ]; then
76     return
77   fi
78   _MAJOR_VERSION=`sed -n 's/^MAJOR_VERSION=\(.*\)/\1/p' "${VERS_FILE}"`
79   if [ "${_MAJOR_VERSION}" != "" ]; then
80     MAJOR_VERSION=${_MAJOR_VERSION}
81   fi
82   _MINOR_VERSION=`sed -n 's/^MINOR_VERSION=\(.*\)/\1/p' "${VERS_FILE}"`
83   if [ "${_MINOR_VERSION}" != "" ]; then
84     MINOR_VERSION=${_MINOR_VERSION}
85   fi
86   # this is always set
87   SUBMINOR_VERSION=`sed -n 's/^SUBMINOR_VERSION.*=\(.*\)/\1/p' "${VERS_FILE}"`
88 #  echo "${VERS_FILE} -> ${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION}"
89 }
90
91
92 update_project_if_necessary() {
93   # $1 project dir
94
95   PROJECT=$1
96   PROJECT_NAME=${PROJECT##*/}
97   PROJECT_NAME=${PROJECT_NAME%%.xcode}
98   
99   PROJECT_DYLIB_VERSION=`get_dylib_version "${PROJECT}"`
100   if [ "${PROJECT_DYLIB_VERSION}" != "" ]; then
101     PROJECT_MAKE_VERSION=`get_make_version "${PROJECT}"`
102     if [ "${PROJECT_DYLIB_VERSION}" != "${PROJECT_MAKE_VERSION}" ]; then
103       echo "Updating $PROJECT_NAME: ${PROJECT_DYLIB_VERSION} -> ${PROJECT_MAKE_VERSION}"
104       set_dylib_version "${PROJECT}" "${PROJECT_MAKE_VERSION}"
105       PROJECT=$1
106       SUBMINOR_VERSION=${PROJECT_MAKE_VERSION##*.}
107       set_sope_versions "${PROJECT}" "${MAJOR_VERSION}" "${MINOR_VERSION}" "${SUBMINOR_VERSION}"
108     fi
109   fi
110 }
111
112
113 ##
114 ## MAIN
115 ##
116
117 PROJECT_ROOT=.
118
119 # source in MAJOR_VERSION and MINOR_VERSION
120 source ${PROJECT_ROOT}/Version
121 GLOBAL_MAJOR_VERSION=$MAJOR_VERSION
122 GLOBAL_MINOR_VERSION=$MINOR_VERSION
123
124 PROJECTS=`find ${PROJECT_ROOT} -type d -name "*.xcodeproj"`
125 for PROJECT in $PROJECTS
126 do
127   # skip Recycler contents
128   if [ "${PROJECT##*Recycler*}" != "" ]; then
129     update_project_if_necessary "${PROJECT}"
130   fi
131 done