Chameleon

Chameleon Svn Source Tree

Root/branches/blackosx/package/builddmg.sh

  • Property svn:executable set to *
1#!/bin/bash
2
3# $1 Path to store built dmg
4
5pkgroot="${0%/*}"
6SYM_ROOT="${1%/*}"
7DMG_ROOT=$SYM_ROOT
8
9OPENUP_TOOL=${1%/*}/i386/openUp
10
11SRC_FOLDER=${1%/*}/source
12VOLUME_NAME="Chameleon"
13TEMP_NAME="rw.dmg"
14DMG_TEMP_NAME=${DMG_ROOT}/${TEMP_NAME}
15TEMPLATE_DMG=${pkgroot}/dmg/ro.dmg
16EULA_RSRC=${pkgroot}/dmg/SLAResources
17
18
19# =============================
20# Setting color for text output
21# =============================
22
23COL_BLACK="\x1b[30;01m"
24COL_RED="\x1b[31;01m"
25COL_GREEN="\x1b[32;01m"
26COL_YELLOW="\x1b[33;01m"
27COL_MAGENTA="\x1b[35;01m"
28COL_CYAN="\x1b[36;01m"
29COL_WHITE="\x1b[37;01m"
30COL_BLUE="\x1b[34;01m"
31COL_RESET="\x1b[39;49;00m"
32
33# ======================
34# Setting Chameleon info
35# ======================
36
37version=$( cat version )
38stage=${version##*-}
39revision=$( grep I386BOOT_CHAMELEONREVISION vers.h | awk '{ print $3 }' | tr -d '\"' )
40builddate=$( grep I386BOOT_BUILDDATE vers.h | awk '{ print $3,$4 }' | tr -d '\"' )
41timestamp=$( date -j -f "%Y-%m-%d %H:%M:%S" "${builddate}" "+%s" )
42CHAMELEON_PACKAGE_NAME=${VOLUME_NAME}-${version}-r${revision}
43
44# =========================
45# Start of building process
46# =========================
47
48echo ""
49echo -e $COL_BLACK"----------------------"$COL_RESET
50echo -e $COL_BLACK"Building $VOLUME_NAME DMG"$COL_RESET
51echo -e $COL_BLACK"----------------------"$COL_RESET
52echo ""
53
54# =================================
55# 1) Clean previous builded contents
56# =================================
57
58if [ -x ${SRC_FOLDER} ]; then
59echo "Deleting previous existing source folder/content "
60rm -R ${SRC_FOLDER}
61rm -f ${DMG_TEMP_NAME}
62fi
63
64# ===========================
65# 2) Create the source folder
66# ===========================
67
68echo "[mkdir] Creating source folder "
69mkdir "${SRC_FOLDER}"
70
71# ==================================
72# 3) Copy content into source folder
73# ==================================
74
75ditto -xk "${pkgroot}/Icons/i386.zip" "${SRC_FOLDER}/"
76ditto -xk "${pkgroot}/Icons/doc.zip" "${SRC_FOLDER}/"
77ditto -xk "${pkgroot}/Icons/pan.zip" "${SRC_FOLDER}/"
78ditto -xk "${pkgroot}/Icons/tm.zip" "${SRC_FOLDER}/"
79
80#mv ${SYM_ROOT}/${VOLUME_NAME}.pkg ${SRC_FOLDER}/${VOLUME_NAME}.pkg
81cp -r ${SYM_ROOT}/${CHAMELEON_PACKAGE_NAME}.pkg ${SRC_FOLDER}/${CHAMELEON_PACKAGE_NAME}.pkg
82#cp -r ${pkgroot}/doc/* ${SRC_FOLDER}/Documentation/
83cp -r ${SYM_ROOT%/*}/doc/BootHelp.txt ${SRC_FOLDER}/Documentation/
84cp -r ${SYM_ROOT%/*}/doc/Users_Guide0.5.pdf ${SRC_FOLDER}/Documentation/
85cp -r ${pkgroot}/Configuration/PrefPanel/* ${SRC_FOLDER}/PrefPanel/
86cp -r ${SYM_ROOT}/i386/* ${SRC_FOLDER}/i386/
87cp -r ${SYM_ROOT%/*}/artwork/themes/* ${SRC_FOLDER}/Themes/
88#rm -rf ${SRC_FOLDER}`find . -type d -name .svn`
89
90# The above line caused problems with svn reporting changes to all
91# directories in the Chameleon source folder that exist before compiling
92# svn status would show the following:
93# ~ Chameleon.xcodeproj
94# ~ artwork
95# ~ i386
96# ~ package
97# ~ doc
98# I've changed the code to this for now to get round the problem.
99# Hopefully someone else can find out why it was happenening.
100svnFilesToRemove=($( find "${SRC_FOLDER}" -type d -name '.svn'))
101for (( i = 0 ; i < ${#svnFilesToRemove[@]} ; i++ ))
102do
103rm -rf ${svnFilesToRemove[$i]}
104done
105
106# =======================================
107# 4) Find the size of the folder contents
108# =======================================
109
110FOLDER_SIZE=`/usr/bin/du -s "${SRC_FOLDER}" | sed s/[^0-9].*//`
111
112# =====================================================
113# 4) Allow for partition table and other overhead (10%)
114# =====================================================
115
116IMAGE_SIZE=$(($FOLDER_SIZE * 110/100))
117
118# ============================================
119# 5) Minimum size for an HFS+ partition is 4Mb
120# ============================================
121
122[ $IMAGE_SIZE -lt 19960 ] && IMAGE_SIZE=19960 # [ $IMAGE_SIZE -lt 8300 ] && IMAGE_SIZE=8300
123
124# =================================================================
125# 6) Make sure NEXT_ROOT is not set (if we're building with an SDK)
126# =================================================================
127
128unset NEXT_ROOT
129echo "Source folder size = $FOLDER_SIZE"
130echo "DMG image size (+10%) = $IMAGE_SIZE"
131echo " "
132
133# =======================================
134# 7) Convert the DMG template into RW-DMG
135# =======================================
136
137echo "[hdutil] Creating disk image "
138test -f "${DMG_TEMP_NAME}" && rm -f "${DMG_TEMP_NAME}"
139
140hdiutil convert $TEMPLATE_DMG -format UDRW -o "${DMG_TEMP_NAME}" >/dev/null 2>&1
141hdiutil resize -limits "${DMG_TEMP_NAME}" >/dev/null 2>&1
142hdiutil resize -size 15m "${DMG_TEMP_NAME}" >/dev/null 2>&1
143echo " "
144
145# ===========
146# 8) Mount it
147# ===========
148
149echo "[hdutil] Mounting disk image "
150MOUNT_DIR=/Volumes/$VOLUME_NAME
151DEV_NAME=$(hdiutil attach -readwrite -noverify -noautoopen "${DMG_TEMP_NAME}" | egrep '^/dev/' | sed 1q | awk '{print $1}') >/dev/null 2>&1
152
153echo "Device name:$DEV_NAME"
154echo "Mount directory: $MOUNT_DIR"
155echo " "
156
157# =====================================
158# 9) Make sure it's not world writeable
159# =====================================
160
161mv ${SRC_FOLDER}/${CHAMELEON_PACKAGE_NAME}.pkg ${MOUNT_DIR}/${VOLUME_NAME}.pkg
162cp -R ${SRC_FOLDER}/Documentation ${MOUNT_DIR}/
163cp -R ${SRC_FOLDER}/PrefPanel ${MOUNT_DIR}/
164cp -R ${SRC_FOLDER}/i386 ${MOUNT_DIR}/
165cp -R ${SRC_FOLDER}/Themes ${MOUNT_DIR}/
166
167echo "[chmod] Fixing permission for \"${MOUNT_DIR}\""
168chmod -Rf go-w "${MOUNT_DIR}" || true
169chmod -f a-w "${MOUNT_DIR}"/.DS_Store || true
170echo "Done fixing permissions."
171echo " "
172
173# =============================================
174# 10) Make the top window open itself on mount:
175# =============================================
176
177echo "[openUp] Setting auto open flag"
178if [ -x ${OPENUP_TOOL} ]; then
179echo "Applying openUp..."
180${OPENUP_TOOL} "${MOUNT_DIR}" >/dev/null 2>&1
181fi
182echo " "
183
184# ===========
185# 11) Unmount
186# ===========
187
188echo "[hdutil] Unmounting disk image"
189hdiutil detach "${DEV_NAME}" >/dev/null 2>&1
190echo " "
191
192# ==================
193# 12) Compress image
194# ==================
195
196test -f "${DMG_ROOT}/${VOLUME_NAME}.dmg" && rm -f "${DMG_ROOT}/${VOLUME_NAME}.dmg"
197echo "[hdutil] Compressing disk image"
198hdiutil convert ${DMG_TEMP_NAME} -format UDZO -imagekey zlib-level=9 -o ${DMG_ROOT}/${VOLUME_NAME} >/dev/null 2>&1
199rm -f "${DMG_TEMP_NAME}"
200echo " "
201
202# =========================
203# 13) Adding EULA resources
204# =========================
205
206if [ ! -z "${EULA_RSRC}" -a "${EULA_RSRC}" != "-null-" ]; then
207echo "[ResMerger] Adding EULA resources"
208 hdiutil unflatten ${DMG_ROOT}/${VOLUME_NAME}.dmg >/dev/null 2>&1
209 ResMerger -a ${EULA_RSRC} -o ${DMG_ROOT}/${VOLUME_NAME}.dmg
210 hdiutil flatten ${DMG_ROOT}/${VOLUME_NAME}.dmg >/dev/null 2>&1
211fi
212
213# =======================
214# 14) Adding Icon to .dmg
215# =======================
216
217ditto -xk ${pkgroot}/Icons/dmg.zip "${pkgroot}/Icons"
218DeRez -only icns ${pkgroot}/Icons/Icons/dmg.icns > tempicns.rsrc
219Rez -append tempicns.rsrc -o ${DMG_ROOT}/${VOLUME_NAME}.dmg
220SetFile -a C ${DMG_ROOT}/${VOLUME_NAME}.dmg
221rm -f tempicns.rsrc
222rm -rf "${pkgroot}/Icons/Icons"
223rm -R ${SRC_FOLDER}
224
225# ===
226# END
227# ===
228
229echo "===================="
230echo "Finish $VOLUME_NAME.dmg"
231echo "===================="
232echo ""
233#-----
234
235exit 0
236

Archive Download this file

Revision: 1647