commit 31eaf86bbfdff8bc4ff62a254403560d1d24f245
Author: Tim Hentenaar <tim@hentenaar.com>
Date:   Tue Dec 30 08:39:21 2025 -0500

    tests: Use absolute resource paths so that tests can run in out-of-tree builds
    
    Fixes #7

--- a/tests/Jpeg.c
+++ b/tests/Jpeg.c
@@ -23,7 +23,7 @@
 
 #include <stdio.h>
 #include <X11/Xlib.h>
-#include <JpegI.h>
+#include <Xm/JpegI.h>
 #include <check.h>
 
 #include "suites.h"
@@ -34,7 +34,8 @@
 	XImage *img = NULL;
 	int ret;
 
-	ck_assert_msg(fp = fopen("jpeg/invalid_header.jpeg", "rb"), "Failed to open jpeg/invalid_header.jpeg");
+	ck_assert_msg((fp = fopen(RESOURCE(jpeg/invalid_header.jpeg), "rb")),
+	              "Failed to open jpeg/invalid_header.jpeg");
 	ret = _XmJpegGetImage(fp, &img);
 	fclose(fp);
 
@@ -49,7 +50,8 @@
 	XImage *img = NULL;
 	int ret;
 
-	ck_assert_msg(fp = fopen("jpeg/rgb24.jpeg", "rb"), "Failed to open jpeg/rgb24.jpeg");
+	ck_assert_msg((fp = fopen(RESOURCE(jpeg/rgb24.jpeg), "rb")),
+	              "Failed to open jpeg/rgb24.jpeg");
 	ret = _XmJpegGetImage(fp, &img);
 	fclose(fp);
 
@@ -81,7 +83,8 @@
 	XImage *img = NULL;
 	int ret;
 
-	ck_assert_msg(fp = fopen("jpeg/grayscale.jpeg", "rb"), "Failed to open jpeg/grayscale.jpeg");
+	ck_assert_msg((fp = fopen(RESOURCE(jpeg/grayscale.jpeg), "rb")),
+	              "Failed to open jpeg/grayscale.jpeg");
 	ret = _XmJpegGetImage(fp, &img);
 	fclose(fp);
 
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -3,7 +3,8 @@
 AM_TESTS_ENVIRONMENT = env AM_TAP_AWK='$(AWK)'
 LOG_DRIVER           = $(SHELL) $(top_srcdir)/tap-driver.sh
 TESTS                = tests
-AM_CPPFLAGS          = -I$(top_builddir)/include -I$(top_builddir)/lib $(X_CFLAGS) $(XFT_CFLAGS) $(CHECK_CFLAGS)
+AM_CPPFLAGS          = -I${top_builddir}/include -I$(top_srcdir)/include -I$(top_srcdir)/lib \
+                       -DRESDIR="$(abs_top_srcdir)/tests/" $(X_CFLAGS) $(XFT_CFLAGS) $(CHECK_CFLAGS)
 check_PROGRAMS       = tests
 noinst_HEADERS       = suites.h
 tests_LDADD          = $(top_builddir)/lib/Xm/libXm.la $(X_LIBS) $(XFT_LIBS) $(CHECK_LIBS)
--- a/tests/Png.c
+++ b/tests/Png.c
@@ -23,7 +23,7 @@
 
 #include <stdio.h>
 #include <X11/Xlib.h>
-#include <PngI.h>
+#include <Xm/PngI.h>
 #include <check.h>
 
 #include "suites.h"
@@ -34,7 +34,8 @@
 	XImage *img = NULL;
 	int ret;
 
-	ck_assert_msg(fp = fopen("png/invalid_header.png", "rb"), "Failed to open png/invalid_header.png");
+	ck_assert_msg((fp = fopen(RESOURCE(png/invalid_header.png), "rb")),
+	              "Failed to open png/invalid_header.png");
 	ret = _XmPngGetImage(fp, NULL, &img);
 	fclose(fp);
 
@@ -49,7 +50,8 @@
 	XImage *img = NULL;
 	int ret;
 
-	ck_assert_msg(fp = fopen("png/rgb24.png", "rb"), "Failed to open png/rgb24.png");
+	ck_assert_msg((fp = fopen(RESOURCE(png/rgb24.png), "rb")),
+	              "Failed to open png/rgb24.png");
 	ret = _XmPngGetImage(fp, NULL, &img);
 	fclose(fp);
 
@@ -85,7 +87,8 @@
 	XImage *img = NULL;
 	int ret;
 
-	ck_assert_msg(fp = fopen("png/rgba32.png", "rb"), "Failed to open png/rgba32.png");
+	ck_assert_msg((fp = fopen(RESOURCE(png/rgba32.png), "rb")),
+	              "Failed to open png/rgba32.png");
 	ret = _XmPngGetImage(fp, NULL, &img);
 	fclose(fp);
 
@@ -126,7 +129,8 @@
 	bg.green = 0xcc;
 	bg.blue  = 0xcc;
 
-	ck_assert_msg(fp = fopen("png/rgba32.png", "rb"), "Failed to open png/rgba32.png");
+	ck_assert_msg((fp = fopen(RESOURCE(png/rgba32.png), "rb")),
+	              "Failed to open png/rgba32.png");
 	ret = _XmPngGetImage(fp, &bg, &img);
 	fclose(fp);
 
--- a/tests/Svg.c
+++ b/tests/Svg.c
@@ -23,7 +23,7 @@
 
 #include <stdio.h>
 #include <X11/Xlib.h>
-#include <SvgI.h>
+#include <Xm/SvgI.h>
 #include <check.h>
 
 #include "suites.h"
@@ -34,7 +34,8 @@
 	XImage *img = NULL;
 	int ret;
 
-	ck_assert_msg(fp = fopen("svg/invalid_file.svg", "rb"), "Failed to open svg/invalid_file.svg");
+	ck_assert_msg((fp = fopen(RESOURCE(svg/invalid_file.svg), "rb")),
+	              "Failed to open svg/invalid_file.svg");
 	ret = _XmSvgGetImage(fp, &img);
 	fclose(fp);
 
@@ -49,7 +50,8 @@
 	XImage *img = NULL, *rast = NULL;
 	int ret;
 
-	ck_assert_msg(fp = fopen("svg/test.svg", "rb"), "Failed to open svg/test.svg");
+	ck_assert_msg((fp = fopen(RESOURCE(svg/test.svg), "rb")),
+	              "Failed to open svg/test.svg");
 	ret = _XmSvgGetImage(fp, &img);
 	fclose(fp);
 
@@ -67,7 +69,8 @@
 	XImage *img = NULL, *rast = NULL;
 	int ret;
 
-	ck_assert_msg(fp = fopen("svg/test.svg", "rb"), "Failed to open svg/test.svg");
+	ck_assert_msg((fp = fopen(RESOURCE(svg/test.svg), "rb")),
+	              "Failed to open svg/test.svg");
 	ret = _XmSvgGetImage(fp, &img);
 	fclose(fp);
 
--- a/tests/suites.h
+++ b/tests/suites.h
@@ -27,6 +27,11 @@
 #include <X11/Intrinsic.h>
 #include <check.h>
 
+/* For locating resources in out-of-tree builds */
+#define __RESOURCE(dir, x) #dir x
+#define _RESOURCE(dir, x) __RESOURCE(dir, #x)
+#define RESOURCE(x) _RESOURCE(RESDIR, x)
+
 extern XtAppContext app;
 
 /* Xt fixture */
