1if !HWLOC_HAVE_DARWIN
2all-local: needed useless
3else HWLOC_HAVE_DARWIN
4# Do nothing on Darwin because their default compiler doesn't like our gcc/cpp lines
5all-local:
6endif HWLOC_HAVE_DARWIN
7
8TEST_CPPFLAGS =
9if HWLOC_HAVE_LINUX
10TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_LINUX=1
11endif HWLOC_HAVE_LINUX
12if HWLOC_HAVE_LINUX_LIBNUMA
13TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_LINUX_LIBNUMA=1
14endif HWLOC_HAVE_LINUX_LIBNUMA
15if HWLOC_HAVE_SCHED_SETAFFINITY
16TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_GLIBC_SCHED=1
17endif HWLOC_HAVE_SCHED_SETAFFINITY
18if HWLOC_HAVE_LIBIBVERBS
19TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_OPENFABRICS_VERBS=1
20endif HWLOC_HAVE_LIBIBVERBS
21if HWLOC_HAVE_OPENCL
22TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_OPENCL=1
23endif HWLOC_HAVE_OPENCL
24if HWLOC_HAVE_CUDA
25TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_CUDA=1
26endif HWLOC_HAVE_CUDA
27if HWLOC_HAVE_CUDART
28TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_CUDART=1
29endif HWLOC_HAVE_CUDART
30if HWLOC_HAVE_NVML
31TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_NVML=1
32endif HWLOC_HAVE_NVML
33if HWLOC_HAVE_RSMI
34TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_RSMI=1
35endif HWLOC_HAVE_RSMI
36
37dirs:
38	mkdir -p include/hwloc/autogen include/private/autogen
39
40include/hwloc/autogen/config.h: dirs $(HWLOC_top_builddir)/include/hwloc/autogen/config.h
41	sed	-e 's/^#define HWLOC_SYM_TRANSFORM 0/#define HWLOC_SYM_TRANSFORM 1/'                    \
42		-e 's/^#define HWLOC_SYM_PREFIX hwloc_/#define HWLOC_SYM_PREFIX foobar_/'               \
43		-e 's/^#define HWLOC_SYM_PREFIX_CAPS HWLOC_/#define HWLOC_SYM_PREFIX_CAPS FOOBAR_/'     \
44		$(HWLOC_top_builddir)/include/hwloc/autogen/config.h > include/hwloc/autogen/config.h
45
46include/private/autogen/config.h: dirs $(HWLOC_top_builddir)/include/private/autogen/config.h
47	sed	-e 's/^#define HWLOC_SYM_TRANSFORM 0/#define HWLOC_SYM_TRANSFORM 1/'                    \
48		-e 's/^#define HWLOC_SYM_PREFIX hwloc_/#define HWLOC_SYM_PREFIX foobar_/'               \
49		-e 's/^#define HWLOC_SYM_PREFIX_CAPS HWLOC_/#define HWLOC_SYM_PREFIX_CAPS FOOBAR_/'     \
50		$(HWLOC_top_builddir)/include/private/autogen/config.h > include/private/autogen/config.h
51
52useless:
53	@echo "# Finding useless renaming"
54	@if grep '^#define' $(HWLOC_top_srcdir)/include/hwloc/rename.h \
55		| awk '{print $$2}' \
56		| egrep -v '(HWLOC_RENAME_H|HWLOC_MUNGE_NAME|HWLOC_NAME)' \
57		| while read name ; do \
58			grep $$name -rwH $(HWLOC_top_srcdir)/include/ \
59			| grep -v rename.h: >/dev/null \
60			|| echo $$name; \
61			done \
62	 | grep '' ; then false ; else true ; fi
63	@echo "# done"
64
65cpp.out: include/hwloc/autogen/config.h include/private/autogen/config.h
66	@echo "# Checking for warnings/errors during renaming"
67	@echo "# using $(TEST_CPPFLAGS)"
68	@$(CPP) -Werror $(CPPFLAGS) $(TEST_CPPFLAGS) -Iinclude -I$(HWLOC_top_srcdir)/include -I$(HWLOC_top_builddir)/include $(srcdir)/main.c >$@
69
70# hwloc_uint64_t is ignored because it's always a typedef.
71# we have to manually concat a##b because some cpp let gcc do it (at least cpp 4.2.1 on OpenBSD 5.2).
72needed: cpp.out
73	@echo "# Finding needed renaming"
74	@if cat cpp.out \
75		| sed -e 's/foobar_ ##   hwloc_ ## /foobar_hwloc_/g' \
76		| sed -e 's/FOOBAR_ ##   hwloc_ ## /FOOBAR_hwloc_/g' \
77		| grep -vw HWLOC_DEBUG_VERBOSE \
78		| grep -vw hwloc_uint64_t \
79		| egrep -i '(^| |\*)hwloc_' ; then false ; else true ; fi
80	@echo "# done"
81
82clean-local:
83	rm -rf include
84
85EXTRA_DIST	=	main.c
86