List of Msys2 - text.Baldanders.info
tag:text.Baldanders.info,2019-03-09:/tags
2019-03-09T12:39:15+09:00
帰ってきた「しっぽのさきっちょ」
https://text.baldanders.info/images/avatar.jpg
https://text.baldanders.info/images/avatar.jpg
FOSS な PDF Viewer for Windows (Evince も導入できた)
tag:text.Baldanders.info,2019-03-09:/remark/2019/03/about-free-software-pdf-viewers/
2019-03-09T03:39:15+00:00
2019-03-09T04:30:38+00:00
この中で Windows 環境かつ比較的活況な製品を選ぶならやっぱ XpdfReader か MuPDF ってところか。
Spiegel
https://baldanders.info/profile/
<p>ちうわけで,<a href="https://text.baldanders.info/remark/2019/03/get-a-free-software-pdf-reader/" title="いつの間にか Evince Windows 版がなくなっていた">前回</a>の続き。</p>
<p>PDF Viewer は FOSS な製品からプロプライエタリな製品まで色々あるし,全部を比較するのは無理なので,<a href="https://text.baldanders.info/remark/2019/03/get-a-free-software-pdf-reader/" title="いつの間にか Evince Windows 版がなくなっていた">前回</a>に引き続き <a href="https://pdfreaders.org/" title="Get a Free Software PDF reader!">PDFreaders.org</a> に掲載されている製品からピックアップしてみよう。</p>
<p>各製品のスペックは以下の通り(2019年3月時点)。</p>
<table>
<thead>
<tr>
<th>製品名</th>
<th>動作環境</th>
<th>フォーマット</th>
<th>ライセンス</th>
<th>最近のリリース状況</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="http://projects.gnome.org/evince/">Evince</a></td>
<td>Linux</td>
<td>PDF, …</td>
<td>GPL</td>
<td>3.31 (2019-02-19)</td>
</tr>
<tr>
<td><a href="https://okular.kde.org/" title="Okular - more than a reader">Okular</a></td>
<td>Linux, macOS, Windows<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></td>
<td>PDF, EPUB, …</td>
<td>GPL</td>
<td>1.6 (2018-12-13)</td>
</tr>
<tr>
<td><a href="https://www.sumatrapdfreader.org/" title="Free PDF Reader - Sumatra PDF">SumatraPDF</a></td>
<td>Windows</td>
<td>PDF, EPUB, …</td>
<td>GPL</td>
<td>3.1.2 (2016-09-23)</td>
</tr>
<tr>
<td><a href="http://www.xpdfreader.com/">XpdfReader</a></td>
<td>Linux, Windows</td>
<td>PDF</td>
<td>GPL</td>
<td>4.01 (2019-02-18)</td>
</tr>
<tr>
<td><a href="https://github.com/mozilla/pdf.js" title="mozilla/pdf.js: PDF Reader in JavaScript">PDF.js</a></td>
<td>Firefox 19+</td>
<td>PDF</td>
<td>Apache-2.0</td>
<td>2.1.266 (2019-02-17)</td>
</tr>
<tr>
<td><a href="https://launchpad.net/qpdfview" title="qpdfview in Launchpad">qpdfview</a></td>
<td>Linux, NetBSD, FreeBSD</td>
<td>PDF, …</td>
<td>GPL</td>
<td>0.4.18 (2018-11-17)</td>
</tr>
<tr>
<td><a href="http://www.gnu.org/software/gv/" title="GV - GNU Project - Free Software Foundation">GNU GV</a></td>
<td>Linux macOS</td>
<td>PDF, PS</td>
<td>GPL</td>
<td>3.7.4 (2013-03-17)</td>
</tr>
<tr>
<td><a href="http://freshmeat.sourceforge.net/projects/epdfview/" title="ePDFView – Freecode">ePDFView</a></td>
<td>Linux</td>
<td>PDF</td>
<td>GPL</td>
<td>0.1.8 (2011-05-28)</td>
</tr>
<tr>
<td><a href="https://mupdf.com/">MuPDF</a></td>
<td>Linux, windows, Android</td>
<td>PDF, EPUB, …</td>
<td>AGPL</td>
<td>1.14.0 (2018-10-04)</td>
</tr>
<tr>
<td><a href="https://pwmt.org/projects/zathura/">zathura</a></td>
<td>Linux</td>
<td>PDF, …</td>
<td>zlib</td>
<td>0.4.3 (2018-12-22)</td>
</tr>
</tbody>
</table>
<p>んー。
この中で Windows 環境かつ比較的活況な製品を選ぶならやっぱ <a href="http://www.xpdfreader.com/">XpdfReader</a> か <a href="https://mupdf.com/">MuPDF</a> ってところか。
EPUB 文書も見たいなら <a href="https://mupdf.com/">MuPDF</a> 一択だな。
ちなみに <a href="https://mupdf.com/">MuPDF</a> は <a href="https://texwiki.texjp.org/?SyncTeX" title="SyncTeX - TeX Wiki">SyncTeX</a> に対応しているらしい。</p>
<p>そうそう。
<a href="https://mupdf.com/">MuPDF</a> の Android 版で EPUB 文書を開いてみたが,見事に日本語文字がトーフ(□)になった。</p>
<figure style='margin:0 auto;text-align:center;'><a href="Screenshot_20190309-114206.png"><img src="./Screenshot_20190309-114206.png" srcset="./Screenshot_20190309-114206.png 1440w" sizes="(min-width:600px) 500px, 80vw" alt="EPUB版『続・情報共有の未来』を Android 版 MuPDF で開いてみた(笑)" loading="lazy"></a><figcaption><div><a href="Screenshot_20190309-114206.png">EPUB版『続・情報共有の未来』を Android 版 MuPDF で開いてみた(笑)</a></div></figcaption>
</figure>
<p>実は EPUB の仕様はよく知らないのだけど<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>,おそらく対応しているフォントがないんだろう(Windows 版はちゃんと表示できる)。</p>
<h2><a href="http://projects.gnome.org/evince/">Evince</a> for <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> を導入する</h2>
<p><a href="https://text.baldanders.info/remark/2019/03/get-a-free-software-pdf-reader/" title="いつの間にか Evince Windows 版がなくなっていた">前回</a>の記事で <a href="http://projects.gnome.org/evince/">Evince</a> の Windows 用バイナリがなくなったと書いたが <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> 経由なら導入できそうである。
ただし <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> は万人におすすめの方法ではないので,既に <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> を導入している方のみという感じだろうか。
<a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> の導入手順は以下の拙文を参考にどうぞ。</p>
<ul>
<li><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-1/">MSYS2 による gcc 開発環境の構築 ― MSYS2 のインストールから初期化処理まで</a></li>
<li><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-2/">MSYS2 による gcc 開発環境の構築 ― gcc パッケージ群の導入</a></li>
</ul>
<p>ね。
万人向けじゃないでしょ。</p>
<p><ruby><rb>閑話休題</rb><rp> (</rp><rt>それはさておき</rt><rp>) </rp></ruby>, <code>pacman</code> コマンドを使って <a href="http://projects.gnome.org/evince/">Evince</a> を探してみると</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ pacman -Ss evince
</span></span><span class="line"><span class="cl">mingw32/mingw-w64-i686-evince 3.28.2-3
</span></span><span class="line"><span class="cl"> Document (PostScript, PDF) viewer (mingw-w64)
</span></span><span class="line"><span class="cl">mingw64/mingw-w64-x86_64-evince 3.28.2-3
</span></span><span class="line"><span class="cl"> Document (PostScript, PDF) viewer (mingw-w64)
</span></span></code></pre></div><p>おおっ! あったあった。
ふむ。
<code>mingw32</code> か <code>mingw64</code> のいずれかのリポジトリから取るのか。
ちょいとバージョンが古いが,まぁいいか。</p>
<p>ちなみに <code>mingw32</code> からインストールした場合には <code>/mingw32</code> ディレクトリ以下に <code>mingw64</code> からインストールした場合には <code>/mingw64</code> ディレクトリ以下にインストールされる。
Shell として bash を起動する際にはモードにご注意を。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">C:> SET MSYSTEM=MINGW64
</span></span><span class="line"><span class="cl">C:> C:\msys64\usr\bin\bash.exe --login -i
</span></span></code></pre></div><p>じゃあ導入していこう。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ pacman -S mingw-w64-x86_64-evince
</span></span><span class="line"><span class="cl">依存関係を解決しています...
</span></span><span class="line"><span class="cl">衝突するパッケージがないか確認しています...
</span></span><span class="line"><span class="cl">警告: 循環依存が検出されました:
</span></span><span class="line"><span class="cl">警告: mingw-w64-x86_64-harfbuzz は依存パッケージ mingw-w64-x86_64-freetype の前にインストールされます
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">パッケージ (74) mingw-w64-x86_64-adwaita-icon-theme-3.30.1-1 mingw-w64-x86_64-atk-2.30.0-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-brotli-1.0.7-1 mingw-w64-x86_64-c-ares-1.15.0-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-cairo-1.16.0-1 mingw-w64-x86_64-curl-7.64.0-2
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-dbus-1.12.12-1 mingw-w64-x86_64-djvulibre-3.5.27-3
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-fontconfig-2.13.1-1 mingw-w64-x86_64-freeglut-3.0.0-4
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-freetype-2.9.1-1 mingw-w64-x86_64-fribidi-1.0.5-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-gdk-pixbuf2-2.38.1-1 mingw-w64-x86_64-ghostscript-9.26-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-glib2-2.58.3-1 mingw-w64-x86_64-graphene-1.8.4-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-graphite2-1.3.13-1 mingw-w64-x86_64-gsettings-desktop-schemas-3.28.1-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-gsl-2.5-1 mingw-w64-x86_64-gst-plugins-base-1.14.4-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-gstreamer-1.14.4-1 mingw-w64-x86_64-gtk3-3.24.5-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-harfbuzz-2.3.1-1 mingw-w64-x86_64-hicolor-icon-theme-0.17-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-icu-62.1-1 mingw-w64-x86_64-jansson-2.12-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-jasper-2.0.14-1 mingw-w64-x86_64-jemalloc-5.1.0-3
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-json-glib-1.4.4-1 mingw-w64-x86_64-lcms2-2.9-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-libarchive-3.3.3-2 mingw-w64-x86_64-libcroco-0.6.12-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-libdatrie-0.2.12-1 mingw-w64-x86_64-libepoxy-1.5.3-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-libgcrypt-1.8.4-1 mingw-w64-x86_64-libgpg-error-1.35-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-libgxps-0.3.1-1 mingw-w64-x86_64-libidn-1.35-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-libidn2-2.1.1a-1 mingw-w64-x86_64-libjpeg-turbo-2.0.2-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-libmetalink-0.1.3-3 mingw-w64-x86_64-libogg-1.3.3-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-libpaper-1.1.24-2 mingw-w64-x86_64-libpng-1.6.36-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-libpsl-0.20.2-3 mingw-w64-x86_64-librsvg-2.40.20-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-libspectre-0.2.8-2 mingw-w64-x86_64-libssh2-1.8.0-3
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-libthai-0.1.28-2 mingw-w64-x86_64-libtheora-1.1.1-4
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-libtiff-4.0.10-1 mingw-w64-x86_64-libunistring-0.9.10-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-libvorbis-1.3.6-1 mingw-w64-x86_64-libvorbisidec-svn-r19643-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-libxml2-2.9.9-1 mingw-w64-x86_64-libxslt-1.1.33-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-lz4-1.8.3-1 mingw-w64-x86_64-lzo2-2.10-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-nettle-3.4.1-1 mingw-w64-x86_64-nghttp2-1.36.0-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-nspr-4.20-1 mingw-w64-x86_64-nss-3.42.1-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-openjpeg2-2.3.0-2 mingw-w64-x86_64-opus-1.3-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-orc-0.4.28-1 mingw-w64-x86_64-pango-1.43.0-2
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-pcre-8.43-1 mingw-w64-x86_64-pixman-0.38.0-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-poppler-0.74.0-1 mingw-w64-x86_64-poppler-data-0.4.9-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-shared-mime-info-1.12-1 mingw-w64-x86_64-wineditline-2.205-1
</span></span><span class="line"><span class="cl"> mingw-w64-x86_64-zstd-1.3.8-1 mingw-w64-x86_64-evince-3.28.2-3
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">合計ダウンロード容量: 99.07 MiB
</span></span><span class="line"><span class="cl">合計インストール容量: 522.88 MiB
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">:: インストールを行いますか? [Y/n]
</span></span></code></pre></div><p>うひぃ,大事になっとるがな。
まぁいいや。
このまま <code>Y</code> を返してインストールしてしまおう(以降の操作は割愛)。</p>
<h3><a href="http://projects.gnome.org/evince/">Evince</a> の起動</h3>
<p>Explorer のコンテキストメニュー「プログラムから開く」で導入した <code>evince.exe</code> を使って PDF ファイルを開こうとするが,私の環境では何故か上手くいかないので, shell から</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ C:\msys64\mingw64\bin\evince.exe foo.pdf
</span></span></code></pre></div><p>のように起動するしかなさそうだ(引数なしならラウンチゃが開く)。
まぁ <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> ファイルシステム依存でなくてよかった。</p>
<p>私は <a href="https://text.baldanders.info/remark/2015/conemu-and-nyagos/" title="ようやく ConEmu と NYAGOS を導入した">NYAGOS を使っている</a>のでホームディレクトリの <code>.nyagos</code> ファイルに</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lua" data-lang="lua"><span class="line"><span class="cl"><span class="n">nyagos.alias</span><span class="p">.</span><span class="n">evince</span> <span class="o">=</span> <span class="s2">"c:/msys64/mingw64/bin/evince.exe"</span>
</span></span></code></pre></div><p>とか記述しておけば</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ evince foo.pdf
</span></span></code></pre></div><p>で起動できる。</p>
<p>ちょっと扱いが面倒になってしまったが仕方がない。
普段遣いは <a href="https://mupdf.com/">MuPDF</a> にして, <a href="https://mupdf.com/">MuPDF</a> で上手く表示できない場合や PDF ファイルのプロパティを確認する際は <a href="http://projects.gnome.org/evince/">Evince</a> を使うって感じで。</p>
<p>早く Windows 捨てたい。</p>
<h2>ブックマーク</h2>
<ul>
<li><a href="http://www.yamamo10.jp/yamamoto/wordpress/?p=842">Windows で evince – 山本昌志のブログ</a></li>
<li><a href="http://bakunyo.hatenablog.com/entry/2014/02/16/Windows%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%A7alias%E3%82%92%E4%BD%BF%E3%81%84%E3%81%9F%E3%81%84">Windowsコマンドプロンプトでaliasを使いたい - ばくのエンジニア日誌</a></li>
</ul>
<!-- eof -->
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://okular.kde.org/" title="Okular - more than a reader">Okular</a> を Windows で動作させるには <a href="http://windows.kde.org/">KDE on Windows</a> 環境が必要。同様に macOS では <a href="https://community.kde.org/Mac">KDE on Mac OS X</a> 環境が必要となる。 <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:2">
<p>EPUB 興味ないよなぁ。日本では業界主導で(縦書きがどうとか)なんか騒いでいたみたいだけど,所詮は「紙の延長」だし,それなら別に PDF でいいぢゃんと思ってしまう。そのためにも PDF Viewer が(無料じゃなくて)自由なライセンスで提供されることが重要なんだけどね。「紙」という制約が不要ならそれこそ AsciiDoc とか markdown とか Org mode とかプリミティブに HTML & CSS とか色々あるわけじゃん。 <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>
MSYS2 による gcc 開発環境の構築 ― pgpdump をビルドする
tag:text.Baldanders.info,2016-03-01:/remark/2016/03/gcc-msys2-3/
2016-03-01T13:02:47+00:00
2019-07-01T13:48:09+00:00
前回で gcc を導入できたので,実際にビルドを試してみる。今回はターゲットとして pgpdump を用いる。
Spiegel
https://baldanders.info/profile/
<ol>
<li><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-1/">MSYS2 のインストールから初期化処理まで</a></li>
<li><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-2/">gcc パッケージ群の導入</a></li>
<li><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-3/">pgpdump をビルドする</a> (← イマココ)</li>
</ol>
<p><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-2/" title="MSYS2 による gcc 開発環境の構築 ― gcc パッケージ群の導入">前回</a>で gcc を導入できたので,実際にビルドを試してみる。
今回はターゲットとして <a href="https://github.com/kazu-yamamoto/pgpdump" title="kazu-yamamoto/pgpdump: A PGP packet visualizer">pgpdump</a> を用いる。</p>
<h2>pgpdump</h2>
<p><a href="https://github.com/kazu-yamamoto/pgpdump" title="kazu-yamamoto/pgpdump: A PGP packet visualizer">pgpdump</a> は山本和彦さんによる <a href="http://tools.ietf.org/html/rfc4880" title="RFC 4880 - OpenPGP Message Format">OpenPGP</a> パケットの<a href="http://www.mew.org/~kazu/proj/pgpdump/ja/">視覚化ツール</a>。
ソースコードは <a href="https://github.com/kazu-yamamoto/pgpdump" title="kazu-yamamoto/pgpdump: A PGP packet visualizer">GitHub で公開</a>されているが, UNIX 系のプラットフォームを前提に作られているため <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> 上でビルドを行う。</p>
<p>まずは <a href="https://github.com/kazu-yamamoto/pgpdump" title="kazu-yamamoto/pgpdump: A PGP packet visualizer">pgpdump</a> のソースコードをダウンロードする。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ git clone https://github.com/kazu-yamamoto/pgpdump.git
</span></span><span class="line"><span class="cl">Cloning into 'pgpdump'...
</span></span><span class="line"><span class="cl">remote: Counting objects: 492, done.
</span></span><span class="line"><span class="cl">Receiving objects: 59% (291remote: Total 492 (delta 0), reused 0 (delta 0), pack-reused 492 92
</span></span><span class="line"><span class="cl">Receiving objects: 100% (492/492), 180.29 KiB | 0 bytes/s, done.
</span></span><span class="line"><span class="cl">Resolving deltas: 100% (320/320), done.
</span></span><span class="line"><span class="cl">Checking connectivity... done.
</span></span></code></pre></div><h2>32bit 版のビルド</h2>
<p><a href="https://github.com/kazu-yamamoto/pgpdump" title="kazu-yamamoto/pgpdump: A PGP packet visualizer">pgpdump</a> のビルド手順は <code>configure</code> を実行した後 make を実行する<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>。
まずは何も考えずに <code>configure</code> の実行してみる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ cd pgpdump/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ ./configure
</span></span><span class="line"><span class="cl">checking for gcc... gcc
</span></span><span class="line"><span class="cl">checking whether the C compiler works... yes
</span></span><span class="line"><span class="cl">checking for C compiler default output file name... a.exe
</span></span><span class="line"><span class="cl">checking for suffix of executables... .exe
</span></span><span class="line"><span class="cl">checking whether we are cross compiling... no
</span></span><span class="line"><span class="cl">checking for suffix of object files... o
</span></span><span class="line"><span class="cl">checking whether we are using the GNU C compiler... yes
</span></span><span class="line"><span class="cl">checking whether gcc accepts -g... yes
</span></span><span class="line"><span class="cl">checking for gcc option to accept ISO C89... none needed
</span></span><span class="line"><span class="cl">checking for inflate in -lz... yes
</span></span><span class="line"><span class="cl">checking for BZ2_bzBuffToBuffDecompress in -lbz2... yes
</span></span><span class="line"><span class="cl">checking how to run the C preprocessor... gcc -E
</span></span><span class="line"><span class="cl">checking for grep that handles long lines and -e... /usr/bin/grep
</span></span><span class="line"><span class="cl">checking for egrep... /usr/bin/grep -E
</span></span><span class="line"><span class="cl">checking for ANSI C header files... yes
</span></span><span class="line"><span class="cl">checking for sys/types.h... yes
</span></span><span class="line"><span class="cl">checking for sys/stat.h... yes
</span></span><span class="line"><span class="cl">checking for stdlib.h... yes
</span></span><span class="line"><span class="cl">checking for string.h... yes
</span></span><span class="line"><span class="cl">checking for memory.h... yes
</span></span><span class="line"><span class="cl">checking for strings.h... yes
</span></span><span class="line"><span class="cl">checking for inttypes.h... yes
</span></span><span class="line"><span class="cl">checking for stdint.h... yes
</span></span><span class="line"><span class="cl">checking for unistd.h... yes
</span></span><span class="line"><span class="cl">checking for unistd.h... (cached) yes
</span></span><span class="line"><span class="cl">checking sys/time.h usability... yes
</span></span><span class="line"><span class="cl">checking sys/time.h presence... yes
</span></span><span class="line"><span class="cl">checking for sys/time.h... yes
</span></span><span class="line"><span class="cl">checking unixlib/local.h usability... no
</span></span><span class="line"><span class="cl">checking unixlib/local.h presence... no
</span></span><span class="line"><span class="cl">checking for unixlib/local.h... no
</span></span><span class="line"><span class="cl">checking whether time.h and sys/time.h may both be included... yes
</span></span><span class="line"><span class="cl">checking whether struct tm is in sys/time.h or time.h... time.h
</span></span><span class="line"><span class="cl">checking for struct tm.tm_zone... no
</span></span><span class="line"><span class="cl">checking whether tzname is declared... yes
</span></span><span class="line"><span class="cl">checking for tzname... yes
</span></span><span class="line"><span class="cl">configure: creating ./config.status
</span></span><span class="line"><span class="cl">config.status: creating Makefile
</span></span><span class="line"><span class="cl">config.status: WARNING: 'Makefile.in' seems to ignore the --datarootdir setting
</span></span><span class="line"><span class="cl">config.status: creating config.h
</span></span></code></pre></div><p><a href="https://github.com/kazu-yamamoto/pgpdump" title="kazu-yamamoto/pgpdump: A PGP packet visualizer">pgpdump</a> ではパケット内の圧縮データを扱うため <code>libz</code> および <code>libbz2</code> が必要となるが,ちゃんと認識しているようだ。
これによって作成された <code>Makefile</code> がこれ。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-makefile" data-lang="makefile"><span class="line"><span class="cl"><span class="nv">prefix</span> <span class="o">=</span> /usr/local
</span></span><span class="line"><span class="cl"><span class="nv">exec_prefix</span> <span class="o">=</span> <span class="si">${</span><span class="nv">prefix</span><span class="si">}</span>
</span></span><span class="line"><span class="cl"><span class="nv">bindir</span> <span class="o">=</span> <span class="si">${</span><span class="nv">exec_prefix</span><span class="si">}</span>/bin
</span></span><span class="line"><span class="cl"><span class="nv">mandir</span> <span class="o">=</span> <span class="si">${</span><span class="nv">prefix</span><span class="si">}</span>/share/man
</span></span><span class="line"><span class="cl"><span class="nv">LIBS</span> <span class="o">=</span> -lbz2 -lz
</span></span><span class="line"><span class="cl"><span class="nv">CFLAGS</span> <span class="o">=</span> -g -O2 -O -Wall
</span></span><span class="line"><span class="cl"><span class="nv">LDFLAGS</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl"><span class="nv">VERSION</span> <span class="o">=</span> <span class="sb">`</span>git tag <span class="p">|</span> tail -1 <span class="p">|</span> sed -e <span class="s1">'s/v//'</span><span class="sb">`</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">RM</span> <span class="o">=</span> rm -f
</span></span><span class="line"><span class="cl"><span class="nv">INSTALL</span> <span class="o">=</span> install
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">INCS</span> <span class="o">=</span> pgpdump.h
</span></span><span class="line"><span class="cl"><span class="nv">SRCS</span> <span class="o">=</span> pgpdump.c types.c tagfuncs.c packet.c subfunc.c signature.c keys.c <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> buffer.c uatfunc.c
</span></span><span class="line"><span class="cl"><span class="nv">OBJS</span> <span class="o">=</span> pgpdump.o types.o tagfuncs.o packet.o subfunc.o signature.o keys.o <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> buffer.o uatfunc.o
</span></span><span class="line"><span class="cl"><span class="nv">PROG</span> <span class="o">=</span> pgpdump
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">MAN</span> <span class="o">=</span> pgpdump.1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">CNF</span> <span class="o">=</span> config.h config.status config.cache config.log
</span></span><span class="line"><span class="cl"><span class="nv">MKF</span> <span class="o">=</span> Makefile
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">.c.o</span><span class="o">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>CC<span class="k">)</span> -c <span class="k">$(</span>CFLAGS<span class="k">)</span> $<
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">all</span><span class="o">:</span> <span class="k">$(</span><span class="nv">PROG</span><span class="k">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">$(PROG)</span><span class="o">:</span> <span class="k">$(</span><span class="nv">OBJS</span><span class="k">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>CC<span class="k">)</span> <span class="k">$(</span>CFLAGS<span class="k">)</span> -o <span class="k">$(</span>PROG<span class="k">)</span> <span class="k">$(</span>OBJS<span class="k">)</span> <span class="k">$(</span>LIBS<span class="k">)</span> <span class="k">$(</span>LDFLAGS<span class="k">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">clean</span><span class="o">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>RM<span class="k">)</span> <span class="k">$(</span>OBJS<span class="k">)</span> <span class="k">$(</span>PROG<span class="k">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">distclean</span><span class="o">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>RM<span class="k">)</span> <span class="k">$(</span>OBJS<span class="k">)</span> <span class="k">$(</span>PROG<span class="k">)</span> <span class="k">$(</span>CNF<span class="k">)</span> <span class="k">$(</span>MKF<span class="k">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">install</span><span class="o">:</span> <span class="n">all</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>INSTALL<span class="k">)</span> -d <span class="k">$(</span>DESTDIR<span class="k">)$(</span>bindir<span class="k">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>INSTALL<span class="k">)</span> -cp -pm755 <span class="k">$(</span>PROG<span class="k">)</span> <span class="k">$(</span>DESTDIR<span class="k">)$(</span>bindir<span class="k">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>INSTALL<span class="k">)</span> -d <span class="k">$(</span>DESTDIR<span class="k">)$(</span>mandir<span class="k">)</span>/man1
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>INSTALL<span class="k">)</span> -cp -pm644 <span class="k">$(</span>MAN<span class="k">)</span> <span class="k">$(</span>DESTDIR<span class="k">)$(</span>mandir<span class="k">)</span>/man1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">archive</span><span class="o">:</span>
</span></span><span class="line"><span class="cl"> git archive master -o ~/pgpdump-<span class="k">$(</span>VERSION<span class="k">)</span>.tar --prefix<span class="o">=</span>pgpdump-<span class="k">$(</span>VERSION<span class="k">)</span>/
</span></span><span class="line"><span class="cl"> gzip ~/pgpdump-<span class="k">$(</span>VERSION<span class="k">)</span>.tar
</span></span></code></pre></div><p>この時点での問題は以下のとおり。</p>
<ol>
<li><code>prefix</code> が <code>/usr/local</code> になっている。このままでもエラーにはならないが,今回は 32bit 版と 64bit 版を分けたいので <code>/mingw32</code> としたい</li>
<li>リンク時のオプション(<code>LDFLAGS</code>)に <code>-static</code> がないため,このままビルドすると DLL に依存する構成になってしまう</li>
</ol>
<p>これらについては <code>configure</code> に情報を渡せばよい。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ ./configure --prefix=/mingw32 LDFLAGS=-static
</span></span></code></pre></div><p>これで <code>Makefile</code> は以下のようになる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-makefile" data-lang="makefile"><span class="line"><span class="cl"><span class="nv">prefix</span> <span class="o">=</span> /mingw32
</span></span><span class="line"><span class="cl"><span class="nv">exec_prefix</span> <span class="o">=</span> <span class="si">${</span><span class="nv">prefix</span><span class="si">}</span>
</span></span><span class="line"><span class="cl"><span class="nv">bindir</span> <span class="o">=</span> <span class="si">${</span><span class="nv">exec_prefix</span><span class="si">}</span>/bin
</span></span><span class="line"><span class="cl"><span class="nv">mandir</span> <span class="o">=</span> <span class="si">${</span><span class="nv">prefix</span><span class="si">}</span>/share/man
</span></span><span class="line"><span class="cl"><span class="nv">LIBS</span> <span class="o">=</span> -lbz2 -lz
</span></span><span class="line"><span class="cl"><span class="nv">CFLAGS</span> <span class="o">=</span> -g -O2 -O -Wall
</span></span><span class="line"><span class="cl"><span class="nv">LDFLAGS</span> <span class="o">=</span> -static
</span></span><span class="line"><span class="cl"><span class="nv">VERSION</span> <span class="o">=</span> <span class="sb">`</span>git tag <span class="p">|</span> tail -1 <span class="p">|</span> sed -e <span class="s1">'s/v//'</span><span class="sb">`</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">RM</span> <span class="o">=</span> rm -f
</span></span><span class="line"><span class="cl"><span class="nv">INSTALL</span> <span class="o">=</span> install
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">INCS</span> <span class="o">=</span> pgpdump.h
</span></span><span class="line"><span class="cl"><span class="nv">SRCS</span> <span class="o">=</span> pgpdump.c types.c tagfuncs.c packet.c subfunc.c signature.c keys.c <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> buffer.c uatfunc.c
</span></span><span class="line"><span class="cl"><span class="nv">OBJS</span> <span class="o">=</span> pgpdump.o types.o tagfuncs.o packet.o subfunc.o signature.o keys.o <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> buffer.o uatfunc.o
</span></span><span class="line"><span class="cl"><span class="nv">PROG</span> <span class="o">=</span> pgpdump
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">MAN</span> <span class="o">=</span> pgpdump.1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">CNF</span> <span class="o">=</span> config.h config.status config.cache config.log
</span></span><span class="line"><span class="cl"><span class="nv">MKF</span> <span class="o">=</span> Makefile
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">.c.o</span><span class="o">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>CC<span class="k">)</span> -c <span class="k">$(</span>CFLAGS<span class="k">)</span> $<
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">all</span><span class="o">:</span> <span class="k">$(</span><span class="nv">PROG</span><span class="k">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">$(PROG)</span><span class="o">:</span> <span class="k">$(</span><span class="nv">OBJS</span><span class="k">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>CC<span class="k">)</span> <span class="k">$(</span>CFLAGS<span class="k">)</span> -o <span class="k">$(</span>PROG<span class="k">)</span> <span class="k">$(</span>OBJS<span class="k">)</span> <span class="k">$(</span>LIBS<span class="k">)</span> <span class="k">$(</span>LDFLAGS<span class="k">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">clean</span><span class="o">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>RM<span class="k">)</span> <span class="k">$(</span>OBJS<span class="k">)</span> <span class="k">$(</span>PROG<span class="k">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">distclean</span><span class="o">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>RM<span class="k">)</span> <span class="k">$(</span>OBJS<span class="k">)</span> <span class="k">$(</span>PROG<span class="k">)</span> <span class="k">$(</span>CNF<span class="k">)</span> <span class="k">$(</span>MKF<span class="k">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">install</span><span class="o">:</span> <span class="n">all</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>INSTALL<span class="k">)</span> -d <span class="k">$(</span>DESTDIR<span class="k">)$(</span>bindir<span class="k">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>INSTALL<span class="k">)</span> -cp -pm755 <span class="k">$(</span>PROG<span class="k">)</span> <span class="k">$(</span>DESTDIR<span class="k">)$(</span>bindir<span class="k">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>INSTALL<span class="k">)</span> -d <span class="k">$(</span>DESTDIR<span class="k">)$(</span>mandir<span class="k">)</span>/man1
</span></span><span class="line"><span class="cl"> <span class="k">$(</span>INSTALL<span class="k">)</span> -cp -pm644 <span class="k">$(</span>MAN<span class="k">)</span> <span class="k">$(</span>DESTDIR<span class="k">)$(</span>mandir<span class="k">)</span>/man1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">archive</span><span class="o">:</span>
</span></span><span class="line"><span class="cl"> git archive master -o ~/pgpdump-<span class="k">$(</span>VERSION<span class="k">)</span>.tar --prefix<span class="o">=</span>pgpdump-<span class="k">$(</span>VERSION<span class="k">)</span>/
</span></span><span class="line"><span class="cl"> gzip ~/pgpdump-<span class="k">$(</span>VERSION<span class="k">)</span>.tar
</span></span></code></pre></div><p>では make を実行しよう。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ make
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall pgpdump.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall types.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall tagfuncs.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall packet.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall subfunc.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall signature.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall keys.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall buffer.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall uatfunc.c
</span></span><span class="line"><span class="cl">cc -g -O2 -O -Wall -o pgpdump pgpdump.o types.o tagfuncs.o packet.o subfunc.o signature.o keys.o buffer.o uatfunc.o -lbz2 -lz -static
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ strip pgpdump.exe
</span></span></code></pre></div><p>できた実行ファイルをコマンドプロンプトから起動してみる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">C:>pgpdump.exe -v
</span></span><span class="line"><span class="cl">pgpdump.exe version 0.29, Copyright (C) 1998-2014 Kazu Yamamoto
</span></span></code></pre></div><p>うまくいったようである。</p>
<h2>64bit 版のビルド</h2>
<p>32bit 版で要領は分かったので一気に終わらせてしまおう。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ git clone https://github.com/kazu-yamamoto/pgpdump.git
</span></span><span class="line"><span class="cl">Cloning into 'pgpdump'...
</span></span><span class="line"><span class="cl">remote: Counting objects: 492, done.
</span></span><span class="line"><span class="cl">Receiving objects: 62% (306remote: Total 492 (delta 0), reused 0 (delta 0), pack-reused 492/92
</span></span><span class="line"><span class="cl">Receiving objects: 100% (492/492), 180.29 KiB | 0 bytes/s, done.
</span></span><span class="line"><span class="cl">Resolving deltas: 100% (320/320), done.
</span></span><span class="line"><span class="cl">Checking connectivity... done.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ cd pgpdump/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ ./configure --prefix=/mingw64 LDFLAGS=-static
</span></span><span class="line"><span class="cl">checking for gcc... gcc
</span></span><span class="line"><span class="cl">checking whether the C compiler works... yes
</span></span><span class="line"><span class="cl">checking for C compiler default output file name... a.exe
</span></span><span class="line"><span class="cl">checking for suffix of executables... .exe
</span></span><span class="line"><span class="cl">checking whether we are cross compiling... no
</span></span><span class="line"><span class="cl">checking for suffix of object files... o
</span></span><span class="line"><span class="cl">checking whether we are using the GNU C compiler... yes
</span></span><span class="line"><span class="cl">checking whether gcc accepts -g... yes
</span></span><span class="line"><span class="cl">checking for gcc option to accept ISO C89... none needed
</span></span><span class="line"><span class="cl">checking for inflate in -lz... yes
</span></span><span class="line"><span class="cl">checking for BZ2_bzBuffToBuffDecompress in -lbz2... yes
</span></span><span class="line"><span class="cl">checking how to run the C preprocessor... gcc -E
</span></span><span class="line"><span class="cl">checking for grep that handles long lines and -e... /usr/bin/grep
</span></span><span class="line"><span class="cl">checking for egrep... /usr/bin/grep -E
</span></span><span class="line"><span class="cl">checking for ANSI C header files... yes
</span></span><span class="line"><span class="cl">checking for sys/types.h... yes
</span></span><span class="line"><span class="cl">checking for sys/stat.h... yes
</span></span><span class="line"><span class="cl">checking for stdlib.h... yes
</span></span><span class="line"><span class="cl">checking for string.h... yes
</span></span><span class="line"><span class="cl">checking for memory.h... yes
</span></span><span class="line"><span class="cl">checking for strings.h... yes
</span></span><span class="line"><span class="cl">checking for inttypes.h... yes
</span></span><span class="line"><span class="cl">checking for stdint.h... yes
</span></span><span class="line"><span class="cl">checking for unistd.h... yes
</span></span><span class="line"><span class="cl">checking for unistd.h... (cached) yes
</span></span><span class="line"><span class="cl">checking sys/time.h usability... yes
</span></span><span class="line"><span class="cl">checking sys/time.h presence... yes
</span></span><span class="line"><span class="cl">checking for sys/time.h... yes
</span></span><span class="line"><span class="cl">checking unixlib/local.h usability... no
</span></span><span class="line"><span class="cl">checking unixlib/local.h presence... no
</span></span><span class="line"><span class="cl">checking for unixlib/local.h... no
</span></span><span class="line"><span class="cl">checking whether time.h and sys/time.h may both be included... yes
</span></span><span class="line"><span class="cl">checking whether struct tm is in sys/time.h or time.h... time.h
</span></span><span class="line"><span class="cl">checking for struct tm.tm_zone... no
</span></span><span class="line"><span class="cl">checking whether tzname is declared... yes
</span></span><span class="line"><span class="cl">checking for tzname... yes
</span></span><span class="line"><span class="cl">configure: creating ./config.status
</span></span><span class="line"><span class="cl">config.status: creating Makefile
</span></span><span class="line"><span class="cl">config.status: WARNING: 'Makefile.in' seems to ignore the --datarootdir setting
</span></span><span class="line"><span class="cl">config.status: creating config.h
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ make
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall pgpdump.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall types.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall tagfuncs.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall packet.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall subfunc.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall signature.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall keys.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall buffer.c
</span></span><span class="line"><span class="cl">cc -c -g -O2 -O -Wall uatfunc.c
</span></span><span class="line"><span class="cl">cc -g -O2 -O -Wall -o pgpdump pgpdump.o types.o tagfuncs.o packet.o subfunc.o signature.o keys.o buffer.o uatfunc.o -lbz2 -lz -static
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ strip pgpdump.exe
</span></span></code></pre></div><p>これもコマンドプロンプト上で起動してみる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">C:>pgpdump.exe -v
</span></span><span class="line"><span class="cl">pgpdump.exe version 0.29, Copyright (C) 1998-2014 Kazu Yamamoto
</span></span></code></pre></div><p>問題なし。</p>
<h2>動作確認</h2>
<p>実際にちゃんと動くかどうか <a href="https://www.jpcert.or.jp/jpcert-pgp.html" title="JPCERT コーディネーションセンター PGP公開鍵">JPCERT/CC の公開鍵</a>をを使って確認してみる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">C:>pgpdump.exe info-0x69ECE048.asc
</span></span><span class="line"><span class="cl">Old: Public Key Packet(tag 6)(269 bytes)
</span></span><span class="line"><span class="cl"> Ver 4 - new
</span></span><span class="line"><span class="cl"> Public key creation time - Tue Jun 02 14:43:57 東京 (標準時) 2009
</span></span><span class="line"><span class="cl"> Pub alg - RSA Encrypt or Sign(pub 1)
</span></span><span class="line"><span class="cl"> RSA n(2048 bits) - ...
</span></span><span class="line"><span class="cl"> RSA e(17 bits) - ...
</span></span><span class="line"><span class="cl">Old: User ID Packet(tag 13)(29 bytes)
</span></span><span class="line"><span class="cl"> User ID - JPCERT/CC <info@jpcert.or.jp>
</span></span><span class="line"><span class="cl">Old: Signature Packet(tag 2)(316 bytes)
</span></span><span class="line"><span class="cl"> Ver 4 - new
</span></span><span class="line"><span class="cl"> Sig type - Generic certification of a User ID and Public Key packet(0x10).
</span></span><span class="line"><span class="cl"> Pub alg - RSA Encrypt or Sign(pub 1)
</span></span><span class="line"><span class="cl"> Hash alg - SHA1(hash 2)
</span></span><span class="line"><span class="cl"> Hashed Sub: preferred symmetric algorithms(sub 11)(3 bytes)
</span></span><span class="line"><span class="cl"> Sym alg - AES with 256-bit key(sym 9)
</span></span><span class="line"><span class="cl"> Sym alg - CAST5(sym 3)
</span></span><span class="line"><span class="cl"> Sym alg - Triple-DES(sym 2)
</span></span><span class="line"><span class="cl"> Hashed Sub: key server preferences(sub 23)(4 bytes)
</span></span><span class="line"><span class="cl"> Flag - No-modify
</span></span><span class="line"><span class="cl"> Hashed Sub: key flags(sub 27)(4 bytes)
</span></span><span class="line"><span class="cl"> Flag - This key may be used to certify other keys
</span></span><span class="line"><span class="cl"> Flag - This key may be used to sign data
</span></span><span class="line"><span class="cl"> Flag - This key may be used to encrypt communications
</span></span><span class="line"><span class="cl"> Flag - This key may be used to encrypt storage
</span></span><span class="line"><span class="cl"> Flag - The private component of this key may be in the possession of more than one person
</span></span><span class="line"><span class="cl"> Hashed Sub: preferred compression algorithms(sub 22)(2 bytes)
</span></span><span class="line"><span class="cl"> Comp alg - ZLIB <RFC1950>(comp 2)
</span></span><span class="line"><span class="cl"> Comp alg - ZIP <RFC1951>(comp 1)
</span></span><span class="line"><span class="cl"> Hashed Sub: features(sub 30)(4 bytes)
</span></span><span class="line"><span class="cl"> Flag - Modification detection (packets 18 and 19)
</span></span><span class="line"><span class="cl"> Hashed Sub: preferred hash algorithms(sub 21)(3 bytes)
</span></span><span class="line"><span class="cl"> Hash alg - SHA256(hash 8)
</span></span><span class="line"><span class="cl"> Hash alg - SHA384(hash 9)
</span></span><span class="line"><span class="cl"> Hash alg - SHA512(hash 10)
</span></span><span class="line"><span class="cl"> Hashed Sub: signature creation time(sub 2)(4 bytes)
</span></span><span class="line"><span class="cl"> Time - Tue Jun 16 12:51:22 東京 (標準時) 2009
</span></span><span class="line"><span class="cl"> Sub: issuer key ID(sub 16)(8 bytes)
</span></span><span class="line"><span class="cl"> Key ID - 0x317D97A469ECE048
</span></span><span class="line"><span class="cl"> Hash left 2 bytes - cd 79
</span></span><span class="line"><span class="cl"> RSA m^d mod n(2047 bits) - ...
</span></span><span class="line"><span class="cl"> -> PKCS-1
</span></span><span class="line"><span class="cl">Old: Signature Packet(tag 2)(277 bytes)
</span></span><span class="line"><span class="cl"> Ver 3 - old
</span></span><span class="line"><span class="cl"> Hash material(5 bytes):
</span></span><span class="line"><span class="cl"> Sig type - Generic certification of a User ID and Public Key packet(0x10).
</span></span><span class="line"><span class="cl"> Creation time - Tue Jun 02 14:43:57 東京 (標準時) 2009
</span></span><span class="line"><span class="cl"> Key ID - 0xE7734FA60C7BDE12
</span></span><span class="line"><span class="cl"> Pub alg - RSA Encrypt or Sign(pub 1)
</span></span><span class="line"><span class="cl"> Hash alg - SHA1(hash 2)
</span></span><span class="line"><span class="cl"> Hash left 2 bytes - e9 53
</span></span><span class="line"><span class="cl"> RSA m^d mod n(2047 bits) - ...
</span></span><span class="line"><span class="cl"> -> PKCS-1
</span></span><span class="line"><span class="cl">Old: Signature Packet(tag 2)(156 bytes)
</span></span><span class="line"><span class="cl"> Ver 4 - new
</span></span><span class="line"><span class="cl"> Sig type - Generic certification of a User ID and Public Key packet(0x10).
</span></span><span class="line"><span class="cl"> Pub alg - RSA Encrypt or Sign(pub 1)
</span></span><span class="line"><span class="cl"> Hash alg - SHA1(hash 2)
</span></span><span class="line"><span class="cl"> Hashed Sub: signature creation time(sub 2)(4 bytes)
</span></span><span class="line"><span class="cl"> Time - Mon Jun 15 14:51:27 東京 (標準時) 2009
</span></span><span class="line"><span class="cl"> Sub: issuer key ID(sub 16)(8 bytes)
</span></span><span class="line"><span class="cl"> Key ID - 0x8C756B2E2C94D4ED
</span></span><span class="line"><span class="cl"> Hash left 2 bytes - 35 fd
</span></span><span class="line"><span class="cl"> RSA m^d mod n(1022 bits) - ...
</span></span><span class="line"><span class="cl"> -> PKCS-1
</span></span><span class="line"><span class="cl">Old: Public Subkey Packet(tag 14)(269 bytes)
</span></span><span class="line"><span class="cl"> Ver 4 - new
</span></span><span class="line"><span class="cl"> Public key creation time - Tue Jun 02 14:43:57 東京 (標準時) 2009
</span></span><span class="line"><span class="cl"> Pub alg - RSA Encrypt or Sign(pub 1)
</span></span><span class="line"><span class="cl"> RSA n(2048 bits) - ...
</span></span><span class="line"><span class="cl"> RSA e(17 bits) - ...
</span></span><span class="line"><span class="cl">Old: Signature Packet(tag 2)(577 bytes)
</span></span><span class="line"><span class="cl"> Ver 4 - new
</span></span><span class="line"><span class="cl"> Sig type - Subkey Binding Signature(0x18).
</span></span><span class="line"><span class="cl"> Pub alg - RSA Encrypt or Sign(pub 1)
</span></span><span class="line"><span class="cl"> Hash alg - SHA1(hash 2)
</span></span><span class="line"><span class="cl"> Hashed Sub: signature creation time(sub 2)(4 bytes)
</span></span><span class="line"><span class="cl"> Time - Tue Jun 02 14:43:58 東京 (標準時) 2009
</span></span><span class="line"><span class="cl"> Hashed Sub: key flags(sub 27)(4 bytes)
</span></span><span class="line"><span class="cl"> Flag - This key may be used to encrypt communications
</span></span><span class="line"><span class="cl"> Flag - This key may be used to encrypt storage
</span></span><span class="line"><span class="cl"> Hashed Sub: embedded signature(sub 32)(284 bytes)
</span></span><span class="line"><span class="cl"> Ver 4 - new
</span></span><span class="line"><span class="cl"> Sig type - Primary Key Binding Signature(0x19).
</span></span><span class="line"><span class="cl"> Pub alg - RSA Encrypt or Sign(pub 1)
</span></span><span class="line"><span class="cl"> Hash alg - SHA256(hash 8)
</span></span><span class="line"><span class="cl"> Hashed Sub: signature creation time(sub 2)(4 bytes)
</span></span><span class="line"><span class="cl"> Time - Tue Jun 02 14:43:57 東京 (標準時) 2009
</span></span><span class="line"><span class="cl"> Sub: issuer key ID(sub 16)(8 bytes)
</span></span><span class="line"><span class="cl"> Key ID - 0x09D704B753BA1622
</span></span><span class="line"><span class="cl"> Hash left 2 bytes - 71 2d
</span></span><span class="line"><span class="cl"> RSA m^d mod n(2048 bits) - ...
</span></span><span class="line"><span class="cl"> -> PKCS-1
</span></span><span class="line"><span class="cl"> Sub: issuer key ID(sub 16)(8 bytes)
</span></span><span class="line"><span class="cl"> Key ID - 0x317D97A469ECE048
</span></span><span class="line"><span class="cl"> Hash left 2 bytes - 1d e2
</span></span><span class="line"><span class="cl"> RSA m^d mod n(2046 bits) - ...
</span></span><span class="line"><span class="cl"> -> PKCS-1
</span></span></code></pre></div><p>うむ,問題ないようだな。
ちなみに Windows バイナリは<a href="https://baldanders.info/spiegel/pgpdump/">うちのサイトでも公開</a>しているのでご自由にどうぞ。</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-2/" title="MSYS2 による gcc 開発環境の構築 ― gcc パッケージ群の導入">前回</a>インストールした <code>base-devel</code> パッケージグループは今回の <a href="https://github.com/kazu-yamamoto/pgpdump" title="kazu-yamamoto/pgpdump: A PGP packet visualizer">pgpdump</a> ビルドには必要なく,インストールしなくても問題ない。まぁ今回は単純なビルドだし。 <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>
MSYS2 による gcc 開発環境の構築 ― gcc パッケージ群の導入
tag:text.Baldanders.info,2016-03-01:/remark/2016/03/gcc-msys2-2/
2016-03-01T13:02:44+00:00
2019-07-01T13:48:09+00:00
いよいよ gcc をインストールする。
Spiegel
https://baldanders.info/profile/
<ol>
<li><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-1/">MSYS2 のインストールから初期化処理まで</a></li>
<li><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-2/">gcc パッケージ群の導入</a> (← イマココ)</li>
<li><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-3/">pgpdump をビルドする</a></li>
</ol>
<p>いよいよ gcc をインストールする。
その前に…</p>
<h2>pacman によるパッケージ管理</h2>
<p><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-1/" title="MSYS2 による gcc 開発環境の構築 ― インストールから初期化処理まで">前回</a>の初期化でもちょっとだけ出てきたが, <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> のパッケージ管理には pacman コマンドを使う。
pacman は元々 Arch Linux のパッケージ管理ツールで,使い方もこれと同じようだ。</p>
<ul>
<li><a href="https://archlinuxjp.kusakata.com/wiki/Pacman">pacman - ArchWiki</a></li>
</ul>
<p>よく使うコマンドとしては</p>
<table>
<thead>
<tr>
<th style="text-align:left">コマンドライン</th>
<th style="text-align:left">処理内容</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>pacman -S <package_name1> [package_name2...]</code></td>
<td style="text-align:left">指定したパッケージをインストールする</td>
</tr>
<tr>
<td style="text-align:left"><code>pacman -Sl [repository]</code></td>
<td style="text-align:left">パッケージを一覧表示する(リポジトリを指定可能)</td>
</tr>
<tr>
<td style="text-align:left"><code>pacman -Ss [regex...]</code></td>
<td style="text-align:left">パッケージを一覧・検索する(キーワードを指定可能)</td>
</tr>
<tr>
<td style="text-align:left"><code>pacman -Su</code></td>
<td style="text-align:left">インストール済みのパッケージを更新する</td>
</tr>
<tr>
<td style="text-align:left"><code>pacman -Sy</code></td>
<td style="text-align:left">パッケージのデータベースを更新する</td>
</tr>
<tr>
<td style="text-align:left"><code>pacman -Syu</code></td>
<td style="text-align:left"><code>-Su</code>, <code>-Sy</code> の同時指定</td>
</tr>
<tr>
<td style="text-align:left"><code>pacman -Q [package_name...]</code></td>
<td style="text-align:left">インストール済みパッケージを一覧・検索する(パッケージを指定可能)</td>
</tr>
<tr>
<td style="text-align:left"><code>pacman -Qs [regex...]</code></td>
<td style="text-align:left">インストール済みパッケージを一覧・検索する(をキーワードを指定可能)</td>
</tr>
<tr>
<td style="text-align:left"><code>pacman -R <package_name></code></td>
<td style="text-align:left">指定したパッケージを削除する</td>
</tr>
<tr>
<td style="text-align:left"><code>pacman -Rs <package_name></code></td>
<td style="text-align:left">依存関係を含めて指定したパッケージを削除する(指定したパッケージにのみ依存するパッケージを削除)</td>
</tr>
</tbody>
</table>
<p>あたりか。</p>
<h3>MSYS2 のリポジトリ</h3>
<p><code>/etc/pacman.conf</code> を見ると MSYS2 では <code>mingw32</code>, <code>mingw64</code>, <code>msys</code> の3つのリポジトリを管理していることが分かる。</p>
<table>
<thead>
<tr>
<th style="text-align:left">リポジトリ名</th>
<th style="text-align:left">参照ファイル</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>mingw32</code></td>
<td style="text-align:left"><code>/etc/pacman.d/mirrorlist.mingw32</code></td>
</tr>
<tr>
<td style="text-align:left"><code>mingw64</code></td>
<td style="text-align:left"><code>/etc/pacman.d/mirrorlist.mingw64</code></td>
</tr>
<tr>
<td style="text-align:left"><code>msys</code></td>
<td style="text-align:left"><code>/etc/pacman.d/mirrorlist.msys</code></td>
</tr>
</tbody>
</table>
<p>実際には「参照ファイル」にリポジトリへの URI が書かれている。
たとえば <code>/etc/pacman.d/mirrorlist.mingw32</code> ならこんな感じ。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">##
</span></span><span class="line"><span class="cl">## 32-bit Mingw-w64 repository mirrorlist
</span></span><span class="line"><span class="cl">##
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">## Primary
</span></span><span class="line"><span class="cl">## msys2.org
</span></span><span class="line"><span class="cl">Server = http://repo.msys2.org/mingw/i686
</span></span><span class="line"><span class="cl">Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686
</span></span><span class="line"><span class="cl">Server = http://www2.futureware.at/~nickoe/msys2-mirror/i686/
</span></span></code></pre></div><p>では実際にリポジトリの中を覗いてみよう。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ pacman -Sl | grep gcc
</span></span><span class="line"><span class="cl">mingw32 mingw-w64-i686-gcc 7.3.0-1
</span></span><span class="line"><span class="cl">mingw32 mingw-w64-i686-gcc-ada 7.3.0-1
</span></span><span class="line"><span class="cl">mingw32 mingw-w64-i686-gcc-fortran 7.3.0-1
</span></span><span class="line"><span class="cl">mingw32 mingw-w64-i686-gcc-libgfortran 7.3.0-1
</span></span><span class="line"><span class="cl">mingw32 mingw-w64-i686-gcc-libs 7.3.0-1
</span></span><span class="line"><span class="cl">mingw32 mingw-w64-i686-gcc-objc 7.3.0-1
</span></span><span class="line"><span class="cl">mingw64 mingw-w64-x86_64-gcc 7.3.0-1
</span></span><span class="line"><span class="cl">mingw64 mingw-w64-x86_64-gcc-ada 7.3.0-1
</span></span><span class="line"><span class="cl">mingw64 mingw-w64-x86_64-gcc-fortran 7.3.0-1
</span></span><span class="line"><span class="cl">mingw64 mingw-w64-x86_64-gcc-libgfortran 7.3.0-1
</span></span><span class="line"><span class="cl">mingw64 mingw-w64-x86_64-gcc-libs 7.3.0-1
</span></span><span class="line"><span class="cl">mingw64 mingw-w64-x86_64-gcc-objc 7.3.0-1
</span></span><span class="line"><span class="cl">msys gcc 6.4.0-3
</span></span><span class="line"><span class="cl">msys gcc-fortran 6.4.0-3
</span></span><span class="line"><span class="cl">msys gcc-libs 6.4.0-3 [インストール済み]
</span></span><span class="line"><span class="cl">msys mingw-w64-cross-gcc 6.4.0-2
</span></span></code></pre></div><p>どれを使うかはユーザ次第だが,今回は <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> 内ではなく Windows 環境で動作するアプリケーションを作りたいので, <code>mingw32</code> および <code>mingw64</code> リポジトリのものを導入する。</p>
<ul>
<li><a href="http://qiita.com/chromabox/items/fd07bad3f426101fc4a6">Windowsでgccなどを利用できるMSYS2の環境設定など - Qiita</a></li>
</ul>
<h2>gcc のインストール</h2>
<p>では gcc のインストールを始めよう。
今回は以下のパッケージグループを導入する。</p>
<ul>
<li><code>base-devel</code></li>
<li><code>mingw-w64-i686-toolchain</code></li>
<li><code>mingw-w64-x86_64-toolchain</code></li>
</ul>
<p>ものすごく分かりにくいが <code>mingw-w64-x86_64-toolchain</code> が 64bit 用である。
コマンドラインは以下の通り(ログがかなり長くなるので省略)。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ pacman -S base-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain
</span></span></code></pre></div><h3>gcc の動作確認</h3>
<p>まずは 32bit 版の動作確認。
<code>mingw32.exe</code> を起動,または 環境変数 <code>MSYSTEM</code> に <code>MINGW32</code> をセットして shell を起動する。
<a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-1/" title="MSYS2 による gcc 開発環境の構築 ― インストールから初期化処理まで">前回</a>紹介した <a href="https://conemu.github.io/" title="ConEmu - Handy Windows Terminal">ConEmu</a> を使うのであれば以下のシーケンスで起動できる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">set MSYSTEM=MINGW32 & chcp 65001 & C:\msys64\usr\bin\bash.exe --login -i
</span></span></code></pre></div><p>gcc を起動して動作確認。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ gcc -v
</span></span><span class="line"><span class="cl">Using built-in specs.
</span></span><span class="line"><span class="cl">COLLECT_GCC=C:\msys64\mingw32\bin\gcc.exe
</span></span><span class="line"><span class="cl">COLLECT_LTO_WRAPPER=C:/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/7.3.0/lto-wrapper.exe
</span></span><span class="line"><span class="cl">Target: i686-w64-mingw32
</span></span><span class="line"><span class="cl">Configured with: ../gcc-7.3.0/configure --prefix=/mingw32 --with-local-prefix=/mingw32/local --build=i686-w64-mingw32 --host=i686-w64-mingw32 --target=i686-w64-mingw32 --with-native-system-header-dir=/mingw32/i686-w64-mingw32/include --libexecdir=/mingw32/lib --enable-bootstrap --with-arch=i686 --with-tune=generic --enable-languages=c,lto,c++,objc,obj-c++,fortran,ada --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-time=yes --enable-libstdcxx-filesystem-ts=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-isl-version-check --enable-lto --enable-libgomp --disable-multilib --enable-checking=release --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-libiconv --with-system-zlib --with-gmp=/mingw32 --with-mpfr=/mingw32 --with-mpc=/mingw32 --with-isl=/mingw32 --with-pkgversion='Rev1, Built by MSYS2 project' --with-bugurl=https://sourceforge.net/projects/msys2 --with-gnu-as --with-gnu-ld --disable-sjlj-exceptions --with-dwarf2
</span></span><span class="line"><span class="cl">Thread model: posix
</span></span><span class="line"><span class="cl">gcc version 7.3.0 (Rev1, Built by MSYS2 project)
</span></span></code></pre></div><p>次に 64bit 版の動作確認。
動作確認には <code>mingw64.exe</code> を起動,または 環境変数 <code>MSYSTEM</code> に <code>MINGW64</code> をセットして shell を起動する。
<a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-1/" title="MSYS2 による gcc 開発環境の構築 ― インストールから初期化処理まで">前回</a>紹介した <a href="https://conemu.github.io/" title="ConEmu - Handy Windows Terminal">ConEmu</a> を使うのであれば以下のシーケンスで起動できる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">set MSYSTEM=MINGW64 & chcp 65001 & C:\msys64\usr\bin\bash.exe --login -i
</span></span></code></pre></div><p>gcc を起動して動作確認。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ gcc -v
</span></span><span class="line"><span class="cl">Using built-in specs.
</span></span><span class="line"><span class="cl">COLLECT_GCC=C:\msys64\mingw64\bin\gcc.exe
</span></span><span class="line"><span class="cl">COLLECT_LTO_WRAPPER=C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/lto-wrapper.exe
</span></span><span class="line"><span class="cl">Target: x86_64-w64-mingw32
</span></span><span class="line"><span class="cl">Configured with: ../gcc-7.3.0/configure --prefix=/mingw64 --with-local-prefix=/mingw64/local --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --with-native-system-header-dir=/mingw64/x86_64-w64-mingw32/include --libexecdir=/mingw64/lib --enable-bootstrap --with-arch=x86-64 --with-tune=generic --enable-languages=c,lto,c++,objc,obj-c++,fortran,ada --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-time=yes --enable-libstdcxx-filesystem-ts=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-isl-version-check --enable-lto --enable-libgomp --disable-multilib --enable-checking=release --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-libiconv --with-system-zlib --with-gmp=/mingw64 --with-mpfr=/mingw64 --with-mpc=/mingw64 --with-isl=/mingw64 --with-pkgversion='Rev1, Built by MSYS2 project' --with-bugurl=https://sourceforge.net/projects/msys2 --with-gnu-as --with-gnu-ld
</span></span><span class="line"><span class="cl">Thread model: posix
</span></span><span class="line"><span class="cl">gcc version 7.3.0 (Rev1, Built by MSYS2 project)
</span></span></code></pre></div><p>ターゲット名が <code>x86_64-w64-mingw32</code> となっていて非常に分かりにくいが, mingw32 版では <code>i686-w64-mingw32</code> となっているので,なんとか区別して欲しい。</p>
<h2>gcc のスレッドモデルと例外処理</h2>
<p><a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> で提供される gcc のスレッドモデルと例外処理は以下のようになっているらしい。</p>
<figure lang="en">
<blockquote>
<q>On MSYS2 I maintain only one configuration:<br>
32-bit: threads=posix, exceptions=dwarf<br>
64-bit: threads=posix, exceptions=seh</q>
</blockquote>
<figcaption><div>via <q><a href="http://sourceforge.net/p/msys2/tickets/24/">MSYS2 / Tickets / #24 Mingw64 downloads through msys2?</a></q></div></figcaption>
</figure>
<p><a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> のベースになっている <a href="http://mingw-w64.org/" title="Mingw-w64 - GCC for Windows 64 & 32 bits [mingw-w64]">MinGW-w64</a> のスレッドモデルには win32 と posix が提供されている。 win32 は Windows ネイティブなスレッド関連関数を使っているため速いが, C++11 の thread, mutex, future はサポートしていないらしい。
一方,例外処理には SJLJ(SetJump/LongJump), <a href="http://ja.wikipedia.org/wiki/DWARF">DWARF</a>2, SEH(Structured Exception Handling)があり,この中では Windows ネイティブな SEH が一番速い。ただし SEH は 64bit gcc でしか対応していないため 32bit 環境では使えない<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>。</p>
<p><a href="http://mingw-w64.org/" title="Mingw-w64 - GCC for Windows 64 & 32 bits [mingw-w64]">MinGW-w64</a> のもうひとつの実装である <a href="http://tdm-gcc.tdragon.net/" title="TDM-GCC">TDM-GCC</a> では,スレッドモデルには posix,例外処理には SJLJ(32bit)または SEH(64bit)が設定されているようだ。</p>
<figure lang="en">
<blockquote>
<q>TDM-GCC includes a pthreads emulation layer for Microsoft Windows systems, called "winpthreads". This lets you use std::thread and other C++11 concurrency features in your programs, out of the box.<br>
[...]<br>
64-bit binaries use "SEH", which stands for "Structured Exception Handling".<br>
[...]<br>
If you create a 32-bit binary with the TDM64 edition, it will use SJLJ exception handling. DW2 exception handling is not available in this edition.</q>
</blockquote>
<figcaption><div>via <q><a href="http://tdm-gcc.tdragon.net/quirks">TDM-GCC : Quirks</a></q></div></figcaption>
</figure>
<p><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-3/" title="MSYS2 による gcc 開発環境の構築 ― pgpdump をビルドする">次回</a>は実際にビルドを行う。</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>ちなみにオリジナルの <a href="http://mingw-w64.org/" title="Mingw-w64 - GCC for Windows 64 & 32 bits [mingw-w64]">MinGW-w64</a> ではインストール時にスレッドモデルと例外処理を選択できる。 <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>
MSYS2 による gcc 開発環境の構築 ― MSYS2 のインストールから初期化処理まで
tag:text.Baldanders.info,2016-03-01:/remark/2016/03/gcc-msys2-1/
2016-03-01T13:02:41+00:00
2019-07-01T13:48:09+00:00
MSYS の後継(?)とも言える MSYS2 では開発環境を 32bit と 64bit で併設できるらしい。
Spiegel
https://baldanders.info/profile/
<p>これは Qiita の以下の記事からの再構成である。</p>
<ul>
<li><a href="http://qiita.com/spiegel-im-spiegel/items/ba4e8d2418bdfe0c8049">MSYS2 による gcc 開発環境の構築 - Qiita</a></li>
<li><a href="http://qiita.com/spiegel-im-spiegel/items/877cbfb970509b272fc1">MSYS2 による gcc 開発環境の構築(2) - Qiita</a></li>
</ul>
<p>ここでは以下の3部構成になっている。</p>
<ol>
<li><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-1/">MSYS2 のインストールから初期化処理まで</a> (← イマココ)</li>
<li><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-2/">gcc パッケージ群の導入</a></li>
<li><a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-3/">pgpdump をビルドする</a></li>
</ol>
<h2>gcc と MSYS2</h2>
<p>MSYS の後継(?)とも言える <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> では gcc を含む開発環境を 32bit と 64bit で併設できるらしい。</p>
<ul>
<li><a href="http://msys2.github.io/">MSYS2 installer</a></li>
<li><a href="https://github.com/msys2">msys2</a> : GitHub ページ</li>
</ul>
<p>今回は <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> を使って gcc 開発環境を構築する。</p>
<p>なお,単に gcc が欲しいのであれば <a href="http://mingw-w64.org/" title="Mingw-w64 - GCC for Windows 64 & 32 bits [mingw-w64]">MinGW-w64</a> から Windows 用のバイナリを取得するほうがお勧めである<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>。</p>
<ul>
<li><a href="https://text.baldanders.info/remark/2018/03/mingw-w64/">MinGW-w64 を導入する</a></li>
</ul>
<p>そうではなく autotools などを含む UNIX 互換の環境が必要なのであれば,今回紹介する <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> が適切と思われる(UNIX 系のコマンドを Windows にポーティングする場合など)。
また開発環境は要らないが UNIX 互換の動作環境が欲しいだけなら <a href="http://git-for-windows.github.io/" title="Git for Windows">Git for Windows</a> を導入する手もある<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>。</p>
<h2>MSYS2 のインストール</h2>
<p>では早速 64bit 版インストーラ(今回は <code>msys2-x86_64-20161025.exe</code> を使用)でインストールを行ってみる。</p>
<figure style='margin:0 auto;text-align:center;'><a href="https://photo.baldanders.info/flickr/25210363812/"><img src="https://photo.baldanders.info/flickr/image/25210363812_m.png" srcset="https://photo.baldanders.info/flickr/image/25210363812_m.png 500w" sizes="(min-width:600px) 500px, 80vw" alt="MSYS2 Installing (1)" loading="lazy"></a><figcaption><div><a href="https://photo.baldanders.info/flickr/25210363812/">MSYS2 Installing (1)</a></div></figcaption>
</figure>
<p>わお! 日本語だ。</p>
<figure style='margin:0 auto;text-align:center;'><a href="https://photo.baldanders.info/flickr/25032985150/"><img src="https://photo.baldanders.info/flickr/image/25032985150_m.png" srcset="https://photo.baldanders.info/flickr/image/25032985150_m.png 500w" sizes="(min-width:600px) 500px, 80vw" alt="MSYS2 Installing (2)" loading="lazy"></a><figcaption><div><a href="https://photo.baldanders.info/flickr/25032985150/">MSYS2 Installing (2)</a></div></figcaption>
</figure>
<figure style='margin:0 auto;text-align:center;'><a href="https://photo.baldanders.info/flickr/24960938719/"><img src="https://photo.baldanders.info/flickr/image/24960938719_m.png" srcset="https://photo.baldanders.info/flickr/image/24960938719_m.png 500w" sizes="(min-width:600px) 500px, 80vw" alt="MSYS2 Installing (3)" loading="lazy"></a><figcaption><div><a href="https://photo.baldanders.info/flickr/24960938719/">MSYS2 Installing (3)</a></div></figcaption>
</figure>
<figure style='margin:0 auto;text-align:center;'><a href="https://photo.baldanders.info/flickr/25235500391/"><img src="https://photo.baldanders.info/flickr/image/25235500391_m.png" srcset="https://photo.baldanders.info/flickr/image/25235500391_m.png 500w" sizes="(min-width:600px) 500px, 80vw" alt="MSYS2 Installing (5)" loading="lazy"></a><figcaption><div><a href="https://photo.baldanders.info/flickr/25235500391/">MSYS2 Installing (5)</a></div></figcaption>
</figure>
<figure style='margin:0 auto;text-align:center;'><a href="https://photo.baldanders.info/flickr/25235500391/"><img src="https://photo.baldanders.info/flickr/image/25235500391_m.png" srcset="https://photo.baldanders.info/flickr/image/25235500391_m.png 500w" sizes="(min-width:600px) 500px, 80vw" alt="MSYS2 Installing (5)" loading="lazy"></a><figcaption><div><a href="https://photo.baldanders.info/flickr/25235500391/">MSYS2 Installing (5)</a></div></figcaption>
</figure>
<p>このまま「完了」するとターミナル(<a href="https://mintty.github.io/" title="Mintty — Cygwin Terminal emulator">mintty</a>)が起動する。
のだが,ここでちょっと寄り道する。
「MSYS2 64bit を実行中」のチェックを外して「完了」しよう。</p>
<h3>MSYS2 起動モード</h3>
<p><a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> には3つの起動モジュールがある(64bit 版をインストールした場合)。</p>
<ul>
<li><code>mingw32.exe</code></li>
<li><code>mingw64.exe</code></li>
<li><code>msys2.exe</code></li>
</ul>
<p>またそれぞれに ini ファイルが用意されている。
たとえば <code>msys2.exe</code> であればこんな感じ。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="cl"><span class="c1">#MSYS=winsymlinks:nativestrict</span>
</span></span><span class="line"><span class="cl"><span class="c1">#MSYS=error_start:mingw64/bin/qtcreator.exe|-debug|<process-id></span>
</span></span><span class="line"><span class="cl"><span class="c1">#CHERE_INVOKING=1</span>
</span></span><span class="line"><span class="cl"><span class="c1">#MSYS2_PATH_TYPE=inherit</span>
</span></span><span class="line"><span class="cl"><span class="na">MSYSTEM</span><span class="o">=</span><span class="s">MSYS</span>
</span></span></code></pre></div><p>どうやら ini ファイルの内容をそのまま環境変数として渡しているようだ。
このうち <code>MSYSTEM</code> に注目すると以下のようになっている。</p>
<table>
<thead>
<tr>
<th style="text-align:left">バッチファイル</th>
<th style="text-align:left">セットする値</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>mingw32.exe</code></td>
<td style="text-align:left"><code>MINGW32</code></td>
</tr>
<tr>
<td style="text-align:left"><code>mingw64.exe</code></td>
<td style="text-align:left"><code>MINGW64</code></td>
</tr>
<tr>
<td style="text-align:left"><code>msys2.exe</code></td>
<td style="text-align:left"><code>MSYS</code></td>
</tr>
</tbody>
</table>
<p><code>MSYSTEM</code> は <code>/etc/profile</code> 内で参照される。
以下に <code>/etc/profile</code> の一部を引用する。</p>
<pre tabindex="0"><code class="language-test" data-lang="test">MSYS2_PATH="/usr/local/bin:/usr/bin:/bin"
MANPATH='/usr/local/man:/usr/share/man:/usr/man:/share/man'
INFOPATH='/usr/local/info:/usr/share/info:/usr/info:/share/info'
case "${MSYS2_PATH_TYPE:-minimal}" in
strict)
# Do not inherit any path configuration, and allow for full customization
# of external path. This is supposed to be used in special cases such as
# debugging without need to change this file, but not daily usage.
unset ORIGINAL_PATH
;;
inherit)
# Inherit previous path. Note that this will make all of the Windows path
# available in current shell, with possible interference in project builds.
ORIGINAL_PATH="${ORIGINAL_PATH:-${PATH}}"
;;
*)
# Do not inherit any path configuration but configure a default Windows path
# suitable for normal usage with minimal external interference.
WIN_ROOT="$(PATH=${MSYS2_PATH} cygpath -Wu)"
ORIGINAL_PATH="${WIN_ROOT}/System32:${WIN_ROOT}:${WIN_ROOT}/System32/Wbem:${WIN_ROOT}/System32/WindowsPowerShell/v1.0/"
esac
unset MINGW_MOUNT_POINT
source '/etc/msystem'
case "${MSYSTEM}" in
MINGW32)
MINGW_MOUNT_POINT="${MINGW_PREFIX}"
PATH="${MINGW_MOUNT_POINT}/bin:${MSYS2_PATH}${ORIGINAL_PATH:+:${ORIGINAL_PATH}}"
PKG_CONFIG_PATH="${MINGW_MOUNT_POINT}/lib/pkgconfig:${MINGW_MOUNT_POINT}/share/pkgconfig"
ACLOCAL_PATH="${MINGW_MOUNT_POINT}/share/aclocal:/usr/share/aclocal"
MANPATH="${MINGW_MOUNT_POINT}/share/man:${MANPATH}"
;;
MINGW64)
MINGW_MOUNT_POINT="${MINGW_PREFIX}"
PATH="${MINGW_MOUNT_POINT}/bin:${MSYS2_PATH}${ORIGINAL_PATH:+:${ORIGINAL_PATH}}"
PKG_CONFIG_PATH="${MINGW_MOUNT_POINT}/lib/pkgconfig:${MINGW_MOUNT_POINT}/share/pkgconfig"
ACLOCAL_PATH="${MINGW_MOUNT_POINT}/share/aclocal:/usr/share/aclocal"
MANPATH="${MINGW_MOUNT_POINT}/share/man:${MANPATH}"
;;
*)
PATH="${MSYS2_PATH}:/opt/bin${ORIGINAL_PATH:+:${ORIGINAL_PATH}}"
PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig:/lib/pkgconfig"
esac
</code></pre><p><code>MINGW32</code> または <code>MINGW64</code> の場合は,新たに <code>/mingw32</code> または <code>/mingw64</code> がパス等に追加されているのがお分かりだろうか。</p>
<h3>ConEmu から MSYS2 bash を起動する</h3>
<p>以上から,環境変数 <code>MSYSTEM</code> を適切に設定すれば <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> の起動モジュールを介さずに shell を起動しても構わないことが分かる。
ここでは <a href="https://conemu.github.io/" title="ConEmu - Handy Windows Terminal">ConEmu</a> から <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> の bash を起動することを考える。
以下のように Tasks 設定で <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> の bash を起動するシーケンスを設定すればよい。</p>
<figure style='margin:0 auto;text-align:center;'><a href="https://photo.baldanders.info/flickr/22388493089/"><img src="https://photo.baldanders.info/flickr/image/22388493089_m.png" srcset="https://photo.baldanders.info/flickr/image/22388493089_m.png 500w" sizes="(min-width:600px) 500px, 80vw" alt="ConEmu Setting" loading="lazy"></a><figcaption><div><a href="https://photo.baldanders.info/flickr/22388493089/">ConEmu Setting</a></div></figcaption>
</figure>
<p>起動シーケンスは以下のとおり。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">set MSYSTEM=MSYS & chcp 65001 & C:\msys64\usr\bin\bash.exe --login -i -new_console:C:"C:\msys64\msys2.ico"
</span></span></code></pre></div><p>前半で環境変数とコードページ(65001 は UTF-8)を設定し,後半で実際に bash を呼び出している。</p>
<h2>初期設定</h2>
<p>では本題に戻ろう。
<code>msys2.exe</code> または環境変数 <code>MSYSTEM</code> に <code>MSYS</code> をセットして shell を起動し,まずはコア・パッケージを最新のものに更新する。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ pacman -Syu
</span></span><span class="line"><span class="cl">:: パッケージデータベースの同期中...
</span></span><span class="line"><span class="cl"> mingw32 232.6 KiB 720K/s 00:00 [##################] 100%
</span></span><span class="line"><span class="cl"> mingw32.sig 96.0 B 93.8K/s 00:00 [##################] 100%
</span></span><span class="line"><span class="cl"> mingw64 231.6 KiB 740K/s 00:00 [##################] 100%
</span></span><span class="line"><span class="cl"> mingw64.sig 96.0 B 0.00B/s 00:00 [##################] 100%
</span></span><span class="line"><span class="cl"> msys 130.7 KiB 165K/s 00:01 [##################] 100%
</span></span><span class="line"><span class="cl"> msys.sig 96.0 B 93.8K/s 00:00 [##################] 100%
</span></span><span class="line"><span class="cl">==> Checking if there are critical packages to upgrade.
</span></span><span class="line"><span class="cl">pacman 5.0.0.6348.cc5a8f1-1 -> 5.0.1.6388.dcb2397-1
</span></span><span class="line"><span class="cl">==> Core packages require updating.
</span></span><span class="line"><span class="cl">==> Please close all other MSYS2 derived windows (e.g. terminal
</span></span><span class="line"><span class="cl">==> windows, Bash sessions, etc) before proceeding.
</span></span><span class="line"><span class="cl">==> 警告: When the update has completed, you MUST close this MSYS2 window
</span></span><span class="line"><span class="cl">==> 警告: (use Alt-F4 or red [ X ], etc.), rather than 'exit'!!!
</span></span><span class="line"><span class="cl">Press [Enter] key when ready to start update...
</span></span><span class="line"><span class="cl">==> Updating core packages...
</span></span><span class="line"><span class="cl">警告: bash-4.3.042-4 は最新です -- スキップ
</span></span><span class="line"><span class="cl">警告: msys2-runtime-2.4.1.16860.40c26fc-1 は最新です -- スキップ
</span></span><span class="line"><span class="cl">依存関係を解決しています...
</span></span><span class="line"><span class="cl">衝突するパッケージがないか確認しています...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">パッケージ (2) msys2-runtime-devel-2.4.1.16860.40c26fc-1 pacman-5.0.1.6388.dcb2397-1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">合計ダウンロード容量: 10.34 MiB
</span></span><span class="line"><span class="cl">合計インストール容量: 54.72 MiB
</span></span><span class="line"><span class="cl">最終的なアップグレード容量: 21.12 MiB
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">:: インストールを行いますか? [Y/n]
</span></span><span class="line"><span class="cl">:: パッケージを取得します ...
</span></span><span class="line"><span class="cl"> pacman-5.0.1.6388.dcb2397-1-x86_64 6.8 MiB 1248K/s 00:06 [##################] 100%
</span></span><span class="line"><span class="cl"> msys2-runtime-devel-2.4.1.16860.40c26fc-1-x86_64 3.5 MiB 1027K/s 00:04 [##################] 100%
</span></span><span class="line"><span class="cl">(2/2) キーリングのキーを確認 [##################] 100%
</span></span><span class="line"><span class="cl">(2/2) パッケージの整合性をチェック [##################] 100%
</span></span><span class="line"><span class="cl">(2/2) パッケージファイルのロード [##################] 100%
</span></span><span class="line"><span class="cl">(2/2) ファイルの衝突をチェック [##################] 100%
</span></span><span class="line"><span class="cl">(2/2) 空き容量を確認 [##################] 100%
</span></span><span class="line"><span class="cl">:: パッケージの変更を処理しています...
</span></span><span class="line"><span class="cl">(1/2) 更新 pacman [##################] 100%
</span></span><span class="line"><span class="cl">(2/2) インストール msys2-runtime-devel [##################] 100%
</span></span><span class="line"><span class="cl">Please close this window.
</span></span></code></pre></div><p>おや。
ツールが更新された。
<code>pacman -Syu</code> で更新があった場合,いったん shell を閉じて起動し直す。
このとき <code>exit</code> コマンドで終了するのではなく,強制終了する。</p>
<p>Shell を再起動したら他のインストール済みのパッケージを更新しよう。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ pacman -Su
</span></span><span class="line"><span class="cl">:: システム全体の更新を開始...
</span></span><span class="line"><span class="cl">依存関係を解決しています...
</span></span><span class="line"><span class="cl">衝突するパッケージがないか確認しています...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">パッケージ (7) curl-7.47.1-1 file-5.25-1 gnupg-1.4.20-1 libcurl-7.47.1-1 libopenssl-1.0.2.f-1
</span></span><span class="line"><span class="cl"> mintty-1~2.2.3-1 openssl-1.0.2.f-1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">合計ダウンロード容量: 4.40 MiB
</span></span><span class="line"><span class="cl">合計インストール容量: 20.60 MiB
</span></span><span class="line"><span class="cl">最終的なアップグレード容量: 0.12 MiB
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">:: インストールを行いますか? [Y/n] y
</span></span><span class="line"><span class="cl">:: パッケージを取得します...
</span></span><span class="line"><span class="cl"> libopenssl-1.0.2.f-1-x86_64 815.3 KiB 796K/s 00:01 [##################] 100%
</span></span><span class="line"><span class="cl"> openssl-1.0.2.f-1-x86_64 1336.9 KiB 977K/s 00:01 [##################] 100%
</span></span><span class="line"><span class="cl"> libcurl-7.47.1-1-x86_64 185.0 KiB 269K/s 00:01 [##################] 100%
</span></span><span class="line"><span class="cl"> curl-7.47.1-1-x86_64 595.3 KiB 855K/s 00:01 [##################] 100%
</span></span><span class="line"><span class="cl"> file-5.25-1-x86_64 396.5 KiB 767K/s 00:01 [##################] 100%
</span></span><span class="line"><span class="cl"> gnupg-1.4.20-1-x86_64 1026.9 KiB 672K/s 00:02 [##################] 100%
</span></span><span class="line"><span class="cl"> mintty-1~2.2.3-1-x86_64 147.2 KiB 436K/s 00:00 [##################] 100%
</span></span><span class="line"><span class="cl">(7/7) キーリングのキーを確認 [##################] 100%
</span></span><span class="line"><span class="cl">(7/7) パッケージの整合性をチェック [##################] 100%
</span></span><span class="line"><span class="cl">(7/7) パッケージファイルのロード [##################] 100%
</span></span><span class="line"><span class="cl">(7/7) ファイルの衝突をチェック [##################] 100%
</span></span><span class="line"><span class="cl">(7/7) 空き容量を確認 [##################] 100%
</span></span><span class="line"><span class="cl">:: パッケージの変更を処理しています...
</span></span><span class="line"><span class="cl">(1/7) 更新 libopenssl [##################] 100%
</span></span><span class="line"><span class="cl">(2/7) 更新 openssl [##################] 100%
</span></span><span class="line"><span class="cl">(3/7) 更新 libcurl [##################] 100%
</span></span><span class="line"><span class="cl">(4/7) 更新 curl [##################] 100%
</span></span><span class="line"><span class="cl">(5/7) 更新 file [##################] 100%
</span></span><span class="line"><span class="cl">(6/7) 更新 gnupg [##################] 100%
</span></span><span class="line"><span class="cl">gpg: /etc/pacman.d/gnupg/trustdb.gpg: 信用データベースができました
</span></span><span class="line"><span class="cl">gpg: 究極的に信用する鍵が見つかりません
</span></span><span class="line"><span class="cl">gpg: Generating pacman keyring master key...
</span></span><span class="line"><span class="cl">gpg: skipping control `%no-protection' ()
</span></span><span class="line"><span class="cl">.+++++
</span></span><span class="line"><span class="cl">+++++
</span></span><span class="line"><span class="cl">gpg: 鍵CD81616Cを究極的に信用するよう記録しました
</span></span><span class="line"><span class="cl">gpg: Done
</span></span><span class="line"><span class="cl">==> 信用データベースを更新...
</span></span><span class="line"><span class="cl">gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
</span></span><span class="line"><span class="cl">gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u
</span></span><span class="line"><span class="cl">==> msys2.gpg からキーを追加...
</span></span><span class="line"><span class="cl">gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
</span></span><span class="line"><span class="cl">gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u
</span></span><span class="line"><span class="cl">==> キーリングの信頼されたキーに署名...
</span></span><span class="line"><span class="cl"> -> キーに署名 D55E7A6D7CE9BA1587C0ACACF40D263ECA25678A...
</span></span><span class="line"><span class="cl"> -> キーに署名 123D4D51A1793859C2BE916BBBE514E53E0D0813...
</span></span><span class="line"><span class="cl"> -> キーに署名 B91BCF3303284BF90CC043CA9F418C233E652008...
</span></span><span class="line"><span class="cl"> -> キーに署名 9DD0D4217D75A33B896159E6DA7EF2ABAEEA755C...
</span></span><span class="line"><span class="cl">==> 所有者信頼値をインポート...
</span></span><span class="line"><span class="cl">gpg: setting ownertrust to 4
</span></span><span class="line"><span class="cl">gpg: setting ownertrust to 4
</span></span><span class="line"><span class="cl">gpg: setting ownertrust to 4
</span></span><span class="line"><span class="cl">gpg: inserting ownertrust of 4
</span></span><span class="line"><span class="cl">==> 信用データベースを更新...
</span></span><span class="line"><span class="cl">gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
</span></span><span class="line"><span class="cl">gpg: 深さ: 0 有効性: 1 署名: 4 信用: 0-, 0q, 0n, 0m, 0f, 1u
</span></span><span class="line"><span class="cl">gpg: 深さ: 1 有効性: 4 署名: 3 信用: 0-, 0q, 0n, 4m, 0f, 0u
</span></span><span class="line"><span class="cl">gpg: 深さ: 2 有効性: 3 署名: 0 信用: 3-, 0q, 0n, 0m, 0f, 0u
</span></span><span class="line"><span class="cl">(7/7) 更新 mintty [##################] 100%
</span></span></code></pre></div><p>これで初期化は終了。
<a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-2/" title="MSYS2 による gcc 開発環境の構築 ― gcc パッケージ群の導入">次回</a>へ続く。</p>
<h2>【おまけ1】 ホームディレクトリについて</h2>
<p><a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> のホームディレクトリは,インストールフォルダ直下の <code>home\username</code> フォルダになるが, Windows 上で自前のホームディレクトリを作っている場合は,その場所を <code>/etc/fstab</code> でマウントする手もある。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">C:/home /home
</span></span></code></pre></div><p>この場合,元のフォルダにある <code>.profile</code> ファイル等の移動も忘れないこと。</p>
<h2>【おまけ2】 Proxy サーバ越しのアクセス</h2>
<p>Proxy サーバ越しに curl を使う場合は <code>~/.curlrc</code> に以下の記述を追加する。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">proxy-user = "username:password"
</span></span><span class="line"><span class="cl">proxy = "http://proxy.example.com:8080"
</span></span></code></pre></div><p>パッケージ管理コマンドである <code>pacman</code> を Proxy サーバ越しに使う場合は,上述の通りに curl の設定をしたうえで <code>/etc/pacman.conf</code> ファイルの以下の記述を探し,コメントを解除する。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">#XferCommand = /usr/bin/curl -C - -f %u > %o
</span></span></code></pre></div><p>GnuPG で鍵サーバにアクセスする場合も, Proxy サーバ越しにアクセスするのであれば, <code>~/.gnupg/gpg.conf</code> に以下のオプションを追記する。</p>
<pre tabindex="0"><code class="language-text:gpg.conf" data-lang="text:gpg.conf">keyserver-options http-proxy=http://username:password@proxy.example.com:8080/
</code></pre><p>実は <code>/etc/pacman.d/gnupg</code> ディレクトリにも <code>gpg.conf</code> ファイルがあって <code>pacman-key</code> コマンドはこちらを見てるっぽい<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ pacman-key -l
</span></span><span class="line"><span class="cl">/etc/pacman.d/gnupg/pubring.gpg
</span></span><span class="line"><span class="cl">-------------------------------
</span></span><span class="line"><span class="cl">pub 2048R/CD81616C 2016-03-01
</span></span><span class="line"><span class="cl">uid Pacman Keyring Master Key <pacman@localhost>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">pub 2048R/CA25678A 2014-09-28
</span></span><span class="line"><span class="cl">uid Alexey Pavlov (Alexpux) <alexey.pawlow@gmail.com>
</span></span><span class="line"><span class="cl">sub 2048R/2BBF340E 2014-09-28
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">pub 4096R/AEEA755C 2014-10-04
</span></span><span class="line"><span class="cl">uid Martell Malone (martell) <martellmalone@gmail.com>
</span></span><span class="line"><span class="cl">sub 4096R/2A292C03 2014-10-04
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">pub 4096R/3E0D0813 2014-09-28
</span></span><span class="line"><span class="cl">uid Ray Donnelly (MSYS2 Developer - master key) <mingw.android@gmail.com>
</span></span><span class="line"><span class="cl">sub 4096R/8603AA9D 2014-09-28
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">pub 2048R/3E652008 2014-09-29
</span></span><span class="line"><span class="cl">uid Ignacio Casal Quinteiro <icquinteiro@gmail.com>
</span></span><span class="line"><span class="cl">sub 2048R/64D62A76 2014-09-29
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">pub 2048D/A47D45A1 2013-11-11
</span></span><span class="line"><span class="cl">uid Alexey Pavlov (Alexpux) <alexpux@gmail.com>
</span></span><span class="line"><span class="cl">sub 2048g/31CF7700 2013-11-11
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">pub 4096R/2C51581E 2015-07-22
</span></span><span class="line"><span class="cl">uid Martell Malone (MSYS2 Developer) <martellmalone@gmail.com>
</span></span><span class="line"><span class="cl">sub 4096R/282D6707 2015-07-22
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">pub 4096R/4CA56930 2014-09-28
</span></span><span class="line"><span class="cl">uid Ray Donnelly (MSYS2 Developer) <mingw.android@gmail.com>
</span></span><span class="line"><span class="cl">sub 4096R/576CF231 2014-09-28
</span></span></code></pre></div><p>もしかしたらこちらの <code>gpg.conf</code> ファイルも修正する必要があるかもしれない(未確認)。</p>
<h2>関連するブックマーク</h2>
<ul>
<li><a href="http://qiita.com/Ted-HM/items/4f2feb9fdacb6c72083c">MSYS2で快適なターミナル生活 - Qiita</a></li>
</ul>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>この記事では今まで <a href="http://tdm-gcc.tdragon.net/" title="TDM-GCC">TDM-GCC</a> を勧めてきたが,どうも何年もメンテナンスされていないようだ。したがって今後は <a href="http://mingw-w64.org/" title="Mingw-w64 - GCC for Windows 64 & 32 bits [mingw-w64]">MinGW-w64</a> を推すことにする。 <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:2">
<p><a href="http://git-for-windows.github.io/" title="Git for Windows">Git for Windows</a> には bash などの <a href="http://msys2.github.io/" title="MSYS2 installer">MSYS2</a> サブセットを含んでいるため, <a href="http://git-for-windows.github.io/" title="Git for Windows">Git for Windows</a> の bash (通称 git bash)を起動することで UNIX 互換の動作環境を得られる。なお <a href="http://git-for-windows.github.io/" title="Git for Windows">Git for Windows</a> の環境は git を動かすための最小限のツールしか入っていないため, Git for Windows SDK も併せて導入し,その中の pacman コマンドで必要に応じてのツールを追加する。 pacman については<a href="https://text.baldanders.info/remark/2016/03/gcc-msys2-2/" title="MSYS2 による gcc 開発環境の構築 ― gcc パッケージ群の導入">次回</a>説明する。 <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:3">
<p>ちなみに <code>/etc/pacman.d/gnupg</code> ディレクトリにある鍵束を GnuPG から直接見る場合には <code>gpg --homedir /etc/pacman.d/gnupg --list-keys</code> とする。 <a href="#fnref:3" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>