| 1 | #!/bin/bash␊ |
| 2 | ␊ |
| 3 | # $1 Path to store built dmg␊ |
| 4 | ␊ |
| 5 | pkgroot="${0%/*}"␊ |
| 6 | SYM_ROOT="${1%/*}"␊ |
| 7 | DMG_ROOT=$SYM_ROOT␊ |
| 8 | ␊ |
| 9 | OPENUP_TOOL=${1%/*}/i386/openUp␊ |
| 10 | ␊ |
| 11 | SRC_FOLDER=${1%/*}/source␊ |
| 12 | VOLUME_NAME="Chameleon"␊ |
| 13 | TEMP_NAME="rw.dmg"␊ |
| 14 | DMG_TEMP_NAME=${DMG_ROOT}/${TEMP_NAME}␊ |
| 15 | TEMPLATE_DMG=${pkgroot}/dmg/ro.dmg␊ |
| 16 | EULA_RSRC=${pkgroot}/dmg/SLAResources␊ |
| 17 | ␊ |
| 18 | ␊ |
| 19 | # =============================␊ |
| 20 | # Setting color for text output ␊ |
| 21 | # =============================␊ |
| 22 | ␊ |
| 23 | COL_BLACK="\x1b[30;01m"␊ |
| 24 | COL_RED="\x1b[31;01m"␊ |
| 25 | COL_GREEN="\x1b[32;01m"␊ |
| 26 | COL_YELLOW="\x1b[33;01m"␊ |
| 27 | COL_MAGENTA="\x1b[35;01m"␊ |
| 28 | COL_CYAN="\x1b[36;01m"␊ |
| 29 | COL_WHITE="\x1b[37;01m"␊ |
| 30 | COL_BLUE="\x1b[34;01m"␊ |
| 31 | COL_RESET="\x1b[39;49;00m"␊ |
| 32 | ␊ |
| 33 | # ======================␊ |
| 34 | # Setting Chameleon info␊ |
| 35 | # ======================␊ |
| 36 | ␊ |
| 37 | version=$( cat version )␊ |
| 38 | stage=${version##*-}␊ |
| 39 | revision=$( grep I386BOOT_CHAMELEONREVISION vers.h | awk '{ print $3 }' | tr -d '\"' )␊ |
| 40 | builddate=$( grep I386BOOT_BUILDDATE vers.h | awk '{ print $3,$4 }' | tr -d '\"' )␊ |
| 41 | timestamp=$( date -j -f "%Y-%m-%d %H:%M:%S" "${builddate}" "+%s" )␊ |
| 42 | ␊ |
| 43 | # =========================␊ |
| 44 | # Start of building process␊ |
| 45 | # =========================␊ |
| 46 | ␊ |
| 47 | echo ""␉␊ |
| 48 | echo -e $COL_BLACK"␉----------------------"$COL_RESET␊ |
| 49 | echo -e $COL_BLACK"␉Building $VOLUME_NAME DMG"$COL_RESET␊ |
| 50 | echo -e $COL_BLACK"␉----------------------"$COL_RESET␊ |
| 51 | echo ""␊ |
| 52 | ␊ |
| 53 | # =================================␊ |
| 54 | # 1) Clean previus builded contents␊ |
| 55 | # =================================␊ |
| 56 | ␊ |
| 57 | ␉if [ -x ${SRC_FOLDER} ]; then␊ |
| 58 | ␉␉echo "␉Deleting previus existing source folder/content "␊ |
| 59 | ␉␉rm -R ${SRC_FOLDER} ␊ |
| 60 | ␉␉rm -f ${DMG_TEMP_NAME}␊ |
| 61 | ␉fi␊ |
| 62 | ␊ |
| 63 | # ===========================␊ |
| 64 | # 2) Create the source folder␊ |
| 65 | # ===========================␊ |
| 66 | ␊ |
| 67 | ␉echo "␉[mkdir] Creating source folder "␊ |
| 68 | ␉mkdir "${SRC_FOLDER}"␊ |
| 69 | ␊ |
| 70 | # ==================================␊ |
| 71 | # 3) Copy content into source folder␊ |
| 72 | # ==================================␊ |
| 73 | ␊ |
| 74 | ␉ditto -xk "${pkgroot}/Icons/i386.zip" "${SRC_FOLDER}/"␊ |
| 75 | ␉ditto -xk "${pkgroot}/Icons/doc.zip" "${SRC_FOLDER}/"␊ |
| 76 | ␉ditto -xk "${pkgroot}/Icons/pan.zip" "${SRC_FOLDER}/"␊ |
| 77 | ␉ditto -xk "${pkgroot}/Icons/tm.zip" "${SRC_FOLDER}/"␊ |
| 78 | ␊ |
| 79 | ␉mv ${SYM_ROOT}/${VOLUME_NAME}.pkg ${SRC_FOLDER}/${VOLUME_NAME}.pkg␊ |
| 80 | ␉cp -r ${pkgroot}/doc/* ${SRC_FOLDER}/Documentation/␊ |
| 81 | ␉cp -r ${pkgroot}/Configuration/PrefPanel/* ${SRC_FOLDER}/PrefPanel/␊ |
| 82 | ␉cp -r ${SYM_ROOT}/i386/* ${SRC_FOLDER}/i386/␊ |
| 83 | ␉cp -r ${SYM_ROOT%/*}/artwork/themes/* ${SRC_FOLDER}/Themes/␊ |
| 84 | ␉rm -rf ${SRC_FOLDER}`find . -type d -name .svn`␊ |
| 85 | ␊ |
| 86 | # =======================================␊ |
| 87 | # 4) Find the size of the folder contents␊ |
| 88 | # =======================================␊ |
| 89 | ␊ |
| 90 | ␉FOLDER_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 | ␊ |
| 96 | ␉IMAGE_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 | ␊ |
| 108 | ␉unset NEXT_ROOT␊ |
| 109 | ␉echo "␉Source folder size = $FOLDER_SIZE"␊ |
| 110 | ␉echo "␉DMG image size (+10%) = $IMAGE_SIZE"␊ |
| 111 | ␉echo " "␊ |
| 112 | ␊ |
| 113 | # =======================================␊ |
| 114 | # 7) Convert the DMG template into RW-DMG␊ |
| 115 | # =======================================␊ |
| 116 | ␊ |
| 117 | ␉echo "␉[hdutil] Creating disk image "␊ |
| 118 | ␉test -f "${DMG_TEMP_NAME}" && rm -f "${DMG_TEMP_NAME}"␊ |
| 119 | ␊ |
| 120 | ␉hdiutil convert $TEMPLATE_DMG -format UDRW -o "${DMG_TEMP_NAME}" >/dev/null 2>&1␊ |
| 121 | ␉hdiutil resize -limits "${DMG_TEMP_NAME}" >/dev/null 2>&1␊ |
| 122 | ␉hdiutil resize -size 15m "${DMG_TEMP_NAME}" >/dev/null 2>&1␊ |
| 123 | ␉echo " "␊ |
| 124 | ␊ |
| 125 | # ===========␊ |
| 126 | # 8) Mount it␊ |
| 127 | # ===========␊ |
| 128 | ␊ |
| 129 | ␉echo "␉[hdutil] Mounting disk image "␊ |
| 130 | ␉MOUNT_DIR=/Volumes/$VOLUME_NAME␊ |
| 131 | ␉DEV_NAME=$(hdiutil attach -readwrite -noverify -noautoopen "${DMG_TEMP_NAME}" | egrep '^/dev/' | sed 1q | awk '{print $1}') >/dev/null 2>&1␊ |
| 132 | ␊ |
| 133 | ␉echo "␉Device name:␉$DEV_NAME"␊ |
| 134 | ␉echo "␉Mount directory: $MOUNT_DIR"␊ |
| 135 | ␉echo " "␊ |
| 136 | ␊ |
| 137 | # =====================================␊ |
| 138 | # 9) Make sure it's not world writeable␊ |
| 139 | # =====================================␊ |
| 140 | ␊ |
| 141 | ␉mv ${SRC_FOLDER}/${VOLUME_NAME}.pkg ${MOUNT_DIR}/${VOLUME_NAME}.pkg␊ |
| 142 | ␉cp -R ${SRC_FOLDER}/Documentation ${MOUNT_DIR}/␊ |
| 143 | ␉cp -R ${SRC_FOLDER}/PrefPanel ${MOUNT_DIR}/␊ |
| 144 | ␉cp -R ${SRC_FOLDER}/i386 ${MOUNT_DIR}/␊ |
| 145 | ␉cp -R ${SRC_FOLDER}/Themes ${MOUNT_DIR}/␊ |
| 146 | ␊ |
| 147 | ␉echo "␉[chmod] Fixing permission for \"${MOUNT_DIR}\""␊ |
| 148 | ␉chmod -Rf go-w "${MOUNT_DIR}" || true␊ |
| 149 | ␉chmod -f a-w "${MOUNT_DIR}"/.DS_Store || true␊ |
| 150 | ␉echo "␉Done fixing permissions."␊ |
| 151 | ␉echo " "␊ |
| 152 | ␊ |
| 153 | # =============================================␊ |
| 154 | # 10) Make the top window open itself on mount:␊ |
| 155 | # =============================================␊ |
| 156 | ␊ |
| 157 | ␉echo "␉[openUp] Setting auto open flag"␊ |
| 158 | if [ -x ${OPENUP_TOOL} ]; then␊ |
| 159 | ␉echo "␉Applying openUp..."␊ |
| 160 | ${OPENUP_TOOL} "${MOUNT_DIR}" >/dev/null 2>&1␊ |
| 161 | fi␊ |
| 162 | ␉echo " "␊ |
| 163 | ␊ |
| 164 | # ===========␊ |
| 165 | # 11) Unmount␊ |
| 166 | # ===========␊ |
| 167 | ␊ |
| 168 | ␉echo "␉[hdutil] Unmounting disk image"␊ |
| 169 | ␉hdiutil detach "${DEV_NAME}" >/dev/null 2>&1␊ |
| 170 | ␉echo " "␊ |
| 171 | ␊ |
| 172 | # ==================␊ |
| 173 | # 12) Compress image␊ |
| 174 | # ==================␊ |
| 175 | ␊ |
| 176 | ␉test -f "${DMG_ROOT}/${VOLUME_NAME}.dmg" && rm -f "${DMG_ROOT}/${VOLUME_NAME}.dmg" ␊ |
| 177 | ␉echo "␉[hdutil] Compressing disk image"␊ |
| 178 | ␉hdiutil convert ${DMG_TEMP_NAME} -format UDZO -imagekey zlib-level=9 -o ${DMG_ROOT}/${VOLUME_NAME} >/dev/null 2>&1␊ |
| 179 | ␉rm -f "${DMG_TEMP_NAME}"␊ |
| 180 | ␉echo " "␊ |
| 181 | ␊ |
| 182 | # =========================␊ |
| 183 | # 13) Adding EULA resources␊ |
| 184 | # =========================␊ |
| 185 | ␊ |
| 186 | if [ ! -z "${EULA_RSRC}" -a "${EULA_RSRC}" != "-null-" ]; then␊ |
| 187 | ␉echo "␉[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␊ |
| 191 | fi␊ |
| 192 | ␊ |
| 193 | # =======================␊ |
| 194 | # 14) Adding Icon to .dmg␊ |
| 195 | # =======================␊ |
| 196 | ␊ |
| 197 | ␉ditto -xk ${pkgroot}/Icons/dmg.zip "${pkgroot}/Icons"␊ |
| 198 | ␉DeRez -only icns ${pkgroot}/Icons/Icons/dmg.icns > tempicns.rsrc␊ |
| 199 | ␉Rez -append tempicns.rsrc -o ${DMG_ROOT}/${VOLUME_NAME}.dmg␊ |
| 200 | ␉SetFile -a C ${DMG_ROOT}/${VOLUME_NAME}.dmg␊ |
| 201 | ␉rm -f tempicns.rsrc␊ |
| 202 | ␉rm -rf "${pkgroot}/Icons/Icons"␊ |
| 203 | ␉rm -R ${SRC_FOLDER} ␊ |
| 204 | ␊ |
| 205 | # ===␊ |
| 206 | # END␊ |
| 207 | # ===␊ |
| 208 | ␊ |
| 209 | ␉echo "␉===================="␊ |
| 210 | ␉echo "␉Finish $VOLUME_NAME.dmg"␊ |
| 211 | ␉echo "␉===================="␊ |
| 212 | ␉echo ""␊ |
| 213 | #-----␊ |
| 214 | exit 0␊ |
| 215 | |