diff --git a/test/Makefile b/test/Makefile index 0d0215d..843e46e 100644 --- a/test/Makefile +++ b/test/Makefile @@ -17,6 +17,7 @@ SRC_PATH=$(word 1, $(dir $(MAKEFILE_LIST))) vpath %.c $(SRC_PATH) vpath %.cpp $(SRC_PATH) vpath %.idl $(SRC_PATH) +vpath %.rc $(SRC_PATH) ifneq ($(filter %-mingw32, $(MAKE_HOST)),) # If we're running as mingw32-make, we're executing everything in @@ -40,6 +41,7 @@ endif CC = $(CROSS)gcc$(TOOLEXT) CXX = $(CROSS)g++$(TOOLEXT) WIDL = $(CROSS)widl$(TOOLEXT) +WINDRES = $(CROSS)windres$(TOOLEXT) CC_UWP = $(CROSS_UWP)clang$(TOOLEXT) ifneq ($(COPY),) @@ -82,6 +84,7 @@ ifneq ($(HAVE_OPENMP),) endif TESTS_UWP = uwp-error TESTS_IDL = idltest +TESTS_RES = hello-res ifneq ($(HAVE_UWP),) TESTS_OTHER_TARGETS = hello endif @@ -105,6 +108,7 @@ TARGETS_SSP = $(addsuffix $(EXEEXT), $(TESTS_SSP)) TARGETS_CFGUARD = $(addsuffix $(EXEEXT), $(TESTS_CFGUARD)) TARGETS_FORTIFY = $(addsuffix -fortify$(EXEEXT), $(TESTS_FORTIFY)) TARGETS_IDL = $(addsuffix $(EXEEXT), $(TESTS_IDL)) +TARGETS_RES = $(addsuffix $(EXEEXT), $(TESTS_RES)) TARGETS_OTHER_TARGETS = $(addsuffix -mingw32uwp$(EXEEXT), $(TESTS_OTHER_TARGETS)) TARGETS_UWP = $(addsuffix -mingw32$(EXEEXT), $(TESTS_UWP)) ifneq ($(HAVE_UWP),) @@ -121,7 +125,7 @@ TARGETS = \ $(TARGETS_C) $(TARGETS_C_DLL) $(TARGETS_C_LINK_DLL) $(TARGETS_C_NO_BUILTIN) $(TARGETS_C_ANSI_STDIO) \ $(TARGETS_CPP) $(TARGETS_CPP_EXCEPTIONS) $(TARGETS_CPP_EXCEPTIONS_OPT) $(TARGETS_CPP_STATIC) $(TARGETS_CPP_DLL) $(TARGETS_CPP_LINK_DLL) \ $(TARGETS_SSP) $(TARGETS_CFGUARD) $(TARGETS_FORTIFY) \ - $(TARGETS_IDL) \ + $(TARGETS_IDL) $(TARGETS_RES) \ $(TARGETS_OTHER_TARGETS) $(TARGETS_UWP) $(TARGETS_UWP_FAIL) \ $(TARGETS_ASAN) $(TARGETS_UBSAN) $(TARGETS_ASAN_CFGUARD) \ $(TARGETS_OMP) @@ -136,6 +140,7 @@ EXTRAFILES = \ $(addprefix lib, $(addsuffix .dll.a, $(TESTS_C_DLL))) \ $(addprefix lib, $(addsuffix .dll.a, $(TESTS_CPP_DLL))) \ $(addsuffix .h, $(TESTS_IDL)) \ + $(addsuffix -rc.o, $(TESTS_RES)) \ $(addsuffix -asan.pdb, $(TESTS_ASAN)) \ $(addsuffix -asan-cfguard.pdb, $(TESTS_ASAN_CFGUARD)) @@ -198,6 +203,12 @@ $(TARGETS_OMP): %$(EXEEXT): %.c $(TARGETS_IDL): %$(EXEEXT): %.c %.h $(CC) $(CPPFLAGS) $(CFLAGS) $< -o $@ -I. -lole32 +%.o: %.rc + $(WINDRES) $< $@ + +$(TARGETS_RES): %$(EXEEXT): %.c %-rc.o + $(CC) $(CPPFLAGS) $(CFLAGS) $+ -o $@ + $(TARGETS_OTHER_TARGETS): %-mingw32uwp$(EXEEXT): %.c $(CC_UWP) $< -o $@ diff --git a/test/hello-res-rc.rc b/test/hello-res-rc.rc new file mode 100644 index 0000000..42fc5f0 --- /dev/null +++ b/test/hello-res-rc.rc @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2023 Martin Storsjo + * + * This file is part of llvm-mingw. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "hello-res.h" + +STRINGTABLE { + HELLO_STRING "Hello world" +} diff --git a/test/hello-res.c b/test/hello-res.c new file mode 100644 index 0000000..29808b0 --- /dev/null +++ b/test/hello-res.c @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Martin Storsjo + * + * This file is part of llvm-mingw. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include +#include "hello-res.h" + +int main(int argc, char *argv[]) { + char buf[100]; + if (LoadStringA(GetModuleHandle(NULL), HELLO_STRING, buf, sizeof(buf)) <= 0) { + printf("Unable to load resource string\n"); + return 1; + } + printf("Resource string: %s\n", buf); + return 0; +} diff --git a/test/hello-res.h b/test/hello-res.h new file mode 100644 index 0000000..ce25ac2 --- /dev/null +++ b/test/hello-res.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2023 Martin Storsjo + * + * This file is part of llvm-mingw. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef HELLO_RES_H +#define HELLO_RES_H + +#define HELLO_STRING 1 + +#endif