-
Notifications
You must be signed in to change notification settings - Fork 163
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
文字コード自動判別にwin10組み込みのICU4Cを使う #1784
文字コード自動判別にwin10組み込みのICU4Cを使う #1784
Conversation
正規のWindows10 SDKを使った場合、省略すると利用可能な最新バージョンを使う設定になる。
MinGWのSDKではバージョン定義が正しく行われないので、 統合されたICU4Cを利用するために必要な定義を行う。 NTDDI_WIN10_RS3が定義されるのはWindows 10 SDK v10.0.17763.0以降。
MinGWにはicu.hがないので、正規のWindows 10 SDKから該当ファイル(自動生成)をコピーする。 コピー処理がテキトーなので改善のかなり余地がある。 (コピー元がv10.0.18362.0固定とか。)
❌ Build sakura 1.0.4015 failed (commit 300a2d9ae7 by @berryzplus) |
テストが失敗している・・・ |
SonarCloud Quality Gate failed. |
@@ -55,7 +55,7 @@ | |||
<ItemDefinitionGroup Label="sakura.common"> | |||
<ClCompile> | |||
<AdditionalIncludeDirectories>..\sakura_core;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||
<PreprocessorDefinitions>_WIN32_WINNT=_WIN32_WINNT_WIN7;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |||
<PreprocessorDefinitions>_WIN32_WINNT=_WIN32_WINNT_WIN10;NTDDI_VERSION=NTDDI_WIN10_RS3;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Windows 8.1を使っているユーザーがビルドが出来ないという苦情が来ないか心配…は特にしていません。
NTDDI_VERSION についてのページ : https://docs.microsoft.com/en-us/windows/win32/winprog/using-the-windows-headers?redirectedfrom=MSDN
Windows 10 Home and Pro の各リリースについて書かれているページ : https://docs.microsoft.com/en-us/lifecycle/products/windows-10-home-and-pro
古いバージョンでの確認はいつかはされなくなる運命にありますね。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
これは別に構わないと思います。uchardet対応を生かしたいと思った人がまた別のMRで共存する方法を考えれば良いかなと。 自分が思いつくのは設定でどちらを使うかを切り替えるとかですが、今の作りだと設定項目を増やして設定画面UI側でも新規項目に対応させるように改造するのが大変なので、もっと楽に設定項目を増やせる方式のUIに切り替えた後にした方が良いと思います。いつかはやりたいと思って放置している点の一つですね。 他に気になる点としては、 |
設定による振る舞いの切替はやりたくないっす。
ここは改善できる部分だと思ってます。 |
これは特定の設定の事なのか、それとも設定全般の事なのか、、後者だとしたら全体的に不安定だという事になりますがまぁミッションクリティカルな用途に使える堅牢性がある実装でない事は確かですね。
ICU4Cもuchardetも指定できる文字コードセットの名前って互換性が無かったですっけ?未調査ですが…。 |
思いついた解決策として、 |
ICU4Cの機能は自動判別だけじゃないので、 |
メモ(NGになったテストの詳細):これ。 sakura/tests/unittests/test-cconvert.cpp Line 458 in e013bcd
uchardetを使った場合には正しく判定できるので、 |
PR の目的
タイトル通りです。
#1104 のPRを改善して、ICU4Cの巨大なDLLを用意しなくても済むように改良します。
カテゴリ
PR の背景
#1783 の焼き直しです。
#1783 は、変更を最小限に抑えるために、
手元で作っていた仮対応からMInGW対応を考慮を除外していました。
(結果、ビルドが通らなかったので閉じてしまいましたが・・・)
妥協できるところまでの精査が終わったのでPRとする次第です。
PR のメリット
PR のデメリット (トレードオフとかあれば)
仕様・動作説明
変更前: ICU4C66があれば自動判別にICU4Cを使う。
変更後: Windows 10 1903以降なら自動判別にICU4Cを使う。
Windows 10のアップデートは、
端末のスペックが不十分である場合を除いて、
ユーザーが固定しない限りは「勝手にWindows 11に更新される」ようになっています。
修正により #1726 の機能が実質的に死にますが、
その点が「いいか悪いか」は一旦わきに置いておきたいです。
PR の影響範囲
文字コード自動判別に影響する変更です。
テスト内容
テスト1
手順
関連 issue, PR
参考資料