Skip to content
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

AppVeyor で cygterm.exe が生成されないのでインストーラが生成されない #134

Closed
nmaya opened this issue Feb 26, 2024 · 7 comments
Milestone

Comments

@nmaya
Copy link
Member

nmaya commented Feb 26, 2024

ログ: https://ci.appveyor.com/project/teraterm/github-main/builds/49263040#L2225

make[1]: Leaving directory '/cygdrive/c/projects/github-main/cygwin/cygterm'
make CC=x86_64-pc-cygwin-gcc CXX=x86_64-pc-cygwin-g++ RC=x86_64-pc-cygwin-windres EXE_BASE=cygterm.exe BINARY_DIR=cygterm+-x86_64 all
make[1]: Entering directory '/cygdrive/c/projects/github-main/cygwin/cygterm'
echo 'icon ICON cygterm.ico' > cygterm.rc
x86_64-pc-cygwin-g++ -D_GNU_SOURCE -O2 -fno-exceptions -DUNICODE -D_UNICODE -MMD -c cygterm_cfg.cpp -o cygterm+-x86_64/cygterm_cfg.o
x86_64-pc-cygwin-g++ -D_GNU_SOURCE -O2 -fno-exceptions -DUNICODE -D_UNICODE -MMD -c sub.cpp -o cygterm+-x86_64/sub.o
x86_64-pc-cygwin-g++ -D_GNU_SOURCE -O2 -fno-exceptions -DUNICODE -D_UNICODE -MMD -c cygterm.cpp -o cygterm+-x86_64/cygterm.o
x86_64-pc-cygwin-windres -O coff -o cygterm+-x86_64/cygterm.res cygterm.rc
make[1]: x86_64-pc-cygwin-windres: No such file or directory
make[1]: *** [Makefile:81: cygterm+-x86_64/cygterm.res] Error 127
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory '/cygdrive/c/projects/github-main/cygwin/cygterm'
make: *** [Makefile:123: cygterm+-x86_64] Error 2

数日前のこのビルドでは生成されている

切り分けポイントになりそうなところ

  • リリースモードかそうでないか
  • 使われている Cygwin がシステムのものか、独自に入れているものか
@nmaya nmaya added this to the 5.2 milestone Feb 26, 2024
zmatsuo added a commit that referenced this issue Feb 26, 2024
@zmatsuo
Copy link
Member

zmatsuo commented Feb 26, 2024

最近アップデートしていないように見えますが…
https://www.appveyor.com/updates/

cygwinのフォルダが変わっているようです
root: C:\cygwin system
https://ci.appveyor.com/project/teraterm/github-snapshot/builds/49272455

対応を考えてみます

zmatsuo added a commit that referenced this issue Feb 26, 2024
- c:\cygwin, c:\cygwin64 両方が存在する時問題があった
- installer/toolinfo.bat を削除
  - 環境変数 PATH が引き継がれていたた
  - c:\cygwin64を使用するつもりが c:\cygwin を使用する可能性があった
@zmatsuo
Copy link
Member

zmatsuo commented Feb 26, 2024

c:\cygwin と c:\cygwin64 の両方が入っているんですね。

64bit版Cygwin(c:\cygwin64)がなければ
32bit版Cygwin(c:\cygwin)を見つけられるよう
find_cygwin.bat 変更して、
find_cygwin.bat が見つけた Cygwin を使用するよう
release.bat, addpkg_syscygwin.bat を修正しました。

ビルドできました。
https://ci.appveyor.com/project/teraterm/github-main/builds/49273815

@nmaya
Copy link
Member Author

nmaya commented Feb 27, 2024

ビルドできました。
https://ci.appveyor.com/project/teraterm/github-main/builds/49273815

ありがとうございます。

RDP で入ってみました。
c:\cygwin64 は c:\cygwin へのショートカットでした。ですので、c:\cygwin は 32bit 版 Cygwin ではありません。
にもかかわらず 49263040 では x86_64-pc-cygwin-windres が使われているようです。

試していただいた 49273815 のログからは、x86_64-pc-cygwin-windres ではなく windres が呼び出されている様子が見えました。

