前回のブログ投稿では、PostgreSQLがサポートするさまざまなWindowsビルドバリアントについて説明しました。この投稿では、Unixベースの開発者として、パッチがWindowsで機能するかどうかを確認する方法について説明します。 (簡単にするために、「Unix」はLinux、BSD、macOSなどを意味します。)
まず、Windowsをまったく使用せずにパッチを確認する方法がいくつかあります。
パッチがビルドシステムに影響を与える場合、たとえば、新しいファイルを追加したり、条件、新しいビルドオプション、または追加のアドホックロジックを追加したりすると、前述のように、Unixmakefileを解析するMSVCビルドスクリプトが破損する可能性があります。前回。ただし、実際にはこれらのスクリプトをUnixでも実行できます。彼らが実際に行うのは、あるファイルのセットを解析して別のセットを生成することだけなので、それらには(ほとんど)Windowsに固有のものは何もありません。実行するだけです
perl src / tools / msvc / mkvcbuild.pl
何が起こるか見てみましょう。これは、コミット73c8596の時点で機能します。 (これにより、生成された一部のファイルが上書きされて、ローカルのWindows以外の構成で使用される可能性があるため、事前に作業内容を保存しておくことをお勧めします)。これにより、多くのことを実行できないVisual Studioのプロジェクトファイルが生成されますが、スクリプトが実行されたかどうかを確認したり、出力の前後を比較したり、いずれかに対して「ブラインド編集」を行ったかどうかを確認したりできます。 src/tools/msvc/
の下のファイル それらをある程度確認することができます。
もう1つの方法は、通常Windowsに関連付けられているビルドオプションを実行することです。これらのどれが役立つかは、パッチの変更内容によって異なります。たとえば、WindowsはHAVE_UNIX_SOCKETS
でビルドされます 未定義なので、ネットワークコードに変更を加える場合は、手動でテストする価値があるかもしれません。 (ただし、Windowsは実際にUnixドメインソケットをサポートしているため、これはなくなります。)同様に、HAVE_WORKING_LINK
はWindowsでは未定義ですが、その影響はわずかです(そして、それもなくなります。このようなブログ投稿を書いた結果、説明したい問題がそもそも存在してはならないことがわかります。あなたはそれらを修正しに行きます)。 src/include/pg_config_manual.h
を編集することで、これらのオプションの両方を変更できます。 。もう1つの重要なオプションは、EXEC_BACKEND
です。 、Unixスタイルのfork()
を置き換えます fork()
で呼び出す プラスexec()
CreateProcess()
にマッピングできる実装 Windowsの場合。これは実際には驚くほどめったに壊れませんが、壊れた場合は、Unixシステムで完全にデバッグおよび修正できます。 EXEC_BACKEND
を有効にするには 、src/Makefile.global
を編集できます -DEXEC_BACKEND
を追加します CPPFLAGS
へ 、またはおそらくsrc/include/pg_config_manual.h
に定義を追加します 。 (これが他のものと異なる理由はわかりません。おそらく、いつか修正する必要がある別のことです。[更新:修正済み])
これらのオプションが使い果たされたら、おそらく実際のWindowsシステムを起動するときです。カジュアルな開発者が簡単に利用できる2つのオプションについて説明したいと思います。まず、Microsoftからデモ用のWindowsイメージをダウンロードして、VirtualBoxなどにインポートできます。私が見つけることができるそのための現在のリンクは次のとおりです:
- https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/
- https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
これらの2番目のものはブラウザテスト用であるため、おそらく最初のものの方が優れていますが、ブラウザテストルートはしばらくの間人気がありました。これらは無料の評価版ですが、ライセンスを自分で読んでください。
次に、クラウドコンピューティングプロバイダーでクラウドインスタンスを起動できます。名前を付けるつもりはありませんが、あなたは彼らが誰であるかを知っています。
Windowsオペレーティングシステムを実行している場合は、MSYS2をインストールすることをお勧めします。 (Microsoftからの上記の最初のダウンロードリンクには、必要に応じてVisual Studioもインストールされています。)ブラウザー(おそらくInternet Explorerまたは現在呼び出されているもの)を使用してmsys2.orgにアクセスし、インストーラーを実行すると、数分で完全なMSYS2/MinGW環境の準備が整います。 msys2.org Webサイトの指示に従って、パッケージマネージャーを最新の状態にします。次に、[スタート]メニューからMinGW(MSYS2ではない)シェルを開き、以下を実行してPostgreSQL開発に必要なパッケージを取得します。
pacman -S git
これで、リポジトリのgitcloneを実行できます。それが実行されている間…
pacman -S $ {MINGW_PACKAGE_PREFIX} -gcc $ {MINGW_PACKAGE_PREFIX}-gettext $ {MINGW_PACKAGE_PREFIX} -icu $ {MINGW_PACKAGE_PREFIX} -libxml2 $ {MINGW_PACKAGE_PREFIX} -libxslt $ {MINGW_PACKAGE_PREFIX}-openssl
MINGW_PACKAGE_PREFIX
は設定されている環境変数なので、そのようなコマンドを入力します。 (32ビットと64ビットのMinGWでは異なります。)プレフィックスのないパッケージは、MSYS2(つまり、Cygwin)パッケージです。これが紛らわしい場合は、パート1をもう一度参照してください。この時点で、PostgreSQL用の完全なMinGWビルド環境ができあがります。 configure、make、makecheckなどを実行できます。一部のビルドオプションには追加のパッケージが必要になる場合がありますが、すべてのオプションが実際に機能するわけではありません。たとえば、Readlineはありません(そのためにCygwinを使用してください)。このシリーズの次のパートでは、パッチの検証に使用できるWindowsの自動ビルド/継続的インテグレーションオプションについて説明します。