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