diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/Makefile b/build/tests/CustomSystemUpdater/ARM9.TWL/Makefile index cca34bfe..08a2e0c7 100644 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/Makefile +++ b/build/tests/CustomSystemUpdater/ARM9.TWL/Makefile @@ -70,9 +70,9 @@ SRCDIR = src \ DATA_ROOT = ../data ROMSET_FILE = ../romset -ROM_CHECKER = ruby ../romchecker.rb +ROM_CHECKER = ../romchecker.rb -SUMAKER = ruby ../sumaker.rb custom +SUMAKER = ../sumaker.rb custom #---------------------------------------------------------------------------- include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs @@ -129,7 +129,8 @@ INSTALL_DIR = ../bin check_rom: ifeq ($(DISABLE_ROMCHECK),) - $(ROM_CHECKER) $(ROMSET) + $(ROM_CHECKER) $(ROMSET) $(SYSM_REGION) + $(ROM_CHECKER) $(ROMSET) VERUP endif #ifeq ($(DISABLE_ROMCHECK),) # $(ROM_CHECKER) $(DATA_ROOT)/$(ROMSET) diff --git a/build/tests/CustomSystemUpdater/Makefile b/build/tests/CustomSystemUpdater/Makefile index f47a60f6..9ae3341f 100644 --- a/build/tests/CustomSystemUpdater/Makefile +++ b/build/tests/CustomSystemUpdater/Makefile @@ -58,7 +58,6 @@ do-something: -$(REMAKE) TWLSDK_PLATFORM=TWL REGION=USA ROMSET=$(ROMSET) DISABLE_ROMCHECK=$(DISABLE_ROMCHECK) SKIP_SUBDIR=FALSE $(MY_GOAL) -rm `find . -name "*autogen*"` -$(REMAKE) TWLSDK_PLATFORM=TWL REGION=EUR ROMSET=$(ROMSET) DISABLE_ROMCHECK=$(DISABLE_ROMCHECK) SKIP_SUBDIR=FALSE $(MY_GOAL) - include $(TWLSDK_ROOT)/build/buildtools/modulerules else diff --git a/build/tests/CustomSystemUpdater/romchecker.rb b/build/tests/CustomSystemUpdater/romchecker.rb index 7681504c..ce724bd8 100755 --- a/build/tests/CustomSystemUpdater/romchecker.rb +++ b/build/tests/CustomSystemUpdater/romchecker.rb @@ -1,3 +1,4 @@ +#!/bin/ruby #---------------------------------------------------------------------------- # Project: TwlSDK # File: romchecker.rb @@ -25,15 +26,30 @@ FIX_REGION = [ HEADER = "HN" +ROM_DATA = { + "#{HEADER}A" => ["Launcher", "00030017"], + "#{HEADER}B" => ["本体設定", "00030015"], + "#{HEADER}C" => ["無線ファーム", "0003000f"], + "#{HEADER}D" => ["DSダウンロードプレイ", "00030005"], + "#{HEADER}E" => ["ピクトチャット", "00030005"], + "#{HEADER}F" => ["ショップ", "00030015"], + "#{HEADER}G" => ["フルブラウザ", "00030004"], + "#{HEADER}H" => ["DSハッシュリスト", "0003000f"], + "#{HEADER}I" => ["写真帳", "00030005"], + "#{HEADER}J" => ["ホットスポット", "00030005"], + "#{HEADER}K" => ["DSサウンド", "00030005"], + "#{HEADER}L" => ["バージョンデータ", "0003000f"], +} + REGION_DIRS = { - "aus" => "U", - "euro" => "P", - "jp" => "J", - "usa" => "E", + "AUS" => ["aus", "U"], + "EUR" => ["euro", "P"], + "JPN" => ["jp", "J"], + "USA" => ["usa", "E"], + "VERUP" => ["verup", "UPJE"], } REG_PATH = /[a-zA-Z0-9\.\-_]+\/[a-zA-Z0-9\.\-_*]+\z/ - NAND_FIRM = "*.nand" FONT_DATA = "*.dat" @@ -64,43 +80,112 @@ def check_pickuped(path, print_success) ret end +def add_rom_list(rom_list, code, region, version) + rom_list << [code, region, version] +end -def check(target_dir) - ret = true - REGION_DIRS.each{|region_dir, region_code| - ALL_REGION.each{|app_code| - # オールリージョンのロムが含まれているかのチェック - search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}A*.tad") - #p search_path - ret &= check_pickuped(search_path, false) - } - FIX_REGION.each{|app_code| - # 各リージョン固有のロムが含まれているかのチェック +def make_rom_list(target_dir, region) + region_dir = REGION_DIRS[region][0] + region_codes = (REGION_DIRS[region][1] + "A").unpack("A" * (REGION_DIRS[region][1].size + 1)) + p region_codes + # 出力用リスト + rom_list = [] + + (ALL_REGION + FIX_REGION).each{|app_code| + region_codes.each{|region_code| search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}#{region_code}*.tad") - ret &= check_pickuped(search_path, false) + files = Dir.glob(search_path) + files.each{|tad| + add_rom_list(rom_list, "#{HEADER}#{app_code}", region_code, get_rom_version(tad)) + } } - (ALL_REGION + FIX_REGION).each{|app_code| - # HNxy が 各リージョンごと1つだけ存在するかのチェック - # HNxA と HNxU など、aとuが混在していたりするとここでひっかかる - search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}*.tad") - ret &= check_pickuped(search_path, false) - } - - # nand firm, font のチェック - search_path = File.join(target_dir, region_dir, NAND_FIRM) - ret &= check_pickuped(search_path, false) - search_path = File.join(target_dir, region_dir, FONT_DATA) - ret &= check_pickuped(search_path, false) - - $stdout.printf("\n") } + write_rom_list(rom_list, "rom_list_#{region}.txt") +end + +def write_rom_list(rom_list, file_name) + region_name = { + "A" => "ALL", "E" => "USA", "U" => "AUS", "J" => "JPN", "P" => "EUR" + } + out = "" + sp = [8, 20, 10, 17, 10] + line = "" + sp.each{|s| + line += "+#{"-" * s}" + } + line += "+\n" + out += line + out += sprintf("|%#{sp[0]}s|%-#{sp[1]}s|%#{sp[2]}s|%-#{sp[3]}s|%#{sp[4]}s|\n", + "コード", "名前", "リージョン", "タイトルID", "バージョン") + out += line + rom_list.each{|rom| + rom_data = ROM_DATA[rom[0]] + out += sprintf("|%#{sp[0]}s|%-#{sp[1]}s|%-#{sp[2]}s|%8s %8x|%#{sp[4]}s|\n", + rom[0] + rom[1], rom_data[0],region_name[rom[1]], rom_data[1], (rom[0] + rom[1]).unpack("N")[0], rom[2]); + } + out += line + File.open(file_name, "w") {|file| + file.puts out + } +end + +def get_rom_version(path) + files = Dir.glob(path) + files[0].slice(/v[0-9]+/).delete("v") +end + +def check(target_dir, region) + ret = true + if REGION_DIRS[region] == nil + puts "Invalid region, [JPN, USA, EUR, AUS, VERUP]" + return false + end + region_dir = REGION_DIRS[region][0] + region_code = REGION_DIRS[region][1] + + # 出力用リスト + rom_list = [] + + ALL_REGION.each{|app_code| + # オールリージョンのロムが含まれているかのチェック + search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}A*.tad") + if ret &= check_pickuped(search_path, false) + add_rom_list(rom_list, "#{HEADER}#{app_code}", "A", get_rom_version(search_path)) + end + } + FIX_REGION.each{|app_code| + # 各リージョン固有のロムが含まれているかのチェック + search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}#{region_code}*.tad") + if ret &= check_pickuped(search_path, false) + add_rom_list(rom_list, "#{HEADER}#{app_code}", region_code, get_rom_version(search_path)) + end + } + (ALL_REGION + FIX_REGION).each{|app_code| + # HNxy が 各リージョンごと1つだけ存在するかのチェック + # HNxA と HNxU など、aとuが混在していたりするとここでひっかかる + search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}*.tad") + ret &= check_pickuped(search_path, false) + } + + # nand firm, font のチェック + search_path = File.join(target_dir, region_dir, NAND_FIRM) + ret &= check_pickuped(search_path, false) + search_path = File.join(target_dir, region_dir, FONT_DATA) + ret &= check_pickuped(search_path, false) + $stdout.printf("\n") + + # CSUに含まれているロムの一覧を書き出す +# write_rom_list(rom_list, "rom_list_#{region}.txt") + +# make_rom_list(target_dir, region) + ret end # こっからメイン -if ARGV.size < 1 - p "Usage: #{__FILE__} targetdir" +if ARGV.size < 2 + p "Usage: #{__FILE__} targetdir region" exit -1 end @@ -109,6 +194,11 @@ Dir.chdir(File.dirname(File.expand_path(__FILE__))) target = ARGV[0] - -exit (check target) ? 0 : -1 +region = ARGV[1] +make_rom_list(target, region) +if region == "VERUP" + exit 0 +else + exit check(target,region) ? 0 : -1 +end diff --git a/build/tests/CustomSystemUpdater/sumaker.rb b/build/tests/CustomSystemUpdater/sumaker.rb index 3cbbc30d..6da8b97f 100755 --- a/build/tests/CustomSystemUpdater/sumaker.rb +++ b/build/tests/CustomSystemUpdater/sumaker.rb @@ -1,3 +1,4 @@ +#!/bin/ruby #---------------------------------------------------------------------------- # Project: TwlSDK # File: sumaker.rb diff --git a/build/tests/CustomSystemUpdater/work/aftercls.sh b/build/tests/CustomSystemUpdater/work/aftercls.sh index a7459117..37d873df 100755 --- a/build/tests/CustomSystemUpdater/work/aftercls.sh +++ b/build/tests/CustomSystemUpdater/work/aftercls.sh @@ -26,4 +26,4 @@ then fi ./tocsu.sh $1 -ruby toaqua.rb $1 +./toaqua.rb $1 diff --git a/build/tests/CustomSystemUpdater/work/toaqua.rb b/build/tests/CustomSystemUpdater/work/toaqua.rb index b38f7a14..3840ed68 100755 --- a/build/tests/CustomSystemUpdater/work/toaqua.rb +++ b/build/tests/CustomSystemUpdater/work/toaqua.rb @@ -1,3 +1,4 @@ +#!/bin/ruby #---------------------------------------------------------------------------- # Project: TwlSDK - tools # File: toaqua.sh