Submit Search
Upload
Two iconvs
•
Download as ODP, PDF
•
1 like
•
1,044 views
Y
Yuichiro Naito
Follow
iconv libraries of FreeBSD base system and ports
Read less
Read more
Software
Report
Share
Report
Share
1 of 18
Download now
Recommended
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
Tomohiro Kumagai
可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift
Tomohiro Kumagai
コマンドラインからplistファイルを扱う
コマンドラインからplistファイルを扱う
Yusuke Kawakami
Swift 構造体の時代 #yidev
Swift 構造体の時代 #yidev
Tomohiro Kumagai
20130315 abc firefox_os
20130315 abc firefox_os
Tomoaki Konno
nadoka さんの m17n 対応のベストプラクティス
nadoka さんの m17n 対応のベストプラクティス
Kazuhiro Nishiyama
NSNotification in Swift #cocoa_kansai
NSNotification in Swift #cocoa_kansai
Tomohiro Kumagai
Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料
Ryo Igarashi
Recommended
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
Tomohiro Kumagai
可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift
Tomohiro Kumagai
コマンドラインからplistファイルを扱う
コマンドラインからplistファイルを扱う
Yusuke Kawakami
Swift 構造体の時代 #yidev
Swift 構造体の時代 #yidev
Tomohiro Kumagai
20130315 abc firefox_os
20130315 abc firefox_os
Tomoaki Konno
nadoka さんの m17n 対応のベストプラクティス
nadoka さんの m17n 対応のベストプラクティス
Kazuhiro Nishiyama
NSNotification in Swift #cocoa_kansai
NSNotification in Swift #cocoa_kansai
Tomohiro Kumagai
Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料
Ryo Igarashi
Study Swift
Study Swift
Akihiro Urushihara
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
kimukou_26 Kimukou
FlexUnit4とMockitoFlex
FlexUnit4とMockitoFlex
Yasuhiro Morikawa
20010901
20010901
小野 修司
プロトコル拡張の話? #WWDC21cafe
プロトコル拡張の話? #WWDC21cafe
Tomohiro Kumagai
Swift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansai
Tomohiro Kumagai
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみた
y-uti
JIT for PHP を試した
JIT for PHP を試した
y-uti
Webブラウザで使えるいろんな処理系
Webブラウザで使えるいろんな処理系
祐司 伊藤
PECL operator で演算子オーバーロード
PECL operator で演算子オーバーロード
y-uti
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
y-uti
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
Tomohiro Kumagai
スタート低レイヤー #0
スタート低レイヤー #0
Kiwamu Okabe
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチ
Makoto Kato
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
Tomohiro Kumagai
PIAXで作る P2Pネットワーク
PIAXで作る P2Pネットワーク
祐司 伊藤
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
信之 岩永
MenohにおけるC++実装 / C API / C++API
MenohにおけるC++実装 / C API / C++API
Shintarou Okada
Phpstudy44 Zend Frameworkが抱えている問題は多い。
Phpstudy44 Zend Frameworkが抱えている問題は多い。
sasezaki
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
徹 上野山
超簡単!バージョン管理入門 最初の一歩
超簡単!バージョン管理入門 最初の一歩
Shin Tanigawa
More Related Content
What's hot
Study Swift
Study Swift
Akihiro Urushihara
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
kimukou_26 Kimukou
FlexUnit4とMockitoFlex
FlexUnit4とMockitoFlex
Yasuhiro Morikawa
20010901
20010901
小野 修司
プロトコル拡張の話? #WWDC21cafe
プロトコル拡張の話? #WWDC21cafe
Tomohiro Kumagai
Swift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansai
Tomohiro Kumagai
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみた
y-uti
JIT for PHP を試した
JIT for PHP を試した
y-uti
Webブラウザで使えるいろんな処理系
Webブラウザで使えるいろんな処理系
祐司 伊藤
PECL operator で演算子オーバーロード
PECL operator で演算子オーバーロード
y-uti
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
y-uti
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
Tomohiro Kumagai
スタート低レイヤー #0
スタート低レイヤー #0
Kiwamu Okabe
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチ
Makoto Kato
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
Tomohiro Kumagai
PIAXで作る P2Pネットワーク
PIAXで作る P2Pネットワーク
祐司 伊藤
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
信之 岩永
MenohにおけるC++実装 / C API / C++API
MenohにおけるC++実装 / C API / C++API
Shintarou Okada
Phpstudy44 Zend Frameworkが抱えている問題は多い。
Phpstudy44 Zend Frameworkが抱えている問題は多い。
sasezaki
What's hot
(20)
Study Swift
Study Swift
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
FlexUnit4とMockitoFlex
FlexUnit4とMockitoFlex
20010901
20010901
プロトコル拡張の話? #WWDC21cafe
プロトコル拡張の話? #WWDC21cafe
Swift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansai
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみた
JIT for PHP を試した
JIT for PHP を試した
Webブラウザで使えるいろんな処理系
Webブラウザで使えるいろんな処理系
PECL operator で演算子オーバーロード
PECL operator で演算子オーバーロード
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
スタート低レイヤー #0
スタート低レイヤー #0
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチ
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
PIAXで作る P2Pネットワーク
PIAXで作る P2Pネットワーク
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
MenohにおけるC++実装 / C API / C++API
MenohにおけるC++実装 / C API / C++API
Phpstudy44 Zend Frameworkが抱えている問題は多い。
Phpstudy44 Zend Frameworkが抱えている問題は多い。
Similar to Two iconvs
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
徹 上野山
超簡単!バージョン管理入門 最初の一歩
超簡単!バージョン管理入門 最初の一歩
Shin Tanigawa
Monomeeting 20081022
Monomeeting 20081022
Atsushi Eno
Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性
kozossakai
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
CODE BLUE
OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門
uranishi
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
sandai
cordova/electronの構造を知る
cordova/electronの構造を知る
Yasuharu Seki
20230128.pptx
20230128.pptx
ssuserdad311
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
将 高野
Swiftからlibuvを呼び出すTIPS
Swiftからlibuvを呼び出すTIPS
jugemjugemjugem
HTML5-pronama-study
HTML5-pronama-study
Naoya Inada
Word bench7月号
Word bench7月号
西村 州平
SensorBeeのご紹介
SensorBeeのご紹介
Daisuke Tanaka
Linuxにおける開発環境
Linuxにおける開発環境
Tomohiro MITSUMUNE
RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎
RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎
Noriaki Ando
LibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATE
Tomofumi Yagi
Jenkinsstudy#4kokawa
Jenkinsstudy#4kokawa
Takashi Kokawa
Swift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswift
Tomohiro Kumagai
静的解析Klocwork とJenkins CIの連携
静的解析Klocwork とJenkins CIの連携
Masaru Horioka
Similar to Two iconvs
(20)
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
超簡単!バージョン管理入門 最初の一歩
超簡単!バージョン管理入門 最初の一歩
Monomeeting 20081022
Monomeeting 20081022
Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
cordova/electronの構造を知る
cordova/electronの構造を知る
20230128.pptx
20230128.pptx
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
Swiftからlibuvを呼び出すTIPS
Swiftからlibuvを呼び出すTIPS
HTML5-pronama-study
HTML5-pronama-study
Word bench7月号
Word bench7月号
SensorBeeのご紹介
SensorBeeのご紹介
Linuxにおける開発環境
Linuxにおける開発環境
RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎
RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎
LibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATE
Jenkinsstudy#4kokawa
Jenkinsstudy#4kokawa
Swift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswift
静的解析Klocwork とJenkins CIの連携
静的解析Klocwork とJenkins CIの連携
More from Yuichiro Naito
Reporting AsiaBSDCon 2024 in Taipei for FreeBSD NetBSD
Reporting AsiaBSDCon 2024 in Taipei for FreeBSD NetBSD
Yuichiro Naito
Bmd
Bmd
Yuichiro Naito
WireGurad in the FreeBSD kernel
WireGurad in the FreeBSD kernel
Yuichiro Naito
FreeBSD Capsicum
FreeBSD Capsicum
Yuichiro Naito
Xrdp
Xrdp
Yuichiro Naito
Bhyve debug-server
Bhyve debug-server
Yuichiro Naito
Tramp mode
Tramp mode
Yuichiro Naito
HandBrake with QSV
HandBrake with QSV
Yuichiro Naito
FreeBSD 12.1 RELESE
FreeBSD 12.1 RELESE
Yuichiro Naito
Modern fonts
Modern fonts
Yuichiro Naito
FreeBSD 12.0 RELEASE!
FreeBSD 12.0 RELEASE!
Yuichiro Naito
Psql & proctitle
Psql & proctitle
Yuichiro Naito
Iocage
Iocage
Yuichiro Naito
FreeBSD 11.2 RELEASE!
FreeBSD 11.2 RELEASE!
Yuichiro Naito
How to use PTI & IBRS patch
How to use PTI & IBRS patch
Yuichiro Naito
FreeBSD Desktop
FreeBSD Desktop
Yuichiro Naito
FreeBSD Ports Flavors
FreeBSD Ports Flavors
Yuichiro Naito
Bsdtw repo
Bsdtw repo
Yuichiro Naito
How to use blacklistd
How to use blacklistd
Yuichiro Naito
Custom Package Building with Poudriere
Custom Package Building with Poudriere
Yuichiro Naito
More from Yuichiro Naito
(20)
Reporting AsiaBSDCon 2024 in Taipei for FreeBSD NetBSD
Reporting AsiaBSDCon 2024 in Taipei for FreeBSD NetBSD
Bmd
Bmd
WireGurad in the FreeBSD kernel
WireGurad in the FreeBSD kernel
FreeBSD Capsicum
FreeBSD Capsicum
Xrdp
Xrdp
Bhyve debug-server
Bhyve debug-server
Tramp mode
Tramp mode
HandBrake with QSV
HandBrake with QSV
FreeBSD 12.1 RELESE
FreeBSD 12.1 RELESE
Modern fonts
Modern fonts
FreeBSD 12.0 RELEASE!
FreeBSD 12.0 RELEASE!
Psql & proctitle
Psql & proctitle
Iocage
Iocage
FreeBSD 11.2 RELEASE!
FreeBSD 11.2 RELEASE!
How to use PTI & IBRS patch
How to use PTI & IBRS patch
FreeBSD Desktop
FreeBSD Desktop
FreeBSD Ports Flavors
FreeBSD Ports Flavors
Bsdtw repo
Bsdtw repo
How to use blacklistd
How to use blacklistd
Custom Package Building with Poudriere
Custom Package Building with Poudriere
Two iconvs
1.
二つの iconv base と
ports の 二つの iconv について 2015 年 12 月 16 日 (株)創夢 内藤 祐一郎
2.
iconv とは ● 汎用の文字コードコンバータ ➔
例えば EUC-JP の文字列を UTF-8 へ変換するなど ● iconv(1) ➔ iconv -f euc-jp -t utf-8 <filename> ● iconv_open(3) iconv(3) iconv_close(3) ➔ Posix 規格
3.
FreeBSD の対応 ● FreeBSD
10.0-R から標準搭載 ● 10.0 より前は ports の GNU iconv が事実上標準 ● GNU iconv は 10.0 以降でも使用可能 ● よって、 10 系では二つの iconv が使用可能 ● 本資料では FreeBSD の iconv を「 base の iconv 」 ● GNU iconv を「 ports の iconv 」とします
4.
base の iconv ●
CITRUS プロジェクト由来のもの ● BSD ライセンス ● NetBSD などでも使われている ● Posix 準拠 ● libc に含まれる ➔ リンク時に -liconv が不要 ➔ 逆を言うと外せない
5.
ports の iconv ●
GNU プロジェクト作成 ● ライセンスは GPL ● Posix に準拠 ● 独自拡張 ➔ wchar_t 変換 ➢ 後述 ➔ transliteration ➢ いろいろな文字を英語文字だけで表すための変換 ➢ 例えばギリシャ文字 θ を th にするなど
6.
wchar_t 変換 ● wchar_t
はもともと C 言語の typedef 宣言 ➔ 処理系により 2 バイトまたは 4 バイトで一文字を表す ➔ FreeBSD では int と同じで 4 バイトになる ● wchar_t 変換では文字列を wchar_t の配列にする ● そのため FreeBSD では必ず 4 バイト区切り ● バイトオーダは CPU 依存 ● wchar_t が 4 バイトの場合 UTF-32 のコードを使用する
7.
二つあると何が問題か? ● C 言語のシンボル名
(iconv_open など ) が重なるため両方 が存在して、かつ使い分けたい場合には小細工が必要 ➔ ports の iconv.h を include する時にシンボル名を変え てコンパイルする ➔ この小細工にバグがあった(詳細は後述) ● base の iconv では機能が足りないため、 ports の iconv を 使わなくてはならないことがある ➔ 特に wchar_t 変換を使用するアプリケーション ➔ ports の Makefile に USES+=iconv:wchar_t を入れる
8.
シンボル名の変換 ● 10.0 以降でかつ
ports の iconv がインストールされている と -DLIBICONV_PLUG をコンパイラに渡すようにする ➔ ports/Mk/Uses/iconv.mk ● LIBICONV_PLUG があると /usr/local/include/iconv.h でシ ンボル名を libiconv に変更する ➔ iconv_open → libiconv_open ➔ iconv → libconv ➔ iconv_close → libiconv_close ➔ これらは ports の iconv で定義されている
9.
シンボル名の変換 ● 10.0 当時
iconvctrl のシンボルを未定義にしてしまうバグがあり、 コンパイル不能になる ports があった。 ➔ https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=186563 ➔ シンボル名の変換は GNU iconv の配布物に含まれている機能 ● ICONV_PLUG を使わずに ports の iconv を強制するために iconv:wchar_t を使用した。 ➔ 動作と意味とが異なり表現が紛らわしい ➔ iconv:ports または iconv:gnu を別途作成すれば良かったと思う ● iconvctl を未定義にする問題は現時点で解決済み。
10.
wchar_t 変換を使うアプリ ● そもそも
wchar_t 変換を使うアプリはあるのか? ➔ ある ➔ ports/graphics/rawtherapee ➔ デジカメの RAW 画像現像( jpg 変換)ソフト ● http://lists.freebsd.org/pipermail/freebsd-ports/2014-February/0 ➔ 10.0 で起動しなくなった
11.
どこで wchar_t 変換を使うのか? ●
rawtherapee は gtkmm を使うソフトウェア ● iconv を呼び出すまでの流れはだいたい次のとおり ➔ rawtherapee→gtkmm→pangomm→glibmm→glib→icon v ● wchar_t を指定しているのは glibmm ● けれども、 iconv を直接呼び出すのは glib のため glib で USES=iconv:wchar_t を付けることになった
12.
なぜ wchar_t を使うのか? ●
glibmm の内部では文字コードを wchar_t のバイト数に合 わせて UTF-32 または UTF-16 で統一しようとする ● glibmm-2.42.0/glib/glibmm/ustring.cc の中で wchar_t が4 バイトかつ __STDC_ISO_10646__ が定義されている場合 に処理系が UTF-32 を利用できると判断している ● そうでない場合に wchar_t へのコンバートを行う ● FreeBSD では __STDC_ISO_10646__ ではなく __STDC_UTF_32__ を定義している ➔ https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=175930
13.
パッチワーク ● glibmm の
__STDC_ISO_10646__ を __STDC_UTF_32__ に書き換えてコンパイル&インストール ● glib の USES=iconv:wchar_t を USE=iconv に書き換えてコ ンパイル&インストール ➔ rawtherapee は無事起動した ➔ firefox 、 libreoffice なども動作している ➔ mozc-server も USES=iconv で動作した
14.
パッチ ● glibmm ➔ https://github.com/yuichiro-naito/iconv_research/blob/master ●
glib20 ➔ https://github.com/yuichiro-naito/iconv_research/blob/master ● mozc_server ➔ https://github.com/yuichiro-naito/iconv_research/blob/master
15.
希望 ● glibmm にパッチを当てて
ports の iconv をなるべく不要に したい ● ports の iconv を使用する時には USES=iconv:ports にした い ➔ iconv:wchar_t は wchar_t 変換が必要な場合を意味する ようにしたい
16.
予想 ● wchar_t 変換を使用するアプリはあまりない、はず? ●
ports の Makefile を grep すると ➔ iconv:wchar_t のある ports の数は 20 ➔ iconv:translit のある ports の数は 12 ● glib を介して iconv を使用するものは上記に表れない ➔ glib20 を使用する ports の数は 556 ➔ これらが wchar_t を使っていなければセーフ ➔ ちなみに glib20 かつ iconv だと 49 個
17.
詳細リスト ● iconv:wchar_t のある
ports ➔ https://github.com/yuichiro-naito/iconv_research/blob/master/wch ● iconv:tranlit のある ports ➔ https://github.com/yuichiro-naito/iconv_research/blob/master/tran ● glib20 を使用する ports ➔ https://github.com/yuichiro-naito/iconv_research/blob/master/glib2 ● glib20&iconv を使用する ports ➔ https://github.com/yuichiro-naito/iconv_research/blob/master/glib_
18.
お願い 一人で調べるのは大変なので 使っている ports が含まれていたら パッチを当てて 動作するか試してもらえませんか?
Download now