                XeTeX 用 ICU ライブラリの作成法 (Ver. 76.1)
                         --- 2025 A. Kakuto ---

Visual Studio 2015 以上が必要!!!
コンパイラオプション -utf-8 オプションが必要!!!
Ver. 75 以降では -std:c11 (c) -std:c++17 (c++) が必要!!!
C4229 warning があるので， -wd4229 オプションを使った。

(A) トップディレクトリに bin および lib ディレクトリを作成する。
    (64bit の場合は，bin64 および lib)。

(B) common/unicode の utypes.h を変更する。


(C) common, i18n, io
    において
    make
    make install
    として static link 用 ライブラリを作成する。
 
(D) stubdata の Makefile において VERSION (2桁の数字) を変更して
    make
    make install
    として icudt.lib を作成する。
    また仮の icudt??.dll を作成する。これは最後に正しいもので
    上書きされる。 ?? は 73 など。

(E) tools において以下の作業をする。

    tools においてビルドが必要なディレクトリ
    (01) toolutil
    (02) genbrk
    (03) gencfu
    (04) gencnval
    (05) gendict
    (06) gennorm2
    (07) genrb
    (08) gensprep
    (09) gentest
    (10) icupkg
    (11) makeconv
    (12) pkgdata (pkgdata.cpp _WIN64 のときLINK_FLAGS の
         /MACHINE:X64 をチェック)
    で
    make
    make install
    とする。

!!!!!!!!!!!!!! 
これ以下は、target が 64bit の場合、64bit マシン上で作業する。
!!!!!!!!!!!!!!

(F) data/in/ に icudt73l.dat がなかったら(通常はあるはずである),
    nmake -f makedata.mak によって作成したものが out/
    ディレクトリに入る。 最後の文字 l (エル) は little endian を
    意味している。 サイズを変更しない場合には，不要なことだが
    サイズを小さくするには次のようにする。
       out/ にできた icudt73l.dat を in/ にコピーする。out ディレクトリ
       は，また作成されるので削除しておく。
       data/reducedata.sh スクリプトを調べ、必要なら変更してこれを
       実行し、icudt73l.dat のサイズを、小さくする。できた icudt73l.dat
       は64ビットでも共通なので、64ビット版のソースにコピーしておく。
    元々，Mac 用バイナリが静的リンクの結果大きくなりすぎて，実行の際
    ロードできないほどだったので，必須のデータだけを残してサイズを
    小さくしていた。 Windows に於いてはサイズを小さくする必要性は
    無いので，Version 58.2 からサイズ縮小を行わないことにする。

    data/reducedata.sh が無く、必要である場合、その内容は
    以下のとおりである。 FNAME は必要に応じて変更すること。

#!/bin/sh
#
# reduce size of icudl??l.dat
#
FNAME=icudt73l.dat
EXE=../../bin/icupkg.exe
cp -p in/${FNAME} in/${FNAME}.orig
mkdir in1 in2 in3 in4 in5
${EXE} -r 'curr/*' in/${FNAME} in1/${FNAME}
${EXE} -r 'lang/*' in1/${FNAME} in2/${FNAME}
${EXE} -r 'region/*' in2/${FNAME} in3/${FNAME}
${EXE} -r 'rfc*.spp' in3/${FNAME} in4/${FNAME}
${EXE} -r 'zone/*' in4/${FNAME} in5/${FNAME}
cp -p in5/${FNAME} in/${FNAME}
rm -fr in1 in2 in3 in4 in5


(G) data において以下の作業をして icudt??.dll を作成する。
    ?? は 73 など。 64 からは python 3 が必須。

    makedata.mak で

ICUMAKE=c:\usr\work\edrive\w32texsrc\ptx\libs\icu-src\source\data
CFG=x86\Release

(64bit の場合は
ICUMAKE=c:\usr\work\edrive\w64texsrc\ptx\libs\icu-src\source\data
CFG=x64\Release
)

    のような追加をする。

    icu-64.1 から，これだけでは "コマンドラインが長すぎる"
    あるいは別のエラーが出る場合がある。(69RC では大丈夫だった)。
    73.2 など最近は大丈夫になっている。
    目的は，DLL を作成することなので，ALL target を

ALL : GODATA "$(ICU_LIB_TARGET)" "$(TESTDATAOUT)\testdata.dat"
	@echo All targets are up to date

    から，"$(TESTDATAOUT)\testdata.dat" を消して

ALL : GODATA "$(ICU_LIB_TARGET)"
	@echo All targets are up to date

    に変更してから次のようにすること:

    nmake -f makedata.mak

    とすると、必要な icudt??.dll が作成される。 ?? は 69 など。
    make ではなくて nmake であることに注意せよ。
    このとき、
    All targets are up to date
    と出て、かつ ../../bin/icudt??.dll
    (64bit の場合は ../../bin64/icudt??.dll) が更新されていなかった
    ら stubdata ディレクトリに行って
    touch stubdatabuilt.txt
    として、再び
    nmake -f makedata.mak
    とする。

    [注意]
    icu4c-59rc-src.tgz には data/misc ディレクトリが無いので，
    icu4c-59rc-data.zip が必要であった。
    data/misc が無い場合は同じであるかもしれない。
