-
Notifications
You must be signed in to change notification settings - Fork 163
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
複数のVisual Studioを入れたときの問題に対応 #1806
Conversation
sakura/tests/compiletests.targets Line 20 in 0c8db74
sakura/tests/googletest.targets Line 38 in 0c8db74
|
0c8db74 をVisual Studio 2019 でビルドしたときのログ(抜粋)です。
上記の通り、 |
✅ Build sakura 1.0.4055 completed (commit 949c4af701 by @dep5) |
|
なお、混在環境におけるツール選択のトラブルは #1785 でロジックを見直したことにより解消されています。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ぱっと見で良く分からなかったのでスルーしましたが、
修正内容はイケてそうに見えました。
sakura/sakura.vcxproj
Outdated
<Import Project="..\sakura\githash.targets" /> | ||
<Import Project="..\sakura\funccode.targets" /> | ||
<Import Project="..\sakura\ExtractArchives.targets" /> | ||
<Import Project="..\tests\compiletests.targets" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
この行の修正根拠がわかりませんでした。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(IDEでは)記載順にtargetsが呼ばれるようなので
githashでfind-tools.batが呼ばれる前に
compiletestsでfind-tools.batを呼んでしまう、ということです。
これによってgithash.hの有無で動作が変わるのを防げます。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
何か大事なことを(ぼくが)読み取れて無さそうな気がします。
githashでfind-tools.batが呼ばれる前に
compiletestsでfind-tools.batを呼んでしまう、ということです。
compieltestsの記述準は、元々githashの後で、このPRで入れ替えようとしてるように見えています。
「githashで呼ぶ前にcompiletestsで呼んでしまうとマズい」と言ってるように見えますが、読んだらマズいなら変えなくてよいのではないかと思いました。何が抜けてるんでしょう・・・
これによってgithash.hの有無で動作が変わるのを防げます。
githash.h
を生成できない状況(≒ソースzipからのビルド)について、正しくビルドできる想定をするのは何か痴愚用な気がします。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ものすごく重要なことに思い当たりました。
ここの書き順を変えても、処理順には影響しないです。。。。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
レス付けるために現状のコードを確認したところ、
現時点では確かに、書き順を入れ替えたらcompiletestsを先に実行させることができることに気付きました。
ただし、これは「githashの実行タイミングの指示が誤っているため」なのですっごく微妙です。。。(詳細は後述
@@ -257,6 +257,7 @@ exit /b | |||
exit /b | |||
|
|||
:cmake | |||
set /a NUM_VSVERSION_NEXT=NUM_VSVERSION + 1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
この修正は妥当だと思います。
コメントありがとうございます。 いつもこのようにビルドしているのでテスト条件に書き忘れていました。 IDEのソリューションエクスプローラーで
Gitを設定する場合でもCMake用にNUM_VSVERSIONの指定が必要です。 |
kazasakuさん 1.sakura_core\githash.hを削除してから 2022と2019の混在環境でgithash.hを削除後のビルドログとみてよいですか? ログ(抜粋)というのはログの冒頭部分という意味ですか? |
質問なのですが |
はい。ここに貼ったものは
…です。 なお、「ビルドの開始時の環境」は、VSのツールバーにある「ツール」メニューから、「オプション」→「プロジェクトおよびソリューション」→「VC++プロジェクトの設定」と開き、「ビルド - ログで環境を表示」で出力を切り替えられます(既定では無効)。 ちなみに、ログ全文は約900行あり、「find-tools.bat」で検索すると3行ヒットします。 付録: 90d6766 をビルドしたときのログ全文 |
#1807 はこのPRの修正の一部切り出しですが、目的・修正内容ともに妥当だと思います。 対して、このPRは#1807に加えて「よく分からない修正」を含んでいます。 今頃になって全貌が把握できてきたのですが、 SetEnvしてるのはcompiletestsだからこれを最初に実行しよう、だから「なんで?」になりました。 |
その見解に基づいてgithash.targetsに |
問題はいくつかありそうです。
問題が何で、原因が何で、の説明ができたら、直すだけです。 今回の原因に対して「ビルド順を変える」 は違う気がします。 find-tools.batを呼ぶには定義が必要なんだから対象タスク全部を修正するんじゃね? というような論理の組み立てになるので、 |
ちょっと整理。
このPRは次の点を指摘するものだと考えます。
ゆえに必要なのは「githash.targetsでも設定してから呼び出す」ようにして、 #1759 を閉じることだと思います。
|
kazasakuさん 49行め
126行め
バージョンが違いますよね。これを修正したいのです。 これも最近の変更とは関係ない以前からあるバグですのでまとめちゃってもいいかと思います。 |
berryzplusさん
githashは一度作成されるとリビルドでは作り直されないようです。 順を変えることで不具合が起きたり、元の呼び出し順に何か理由があれば、githash.targetsの変更でも構いません。 |
この「一度作成されると呼び出されない」が間違ってるように思っています。
論理構造的には、 MsBuildのタスク実行順は、属性定義により相対的に決まります。 Lines 8 to 9 in 90d6766
sakura/tests/compiletests.targets Line 14 in 90d6766
現時点では「ClCompileの前」が共通するので、先に定義したものが先に実行されます。 しかし、タスクの意味合いが違うので、実行順を入れ替えると変です。
ソースを生成する前に、ソースコードのチェックをしていいの? ということになります。 |
3個あるターゲットのうち、
PR本文に書き方が正しくないので受け入れたくないです。 |
berryzplusさん
そういう経緯だったんですね。以前、ビルドの失敗が続いて、
compileTestsの前にgithash.hを含めてすべてのファイルをそろえておくために、この順になっているのですね。順序を変えるのはやめました。 |
#1757 で、僕はこう書きました。
これはツールバーの「ビルド」メニューにある「(プロジェクト名)をビルド」、あるいはソリューションエクスプローラーで、プロジェクトを右クリックして表示されるメニューの「ビルド」をクリックしてビルドしている場合を指しています。本PRのコメントから察するに @dep5 さんのビルドのやり方は多分これなんじゃないかと推測します。 |
Kudos, SonarCloud Quality Gate passed! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ソースを生成する前に、ソースコードのチェックをしていいの? ということになります。
compileTestsの前にgithash.hを含めてすべてのファイルをそろえておくために、この順になっているのですね。順序を変えるのはやめました。
PR本文は並べ替えることを前提に書かれているので本文の修正が必要です。
✅ Build sakura 1.0.4061 completed (commit 9ebaf755e4 by @dep5) |
kazasaku さん
ではバージョンが一致していますね。
では異なったバージョンです。 わたしは今まで行頭の数字は何だろうと思っていたのですが。プロジェクトを示しているのですね。 ログではなく、選ばれるツールのバージョンを想定通りにしたいです。 わたしはIDEからのビルドがメインですので、ビルド時の問題に対応という意味で一体なのですが、 |
PR の背景VS2017とVS2022が混在した環境で、VS2017のツールを探索した際、CMakeとNinjaのみ異なるバージョンのツールが選択されます。 (ここに #1807 (comment) と同じログを挿入) 仕様・動作説明#1785 で、VS2017とそれより後のバージョンで、探索処理を行うサブルーチンを分けました。 さて、CMakeおよびNinjaの探索を行う処理でも、Visual Studio Locatorを使っていますが、引数に選択したバージョンとそれに1加えた値を利用しています。 このPRでは、漏れている定義を追加して、VS2017との混在環境でもCMake/Ninja探索時に正常に動作するようにします。 また、ビルド時にgit関係のヘッダファイルを生成するgithash.batを実行するターゲットでは、 |
find-tools.batについてです。(IDE)
.bat(バッチファイル)のforコマンド解説。 - Qiita
こちらから拝借した環境変数を列挙するコマンドを該当行の上に追記してみたところ したがって、初回のみ対応すればよいとしましたが |
🤔 |
このPRはどこに向かいます? ステータス的には |
ぼくが個人的に「あかんやろ・・・」と思った点を、参考までに書き残しておきます。 カテゴリ「事象の捉え方は個人の自由」なのですが、認識が誤っている気がします。
PR のデメリット (トレードオフとかあれば)
「呼出し順」は変えない変更になった認識です。 PR の影響範囲
最初に突っ込むべきでしたが、ここは「どうでしょうか?」を書く場所じゃないです。 「この修正、自分の中では完璧っす!」を誤解なく伝えるための項目なので、 ただ、「わかりません(キリッ」なら、それはそれでもよいです。 |
berryzplus さん このPRで書いた当初一番教えてほしかったのが、 |
ではテンプレ修正しましょう。 |
このコメントの意味がわかりませんでした。
「どのPRで作り込んだバグです」的な依存関係を書く場所はない気がします。 この辺も、具体的な改善案があれば試してみてよいと思います。 |
「こうしたいです」という構想はあるので、用意しておきます。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
承認しておきます。
本文の書き方は他のissueやPRを手本に勉強しましょう。
問題ないとおもうのでマージしておきます。 |
berryzplusさん IDEでfind-tools.batが初回のみ呼ばれるという誤った思い込みをしていたので、
funccodeでgithashが呼ばれていたのでfunccodeのビルドにgithashが必要なのはわかりました。 DependsOn 属性についてではなく、targetsそれぞれにビルドを進めていくうえで |
もう答えが出てそうですが・・・
です。 こうしてみるとExtractArchivesの記述位置がおかしいです。 このあたりを修正してもアプリ機能に影響がないので「動けばいいかぁ・・・」で放置し続けています。 |
PR の目的
複数のVisual Studioをインストールしている場合
ビルド時に違うバージョンのcmakeなどが選択される問題を修正します
修正案をいただいたので併記しています。(#1806 (comment))カテゴリ
- 不具合修正- ビルド手順- ローカルビルドPR の背景
tools/find-tools.batの探索順が変更になり
NUM_VSVERSION -> VS2022 -> VS2019 -> VS2017
このような優先順で選ばれるようになりました
複数インストールしている場合、
下位のバージョンを使うにはNUM_VSVERSIONを設定する必要があります。
IDEでは使用中のバージョンを (targetsファイルを使って) 環境変数NUM_VSVERSIONに設定する必要があります。
PR のメリット
PR のデメリット (トレードオフとかあれば)
呼び出し順を変えるので何か不具合があるかもしれません。仕様・動作説明
例としてVS2022とVS2017をインストールした環境の話です。
1.
IDE/コマンドライン
Visual Studio 2017でビルドすると違うバージョンのツールが選択される
-> tools/find-tools.batでのNUM_VSVERSION_NEXTの設定忘れです。
2.
IDEのみ
sakura_core\githash.h が存在しない場合
Visual Studio 2017 IDEでビルドすると違うバージョンのツールが
選択される。選択されたログが出力される。-> NUM_VSVERSIONを設定しないままtools/find-tools.batが呼ばれている。
sakura\githash.targets に環境変数NUM_VSVERSIONを設定する方法とsakura\sakura.vcxproj の呼び出し順でtests\compiletests.targets を優先させる方法があると思います。
依存関係が無ければ順を変えるほうが環境変数NUM_VSVERSIONを設定する箇所を
tests\unittests\tests1.vcxproj - tests\googletest.targets - googletest.build.cmd
sakura\sakura.vcxproj - tests\compiletests.targets - compiletests.run.cmd
の二つに固定できるのでいいと思います。
PR の影響範囲
いくつかファイルの呼び出し先を追ってみた感じでは、依存関係が無いように思いましたが、どうでしょうか?テスト内容
2つ以上インストールした最新でないほうのVSを起動し、ビルドを行う。
IDEのテストではsakura_core\githash.hを削除した状態でもテストする。
テスト1
手順
関連 issue, PR
参考資料