make[1]: Leaving directory '/cygdrive/c/projects/github-main/cygwin/cygterm'
make CC=x86_64-pc-cygwin-gcc CXX=x86_64-pc-cygwin-g++ RC=x86_64-pc-cygwin-windres EXE_BASE=cygterm.exe BINARY_DIR=cygterm+-x86_64 all
make[1]: Entering directory '/cygdrive/c/projects/github-main/cygwin/cygterm'
x86_64-pc-cygwin-g++ -D_GNU_SOURCE -O2 -fno-exceptions -DUNICODE -D_UNICODE -MMD -c cygterm.cpp -o cygterm+-x86_64/cygterm.o
x86_64-pc-cygwin-g++ -D_GNU_SOURCE -O2 -fno-exceptions -DUNICODE -D_UNICODE -MMD -c cygterm_cfg.cpp -o cygterm+-x86_64/cygterm_cfg.o
echo 'icon ICON cygterm.ico' > cygterm.rc
x86_64-pc-cygwin-g++ -D_GNU_SOURCE -O2 -fno-exceptions -DUNICODE -D_UNICODE -MMD -c sub.cpp -o cygterm+-x86_64/sub.o
windres -O coff -o cygterm+-x86_64/cygterm.res cygterm.rc
x86_64-pc-cygwin-gcc -D_GNU_SOURCE -O2 -fno-exceptions -DUNICODE -D_UNICODE -MMD -mwindows -o cygterm+-x86_64/cygterm.exe cygterm+-x86_64/cygterm.o cygterm+-x86_64/cygterm_cfg.o cygterm+-x86_64/sub.o cygterm+-x86_64/cygterm.res -lole32
strip cygterm+-x86_64/cygterm.exe
make[1]: Leaving directory '/cygdrive/c/projects/github-main/cygwin/cygterm'

32bit 版 Cygwin はないはずなので、振る舞いがおかしかった理由が私には分かりませんでした。
ifneq (,$(findstring x86_64, $(RC))) の判定なのですが、ifneq (,$(findstring x86_64, windres)) で「パスが通っている windres のアーキテクチャ」がわかるのでしょうか?

参考:バージョン情報など

appveyor@appveyor-vm ~
$ uname -srm
CYGWIN_NT-10.0-17763 3.4.10-1.x86_64 x86_64

appveyor@appveyor-vm ~
$ ls -lA /cygdrive/c/cygwin/bin/cygwin1.dll
-rwxr-xr-x 1 appveyor Administrators 2954293 Nov 29 21:20 /cygdrive/c/cygwin/bin/cygwin1.dll

appveyor@appveyor-vm ~
$ cygcheck -f /bin/windres
binutils-2.41-3

appveyor@appveyor-vm ~
$

@nmaya nmaya mentioned this issue Feb 28, 2024
8 tasks
@zmatsuo
Copy link
Member

zmatsuo commented Feb 28, 2024

Cygwin用 windres のバイナリ名が次のようになっています。

Cygwin 64bit版をビルドする時 32bit版をビルドする時
x86_64 (64bit) windres.exe i686-pc-cygwin-windres.exe
i686 (32bit) x86_64-pc-cygwin-windres.exe windres.exe

このために Makefile 内で RC を上書きしています。

32bit 版 Cygwin はないはずなので、振る舞いがおかしかった理由が私には
分かりませんでした。

Cygwinが32bitで、64bit版cygrem+ をビルドする時、
x86_64-pc-cygwin-windres.exe が使われるはずだったのですが・・
今のところ私にもわからないです。
もう少し環境を調べないといけないです。

@nmaya
Copy link
Member Author

nmaya commented Feb 28, 2024

Cygwin用 windres のバイナリ名が次のようになっています。
Cygwinが32bitで、64bit版cygrem+ をビルドする時、x86_64-pc-cygwin-windres.exe が使われるはず

まとめありがとうございます。これは理解しています。

@zmatsuo
Copy link
Member

zmatsuo commented Mar 2, 2024

2b0a09d で installer/toolinfo.bat がリポジトリに追加されて、
環境変数 PATH の再設定されず、
システム設定されている PATH 使用されたのが原因のようです。

手もとの MSYS2 の uname はこんな出力で、CYGWIN は含まれていません。

$ uname -a
MSYS_NT-10.0-19045 carbon 3.4.10.x86_64 2024-02-10 08:39 UTC x86_64 Msys

ログをみると clean時のログが msys2term.exe になっている、

rm -f cygterm+-x86_64/msys2term.exe cygterm.rc cygterm+-x86_64/cygterm.res cygterm+.tar.gz

RC が override されずに x86_64-pc-cygwin-windres になっているところから、
cygwin ではない uname, make が動いていたようです。

@nmaya
Copy link
Member Author

nmaya commented Mar 3, 2024

ログの確認ありがとうございます。

私の環境では、git だけ PATH が通っていないところにあるものを使いたくて GIT_PATH を指定しているのですが

(1) toolinfo.bat があると set PATH= を通らない

release.bat 

if exist toolinfo.bat (
    echo found toolinfo.bat
    call toolinfo.bat
    echo toolinfo.bat ok
) else (
    set PATH=
)

と、
(2) 追加で PATH を通したいところは特にないので、rem のまま

toolinfo.bat

rem 必要ならpathの設定や削除を行う
rem set PATH=

となっています。

PATH の影響だとしたら、(1) と (2) により set PATH= が実行されなかったためこのようになった、と言えそうです。

この環境・かつ toolinfo.bat がある場合には、システムのPATHを使わないようにする必要があり、削除(set PATH=)が必要だった、ということになりそうです。
誤ってコミットして、確認の手間を取らせてしまいすみませんでした。

@nmaya nmaya closed this as completed Mar 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants