1 # Copyright © 2009-2012, 2015, 2019-2020 Nick Bowler
3 # License WTFPL2: Do What The Fuck You Want To Public License, version 2.
4 # This is free software: you are free to do what the fuck you want to.
5 # There is NO WARRANTY, to the extent permitted by law.
7 AUTOMAKE_OPTIONS = parallel-tests color-tests
8 ACLOCAL_AMFLAGS = -I m4 -I common/m4
14 # Distribution should be buildable without working gob.
15 AM_DISTCHECK_CONFIGURE_FLAGS = GOB2=false
17 EXTRA_DIST = $(MAINTAINERCLEANFILES) m4/gnulib-cache.m4
19 AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src \
20 -I$(top_srcdir)/$(DX_BASEDIR)/src \
21 -I$(top_builddir)/lib -I$(top_srcdir)/lib \
22 -DPKGLIBDIR=\"$(pkglibdir)\" -DPKGDATADIR=\"$(pkgdatadir)\"
24 AM_CFLAGS = $(LTDLINCL) $(GLIB_CFLAGS) $(LIBMODPLUG_CFLAGS)
27 lib_LTLIBRARIES = libupkg.la libuobject.la
28 pkglib_LTLIBRARIES = engine.la
33 dist_man_MANS = doc/man/upkg.1
35 # This trick should define orderonly to | iff we're using GNU make.
36 have_orderonly = $(findstring order-only,$(.FEATURES))
37 orderonly = $(have_orderonly:order-only=|)
39 upkg_SOURCES = src/upkg.c src/upkg.h
40 upkg_LDFLAGS = $(AM_LDFLAGS) -export-dynamic
41 upkg_LDADD = libuobject.la libupkg.la libgnu.la $(GLIB_LIBS)
42 $(upkg_OBJECTS): $(gnulib_headers)
44 libupkg_la_SOURCES = src/libupkg.c common/src/pack.c common/src/pack.h
46 uobjectdir = $(includedir)/uobject
47 uobject_HEADERS = src/uobject/uobject.h src/uobject/exportable.h \
48 src/uobject/loadable.h src/uobject/module.h src/uobject/package.h \
51 libuobject_la_SOURCES = src/uobject/uobject.c src/uobject/module.c \
52 src/uobject/avl.c src/uobject/avl.h src/uobject/package.c \
53 src/uobject/exportable.c src/uobject/loadable.c src/uobject/vfs.c \
54 src/uobject/primitives.c
55 libuobject_la_LDFLAGS = $(AM_LDFLAGS) -export-symbols-regex '^u_'
56 libuobject_la_LIBADD = libgnu.la $(LIBLTDL) $(GLIB_LIBS)
57 $(libuobject_la_OBJECTS): $(gnulib_headers)
59 libuobject_la = libuobject.la
60 $(libuobject_la): $(LTDLDEPS)
62 moduleflags = -module -avoid-version -export-symbols-regex _LTX_
64 engine_GOBS = src/engine/palette.gob src/engine/texture.gob \
65 src/engine/music.gob src/engine/sound.gob src/engine/mesh.gob
66 EXTRA_DIST += $(engine_GOBS)
68 MAINTAINERCLEANFILES += $(engine_GOBS:.gob=.gobstamp) \
69 $(engine_GOBS:.gob=.c) $(engine_GOBS:.gob=.h)
71 engine_la_SOURCES = $(engine_GOBS:.gob=.c) $(engine_GOBS:.gob=.h) \
73 src/engine/music-module.h \
76 engine_la_LDFLAGS = $(AM_LDFLAGS) $(moduleflags)
77 engine_la_LIBADD = $(GLIB_LIBS)
78 $(engine_la_OBJECTS): $(orderonly) $(engine_GOBS:.gob=.gobstamp)
81 engine_la_SOURCES += src/engine/music-dummymod.c
85 engine_la_SOURCES += src/engine/music-modplug.c src/engine/modplug-types.h
86 engine_la_LIBADD += $(LIBMODPLUG_LIBS)
89 check_LTLIBRARIES = libtest.la
90 check_PROGRAMS = test/decodeindex test/pcxrle
92 libtest_la_SOURCES = test/common.c test/common.h
94 test_decodeindex_LDADD = libupkg.la libgnu.la libtest.la
95 $(test_decodeindex_OBJECTS): $(gnulib_headers)
96 test_pcxrle_LDADD = src/engine/pcx.lo libupkg.la libgnu.la libtest.la
97 $(test_pcxrle_OBJECTS): $(gnulib_headers)
99 TESTS_ENVIRONMENT = SHELL='$(SHELL)' EXEEXT='$(EXEEXT)'
100 TEST_EXTENSIONS = .sh
101 SH_LOG_COMPILER = $(SHELL)
103 TESTS = tests/libupkg-index-decode.sh tests/engine-pcx-rlencode.sh
104 EXTRA_DIST += $(TESTS)
106 # Supporting rules for GObject Builder
107 GOB_V = $(GOB_V_@AM_V@)
108 GOB_V_ = $(GOB_V_@AM_DEFAULT_V@)
109 GOB_V_0 = @printf ' %$(DX_ALIGN_V)s %s\n' 'GOB ' $<;
111 # Unfortunately, GOB's output filenames depend on the contents of the gob file,
112 # rather than its filename. This isn't really suitable for use with make, so
113 # this rule has to make some assumptions about the source tree layout.
116 $(AM_V_at) touch $@.tmp
117 $(GOB_V) od='$(@D)'; case $$od in \
119 */src/*) od=$${od%/src/*}/src ;; \
120 esac; $(GOB2) -o "$$od" --file-sep=/ \
121 --no-private-header --no-touch-headers $<
122 $(AM_V_at) mv -f $@.tmp $@
125 @echo "ERROR: *** $(GOB2) does not support dynamic types." 1>&2
127 @echo "ERROR: *** gob2 is missing on your system." 1>&2
130 echo " *** Because of this, I cannot compile $<, but"; \
131 echo " *** (perhaps because you modified it) the sources appear out of date."; \
132 echo " *** A newer version of gob2 may be required; the latest version"; \
133 echo " *** may be found at <https://draconx.ca/projects/gob-dx/>."; \
134 echo " *** See config.log for more details."; \
140 @if test -f $@; then :; else rm -f $<; $(MAKE) $(AM_MAKEFLAGS) $<; fi
141 .gobstamp.c: ; $(STAMP_RECOVER)
142 .gobstamp.h: ; $(STAMP_RECOVER)
144 # The gob rules refrain from updating unchanged headers for the convenience of
145 # developers, but the headers should be distributed with up-to-date timestamps.
146 dist-hook: update-headers
147 update-headers: unfuck-distdir
148 for f in $(engine_GOBS:.gob=.h); do \
149 touch -c '$(distdir)'/"$$f" || exit; \
151 .PHONY: update-headers
153 # When running "make dist" in a VPATH build with a read-only srcdir, Automake
154 # will produce a distribution with all files read-only. Moreover, the files
155 # are read-only in distdir when the dist hooks are run. This hook will
156 # manually fix up the permissions. All dist hooks that modify files in
157 # distdir should list unfuck-distdir as a prerequisite.
158 dist-hook: unfuck-distdir
160 find '$(distdir)' -type f -exec chmod u+w {} +
161 .PHONY: unfuck-distdir
163 include $(top_srcdir)/lib/gnulib.mk
164 include $(top_srcdir)/libltdl/ltdl.mk