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

Archive Download this file

Revision: 1644