]> err.no Git - sope/blob - maintenance/syncXcodeVersions.sh
updated Xcode projects (dyld versions, added new files)
[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 get_dylib_version () {
22   # $1 project dir
23   PROJECT=$1/project.pbxproj
24   if [ ! -f ${PROJECT} ]; then
25     echo ""
26     return
27   fi
28
29   VERSION_NUM=$(sed -n 's/^[    ]*DYLIB_CURRENT_VERSION =[      ]*\(.*\);.*$/\1/p' "${PROJECT}" | sort | uniq)
30   if [ "${VERSION_NUM}" = "" ] ; then
31     echo ""
32   fi
33   echo "${VERSION_NUM}"
34 }
35
36 get_make_version() {
37   # traverse path from PROJECT_ROOT down to least found Version file
38   # $1 project dir
39   PROJECT=$1
40
41   # defaults
42   MAJOR_VERSION=$GLOBAL_MAJOR_VERSION
43   MINOR_VERSION=$GLOBAL_MINOR_VERSION
44
45   CURRENT_PATH=""
46   # split path
47   IFS=/
48   for p in ${PROJECT}
49   do
50     CURRENT_PATH="${CURRENT_PATH}${p}/"
51     read_version_from_version_file "${CURRENT_PATH}Version"
52   done
53   echo "${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION}"
54 }
55
56 read_version_from_version_file() {
57   VERS_FILE=$1
58   if [ ! -r "${VERS_FILE}" ]; then
59     return
60   fi
61   _MAJOR_VERSION=`sed -n 's/^MAJOR_VERSION=\(.*\)/\1/p' "${VERS_FILE}"`
62   if [ "${_MAJOR_VERSION}" != "" ]; then
63     MAJOR_VERSION=${_MAJOR_VERSION}
64   fi
65   _MINOR_VERSION=`sed -n 's/^MINOR_VERSION=\(.*\)/\1/p' "${VERS_FILE}"`
66   if [ "${_MINOR_VERSION}" != "" ]; then
67     MINOR_VERSION=${_MINOR_VERSION}
68   fi
69   # this is always set
70   SUBMINOR_VERSION=`sed -n 's/^SUBMINOR_VERSION.*=\(.*\)/\1/p' "${VERS_FILE}"`
71 #  echo "${VERS_FILE} -> ${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION}"
72 }
73
74
75 update_project_if_necessary() {
76   # $1 project dir
77
78   PROJECT=$1
79   PROJECT_NAME=${PROJECT##*/}
80   PROJECT_NAME=${PROJECT_NAME%%.xcode}
81   
82   PROJECT_DYLIB_VERSION=`get_dylib_version "${PROJECT}"`
83   if [ "${PROJECT_DYLIB_VERSION}" != "" ]; then
84     PROJECT_MAKE_VERSION=`get_make_version "${PROJECT}"`
85     if [ "${PROJECT_DYLIB_VERSION}" != "${PROJECT_MAKE_VERSION}" ]; then
86       echo "Updating $PROJECT_NAME: ${PROJECT_DYLIB_VERSION} -> ${PROJECT_MAKE_VERSION}"
87       set_dylib_version "${PROJECT}" "${PROJECT_MAKE_VERSION}"
88     fi
89   fi
90 }
91
92
93 ##
94 ## MAIN
95 ##
96
97 PROJECT_ROOT=.
98
99 # source in MAJOR_VERSION and MINOR_VERSION
100 source ${PROJECT_ROOT}/Version
101 GLOBAL_MAJOR_VERSION=$MAJOR_VERSION
102 GLOBAL_MINOR_VERSION=$MINOR_VERSION
103
104 PROJECTS=`find ${PROJECT_ROOT} -type d -name "*.xcode"`
105 for PROJECT in $PROJECTS
106 do
107   # skip Recycler contents
108   if [ "${PROJECT##*Recycler*}" != "" ]; then
109     update_project_if_necessary "${PROJECT}"
110   fi
111 done