Chameleon

Chameleon Svn Source Tree

Root/tags/2.1/package/builddmg.sh

  • Property svn:executable set to *
Source at commit 2403 created 9 years 7 months ago.
By macman, Merged trunk r2400 LZVN decompression routine by MinusZwei "C Conversion" based on works from Pike R. Alpha and AnV Software (Andy Vandijck) and Yosemite diif by viv xix. Includes additional fixes for Yosemite.
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: 2403