2020-01-15

MSYS2 の導入

MSYS (Minimal SYStem) は、Windows 上で動作する軽量の UNIX 風シェル環境です。 Unix シェル Bash やテキスト操作ユーティリティ (gawk, sed, findutils)、ソースコードパッチ用ツール (diffutils)、アーカイブツール (tar, bzip2, zlib) を統合したパッケージで、GNU ツールチェーンの Windows 移植版 (32bit) である MinGW を補う目的で作られました。

MSYS2 は 2013 年後半に新しく始まった MSYS とは別の独立したプロジェクトで、32/64bit 向けの MinGW-w64 パッケージを利用できます。

Wikipedia より引用・編集

OUTLINE

MSYS2 の導入

Windows 10 に MSYS2 をインストールして GCC の開発環境および GTK+ (GObject) を利用して python で GUI アプリを開発できる環境を構築します。

MSYS2 とは

GNU Compiler Collection (GCC) による開発環境を Windows 上で利用するためのシステムで有名なものに Cygwin(1995 年〜)があります。

Cygwin は POSIX に準拠するシステムコールを実現するために cygwin1.dll というランタイムライブラリを提供しており、Cygwin 上の GCC でビルドしたアプリケーションを実行には、このランタイムライブラリが必要になります。

cygwin1.dll に依存せず、Windows ネイティブなランタイムライブラリ msvcrt.dll を利用するようにした開発環境が MinGW で、そのシェル環境が MSYS と呼ばれています。このプロジェクトは 20 年以上前の 1998 年に始まっており、32bit の Windows をサポートしています。

その後、MinGW プロジェクトが 64bit 向けの開発へ移行しなかったため、64bit 向けのプロジェクト MinGW-w64 が新たに立ち上がりました(2005 年〜)。

一方、開発の進捗が遅い MSYS に対して、Cygwin をベースに新たに書き直した MSYS2 プロジェクトが立ち上がり、MinGW-w64 の GCC (32/64bit) をサポートするようになりました(2013 年〜)。

MSYS2 の特徴

MSYS2 は Arch Linux のために開発された Pacman というパッケージ管理システムを採用しています。Pacman は、パッケージのインストール・アップグレード・削除・ダウングレードを処理するとともに依存関係の自動解決を行います。MSYS2 をインストール、設定する際に、その便利さを紹介します。

MSYS2 のインストール

まず、参考サイト [1] からインストーラ(この例では 64bit の msys2-x86_64-20190524.exe)をダウンロードします。

インストール先を D:\msys64 にしてインストールした例を以下に示しました。インストール先は Windows 10 HOME edition(日本語版)です。

(「□ 今すぐ MSYS 64bit を実行します。」にチェックが入っていれば)完了 (F) ボタンをクリックしてインストーラを終了すると端末エミュレータ (Mintty) が起動します。

MSYS2 の端末エミュレータ (Mintty)

MSYS2 のアップデート

pacman -Syu でローカルパッケージデータベースの更新と、(更新可能な)パッケージを更新します。

