1#!/usr/bin/env bash 2 3############################################################################### 4# 5# Copyright (C) 2009-2013 Nintendo. All rights reserved. 6# 7# These coded instructions, statements, and computer programs contain 8# proprietary information of Nintendo of America Inc. and/or Nintendo 9# Company Ltd., and are protected by Federal copyright law. They may 10# not be disclosed to third parties or copied or duplicated in any form, 11# in whole or in part, without the prior written consent of Nintendo. 12# 13############################################################################### 14 15TOOL_DIR=`dirname "$0"` 16TOOL_DIR=`cygpath -w -a "$TOOL_DIR"` 17source "$TOOL_DIR/masteringfunctions.sh" 18 19if [ "$DO_NOT_USE_MAKECFMASTER" != "1" ] 20then 21 makecfmaster.exe archive $@ 22 exit $? 23fi 24############################################################################### 25# update_boot_logos 26############################################################################### 27update_boot_logos() 28{ 29 local FILE_DEST="$1" 30 31 # Src files 32 local BOOT_MOVIE_H264="$CAFE_ROOT/system/bin/ghs/cafe/meta/bootMovie.h264" 33 local BOOT_LOGO_TEX_TGA="$CAFE_ROOT/system/bin/ghs/cafe/meta/bootLogoTex.tga" 34 35 local ICON_TEX_TGA="$CAFE_ROOT/system/bin/ghs/cafe/meta/iconTex.tga" 36 local BOOT_TV_TGA="$CAFE_ROOT/system/bin/ghs/cafe/meta/bootTvTex.tga" 37 local BOOT_DRC_TGA="$CAFE_ROOT/system/bin/ghs/cafe/meta/bootDrcTex.tga" 38 local BOOT_SOUND_BTSND="$CAFE_ROOT/system/bin/ghs/cafe/meta/bootSound.btsnd" 39 local MANUAL_BFMA="$CAFE_ROOT/system/bin/ghs/cafe/meta/Manual.bfma" 40 41 # Dest files 42 local DEST_BOOT_MOVIE_H264="$FILE_DEST/bootMovie.h264" 43 local DEST_BOOT_LOGO_TEX_TGA="$FILE_DEST/bootLogoTex.tga" 44 45 local DEST_ICON_TEX_TGA="$FILE_DEST/iconTex.tga" 46 local DEST_BOOT_TV_TGA="$FILE_DEST/bootTvTex.tga" 47 local DEST_BOOT_DRC_TGA="$FILE_DEST/bootDrcTex.tga" 48 local DEST_BOOT_SOUND_BTSND="$FILE_DEST/bootSound.btsnd" 49 local DEST_MANUAL_BFMA="$FILE_DEST/Manual.bfma" 50 51 # Boot Logo should be updated 52 53 cp -u "$BOOT_MOVIE_H264" "$DEST_BOOT_MOVIE_H264" 54 cp -u "$BOOT_LOGO_TEX_TGA" "$DEST_BOOT_LOGO_TEX_TGA" 55 56 # Applicaion Boot Textures should be copy if files do not exist 57 58 if [ ! -f "$DEST_ICON_TEX_TGA" ] 59 then 60 cp -u "$ICON_TEX_TGA" "$DEST_ICON_TEX_TGA" 61 fi 62 63 if [ ! -f "$DEST_BOOT_TV_TGA" ] 64 then 65 cp -u "$BOOT_TV_TGA" "$DEST_BOOT_TV_TGA" 66 fi 67 68 if [ ! -f "$DEST_BOOT_DRC_TGA" ] 69 then 70 cp -u "$BOOT_DRC_TGA" "$DEST_BOOT_DRC_TGA" 71 fi 72 73 # Copy default boot sound if not exist and the app is game 74 if [ ! -f "$DEST_BOOT_SOUND_BTSND" ] 75 then 76 local APP_TYPE=`sed -n 's|.*<app_type.*>\(.*\)</app_type>|\1|p' "$APP_XML_FILE"` 77 if [ "$APP_TYPE" == "80000000" ] 78 then 79 cp -u "$BOOT_SOUND_BTSND" "$DEST_BOOT_SOUND_BTSND" 80 fi 81 fi 82 83 # Copy default manual (dummy file) if not exist and the app is game 84 if [ ! -f "$DEST_MANUAL_BFMA" ] 85 then 86 local APP_TYPE=`sed -n 's|.*<app_type.*>\(.*\)</app_type>|\1|p' "$APP_XML_FILE"` 87 if [ "$APP_TYPE" == "80000000" ] 88 then 89 cp -u "$MANUAL_BFMA" "$DEST_MANUAL_BFMA" 90 echo "User masterinfo : $USER_MASTERINFO_XML" 91 sed -i -e "/<emanual-info>/{; :loop; N; /<\emanual-info>/! b loop; 92 s|\(<product-code.*>\)\(.*\)\(</product-code.*>\)|\1WUP-X-XXXX\3|p; d} 93 p; d" "$USER_MASTERINFO_XML" 94 fi 95 fi 96} 97 98 99############################################################################### 100# check_invalid_files 101############################################################################### 102check_invalid_files() 103{ 104 local ICON_TEX="$CAFE_META_DIR/iconTex.tga" 105 local BOOT_TV_TEX="$CAFE_META_DIR/bootTvTex.tga" 106 local BOOT_DRC_TEX="$CAFE_META_DIR/bootDrcTex.tga" 107 local BOOT_SOUND="$CAFE_META_DIR/bootSound.btsnd" 108 local BOOT_MOVIE="$CAFE_META_DIR/bootMovie.h264" 109 local BOOT_LOGO_TEX="$CAFE_META_DIR/bootLogoTex.tga" 110 local MANUAL="$CAFE_META_DIR/Manual.bfma" 111 local RESULT 112 113 if [ -e "$ICON_TEX" ]; then 114 # Invalid iconTex.tga in AppConfig 20120914 115 add_msg_if_match "$ICON_TEX" "11024550b6b5287ae16860e30147e6db" \ 116 "Error: A invalid file is used for iconTex.tga." 117 add_msg_if_match "$ICON_TEX" "65da4cd20374d1ef409a86d1a9422aac" \ 118 "Error: A invalid file is used for iconTex.tga." 119 120 # Default iconTex.tga in SDK 2.08.01 121 add_msg_if_match "$ICON_TEX" "bf22cf854dd2cfb4d78cfb6f7990fb7b" \ 122 "Warning: A dummy file is used for iconTex.tga." 123 else 124 add_msg "Warning: iconTex.tga is not found." 125 fi 126 127 if [ -e "$BOOT_TV_TEX" ]; then 128 # Invalid bootTvTex.tga in AppConfig 20120914 129 add_msg_if_match "$BOOT_TV_TEX" "bb25cd114fcd740192b528a464f91f05" \ 130 "Error: A invalid file is used for bootTvTex.tga." 131 add_msg_if_match "$BOOT_TV_TEX" "2ee539eea0601ee24cf75cbd2451ac3c" \ 132 "Error: A invalid file is used for bootTvTex.tga." 133 134 # Default bootTvTex.tga in SDK 2.08.01 135 add_msg_if_match "$BOOT_TV_TEX" "3bd512ba4e82a5ab76a24b339471206e" \ 136 "Warning: A dummy file is used for bootTvTex.tga." 137 else 138 add_msg "Warning: bootTvTex.tga is not found." 139 fi 140 141 if [ -e "$BOOT_DRC_TEX" ]; then 142 # Invalid bootDrcTex.tga in AppConfig 20120914 143 add_msg_if_match "$BOOT_DRC_TEX" "fc84aa7eab1cef0f9567d07ab6051116" \ 144 "Error: A invalid file is used for bootDrcTex.tga." 145 add_msg_if_match "$BOOT_DRC_TEX" "74bd2d8c3ad4f9373512d7aed1965dcc" \ 146 "Error: A invalid file is used for bootDrcTex.tga." 147 148 # Default bootDrcTex.tga in SDK 2.08.0111 149 add_msg_if_match "$BOOT_DRC_TEX" "9ccca540b6e2a857c04f4badf518b50a" \ 150 "Warning: A dummy file is used for bootDrcTex.tga." 151 else 152 add_msg "Warning: bootDrcTex.tga is not found." 153 fi 154 155 if [ -e "$BOOT_SOUND" ]; then 156 # Invalid bootSound.btsnd in AppConfig 20120914 157 add_msg_if_match "$BOOT_SOUND" "1650322dea3c2125b100de1679a5d9cd" \ 158 "Error: A invalid file is used for bootSound.btsnd." 159 160 # Default bootSound.btsnd in SDK 2.08.01 161 add_msg_if_match "$BOOT_SOUND" "a3a38bc784c553d5efc256a46c72f2e5" \ 162 "Info: A default file is used for bootSound.btsnd." 163 else 164 add_msg "Warning: bootSound.btsnd is not found." 165 fi 166 167 if [ -e "$BOOT_MOVIE" ]; then 168 # Default bootMovie.h264 in SDK 2.08.01 169 add_msg_if_not_match "$BOOT_MOVIE" "ca0dac3e3c5654209c754357ef5a2507" \ 170 "Warning: An unexpected file is used for bootMovie.h264." 171 else 172 add_msg "Warning: bootMovie.h264 is not found." 173 fi 174 175 if [ -e "$BOOT_LOGO_TEX" ]; then 176 # Default bootLogoTex.tga in SDK 2.08.01 177 add_msg_if_not_match "$BOOT_LOGO_TEX" "67b312145ecb70514d5bd36fcaae0193" \ 178 "Warning: An unexpected file is used for bootLogoTex.tga." 179 else 180 add_msg "Warning: bootLogoTex.tga is not found." 181 fi 182 183 if [ -e "$MANUAL" ]; then 184 # Invalid Manual.bfma in AppConfig 20120914 185 add_msg_if_match "$MANUAL" "48768235ea7527ee2bf9dace0fb35643" \ 186 "Error: A invalid file is used for Manual.bfma." 187 188 # Default Manual.bfma in SDK 2.08.01 189 add_msg_if_match "$MANUAL" "be805c3079b87ccce315ca0604527721" \ 190 "Warning: A dummy file is used for Manual.bfma." 191 else 192 add_msg "Warning: Manual.bfma is not found." 193 fi 194} 195 196############################################################################### 197# update masterinfo.xml 198############################################################################### 199update_masterinfo () 200{ 201 local FILE_DEFAULT="$1" 202 local FILE_DEST="$2" 203 local DATE="$3" 204 local META_XML="$4" 205 local APP_XML="$5" 206 local COS_XML="$6" 207 local TMP_FILE="$7" 208 local DDF_FILE="$8" 209 local CHECK 210 local RESULT 211 local UNQID 212 local VAR 213 local CTGID 214 local CMN_SIZE 215 local ACC_SIZE 216 217 # if $FILE_DEST does not exist, $FILE_DEFAULT is copied. 218 check_xml_version "$FILE_DEST" "$FILE_DEFAULT" "copy_default_if_mismatch" 219 check_appconf_version $FILE_DEST 220 221 if [ -f "$FILE_DEST" ] 222 then 223 # Set mastering date 224 sed -i -e "s|\(<mastering-date.*>\)\(.*\)\(</mastering-date.*>\)|\1$DATE\3|" "$FILE_DEST" 225 #echo "Mastering date $DATE stamped into masterinfo.xml" 226 227 CHECK=`sed -n 's|.*<mastering-date.*>\(.*\)</mastering-date>|\1|p' "$FILE_DEST"` 228 #echo "mastering-date2 : $CHECK" 229 230 CHECK=`sed -n 's|.*<product_code.*>\(.*\)</product_code>|\1|p' "$META_XML"` 231 if [ $MAKE_PATCH -eq 1 ]; then 232 # change form-code to "U" (patch) 233 CHECK=${CHECK%%-*}-U-${CHECK##*-} 234 sed -i -e "s|\(<form-code.*>\)\(.*\)\(</form-code.*>\)|\1U\3|" "$FILE_DEST" 235 fi 236 #echo "product_code : $CHECK" 237 #sed -i -e "s|\(<product-code.*>\)\(.*\)\(</product-code.*>\)|\1$CHECK\3|" "$FILE_DEST" 238 sed -i -e "/<emanual-info>/{; :loop; N; /<\/emanual-info>/! b loop; p; d} 239 /<product-code>/{s|\(<product-code.*>\)\(.*\)\(</product-code.*>\)|\1$CHECK\3|} 240 p; d" "$FILE_DEST" 241 242 RESULT=`echo $CHECK | sed -e "s/\(......\)\(....\)/\2/"` 243 #echo "initial-code : $RESULT" 244 sed -i -e "s|\(<initial-code.*>\)\(.*\)\(</initial-code.*>\)|\1$RESULT\3|" "$FILE_DEST" 245 246 CHECK=`sed -n 's|.*<company_code.*>\(.*\)</company_code>|\1|p' "$META_XML"` 247 #echo "company_code : $CHECK" 248 sed -i -e "s|\(<company-code.*>\)\(.*\)\(</company-code.*>\)|\1$CHECK\3|" "$FILE_DEST" 249 250 CHECK=`sed -n 's|.*<boss_id.*>\(.*\)</boss_id>|\1|p' "$META_XML"` 251 RESULT=$(printf "0x%x" $CHECK) 252 #echo "boss_id : $RESULT" 253 sed -i -e "s|\(<boss-id.*>\)\(.*\)\(</boss-id.*>\)|\1$RESULT\3|" "$FILE_DEST" 254 255 UNQID=`echo $CHECK | sed -e "s/\(....\)\(..\)\(..\)\(.\)\(.....\)\(..\)/\5/"` 256 RESULT=$(printf "0x%s" $UNQID) 257 #echo "boss-unique_id : $RESULT" 258 sed -i -e "s|\(<boss-unique-id.*>\)\(.*\)\(</boss-unique-id.*>\)|\1$RESULT\3|" "$FILE_DEST" 259 260 CHECK=`sed -n 's|.*<logo_type.*>\(.*\)</logo_type>|\1|p' "$META_XML"` 261 #echo "logo_type : $CHECK" 262 sed -i -e "s|\(<logo-type.*>\)\(.*\)\(</logo-type.*>\)|\1$CHECK\3|" "$FILE_DEST" 263 264 CHECK=`sed -n 's|.*<app_launch_type.*>\(.*\)</app_launch_type>|\1|p' "$META_XML"` 265 RESULT=$(printf "0x%s" $CHECK) 266 #echo "app_launch_type : $RESULT" 267 sed -i -e "s|\(<app-launch-type.*>\)\(.*\)\(</app-launch-type.*>\)|\1$RESULT\3|" "$FILE_DEST" 268 269 CHECK=`sed -n 's|.*<invisible_flag.*>\(.*\)</invisible_flag>|\1|p' "$META_XML"` 270 RESULT=$(printf "0x%s" $CHECK) 271 #echo "invisible_flag : $RESULT" 272 sed -i -e "s|\(<invisible-flag.*>\)\(.*\)\(</invisible-flag.*>\)|\1$RESULT\3|" "$FILE_DEST" 273 274 CHECK=`sed -n 's|.*<no_managed_flag.*>\(.*\)</no_managed_flag>|\1|p' "$META_XML"` 275 RESULT=$(printf "0x%s" $CHECK) 276 #echo "no_managed_flag : $RESULT" 277 sed -i -e "s|\(<no-managed-flag.*>\)\(.*\)\(</no-managed-flag.*>\)|\1$RESULT\3|" "$FILE_DEST" 278 279 CHECK=`sed -n 's|.*<no_event_log.*>\(.*\)</no_event_log>|\1|p' "$META_XML"` 280 RESULT=$(printf "0x%s" $CHECK) 281 #echo "no_event_log : $RESULT" 282 sed -i -e "s|\(<no-event-log.*>\)\(.*\)\(</no-event-log.*>\)|\1$RESULT\3|" "$FILE_DEST" 283 284 CHECK=`sed -n 's|.*<no_icon_database.*>\(.*\)</no_icon_database>|\1|p' "$META_XML"` 285 RESULT=$(printf "0x%s" $CHECK) 286 #echo "no_icon_database : $RESULT" 287 sed -i -e "s|\(<no-icon-database.*>\)\(.*\)\(</no-icon-database.*>\)|\1$RESULT\3|" "$FILE_DEST" 288 289 CHECK=`sed -n 's|.*<launching_flag.*>\(.*\)</launching_flag>|\1|p' "$META_XML"` 290 RESULT=$(printf "0x%s" $CHECK) 291 #echo "launching_flag : $RESULT" 292 sed -i -e "s|\(<launching-flag.*>\)\(.*\)\(</launching-flag.*>\)|\1$RESULT\3|" "$FILE_DEST" 293 294 CHECK=`sed -n 's|.*<install_flag.*>\(.*\)</install_flag>|\1|p' "$META_XML"` 295 RESULT=$(printf "0x%s" $CHECK) 296 #echo "install_flag : $TRESULT" 297 sed -i -e "s|\(<install-flag.*>\)\(.*\)\(</install-flag.*>\)|\1$RESULT\3|" "$FILE_DEST" 298 299 CHECK=`sed -n 's|.*<closing_msg.*>\(.*\)</closing_msg>|\1|p' "$META_XML"` 300 #echo "closing_msg : $CHECK" 301 sed -i -e "s|\(<closing-msg.*>\)\(.*\)\(</closing-msg.*>\)|\1$CHECK\3|" "$FILE_DEST" 302 303 CHECK=`sed -n 's|.*<app_size.*>\(.*\)</app_size>|\1|p' "$META_XML"` 304 RESULT=$(printf "0x%s" $CHECK) 305 #echo "app_size : $RESULT" 306 sed -i -e "s|\(<app-size.*>\)\(.*\)\(</app-size.*>\)|\1$RESULT\3|" "$FILE_DEST" 307 308 CHECK=`sed -n 's|.*<join_game_id.*>\(.*\)</join_game_id>|\1|p' "$META_XML"` 309 RESULT=$(printf "0x%s" $CHECK) 310 #echo "join_game_id : $RESULT" 311 sed -i -e "s|\(<join-game-id.*>\)\(.*\)\(</join-game-id.*>\)|\1$RESULT\3|" "$FILE_DEST" 312 313 CHECK=`sed -n 's|.*<join_game_mode_mask.*>\(.*\)</join_game_mode_mask>|\1|p' "$META_XML"` 314 RESULT=$(printf "0x%s" $CHECK) 315 #echo "join_game_mode_mask : $RESULT" 316 sed -i -e "s|\(<join-game-mode-mask.*>\)\(.*\)\(</join-game-mode-mask.*>\)|\1$RESULT\3|" "$FILE_DEST" 317 318 CHECK=`sed -n 's|.*<bg_daemon_enable.*>\(.*\)</bg_daemon_enable>|\1|p' "$META_XML"` 319 #echo "bg_daemon_enable : $CHECK" 320 sed -i -e "s|\(<bg-daemon-enable.*>\)\(.*\)\(</bg-daemon-enable.*>\)|\1$CHECK\3|" "$FILE_DEST" 321 322 CHECK=`sed -n 's|.*<olv_accesskey.*>\(.*\)</olv_accesskey>|\1|p' "$META_XML"` 323 #echo "olv_accesskey : $CHECK" 324 sed -i -e "s|\(<olv-accesskey.*>\)\(.*\)\(</olv-accesskey.*>\)|\1$CHECK\3|" "$FILE_DEST" 325 326 CHECK=`sed -n 's|.*<wood_tin.*>\(.*\)</wood_tin>|\1|p' "$META_XML"` 327 #echo "wood_tin : $CHECK" 328 sed -i -e "s|\(<wood-tin.*>\)\(.*\)\(</wood-tin.*>\)|\1$CHECK\3|" "$FILE_DEST" 329 330 CHECK=`sed -n 's|.*<e_manual.*>\(.*\)</e_manual>|\1|p' "$META_XML"` 331 #echo "e_manual : $CHECK" 332 sed -i -e "s|\(<e-manual.*>\)\(.*\)\(</e-manual.*>\)|\1$CHECK\3|" "$FILE_DEST" 333 334 CHECK=`sed -n 's|.*<e_manual_version.*>\(.*\)</e_manual_version>|\1|p' "$META_XML"` 335 #echo "e_manual_versionl : $CHECK" 336 sed -i -e "s|\(<e-manual-version.*>\)\(.*\)\(</e-manual-version.*>\)|\1$CHECK\3|" "$FILE_DEST" 337 338 CMN_SIZE=`sed -n 's|.*<common_save_size.*>\(.*\)</common_save_size>|\1|p' "$META_XML"` 339 RESULT=$(printf "0x%s" $CMN_SIZE) 340 #echo "common_save_size : $RESULT" 341 sed -i -e "s|\(<common-save-size.*>\)\(.*\)\(</common-save-size.*>\)|\1$RESULT\3|" "$FILE_DEST" 342 343 ACC_SIZE=`sed -n 's|.*<account_save_size.*>\(.*\)</account_save_size>|\1|p' "$META_XML"` 344 RESULT=$(printf "0x%s" $ACC_SIZE) 345 #echo "account_save_size : $RESULT" 346 sed -i -e "s|\(<account-save-size.*>\)\(.*\)\(</account-save-size.*>\)|\1$RESULT\3|" "$FILE_DEST" 347 348 CMN_SIZE=$(printf "%d" 0x$CMN_SIZE) 349 ACC_SIZE=$(printf "%d" 0x$ACC_SIZE) 350 351 if [ "$CMN_SIZE" -gt 0 ] && [ "$ACC_SIZE" -gt 0 ] ; 352 then 353 CHECK="both" 354 elif [ "$CMN_SIZE" -gt 0 ] 355 then 356 CHECK="common" 357 elif [ "$ACC_SIZE" -gt 0 ] 358 then 359 CHECK="account" 360 else 361 CHECK="none" 362 fi 363 #echo "save_type : $CHECK" 364 sed -i -e "s|\(<save-type.*>\)\(.*\)\(</save-type.*>\)|\1$CHECK\3|" "$FILE_DEST" 365 366 CHECK=`sed -n 's|.*<save_no_rollback.*>\(.*\)</save_no_rollback>|\1|p' "$META_XML"` 367 #echo "save_no_rollback : $CHECK" 368 sed -i -e "s|\(<no-rollback.*>\)\(.*\)\(</no-rollback.*>\)|\1$CHECK\3|" "$FILE_DEST" 369 370 CHECK=`sed -n 's|.*<common_boss_size.*>\(.*\)</common_boss_size>|\1|p' "$META_XML"` 371 RESULT=$(printf "0x%s" $CHECK) 372 #echo "common_boss_size : $RESULT" 373 sed -i -e "s|\(<common-boss-size.*>\)\(.*\)\(</common-boss-size.*>\)|\1$RESULT\3|" "$FILE_DEST" 374 375 CHECK=`sed -n 's|.*<account_boss_size.*>\(.*\)</account_boss_size>|\1|p' "$META_XML"` 376 RESULT=$(printf "0x%s" $CHECK) 377 #echo "account_boss_size : $RESULT" 378 sed -i -e "s|\(<account-boss-size.*>\)\(.*\)\(</account-boss-size.*>\)|\1$RESULT\3|" "$FILE_DEST" 379 380 CHECK=`sed -n 's|.*<region.*>\(.*\)</region>|\1|p' "$META_XML"` 381 RESULT=$(printf "0x%s" $CHECK) 382 #echo "region : $RESULT" 383 sed -i -e "s|\(<region.*>\)\(.*\)\(</region.*>\)|\1$RESULT\3|" "$FILE_DEST" 384 385 CHECK=`sed -n 's|.*<title_version.*>\(.*\)</title_version>|\1|p' "$APP_XML"` 386 RESULT=$(printf "0x%s" $CHECK) 387 #echo "title_version : $RESULT" 388 sed -i -e "s|\(<title-version.*>\)\(.*\)\(</title-version.*>\)|\1$RESULT\3|" "$FILE_DEST" 389 390 CHECK=`sed -n 's|.*<title_id.*>\(.*\)</title_id>|\1|p' "$APP_XML"` 391 RESULT=$(printf "0x%s" $CHECK) 392 #echo "title_id : $RESULT" 393 sed -i -e "s|\(<title-id.*>\)\(.*\)\(</title-id.*>\)|\1$RESULT\3|" "$FILE_DEST" 394 395 UNQID=`echo $CHECK | sed -e "s/\(....\)\(..\)\(..\)\(.\)\(.....\)\(..\)/\5/"` 396 RESULT=$(printf "0x%s" $UNQID) 397 #echo "unique_id : $RESULT" 398 sed -i -e "s|\(<unique-id.*>\)\(.*\)\(</unique-id.*>\)|\1$RESULT\3|" "$FILE_DEST" 399 400 VAR=`echo $CHECK | sed -e "s/\(....\)\(..\)\(..\)\(.\)\(.....\)\(..\)/\6/"` 401 RESULT=$(printf "0x%s" $VAR) 402 #echo "variation : $RESULT" 403 sed -i -e "s|\(<variation.*>\)\(.*\)\(</variation.*>\)|\1$RESULT\3|" "$FILE_DEST" 404 405 CTGID=`echo $CHECK | sed -e "s/\(....\)\(..\)\(..\)\(.\)\(.....\)\(..\)/\3/"` 406 RESULT=$(printf "0x%s" $CTGID) 407 #echo "category-id : $RESULT" 408 sed -i -e "s|\(<category-id.*>\)\(.*\)\(</category-id.*>\)|\1$RESULT\3|" "$FILE_DEST" 409 410 CHECK=`sed -n 's|.*<group_id.*>\(.*\)</group_id>|\1|p' "$APP_XML"` 411 RESULT=$(printf "0x%s" $CHECK) 412 #echo "group_id : $RESULT" 413 sed -i -e "s|\(<group-id.*>\)\(.*\)\(</group-id.*>\)|\1$RESULT\3|" "$FILE_DEST" 414 415 CHECK=`sed -n 's|.*<os_version.*>\(.*\)</os_version>|\1|p' "$APP_XML"` 416 RESULT=$(printf "0x%s" $CHECK) 417 #echo "os_version : $RESULT" 418 sed -i -e "s|\(<os-version.*>\)\(.*\)\(</os-version.*>\)|\1$RESULT\3|" "$FILE_DEST" 419 420 CHECK=`sed -n 's|.*<app_type.*>\(.*\)</app_type>|\1|p' "$APP_XML"` 421 RESULT=$(printf "0x%s" $CHECK) 422 #echo "os_version : $RESULT" 423 sed -i -e "s|\(<app-type.*>\)\(.*\)\(</app-type.*>\)|\1$RESULT\3|" "$FILE_DEST" 424 425 CHECK=`sed -n 's|.*<max_codesize.*>\(.*\)</max_codesize>|\1|p' "$COS_XML"` 426 RESULT=$(printf "0x%s" $CHECK) 427 #echo "max_codesize : $RESULT" 428 sed -i -e "s|\(<max-mem-codesize.*>\)\(.*\)\(</max-mem-codesize.*>\)|\1$RESULT\3|" "$FILE_DEST" 429 430 CHECK=`sed -n 's|.*<max_size.*>\(.*\)</max_size>|\1|p' "$COS_XML"` 431 RESULT=$(printf "0x%s" $CHECK) 432 #echo "max_size : $RESULT" 433 sed -i -e "s|\(<max-mem-size.*>\)\(.*\)\(</max-mem-size.*>\)|\1$RESULT\3|" "$FILE_DEST" 434 435 if [ -z "$G_APP_BUILD_TYPE" ] 436 then 437 add_msg "Warning: G_APP_BUILD_TYPE is NULL" 438 # Not error if G_APP_BUILD_TYPE is NULL 439 elif [ $G_APP_BUILD_TYPE == "NDEBUG" ]; then 440 RESULT="NODEBUG" 441 sed -i -e "s|\(<build-type.*>\)\(.*\)\(</build-type.*>\)|\1$RESULT\3|" "$FILE_DEST" 442 elif [ $G_APP_BUILD_TYPE == "DEBUG" ]; then 443 RESULT="DEBUG" 444 sed -i -e "s|\(<build-type.*>\)\(.*\)\(</build-type.*>\)|\1$RESULT\3|" "$FILE_DEST" 445 fi 446 #echo "build-type : $RESULT" 447 448 if [ $MAKE_PATCH -eq 1 ]; then 449 sed -i -e "s|\(<GameType.*>\)\(.*\)\(</GameType.*>\)|\1GP\3|" "$FILE_DEST" 450 else 451 sed -i -e "s|\(<GameType.*>\)\(.*\)\(</GameType.*>\)|\1GM\3|" "$FILE_DEST" 452 fi 453 454 if [ -e "$DDF_FILE" ]; then 455 embed_ddf_info_to_masterinfo "$DDF_FILE" "$FILE_DEST" 456 fi 457 458 embed_sdk_version_to_masterinfo "$FILE_DEST" 459 embed_tool_version_to_masterinfo "$FILE_DEST" 460 embed_mastering_sdk_version "$FILE_DEST" 461 reset_mastering_flag "$FILE_DEST" "$META_XML" 462 fi 463} 464 465############################################################################### 466# erase temporary items 467############################################################################### 468erase_work () 469{ 470 export CAFERUN_OPTION_USE_DVDFS= 471 export CAFERUN_WORK_DIR= 472 export CAFE_CODE_DIR= 473 export CAFE_SYSTEM_DIR= 474 export CAFERUN_OPTION_USE_ATFS= 475 export INCLUDE_SYSTEM_DIR= 476 477 rm -Rf "$TEMP_WORK_DIR" 478} 479 480############################################################################### 481# print usage help message 482############################################################################### 483usage () 484{ 485 cat <<EOF 486 487 $(basename $0) - Create master archive file from application RPX 488 489 Usage: $(basename $0) <optional args> 490 491 options: 492 -r <path> : RPX file to generate mastering image. 493 If omitted, the application previously executed by caferun/ 494 cafediscrun will be used. 495 -o <path> : Output file name without extension. 496 Extension '.wumad' is automatically added. 497 If omitted, use RPX file name with the extension .wumad 498 at the current work dir. 499 -w <path> : Temporary directory for mastering. 500 If omitted, create temporary directory at the current work dir. 501 -u : Include system update partition on master image. 502 Update partition is effective on optical disc only. 503 -a <aoc_root_path> <aoc_name> 504 : Make an add-on content master archive from content files 505 under <aoc_root_path>. The content files should exist under 506 <aoc_root_path>/content/XXXX. 507 <aoc_root_path>/code/<aoc_name>.ddf is used as the individual 508 ddf file, if exists. 509 -p <past_wumad> 510 : Make a patch master archive from <past_wumad> and the current 511 application indicated by -r <path>. 512 When creating the first patch, use the original disc master 513 archive as <past_wumad>. 514 When creating the second or later patch, use the previously 515 submitted patch master archive as <past_wumad>. 516EOF 517} 518 519############################################################################### 520# main 521############################################################################### 522 523SKIP_COPY_DEFAULT_FILES=0 524EXPAND_FST_MAX_SIZE=0 525 526CAFE_SYSTEM_DIR="`cygpath -a $CAFE_SLC_DIR`/sys" 527SYS_XML_FILE="`cygpath -a $CAFE_SLC_DIR`/sys/config/system.xml" 528DEFAULT_MASTERINFO_XML="$CAFE_ROOT/system/bin/tool/mastering/resources/masterinfo.xml" 529USER_MASTERINFO_XML= 530RPX_FILE="" 531OUTPUT_FILE_NOEXT="" 532INCLUDE_SYSTEM_DIR=0 533INCLUDE_UPDATE_PARTITION=0 534VERBOSE=1 535MAKE_ADD_ON_CONTENT=0 536MAKE_PATCH=0 537MAKE_PATCH_OPTION="" 538EXPAND_SECTION_SIZE_RANGE=0 539CAFEMAKEDLF_OPTION="" 540KIOSK_DEFAULT_DDF="" 541PAST_WUMAD="" 542DO_MAKEDISCIMAGE=0 543DO_MAKEDOWNLOADIMAGE=0 544SKIP_UNIQUE_ID_CHECK=0 545SECTION_ENTRY_HASH_OPTION="-filename_addhash" 546rval=0 547 548# mastering date 549DATE=$(date '+%Y-%m-%d %T') 550echo "Mastering date to be stamped: $DATE" 551 552while getopts ":r:w:o:usfvap:icenm:k:dzS" opt; do 553 case $opt in 554 r ) RPX_FILE="`cygpath -a $OPTARG`" ;; 555 w ) TEMP_WORK_DIR="`cygpath -a $OPTARG`" ;; 556 o ) OUTPUT_FILE_NOEXT="`cygpath -a $OPTARG`" ;; 557 u ) INCLUDE_UPDATE_PARTITION=1 ;; 558 s ) INCLUDE_SYSTEM_DIR=1 ;; 559 f ) DO_MAKEDISCIMAGE=1 ;; # do makediscimage in one shot 560 v ) VERBOSE=1 ;; 561 a ) MAKE_ADD_ON_CONTENT=1 ;; 562 p ) PAST_WUMAD="`cygpath -a $OPTARG`" 563 MAKE_PATCH=1 ;; 564 i ) G_IGNORE_ERROR=1 ;; 565 c ) SKIP_COPY_DEFAULT_FILES=1 ;; 566 e ) EXPAND_FST_MAX_SIZE=1 ;; 567 n ) MAKE_PATCH_OPTION="$MAKE_PATCH_OPTION -ignoreversion" ;; 568 m ) EXPAND_SECTION_SIZE_RANGE=1 569 CAFEMAKEDLF_OPTION="$CAFEMAKEDLF_OPTION -mss=$OPTARG" ;; 570 k ) CAFEMAKEDLF_OPTION="$CAFEMAKEDLF_OPTION -v" 571 KIOSK_DEFAULT_DDF="$OPTARG" 572 G_METARATING_DISABLED=1 573 if [ ! -e "$KIOSK_DEFAULT_DDF" ]; then 574 add_msg "Error: Kiosk ddf does not exist." 575 usage 576 exit 1 577 fi 578 ;; 579 d ) DO_MAKEDOWNLOADIMAGE=1 ;; # do makecfdownloadimage in one shot 580 z ) SKIP_UNIQUE_ID_CHECK=1 ;; 581 S ) SECTION_ENTRY_HASH_OPTION="" 582 add_msg "Disable Section Entry Hash." ;; 583 \? ) usage 584 exit 1 ;; 585 esac 586done 587 588if [ "$MAKE_ADD_ON_CONTENT" -eq 1 ] 589then 590 shift `expr "$OPTIND" - 1` 591 "$MAKEAOC" "$@" 592 exit "$?" 593fi 594 595if [ -z "$CAFE_TEMP" ] 596then 597 CAFERUN_WORK_DIR=`cygpath -a "$CYGWIN_PATH/tmp/${SESSION_PATH_PREFIX}caferun"` 598else 599 CAFERUN_WORK_DIR=`cygpath -a "$CAFE_TEMP/${SESSION_PATH_PREFIX}caferun"` 600fi 601 602# If rpx name is omitted, get info from previous launched info 603if [ -z "$RPX_FILE" ] 604then 605 if [ "$VERBOSE" -eq 1 ] 606 then 607 echo "*** Using previously launched application ***" 608 fi 609 PREV_LAUNCH_XML_FILE="$CAFERUN_WORK_DIR/previous_launch_info.xml" 610 if [ ! -f "$PREV_LAUNCH_XML_FILE" ] 611 then 612 echo "$(basename $0) failed: Please run any application by caferun/cafediscrun." 613 exit 2 614 fi 615 RPX_DIR=`sed -n 's|.*<code_dir.*>\(.*\)</code_dir>|\1|p' "$PREV_LAUNCH_XML_FILE"` 616 APP_XML_FILE="$RPX_DIR/app.xml" 617 COS_XML_FILE="$RPX_DIR/cos.xml" 618 TMP_FILE="$RPX_DIR/temp.txt" 619 RPX_FILE=`sed -n 's|.*<argstr.*>\(.*\)</argstr>|\1|p' "$COS_XML_FILE"` 620 RPX_FILE=(`echo "$RPX_FILE" | grep -Eo "[^ ]*\.rpx"`) 621 RPX_FILE="$RPX_DIR/${RPX_FILE[0]}" 622 RPX_DIR="`cygpath -m -a $RPX_DIR`" 623else 624 if [ "$SESSION_MANAGER" == "1" ] 625 then 626 # Repoint the RPX_FILE to the one in the CAFE_DATA_TMP folder 627 RPX_FILE_SRC_DIR="$(dirname "$RPX_FILE")" 628 TMP_SUB_DIR=`basename "$RPX_FILE" ".rpx"` 629 630 RPX_FILE="$CAFE_DATA_TMP/$TMP_SUB_DIR/`basename "$RPX_FILE"`" 631 echo "$(basename $0): Repointing RPX file for multi-devkit environment." 632 fi 633 634 RPX_DIR="`cygpath -m -a $RPX_FILE`" 635 RPX_DIR="`dirname $RPX_DIR`" 636 APP_XML_FILE="`dirname $RPX_FILE`/app.xml" 637 COS_XML_FILE="`dirname $RPX_FILE`/cos.xml" 638fi 639 640# we can't use quotations for wildcard 641RPL_FILE=`dirname $RPX_FILE`/*.rpl 642 643if [ ! -f "$RPX_FILE" ] 644then 645 echo "$(basename $0) failed: rpx file name is not found." 646 usage 647 exit 3 648fi 649 650if [ ! ${RPX_FILE:(-4)} == ".rpx" ] 651then 652 echo "$(basename $0) failed: Please specify rpx file with -r option." 653 usage 654 exit 4 655fi 656 657if [ -z "$OUTPUT_FILE_NOEXT" ] 658then 659 if [ $MAKE_PATCH -eq 1 ] 660 then 661 OUTPUT_FILE_NOEXT="patch"`date +%Y%m%d%H%M%S`"_"`basename "${RPX_FILE%.*}"` 662 else 663 # Use file name only in order to output at current work directory 664 OUTPUT_FILE_NOEXT=`basename "${RPX_FILE%.*}"` 665 fi 666fi 667 668if [ -z "$TEMP_WORK_DIR" ] 669then 670 TEMP_WORK_DIR="`basename "${OUTPUT_FILE_NOEXT%.*}"`_tmp" 671else 672 if [ -e "$TEMP_WORK_DIR" ] 673 then 674 TEMP_WORK_SUBDIR="`basename "${OUTPUT_FILE_NOEXT%.*}"`_tmp" 675 TEMP_WORK_DIR="$TEMP_WORK_DIR/$TEMP_WORK_SUBDIR" 676 fi 677fi 678dir_check "$TEMP_WORK_DIR" 1 679rval=$? 680if [ $rval -ne 0 ] 681then 682 erase_work 683 exit 7 684fi 685 686if [ ! -e "$TEMP_WORK_DIR" ] 687then 688 echo "$(basename $0): Creating $TEMP_WORK_DIR." 689 mkdir -m 777 -p "$TEMP_WORK_DIR" 690fi 691 692if [ "$INCLUDE_SYSTEM_DIR" -eq 1 ] 693then 694 if [ ! -f "$SYS_XML_FILE" ] 695 then 696 echo "$(basename $0) failed: Cannot find $SYS_XML_FILE" 697 echo " Please caferun before creating master data." 698 exit 6 699 fi 700fi 701 702if [ ! -f "$APP_XML_FILE" ] 703then 704 echo "$(basename $0) failed: Cannot find $APP_XML_FILE" 705 echo " Please caferun before creating master data." 706 exit 7 707fi 708 709if [ ! -f "$COS_XML_FILE" ] 710then 711 echo "$(basename $0) failed: Cannot find $COS_XML_FILE" 712 echo " Please caferun before creating master data." 713 exit 8 714fi 715 716if [ "$SKIP_UNIQUE_ID_CHECK" -eq 1 ] 717then 718 add_msg "Warning: Skipped unique id check." 719else 720 check_unique_id "$APP_XML_FILE" 721fi 722 723RPX_PATH_WIN=`cygpath -w -a "$RPX_FILE"` 724 725# warn if individual ddf not found 726INDIVIDUAL_DDF_FILE="${RPX_PATH_WIN%.*}.ddf" 727INDIVIDUAL_DDF_HAS_METARATING="$G_READONLY_FILE_NOT_FOUND" 728 729if [ ! -e "$INDIVIDUAL_DDF_FILE" ] 730then 731 add_msg "Warning: $INDIVIDUAL_DDF_FILE is not found. Use Application Configuration Tool to create a ddf file." 732else 733 ddf_has_metarating "$INDIVIDUAL_DDF_FILE" 734 INDIVIDUAL_DDF_HAS_METARATING=$? 735fi 736 737USER_MASTERINFO_XML="$RPX_DIR/masterinfo.xml" 738 739if [ -e "$KIOSK_DEFAULT_DDF" ]; then 740 if [ "$INDIVIDUAL_DDF_HAS_METARATING" -eq "$G_READONLY_DDF_METARATING_ON" ]; then 741 add_msg "Error: In KIOSK mode, METARATING section must not exist in the individual ddf file." 742 fi 743elif [ "$MAKE_PATCH" -eq 1 ]; then 744 745 EXTRACTFILE_OUT_DIR=`cygpath -w -a "$TEMP_WORK_DIR"` 746 PAST_WUMAD_WIN=`cygpath -w "$PAST_WUMAD"` 747 748 $EXTRACTFILE -v -nc "-od=$EXTRACTFILE_OUT_DIR" "$PAST_WUMAD_WIN" "masterinfo.xml" 749 PAST_MASTERINFO="$EXTRACTFILE_OUT_DIR\pastmasterinfo.bin" 750 mv "$EXTRACTFILE_OUT_DIR\masterinfo.xml" "$PAST_MASTERINFO" 751 752 masterinfo_get_metarating_flag "$PAST_MASTERINFO" 753 PAST_MASTERINFO_METARATING=$? 754 755 if [ "$PAST_MASTERINFO_METARATING" -eq "$G_READONLY_MASTERINFO_METARATING_ON" ]; then 756 if [ "$INDIVIDUAL_DDF_HAS_METARATING" -eq "$G_READONLY_DDF_METARATING_OFF" ]; then 757 add_msg "Error: Past Wumad has METARATING section, but the ddf doesn't. Please check $INDIVIDUAL_DDF_FILE. Use Application Configuration Tool ver 1.3.10 or later." 758 fi 759 echo "Create a patch with METARATING section." 760 G_METARATING_DISABLED=0 761 masterinfo_set_metarating_flag "$USER_MASTERINFO_XML" "$G_READONLY_MASTERINFO_METARATING_ON" 762 copy_past_rating_image_files "$PAST_WUMAD_WIN" "$EXTRACTFILE_OUT_DIR" 763 else 764 # METARATING does not exist in the past wumad. 765 if [ "$INDIVIDUAL_DDF_HAS_METARATING" -eq "$G_READONLY_DDF_METARATING_ON" ]; then 766 echo "Disable METARATING section as the past wumad does not have it." 767 fi 768 echo "Create a patch without METARATING section." 769 DEFAULT_MASTERINFO_XML="$CAFE_ROOT/system/bin/tool/mastering/resources/masterinfo_nometarating.xml" 770 G_METARATING_DISABLED=1 771 masterinfo_set_metarating_flag "$USER_MASTERINFO_XML" "$G_READONLY_MASTERINFO_METARATING_OFF" 772 fi 773 774else 775 if [ "$INDIVIDUAL_DDF_HAS_METARATING" -ne "$G_READONLY_DDF_METARATING_ON" ]; then 776 # not to affect SDK apps, do not add METARATING section unless individual ddf is provided. 777 masterinfo_get_metarating_use "$USER_MASTERINFO_XML" 778 MASTERINFO_METARATING_USE=$? 779 if [ $MASTERINFO_METARATING_USE -eq "$G_READONLY_MASTERINFO_METARATING_OFF" ]; then 780 # <metarating-use> 0 means this is set by appconf_sysapp. so no warning. 781 echo "Create a wumad without METARATING section" 782 else 783 add_msg "Warning: Create a wumad without METARATING section. Use Application Configuration Tool ver 1.3.10 or later." 784 fi 785 786 DEFAULT_MASTERINFO_XML="$CAFE_ROOT/system/bin/tool/mastering/resources/masterinfo_nometarating.xml" 787 788 G_METARATING_DISABLED=1 789 masterinfo_set_metarating_flag "$USER_MASTERINFO_XML" "$G_READONLY_MASTERINFO_METARATING_OFF" 790 else 791 echo "Create a wumad with METARATING section" 792 G_METARATING_DISABLED=0 793 masterinfo_set_metarating_flag "$USER_MASTERINFO_XML" "$G_READONLY_MASTERINFO_METARATING_ON" 794 copy_dummy_rating_files 795 fi 796fi 797 798# Make a summary of output file names 799if [ "$DO_MAKEDISCIMAGE" -eq 1 ] 800then 801 OUTPUT_FILE_SUMMARY="$OUTPUT_FILE_NOEXT.wumad, $OUTPUT_FILE_NOEXT.wum" 802else 803 OUTPUT_FILE_SUMMARY="$OUTPUT_FILE_NOEXT.wumad" 804fi 805 806# Echo settings (if -v specified) 807if [ "$VERBOSE" -eq 1 ] 808then 809 echo "======== $(basename $0) parameters ========" 810 if [ "$INCLUDE_UPDATE_PARTITION" -eq 1 ] 811 then 812 echo "*** System update partition is to be merged ***" 813 fi 814 if [ "$INCLUDE_SYSTEM_DIR" -eq 1 ] 815 then 816 echo "*** Create image with /sys included ***" 817 fi 818 if [ "$MAKE_PATCH" -eq 1 ] 819 then 820 echo "*** Create patch master archive ***" 821 echo "Past WUMAD : $PAST_WUMAD" 822 fi 823 echo "Output : $OUTPUT_FILE_SUMMARY" 824 echo "RPX File : $RPX_FILE" 825 echo "RPX Dir : $RPX_DIR" 826 echo "---------------------------------------------" 827 if [ "$INCLUDE_SYSTEM_DIR" -eq 1 ] 828 then 829 echo "Sys XML : $SYS_XML_FILE" 830 fi 831 echo "App XML : $APP_XML_FILE" 832 echo "Cos XML : $COS_XML_FILE" 833 echo "---------------------------------------------" 834 echo "Temp dir : $TEMP_WORK_DIR" 835 echo "Code dir : $RPX_DIR" 836 echo "Content dir : $CAFE_CONTENT_DIR" 837 echo "Meta dir : $CAFE_META_DIR" 838 if [ "$INCLUDE_SYSTEM_DIR" -eq 1 ] 839 then 840 echo "System dir : $CAFE_SYSTEM_DIR" 841 fi 842 echo "" 843fi 844 845# Generate dlf file and binaries (disc header, volume header, FST) 846RPX_PATH=`cygpath -m -a "$RPX_FILE"` 847RPX_PATH_WIN=`cygpath -w -a "$RPX_FILE"` 848 849# Export settings 850export CAFERUN_WORK_DIR="$CAFERUN_WORK_DIR" 851export CAFE_CODE_DIR="$RPX_DIR" 852export CAFE_SYSTEM_DIR="$CAFE_SYSTEM_DIR" 853export CAFERUN_OPTION_USE_ATFS=1 854export INCLUDE_SYSTEM_DIR="$INCLUDE_SYSTEM_DIR" 855export CAFERUN_OPTION_USE_DVDFS=0 856 857# extract info from $RPX_FILE 858extract_info_from_app_rpx "$RPX_FILE" "$APP_XML_FILE" 859 860# update app.xml 861update_app_xml "$APP_XML_FILE" 862 863# update meta.xml 864update_meta_xml "$CAFE_META_DIR/meta.xml" 865 866# update cos.xml 867update_cos_xml "$RPX_DIR/cos.xml" 868 869# update boot logos (if not exist, use default dummy data) 870if [ "$SKIP_COPY_DEFAULT_FILES" -eq 1 ] 871then 872 add_msg "Warning: Skipped copying default files." 873else 874 update_boot_logos "$CAFE_META_DIR" 875fi 876 877# check if boot logos or other resource files are invalid data or not 878check_invalid_files 879 880MAKE_DLF_CONFIG_DEST="$CAFE_ROOT/system/bin/tool/mastering/cafemakedlf.exe.config" 881MAKE_DLF_CONFIG_EXPAND="$CAFE_ROOT/system/bin/tool/mastering/config/cafemakedlf.exe.config_fst_expanded" 882MAKE_DLF_CONFIG_SSRANGE_EXPAND="$CAFE_ROOT/system/bin/tool/mastering/config/cafemakedlf.exe.config_section_size_range_expanded" 883 884# restore original config file 885if [ -e "$MAKE_DLF_CONFIG_DEST" ]; then 886 echo "[Restore] The interuption may occured in the previous operation." 887 echo "[Restore] Restore cafemakedlf configuration to the original state." 888 echo "[Restore] rm -f $MAKE_DLF_CONFIG_DEST" 889 rm -f "$MAKE_DLF_CONFIG_DEST" 890fi 891 892if [ "$EXPAND_FST_MAX_SIZE" -eq 1 ]; then 893 echo "[Expand FST] Expand FST Max Size to 32MiB." 894 echo "[Expand FST] Change cafemakedlf configuration in order to expand FST Max Size to 32MiB." 895 echo "[Expand FST] cp -f $MAKE_DLF_CONFIG_EXPAND $MAKE_DLF_CONFIG_DEST" 896 cp -f "$MAKE_DLF_CONFIG_EXPAND" "$MAKE_DLF_CONFIG_DEST" 897 add_msg "Warning: FST Max Size is temporarily expanded." 898fi 899 900if [ "$EXPAND_SECTION_SIZE_RANGE" -eq 1 ]; then 901 echo "[Expand Section Size Range] Change cafemakedlf configuration in order to expand Section Size Range to 32-4024MiB." 902 echo "[Expand Section Size Range] cp -f $MAKE_DLF_CONFIG_EXPAND $MAKE_DLF_CONFIG_DEST" 903 cp -f "$MAKE_DLF_CONFIG_SSRANGE_EXPAND" "$MAKE_DLF_CONFIG_DEST" 904 echo "[Expand Section Size Range] Call cafemakedlf.exe with option$CAFEMAKEDLF_OPTION." 905 add_msg "Warning: Section Size Range is temporarily expanded." 906 add_msg "Warning: cafemakedlf.exe is called with option$CAFEMAKEDLF_OPTION." 907fi 908 909# Set Section Entry Hash Flag 910check_section_entry_hash 911CAFEMAKEDLF_OPTION+=" $SECTION_ENTRY_HASH_OPTION" 912cafedevrun.sh $RPX_PATH_WIN $MAKE_PATCH "$CAFEMAKEDLF_OPTION" "$KIOSK_DEFAULT_DDF" "$G_METARATING_DISABLED" 913rval=$? 914 915if [ "$EXPAND_SECTION_SIZE_RANGE" -eq 1 ]; then 916 echo "[Expand Section Size Range] Restore cafemakedlf configuration to the original state." 917 echo "[Expand Section Size Range] rm -f $MAKE_DLF_CONFIG_DEST" 918 rm -f "$MAKE_DLF_CONFIG_DEST" 919fi 920 921if [ "$EXPAND_FST_MAX_SIZE" -eq 1 ]; then 922 echo "[Expand FST] Restore cafemakedlf configuration to the original state." 923 echo "[Expand FST] rm -f $MAKE_DLF_CONFIG_DEST" 924 rm -f "$MAKE_DLF_CONFIG_DEST" 925fi 926 927if [ $rval -ne 0 ] 928then 929 erase_work 930 exit $rval 931fi 932 933FST_FILE="${RPX_FILE%.*}.fst.bin" 934if [ -f $FST_FILE ]; then 935 FST_FILE_SIZE=(`du -b $FST_FILE`) 936 FST_FILE_SIZE=${FST_FILE_SIZE[0]} 937 readonly FST_MAX_SIZE=2883584 938 readonly FST_LIMIT_SIZE=2621440 # workaround 939 readonly FST_OLD_MAX_SIZE=1048576 # max size in old OS 940 echo "FST file size is ${FST_FILE_SIZE}." 941 if ((FST_FILE_SIZE >= FST_LIMIT_SIZE && FST_FILE_SIZE <= FST_MAX_SIZE)); then 942 add_msg "Error: FST file size is in between $FST_LIMIT_SIZE and $FST_MAX_SIZE byte." 943 fi 944else 945 add_msg "Warning: FST file $FST_FILE not found." 946fi 947 948# Set dlf path 949DLF_PATH="${RPX_PATH/%${RPX_PATH:(-4)}}.dlf" 950 951# install and update masterinfo.xml 952# update_masterinfo "$DEFAULT_MASTERINFO_XML" "$USER_MASTERINFO_XML" "$DATE" 953update_masterinfo "$DEFAULT_MASTERINFO_XML" "$USER_MASTERINFO_XML" "$DATE" "$CAFE_META_DIR/meta.xml" "$APP_XML_FILE" "$COS_XML_FILE" "$TMP_FILE" "$INDIVIDUAL_DDF_FILE" 954rval=$? 955if [ $rval -ne 0 ] 956then 957 erase_work 958 exit $rval 959fi 960 961MAKEMASTER_WORK_DIR=`cygpath -w -a "$TEMP_WORK_DIR"` 962MAKEMASTER_TOOL_ROOT=`cygpath -w -a "$CAFE_ROOT/system/bin/tool/mastering/resources"` 963MAKEMASTER_OUTPUT=`cygpath -w -a "$OUTPUT_FILE_NOEXT"` 964MAKEMASTER_MASTERINFO_XML=`cygpath -w -a "$USER_MASTERINFO_XML"` 965MAKEIDBE_CAFE_META_DIR=`cygpath -w -a "$CAFE_META_DIR"` 966 967METARATING_RL_ARGS=`make_metarating_rl_args_for_mastering` 968 969# Make pre-master data (archived) 970echo "======== Creating master archive file ========" 971 972"$MAKEIDBE" "$MAKEMASTER_MASTERINFO_XML" "$MAKEIDBE_CAFE_META_DIR/iconTex.tga" "$RPX_DIR/icon.db" 973 974update_xml_flag_section_entry_hash "$MAKEMASTER_MASTERINFO_XML" "$CAFE_META_DIR/meta.xml" 975 976if [ $MAKE_PATCH -eq 1 ] 977then 978 PAST_WUMAD_WIN=`cygpath -w "$PAST_WUMAD"` 979 980 # Extract past patchref.bin 981 $EXTRACTFILE -v -nc "-od=$EXTRACTFILE_OUT_DIR" "$PAST_WUMAD_WIN" "p01.res.patchref.bin" 982 PAST_PATCHREF="$EXTRACTFILE_OUT_DIR\pastpatchref.bin" 983 mv "$EXTRACTFILE_OUT_DIR\p01.res.patchref.bin" "$PAST_PATCHREF" 984 985 # masterinfo.xml is already extracted to check METARATING section. 986 PAST_TITLE_KEY=$(sed -n 's|.*<title-key.*>0x\(.*\)</title-key>|\1|p' "$PAST_MASTERINFO") 987 988 if [ -z "$PAST_TITLE_KEY" ]; then 989 add_msg "Error: title key not found in ${PAST_WUMAD_WIN}." 990 fi 991 992 PAST_RATING_IMG_FLAG=$(sed -n 's|.*<reserved-flag6.*>0x\(.*\)</reserved-flag6>|\1|p' "$PAST_MASTERINFO") 993 CURRENT_RATING_IMG_FLAG=$(sed -n 's|.*<reserved_flag6.*>\(.*\)</reserved_flag6>|\1|p' "$CAFE_META_DIR/meta.xml") 994 995 if [ "$PAST_RATING_IMG_FLAG" != "$CURRENT_RATING_IMG_FLAG" ]; then 996 add_msg "Warning: there is(are) missing/additional rating image(s) from the original wumad." 997 fi 998 999 "$MAKEPATCH" -v -nc "-wd=$MAKEMASTER_WORK_DIR" "-k=$PAST_TITLE_KEY" "$PAST_WUMAD_WIN" "$MAKEMASTER_TOOL_ROOT\\masterheader_base.bin" "$DLF_PATH" "$MAKEMASTER_MASTERINFO_XML" "$MAKEMASTER_OUTPUT".wumad "$MAKEMASTER_OUTPUT".diff "-rl=$RPX_DIR/icon.db" "-rl=$PAST_PATCHREF" $MAKE_PATCH_OPTION $METARATING_RL_ARGS "$SECTION_ENTRY_HASH_OPTION" 1000else 1001 "$MAKEMASTER" -v -nc "-wd=$MAKEMASTER_WORK_DIR" "$DLF_PATH" "$MAKEMASTER_TOOL_ROOT\\masterheader_base.bin" "$MAKEMASTER_MASTERINFO_XML" "$MAKEMASTER_OUTPUT.wumad" "-rl=$RPX_DIR/icon.db" $METARATING_RL_ARGS "$SECTION_ENTRY_HASH_OPTION" 1002fi 1003rval=$? 1004if [ $rval -ne 0 ] 1005then 1006 erase_work 1007 exit $rval 1008fi 1009 1010# Merge update partition to mastered image 1011if [ "$INCLUDE_UPDATE_PARTITION" -eq 1 ] 1012then 1013 echo "======== Merging system update partition ========" 1014 UPP_MASTER=`cygpath -w -a "$CAFE_ROOT/system/bin/ghs/cafe/boot/upp.wumad"` 1015 mv "$OUTPUT_FILE_NOEXT.wumad" "$TEMP_WORK_DIR/tmp.wumad" 1016 "$MAKEMASTER" -m -v -nc "-wd=$MAKEMASTER_WORK_DIR" "$MAKEMASTER_WORK_DIR\\tmp.wumad" "$UPP_MASTER" "$MAKEMASTER_OUTPUT.wumad" 1017fi 1018 1019# Make full master imge 1020if [ "$DO_MAKEDISCIMAGE" -eq 1 ] 1021then 1022 echo "======== Creating full disc image of the master ========" 1023 "$MAKEDISCIMAGE" -v -nc "-wd=$MAKEMASTER_WORK_DIR" "$MAKEMASTER_OUTPUT.wumad" "$MAKEMASTER_OUTPUT.wum" 1024fi 1025 1026# Make download image 1027if [ "$DO_MAKEDOWNLOADIMAGE" -eq 1 ] 1028then 1029 echo "======== Creating download image of the master ========" 1030 OUTPUT_DIR=`dirname $OUTPUT_FILE_NOEXT` 1031 "$MAKEDOWNLOADIMAGE" -i "$MAKEMASTER_OUTPUT.wumad" -w "$MAKEMASTER_WORK_DIR" -o "$OUTPUT_DIR" -z 1032fi 1033 1034 1035# Show messages 1036show_msg 1037 1038# Erase settings 1039erase_work 1040