Chameleon

Chameleon Svn Source Tree

Root/trunk/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" )
42
43# =========================
44# Start of building process
45# =========================
46
47echo ""
48echo -e $COL_BLACK"----------------------"$COL_RESET
49echo -e $COL_BLACK"Building $VOLUME_NAME DMG"$COL_RESET
50echo -e $COL_BLACK"----------------------"$COL_RESET
51echo ""
52
53# =================================
54# 1) Clean previus builded contents
55# =================================
56
57if [ -x ${SRC_FOLDER} ]; then
58echo "Deleting previus existing source folder/content "
59rm -R ${SRC_FOLDER}
60rm -f ${DMG_TEMP_NAME}
61fi
62
63# ===========================
64# 2) Create the source folder
65# ===========================
66
67echo "[mkdir] Creating source folder "
68mkdir "${SRC_FOLDER}"
69
70# ==================================
71# 3) Copy content into source folder
72# ==================================
73
74ditto -xk "${pkgroot}/Icons/i386.zip" "${SRC_FOLDER}/"
75ditto -xk "${pkgroot}/Icons/doc.zip" "${SRC_FOLDER}/"
76ditto -xk "${pkgroot}/Icons/pan.zip" "${SRC_FOLDER}/"
77ditto -xk "${pkgroot}/Icons/tm.zip" "${SRC_FOLDER}/"
78
79mv ${SYM_ROOT}/${VOLUME_NAME}.pkg ${SRC_FOLDER}/${VOLUME_NAME}.pkg
80cp -r ${pkgroot}/doc/* ${SRC_FOLDER}/Documentation/
81cp -r ${pkgroot}/Configuration/PrefPanel/* ${SRC_FOLDER}/PrefPanel/
82cp -r ${SYM_ROOT}/i386/* ${SRC_FOLDER}/i386/
83cp -r ${SYM_ROOT%/*}/artwork/themes/* ${SRC_FOLDER}/Themes/
84rm -rf ${SRC_FOLDER}`find . -type d -name .svn`
85
86# =======================================
87# 4) Find the size of the folder contents
88# =======================================
89
90FOLDER_SIZE=`/usr/bin/du -s "${SRC_FOLDER}" | sed s/[^0-9].*//`
91
92# =====================================================
93# 4) Allow for partition table and other overhead (10%)
94# =====================================================
95
96IMAGE_SIZE=$(($FOLDER_SIZE * 110/100))
97
98# ============================================
99# 5) Minimum size for an HFS+ partition is 4Mb
100# ============================================
101
102[ $IMAGE_SIZE -lt 19960 ] && IMAGE_SIZE=19960 # [ $IMAGE_SIZE -lt 8300 ] && IMAGE_SIZE=8300
103
104# =================================================================
105# 6) Make sure NEXT_ROOT is not set (if we're building with an SDK)
106# =================================================================
107
108unset NEXT_ROOT
109echo "Source folder size = $FOLDER_SIZE"
110echo "DMG image size (+10%) = $IMAGE_SIZE"
111echo " "
112
113# =======================================
114# 7) Convert the DMG template into RW-DMG
115# =======================================
116
117echo "[hdutil] Creating disk image "
118test -f "${DMG_TEMP_NAME}" && rm -f "${DMG_TEMP_NAME}"
119
120hdiutil convert $TEMPLATE_DMG -format UDRW -o "${DMG_TEMP_NAME}" >/dev/null 2>&1
121hdiutil resize -limits "${DMG_TEMP_NAME}" >/dev/null 2>&1
122hdiutil resize -size 15m "${DMG_TEMP_NAME}" >/dev/null 2>&1
123echo " "
124
125# ===========
126# 8) Mount it
127# ===========
128
129echo "[hdutil] Mounting disk image "
130MOUNT_DIR=/Volumes/$VOLUME_NAME
131DEV_NAME=$(hdiutil attach -readwrite -noverify -noautoopen "${DMG_TEMP_NAME}" | egrep '^/dev/' | sed 1q | awk '{print $1}') >/dev/null 2>&1
132
133echo "Device name:$DEV_NAME"
134echo "Mount directory: $MOUNT_DIR"
135echo " "
136
137# =====================================
138# 9) Make sure it's not world writeable
139# =====================================
140
141mv ${SRC_FOLDER}/${VOLUME_NAME}.pkg ${MOUNT_DIR}/${VOLUME_NAME}.pkg
142cp -R ${SRC_FOLDER}/Documentation ${MOUNT_DIR}/
143cp -R ${SRC_FOLDER}/PrefPanel ${MOUNT_DIR}/
144cp -R ${SRC_FOLDER}/i386 ${MOUNT_DIR}/
145cp -R ${SRC_FOLDER}/Themes ${MOUNT_DIR}/
146
147echo "[chmod] Fixing permission for \"${MOUNT_DIR}\""
148chmod -Rf go-w "${MOUNT_DIR}" || true
149chmod -f a-w "${MOUNT_DIR}"/.DS_Store || true
150echo "Done fixing permissions."
151echo " "
152
153# =============================================
154# 10) Make the top window open itself on mount:
155# =============================================
156
157echo "[openUp] Setting auto open flag"
158if [ -x ${OPENUP_TOOL} ]; then
159echo "Applying openUp..."
160 ${OPENUP_TOOL} "${MOUNT_DIR}" >/dev/null 2>&1
161fi
162echo " "
163
164# ===========
165# 11) Unmount
166# ===========
167
168echo "[hdutil] Unmounting disk image"
169hdiutil detach "${DEV_NAME}" >/dev/null 2>&1
170echo " "
171
172# ==================
173# 12) Compress image
174# ==================
175
176test -f "${DMG_ROOT}/${VOLUME_NAME}.dmg" && rm -f "${DMG_ROOT}/${VOLUME_NAME}.dmg"
177echo "[hdutil] Compressing disk image"
178hdiutil convert ${DMG_TEMP_NAME} -format UDZO -imagekey zlib-level=9 -o ${DMG_ROOT}/${VOLUME_NAME} >/dev/null 2>&1
179rm -f "${DMG_TEMP_NAME}"
180echo " "
181
182# =========================
183# 13) Adding EULA resources
184# =========================
185
186if [ ! -z "${EULA_RSRC}" -a "${EULA_RSRC}" != "-null-" ]; then
187echo "[ResMerger] Adding EULA resources"
188 hdiutil unflatten ${DMG_ROOT}/${VOLUME_NAME}.dmg >/dev/null 2>&1
189 ResMerger -a ${EULA_RSRC} -o ${DMG_ROOT}/${VOLUME_NAME}.dmg
190 hdiutil flatten ${DMG_ROOT}/${VOLUME_NAME}.dmg >/dev/null 2>&1
191fi
192
193# =======================
194# 14) Adding Icon to .dmg
195# =======================
196
197ditto -xk ${pkgroot}/Icons/dmg.zip "${pkgroot}/Icons"
198DeRez -only icns ${pkgroot}/Icons/Icons/dmg.icns > tempicns.rsrc
199Rez -append tempicns.rsrc -o ${DMG_ROOT}/${VOLUME_NAME}.dmg
200SetFile -a C ${DMG_ROOT}/${VOLUME_NAME}.dmg
201rm -f tempicns.rsrc
202rm -rf "${pkgroot}/Icons/Icons"
203rm -R ${SRC_FOLDER}
204
205# ===
206# END
207# ===
208
209echo "===================="
210echo "Finish $VOLUME_NAME.dmg"
211echo "===================="
212echo ""
213#-----
214exit 0
215

Archive Download this file

Revision: 1504