bitwa@WIN-7713IMJPI09 MSYS ~
$ pacman -Syu
:: パッケージデータベースの同期中...
 mingw32                  451.1 KiB   964K/s 00:00 [#####################] 100%
 mingw32.sig              119.0   B  0.00B/s 00:00 [#####################] 100%
 mingw64                  453.4 KiB  1378K/s 00:00 [#####################] 100%
 mingw64.sig              119.0   B  0.00B/s 00:00 [#####################] 100%
 msys                     190.9 KiB  1224K/s 00:00 [#####################] 100%
 msys.sig                 119.0   B  0.00B/s 00:00 [#####################] 100%
:: Starting core system upgrade...
警告: terminate other MSYS2 programs before proceeding
依存関係を解決しています...
衝突するパッケージがないか確認しています...

パッケージ (3) mintty-1~3.0.6-1  msys2-runtime-3.0.7-6  pacman-5.2.1-4

合計ダウンロード容量:  14.12 MiB
合計インストール容量:  52.11 MiB
最終的なアップグレード容量:  -7.89 MiB

:: インストールを行いますか? [Y/n] y
:: パッケージを取得します...
 msys2-runtime-3.0.7...     2.6 MiB  2.49M/s 00:01 [#####################] 100%
 mintty-1~3.0.6-1-x86_64  664.9 KiB   617K/s 00:01 [#####################] 100%
 pacman-5.2.1-4-x86_64     10.9 MiB  2.41M/s 00:05 [#####################] 100%
(3/3) キーリングのキーを確認                       [#####################] 100%
(3/3) パッケージの整合性をチェック                 [#####################] 100%
(3/3) パッケージファイルのロード                   [#####################] 100%
(3/3) ファイルの衝突をチェック                     [#####################] 100%
(3/3) 空き容量を確認                               [#####################] 100%
:: パッケージの変更を処理しています...
(1/3) 更新 msys2-runtime                           [#####################] 100%
(2/3) 更新 mintty                                  [#####################] 100%
(3/3) 更新 pacman                                  [#####################] 100%
警告: terminate MSYS2 without returning to shell and check for updates again
警告: for example close your terminal window instead of calling exit

コアのパッケージを更新したからでしょうか、シェルがここで止まってしまったので、「警告」に従って端末エミュレータ右上の X をクリックして終了します。

スタートメニューから「MSYS 64bit」→「MSYS2 MSYS」を選択して端末エミュレータを起動します。pacman -Su で残りのパッケージを更新します。

bitwa@WIN-7713IMJPI09 MSYS ~
$ pacman -Su
:: コアシステムの更新を開始...
 何も行うことがありません
:: システム全体の更新を開始...
依存関係を解決しています...
衝突するパッケージがないか確認しています...

パッケージ (45) bash-completion-2.10-1  brotli-1.0.7-2  bsdcpio-3.4.0-4
                bsdtar-3.4.0-4  bzip2-1.0.8-1  ca-certificates-20190110-1
                curl-7.67.0-1  dtc-1.5.1-1  findutils-4.7.0-1  gawk-5.0.1-1
                gcc-libs-9.1.0-2  gnupg-2.2.19-1  heimdal-libs-7.7.0-1
                less-551-1  libarchive-3.4.0-4  libbz2-1.0.8-1
                libcurl-7.67.0-1  libedit-20191025_3.1-1  libexpat-2.2.9-1
                libgcrypt-1.8.5-1  libgnutls-3.6.11.1-1  libgpgme-1.13.1-1
                libhogweed-3.5.1-1  libiconv-1.16-1  libidn2-2.2.0-1
                liblz4-1.9.2-1  libnettle-3.5.1-1  libnghttp2-1.39.2-1
                libopenssl-1.1.1.d-1  libp11-kit-0.23.18.1-1
                libpcre2_8-10.34-1  libpsl-0.21.0-1  libreadline-8.0.001-1
                libssh2-1.9.0-1  libtasn1-4.15.0-1  libutil-linux-2.34-1
                libxml2-2.9.10-1  libxslt-1.1.34-1  libzstd-1.4.4-1
                ncurses-6.1.20190615-1  nettle-3.5.1-1  openssl-1.1.1.d-1
                p11-kit-0.23.18.1-1  pkgfile-21-1  util-linux-2.34-1

合計ダウンロード容量:   22.82 MiB
合計インストール容量:  129.84 MiB
最終的なアップグレード容量:    5.14 MiB

:: インストールを行いますか? [Y/n] y
:: パッケージを取得します...
 bash-completion-...   211.6 KiB   676 KiB/s 00:00 [#####################] 100%
 gcc-libs-9.1.0-2...  1183.6 KiB  2.39 MiB/s 00:00 [#####################] 100%
 brotli-1.0.7-2-x...   284.8 KiB  8.97 MiB/s 00:00 [#####################] 100%
...
(省略)
...
 libutil-linux-2....   254.7 KiB  1481 KiB/s 00:00 [#####################] 100%
 pkgfile-21-1-x86_64    43.0 KiB  0.00   B/s 00:00 [#####################] 100%
 util-linux-2.34-...  1450.1 KiB  2.16 MiB/s 00:01 [#####################] 100%
(45/45) キーリングのキーを確認                     [#####################] 100%
(45/45) パッケージの整合性をチェック               [#####################] 100%
(45/45) パッケージファイルのロード                 [#####################] 100%
(45/45) ファイルの衝突をチェック                   [#####################] 100%
(45/45) 空き容量を確認                             [#####################] 100%
:: パッケージの変更を処理しています...
( 1/45) 更新 bash-completion                       [#####################] 100%
( 2/45) 更新 gcc-libs                              [#####################] 100%
( 3/45) 更新 brotli                                [#####################] 100%
...
(省略)
...
(39/45) 更新 gnupg                                 [#####################] 100%
==> msys2.gpg からキーを追加...
==> キーリングの信頼されたキーに署名...
  -> キーに署名 D55E7A6D7CE9BA1587C0ACACF40D263ECA25678A...
  -> キーに署名 123D4D51A1793859C2BE916BBBE514E53E0D0813...
  -> キーに署名 B91BCF3303284BF90CC043CA9F418C233E652008...
  -> キーに署名 9DD0D4217D75A33B896159E6DA7EF2ABAEEA755C...
==> 所有者信頼値をインポート...
==> 信用データベースを更新...
gpg: 信用データベースの検査は、不要です
(40/45) 更新 libarchive                            [#####################] 100%
(41/45) 更新 libgpgme                              [#####################] 100%
(42/45) 更新 libpcre2_8                            [#####################] 100%
(43/45) 更新 libutil-linux                         [#####################] 100%
(44/45) 更新 pkgfile                               [#####################] 100%
(45/45) 更新 util-linux                            [#####################] 100%

bitwa@WIN-7713IMJPI09 MSYS ~
$

git のインストール

MSYS2 の更新ができましたので、pacman -S git で git をインストールしておきます。

bitwa@WIN-7713IMJPI09 MINGW64 ~
$ pacman -S git
依存関係を解決しています...
衝突するパッケージがないか確認しています...

パッケージ (35) db-5.3.28-2  expat-2.2.9-1  gdbm-1.18.1-2  heimdal-7.7.0-1
                libgdbm-1.18.1-2  openssh-8.1p1-1  perl-5.30.1-1
                perl-Authen-SASL-2.16-2  perl-Convert-BinHex-1.125-1
                perl-Encode-Locale-1.05-1  perl-Error-0.17028-1
                perl-File-Listing-6.04-2  perl-HTML-Parser-3.72-4
                perl-HTML-Tagset-3.20-2  perl-HTTP-Cookies-6.08-1
                perl-HTTP-Daemon-6.01-2  perl-HTTP-Date-6.05-1
                perl-HTTP-Message-6.18-1  perl-HTTP-Negotiate-6.01-2
                perl-IO-Socket-SSL-2.066-1  perl-IO-stringy-2.111-1
                perl-LWP-MediaTypes-6.02-2  perl-MIME-tools-5.509-1
                perl-MailTools-2.21-1  perl-Net-HTTP-6.19-1
                perl-Net-SMTP-SSL-1.04-1  perl-Net-SSLeay-1.85-3
                perl-TermReadKey-2.37-4  perl-TimeDate-2.30-2
                perl-Try-Tiny-0.30-1  perl-URI-1.76-1
                perl-WWW-RobotRules-6.02-2  perl-libwww-6.43-1  vim-8.1.2292-1
                git-2.24.1-1

合計ダウンロード容量:   28.85 MiB
合計インストール容量:  139.19 MiB

:: インストールを行いますか? [Y/n] y
:: パッケージを取得します...
 expat-2.2.9-1-x86_64   43.7 KiB  0.00   B/s 00:00 [#####################] 100%
 vim-8.1.2292-1-x...     7.0 MiB  2.04 MiB/s 00:03 [#####################] 100%
 heimdal-7.7.0-1-...   430.4 KiB  1312 KiB/s 00:00 [#####################] 100%
...
(省略)
...
 git-2.24.1-1-x86_64     5.2 MiB  3.14 MiB/s 00:02 [#####################] 100%
(35/35) キーリングのキーを確認                     [#####################] 100%
(35/35) パッケージの整合性をチェック               [#####################] 100%
(35/35) パッケージファイルのロード                 [#####################] 100%
(35/35) ファイルの衝突をチェック                   [#####################] 100%
(35/35) 空き容量を確認                             [#####################] 100%
:: パッケージの変更を処理しています...
( 1/35) インストール expat                         [#####################] 100%
( 2/35) インストール vim                           [#####################] 100%
( 3/35) インストール heimdal                       [#####################] 100%
...
(省略)
...
(25/35) インストール perl-libwww                   [#####################] 100%
perl-libwww の提案パッケージ
    perl-LWP-Protocol-https: for https:// url schemes
(26/35) インストール perl-TimeDate                 [#####################] 100%
(27/35) インストール perl-MailTools                [#####################] 100%
(28/35) インストール perl-IO-stringy               [#####################] 100%
(29/35) インストール perl-Convert-BinHex           [#####################] 100%
module test... pass.
(30/35) インストール perl-MIME-tools               [#####################] 100%
(31/35) インストール perl-Net-SSLeay               [#####################] 100%
(32/35) インストール perl-IO-Socket-SSL            [#####################] 100%
(33/35) インストール perl-Net-SMTP-SSL             [#####################] 100%
(34/35) インストール perl-TermReadKey              [#####################] 100%
(35/35) インストール git                           [#####################] 100%
git の提案パッケージ
    python2: various helper scripts
    subversion: git svn

bitwa@WIN-7713IMJPI09 MINGW64 ~
$

三種類の端末エミュレータ

インストールした MSYS2 では、スタートメニューに、MinGW 32bit, MinGW 64bit そして MSYS の三種類の端末エミュレータが登録されていて、どれを使うべきなのか戸惑います。

どれも Mintty で bash シェルを利用できますが、パスが微妙に異なっています。また env で確認すると、PATH 以外にも CONFIG_SITE, MSYSTEM_CHOST などの環境変数の値も異なっていることを確認できます。

ここでは 64bit の GCC を利用するので、以降、MSYS2 MinGW 64-bit(実体は D:\msys64\msys2_shell.cmd -mingw64 という引数付きバッチファイルです)を利用することにします。

参考までに、それぞれの端末エミュレータでパスを確認した結果を示しました。

MSYS2 MinGW 32-bit
bitwa@WIN-7713IMJPI09 MINGW32 ~
$ echo $PATH
/mingw32/bin:/usr/local/bin:/usr/bin:/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

bitwa@WIN-7713IMJPI09 MINGW32 ~
$
MSYS2 MinGW 64-bit
bitwa@WIN-7713IMJPI09 MINGW64 ~
$ echo $PATH
/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

bitwa@WIN-7713IMJPI09 MINGW64 ~
$
MSYS2 MSYS
bitwa@WIN-7713IMJPI09 MSYS ~
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/opt/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

bitwa@WIN-7713IMJPI09 MSYS ~
$

GCC (64bit) のインストール

GCC の開発環境をインストールします。ただし、GCC でアプリをビルドする目的で MSYS2 を利用しない場合はインストールを省略できます。

まず、pacman -Sg でパッケージグループを表示します。

bitwa@WIN-7713IMJPI09 MINGW64 ~
$ pacman -Sg
kf5
mingw-w64-i686-toolchain
mingw-w64-i686
mingw-w64-i686-gimp-plugins
kde-applications
kdebase
mingw-w64-i686-qt
mingw-w64-i686-qt5
mingw-w64-i686-qt-static
mingw-w64-i686-qt5-static
mingw-w64-i686-vulkan-devel
tesseract-data
mingw-w64-x86_64-toolchain
mingw-w64-x86_64
mingw-w64-x86_64-gimp-plugins
mingw-w64-x86_64-qt
mingw-w64-x86_64-qt5
mingw-w64-x86_64-qt-static
mingw-w64-x86_64-qt5-static
mingw-w64-x86_64-vulkan-devel
libraries
development
base-devel
base
msys2-devel
compression
VCS
sys-utils
Database
net-utils
editors
python-modules
mingw-w64-cross-toolchain
mingw-w64-cross
perl-modules
utilities

bitwa@WIN-7713IMJPI09 MINGW64 ~
$

上記から mingw-w64-x86_64-toolchain を選んで 64bit 対応の GCC 関連パッケージをまとめてインストールします。

bitwa@WIN-7713IMJPI09 MINGW64 ~
$ pacman -S mingw-w64-x86_64-toolchain
:: 17 個のパッケージがグループ mingw-w64-x86_64-toolchain に存在します:
:: リポジトリ mingw64
   1) mingw-w64-x86_64-binutils  2) mingw-w64-x86_64-crt-git
   3) mingw-w64-x86_64-gcc  4) mingw-w64-x86_64-gcc-ada
   5) mingw-w64-x86_64-gcc-fortran  6) mingw-w64-x86_64-gcc-libgfortran
   7) mingw-w64-x86_64-gcc-libs  8) mingw-w64-x86_64-gcc-objc
   9) mingw-w64-x86_64-gdb  10) mingw-w64-x86_64-headers-git
   11) mingw-w64-x86_64-libmangle-git  12) mingw-w64-x86_64-libwinpthread-git
   13) mingw-w64-x86_64-make  14) mingw-w64-x86_64-pkg-config
   15) mingw-w64-x86_64-tools-git  16) mingw-w64-x86_64-winpthreads-git
   17) mingw-w64-x86_64-winstorecompat-git

選択して下さい (デフォルト=all):
依存関係を解決しています...
衝突するパッケージがないか確認しています...

パッケージ (43) mingw-w64-x86_64-bzip2-1.0.8-1
                mingw-w64-x86_64-ca-certificates-20190110-1
                mingw-w64-x86_64-expat-2.2.9-1
                mingw-w64-x86_64-gettext-0.19.8.1-8
                mingw-w64-x86_64-gmp-6.1.2-1  mingw-w64-x86_64-isl-0.22-1
                mingw-w64-x86_64-libffi-3.2.1-4
                mingw-w64-x86_64-libiconv-1.16-1
                mingw-w64-x86_64-libsystre-1.0.1-4
                mingw-w64-x86_64-libtasn1-4.15.0-1
                mingw-w64-x86_64-libtre-git-r128.6fb7206-2
                mingw-w64-x86_64-mpc-1.1.0-1
                mingw-w64-x86_64-mpdecimal-2.4.2-1
                mingw-w64-x86_64-mpfr-4.0.2-2
                mingw-w64-x86_64-ncurses-6.1.20190630-1
                mingw-w64-x86_64-openssl-1.1.1.d-1
                mingw-w64-x86_64-p11-kit-0.23.18.1-1
                mingw-w64-x86_64-python-3.8.1-1
                mingw-w64-x86_64-readline-8.0.001-2
                mingw-w64-x86_64-sqlite3-3.30.1-1
                mingw-w64-x86_64-tcl-8.6.10-1  mingw-w64-x86_64-termcap-1.3.1-5
                mingw-w64-x86_64-tk-8.6.10-1
                mingw-w64-x86_64-windows-default-manifest-6.4-3
                mingw-w64-x86_64-xz-5.2.4-1  mingw-w64-x86_64-zlib-1.2.11-7
                mingw-w64-x86_64-binutils-2.33.1-1
                mingw-w64-x86_64-crt-git-8.0.0.5576.34082b63-1
                mingw-w64-x86_64-gcc-9.2.0-2  mingw-w64-x86_64-gcc-ada-9.2.0-2
                mingw-w64-x86_64-gcc-fortran-9.2.0-2
                mingw-w64-x86_64-gcc-libgfortran-9.2.0-2
                mingw-w64-x86_64-gcc-libs-9.2.0-2
                mingw-w64-x86_64-gcc-objc-9.2.0-2  mingw-w64-x86_64-gdb-8.3.1-3
                mingw-w64-x86_64-headers-git-8.0.0.5576.34082b63-1
                mingw-w64-x86_64-libmangle-git-8.0.0.5573.a4de8df4-1
                mingw-w64-x86_64-libwinpthread-git-8.0.0.5574.33e5a2ac-1
                mingw-w64-x86_64-make-4.2.1-4
                mingw-w64-x86_64-pkg-config-0.29.2-1
                mingw-w64-x86_64-tools-git-8.0.0.5573.a4de8df4-1
                mingw-w64-x86_64-winpthreads-git-8.0.0.5574.33e5a2ac-1
                mingw-w64-x86_64-winstorecompat-git-8.0.0.5573.a4de8df4-1

合計ダウンロード容量:  146.49 MiB
合計インストール容量:  910.72 MiB

:: インストールを行いますか? [Y/n] y
:: パッケージを取得します...
 mingw-w64-x86_64...   623.0 KiB   950 KiB/s 00:01 [#####################] 100%
 mingw-w64-x86_64...   102.1 KiB  6.65 MiB/s 00:00 [#####################] 100%
 mingw-w64-x86_64...    13.6 MiB  2.94 MiB/s 00:05 [#####################] 100%
...
(省略)
...
 mingw-w64-x86_64...    35.9 KiB  0.00   B/s 00:00 [#####################] 100%
(43/43) キーリングのキーを確認                     [#####################] 100%
(43/43) パッケージの整合性をチェック               [#####################] 100%
(43/43) パッケージファイルのロード                 [#####################] 100%
(43/43) ファイルの衝突をチェック                   [#####################] 100%
(43/43) 空き容量を確認                             [#####################] 100%
:: パッケージの変更を処理しています...
( 1/43) インストール mingw-w64-x86_64-libiconv     [#####################] 100%
( 2/43) インストール mingw-w64-x86_64-zlib         [#####################] 100%
( 3/43) インストール mingw-w64-x86_64-binutils     [#####################] 100%
...
(省略)
...
(43/43) インストール mingw-w64-x86_64-winstore...  [#####################] 100%

bitwa@WIN-7713IMJPI09 MINGW64 ~
$

Hello World!

GCC がインストールできましたので、念の為、簡単な Hello World! の GUI プログラムをコンパイルしてみました。なお、下記ソースは日本語版 Windows デフォルトのエンコーディングである cp932 (Shift-JIS) で保存しておきます。

hello.c (cp932)
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd)
{
    MessageBox(NULL, "こんにちは、世界!", "こんにちは、世界!", MB_OK);
    return 0;
}

-v オプションを付けてコンパイル時の処理も出力しました。

bitwa@WIN-7713IMJPI09 MINGW64 ~/hello
$ gcc -o hello.exe hello.c -mwindows -v
Using built-in specs.
COLLECT_GCC=D:\msys64\mingw64\bin\gcc.exe
COLLECT_LTO_WRAPPER=D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-9.2.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++,fortran,ada,objc,obj-c++ --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts=yes --enable-libstdcxx-time=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 --enable-plugin --with-libiconv --with-system-zlib --with-gmp=/mingw64 --with-mpfr=/mingw64 --with-mpc=/mingw64 --with-isl=/mingw64 --with-pkgversion='Rev2, Built by MSYS2 project' --with-bugurl=https://sourceforge.net/projects/msys2 --with-gnu-as --with-gnu-ld
Thread model: posix
gcc version 9.2.0 (Rev2, Built by MSYS2 project)
COLLECT_GCC_OPTIONS='-o' 'hello.exe' '-mwindows' '-v' '-mtune=generic' '-march=x86-64'
 D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/cc1.exe -quiet -v -iprefix D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/ -D_REENTRANT hello.c -quiet -dumpbase hello.c -mwindows -mtune=generic -march=x86-64 -auxbase hello -version -o D:\msys64\tmp\ccoorSFx.s
GNU C17 (Rev2, Built by MSYS2 project) version 9.2.0 (x86_64-w64-mingw32)
        compiled by GNU C version 9.2.0, GMP version 6.1.2, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.21-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring duplicate directory "D:/msys64/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/9.2.0/include"
ignoring nonexistent directory "C:/building/msys64/mingw64/include"
ignoring nonexistent directory "/mingw64/include"
ignoring duplicate directory "D:/msys64/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/9.2.0/include-fixed"
ignoring duplicate directory "D:/msys64/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/include"
ignoring nonexistent directory "C:/building/msys64/mingw64/x86_64-w64-mingw32/include"
#include "..." search starts here:
#include <...> search starts here:
 D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/include
 D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../include
 D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/include-fixed
 D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/include
End of search list.
GNU C17 (Rev2, Built by MSYS2 project) version 9.2.0 (x86_64-w64-mingw32)
        compiled by GNU C version 9.2.0, GMP version 6.1.2, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.21-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 3bcdf03344e3ad7cb057c2ec82f696e6
COLLECT_GCC_OPTIONS='-o' 'hello.exe' '-mwindows' '-v' '-mtune=generic' '-march=x86-64'
 D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o D:\msys64\tmp\ccOkl3s7.o D:\msys64\tmp\ccoorSFx.s
GNU assembler version 2.33.1 (x86_64-w64-mingw32) using BFD version (GNU Binutils) 2.33.1
COMPILER_PATH=D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/;D:/msys64/mingw64/bin/../lib/gcc/;D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/
LIBRARY_PATH=D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/;D:/msys64/mingw64/bin/../lib/gcc/;D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/lib/../lib/;D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../lib/;D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/lib/;D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../
COLLECT_GCC_OPTIONS='-o' 'hello.exe' '-mwindows' '-v' '-mtune=generic' '-march=x86-64'
 D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/collect2.exe -plugin D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/liblto_plugin-0.dll -plugin-opt=D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/lto-wrapper.exe -plugin-opt=-fresolution=D:\msys64\tmp\cc6QBLmS.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-lgdi32 -plugin-opt=-pass-through=-lcomdlg32 -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -m i386pep --subsystem windows -Bdynamic -o hello.exe D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/crtbegin.o -LD:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0 -LD:/msys64/mingw64/bin/../lib/gcc -LD:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/lib/../lib -LD:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../lib -LD:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/lib -LD:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../.. D:\msys64\tmp\ccOkl3s7.o -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lpthread -lgdi32 -lcomdlg32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/lib/../lib/default-manifest.o D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/crtend.o
COLLECT_GCC_OPTIONS='-o' 'hello.exe' '-mwindows' '-v' '-mtune=generic' '-march=x86-64'

bitwa@WIN-7713IMJPI09 MINGW64 ~/hello
$
hello.exe の実行例

PyGObject のインストール

python で GTK+ の GUI プログラミングをするために必要なパッケージをインストールします。参考サイト [7] に従って、下記のようにインストールします。

bitwa@WIN-7713IMJPI09 MINGW64 ~
$ pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-python3 mingw-w64-x86_64-python3-gobject
警告: mingw-w64-x86_64-python-3.8.1-1 は最新です -- 再インストール
依存関係を解決しています...
衝突するパッケージがないか確認しています...
警告: 循環依存が検出されました:
警告: mingw-w64-x86_64-harfbuzz は依存パッケージ mingw-w64-x86_64-freetype の前にインストールされます

パッケージ (36) mingw-w64-x86_64-adwaita-icon-theme-3.34.3-1
                mingw-w64-x86_64-atk-2.34.1-1  mingw-w64-x86_64-cairo-1.16.0-1
                mingw-w64-x86_64-fontconfig-2.13.1-1
                mingw-w64-x86_64-freeglut-3.2.1-1
                mingw-w64-x86_64-freetype-2.10.1-1
                mingw-w64-x86_64-fribidi-1.0.8-1
                mingw-w64-x86_64-gdk-pixbuf2-2.40.0-1
                mingw-w64-x86_64-glib2-2.62.4-1
                mingw-w64-x86_64-gobject-introspection-runtime-1.62.0-2
                mingw-w64-x86_64-graphite2-1.3.13-2
                mingw-w64-x86_64-harfbuzz-2.6.4-3
                mingw-w64-x86_64-hicolor-icon-theme-0.17-1
                mingw-w64-x86_64-jasper-2.0.16-1
                mingw-w64-x86_64-json-glib-1.4.4-1
                mingw-w64-x86_64-libcroco-0.6.13-1
                mingw-w64-x86_64-libdatrie-0.2.12-1
                mingw-w64-x86_64-libepoxy-1.5.4-1
                mingw-w64-x86_64-libjpeg-turbo-2.0.4-1
                mingw-w64-x86_64-libpng-1.6.37-3
                mingw-w64-x86_64-librsvg-2.46.4-1
                mingw-w64-x86_64-libthai-0.1.28-2
                mingw-w64-x86_64-libtiff-4.1.0-1
                mingw-w64-x86_64-libxml2-2.9.10-2  mingw-w64-x86_64-lzo2-2.10-1
                mingw-w64-x86_64-pango-1.43.0-3  mingw-w64-x86_64-pcre-8.43-1
                mingw-w64-x86_64-pixman-0.38.4-1
                mingw-w64-x86_64-pygobject-devel-3.34.0-3
                mingw-w64-x86_64-python-cairo-1.18.2-2
                mingw-w64-x86_64-shared-mime-info-1.15-1
                mingw-w64-x86_64-wineditline-2.205-3
                mingw-w64-x86_64-zstd-1.4.4-1  mingw-w64-x86_64-gtk3-3.24.13-1
                mingw-w64-x86_64-python-3.8.1-1
                mingw-w64-x86_64-python-gobject-3.34.0-3

合計ダウンロード容量:   38.11 MiB
合計インストール容量:  328.42 MiB
最終的なアップグレード容量:  215.75 MiB

:: インストールを行いますか? [Y/n] y
:: パッケージを取得します...
 mingw-w64-x86_64...    31.5 KiB  0.00   B/s 00:00 [#####################] 100%
 mingw-w64-x86_64...    58.2 KiB  0.00   B/s 00:00 [#####################] 100%
 mingw-w64-x86_64...   885.1 KiB  1112 KiB/s 00:01 [#####################] 100%
...
(省略)
...
 mingw-w64-x86_64...   188.6 KiB  5.94 MiB/s 00:00 [#####################] 100%
(36/36) キーリングのキーを確認                     [#####################] 100%
(36/36) パッケージの整合性をチェック               [#####################] 100%
(36/36) パッケージファイルのロード                 [#####################] 100%
(36/36) ファイルの衝突をチェック                   [#####################] 100%
(36/36) 空き容量を確認                             [#####################] 100%
:: パッケージの変更を処理しています...
( 1/36) インストール mingw-w64-x86_64-hicolor-...  [#####################] 100%
( 2/36) インストール mingw-w64-x86_64-wineditline  [#####################] 100%
( 3/36) インストール mingw-w64-x86_64-pcre         [#####################] 100%
...
(省略)
...
(36/36) インストール mingw-w64-x86_64-python-g...  [#####################] 100%

bitwa@WIN-7713IMJPI09 MINGW64 ~
$

calculator.py の実行

本ブログで以前紹介した PyGObject のサンプルプログラム [8] を git でクローンします。サンプルの中から calculator.py を実行してみます。

bitwa@WIN-7713IMJPI09 MINGW64 ~
$ git clone https://github.com/bitwalk123/PyGObject_samples.git
Cloning into 'PyGObject_samples'...
remote: Enumerating objects: 141, done.
remote: Counting objects: 100% (141/141), done.
remote: Compressing objects: 100% (93/93), done.
remote: Total 141 (delta 85), reused 99 (delta 46), pack-reused 0
Receiving objects: 100% (141/141), 24.68 KiB | 283.00 KiB/s, done.
Resolving deltas: 100% (85/85), done.

bitwa@WIN-7713IMJPI09 MINGW64 ~
$ ls
PyGObject_samples

bitwa@WIN-7713IMJPI09 MINGW64 ~
$ cd PyGObject_samples

bitwa@WIN-7713IMJPI09 MINGW64 ~/PyGObject_samples
$ ls
calculator.py       gtk_grid.py        gtk_notebook.py     gtk_textview.py
gtk_button.py       gtk_hbox.py        gtk_progressbar.py  gtk_togglebutton.py
gtk_checkbutton.py  gtk_headerbar.py   gtk_radiobutton.py  gtk_vbox.py
gtk_combobox.py     gtk_iconview.py    gtk_spinbutton.py   hello.py
gtk_dialog.py       gtk_label.py       gtk_spinner.py      hello2.py
gtk_entry.py        gtk_linkbutton.py  gtk_switch.py       README.md

bitwa@WIN-7713IMJPI09 MINGW64 ~/PyGObject_samples
$ python -V
Python 3.8.1

bitwa@WIN-7713IMJPI09 MINGW64 ~/PyGObject_samples
$ python calculator.py
calculator.py の実行例

このスクリプトは Linux 上で開発したので、文字は UTF-8 でエンコードされてます。アプリがコンソール(端末エミュレータ)に文字列を出力せず、GUI だけを使用している場合は、文字化けの問題はなさそうです。しかし、Windows と Linux とエンコードが違う以上、文字化けの問題が出てくるだろうと考えられます。詳しく調べて、別の機会に対処方法などを紹介したいと考えています。

参考サイト

  1. MSYS2 homepage
  2. Mintty — Cygwin Terminal emulator
  3. MSYS2で快適なターミナル生活 - Qiita [2016-04-28]
  4. Pacmanの使い方 - Qiita [2016-07-30]
  5. Pacman/Rosetta - ArchWiki
  6. Repo Updates - MSYS2 Packages
  7. Getting Started — PyGObject
  8. bitWalk's: PyGObject を試す (2) 〜 電卓エミュレータ [2020-01-12]

ブログランキング・にほんブログ村へにほんブログ村

0 件のコメント: