try to work around a mingw shortcoming within CI

The mingw-w64 version on the CI platform is older and
is missing a sought copy of winres.h.

This attempts to work around that by having the Makefile
create a temporary copy of winres.h in the win/win32 directory
which that windres.exe is already search in. The file is
then immediately removed after windres uses it.

The contents of the temporary winres.h match the contents
of that file that is distributed with the more up-to-date msys2
distribution of mingw-w64.

It won't be known if this workaround solves all the CI issues
with the mingw build until after it is committed and observed.
This commit is contained in:
nhmall
2022-01-29 09:20:29 -05:00
parent c2024b8990
commit c03f24ceb7

View File

@@ -203,6 +203,11 @@ ifdef CI_COMPILER
cc = i686-w64-mingw32-gcc.exe
ld = i686-w64-mingw32-gcc.exe
rc = windres --target=pe-i386
# the mingw version on our CI is missing
# windef.h. This will cause the Makefile.mingw32
# to put a temporary copy into one of our folders
# that windres is already looking in.
MISSING_HEADER = Y
else
cc = gcc -c
ld = gcc
@@ -211,6 +216,7 @@ rc = windres --target=pe-i386
else # MINGW64
rc = windres --target=pe-x86-64
endif
MISSING_HEADER = N
endif
#
@@ -730,7 +736,22 @@ $(ONH)/%.o: $(WCURSES)/%.c $(NHLUAH) | $(ONH)
$(cc) $(CFLAGSNH) $(PDCINCL) $< -o$@
$(NHRES): $(MSWIN)/NetHack.rc $(MSWIN)/NetHack.ico | $(ONH)
ifeq "$(MISSING_HEADER)" "Y"
echo '/**' > $(MSWIN)/winres.h
echo ' * This file has no copyright assigned and is placed in the Public Domain.' >> $(MSWIN)/winres.h
echo ' * This file is part of the mingw-w64 runtime package.' >> $(MSWIN)/winres.h
echo ' * No warranty is given; refer to the file DISCLAIMER.PD within this package.' >> $(MSWIN)/winres.h
echo ' */' >> $(MSWIN)/winres.h
echo '#include <winresrc.h>' >> $(MSWIN)/winres.h
echo '#ifdef IDC_STATIC' >> $(MSWIN)/winres.h
echo '#undef IDC_STATIC' >> $(MSWIN)/winres.h
echo '#endif' >> $(MSWIN)/winres.h
echo '#define IDC_STATIC (-1)' >> $(MSWIN)/winres.h
endif
$(rc) --include-dir=$(MSWIN) --input=$< -o$@
ifeq "$(MISSING_HEADER)" "Y"
@-rm -f $(MSWIN)/winres.h
endif
$(ONH):
@mkdir -p $@