2 # Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012
3 # Jonathan Schleifer <js@webkeks.org>
5 # https://webkeks.org/git/?p=buildsys.git
7 # Permission to use, copy, modify, and/or distribute this software for any
8 # purpose with or without fee is hereby granted, provided that the above
9 # copyright notice and this permission notice is present in all copies.
11 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
12 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
13 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
14 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
15 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
16 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
17 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
18 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
19 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
20 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
21 # POSSIBILITY OF SUCH DAMAGE.
25 PACKAGE_NAME = @PACKAGE_NAME@
26 PACKAGE_VERSION = @PACKAGE_VERSION@
44 ERLCFLAGS = @ERLCFLAGS@
45 OBJCFLAGS = @OBJCFLAGS@
46 OBJCXXFLAGS = @OBJCXXFLAGS@
48 LDFLAGS_RPATH = @LDFLAGS_RPATH@
50 PYTHON_FLAGS = @PYTHON_FLAGS@
51 PROG_IMPLIB_NEEDED = @PROG_IMPLIB_NEEDED@
52 PROG_IMPLIB_LDFLAGS = @PROG_IMPLIB_LDFLAGS@
53 PROG_SUFFIX = @EXEEXT@
54 LIB_CFLAGS = @LIB_CFLAGS@
55 LIB_LDFLAGS = @LIB_LDFLAGS@
56 LIB_PREFIX = @LIB_PREFIX@
57 LIB_SUFFIX = @LIB_SUFFIX@
58 PLUGIN_CFLAGS = @PLUGIN_CFLAGS@
59 PLUGIN_LDFLAGS = @PLUGIN_LDFLAGS@
60 PLUGIN_SUFFIX = @PLUGIN_SUFFIX@
61 INSTALL_LIB = @INSTALL_LIB@
62 UNINSTALL_LIB = @UNINSTALL_LIB@
63 CLEAN_LIB = @CLEAN_LIB@
70 JAVACFLAGS = @JAVACFLAGS@
74 exec_prefix = @exec_prefix@
77 plugindir ?= ${libdir}/${PACKAGE_NAME}
78 datarootdir = @datarootdir@
80 includedir = @includedir@
81 includesubdir ?= ${PACKAGE_NAME}
82 localedir = @localedir@
83 localename ?= ${PACKAGE_NAME}
88 OBJS2 = ${OBJS1:.cc=.o}
89 OBJS3 = ${OBJS2:.cxx=.o}
90 OBJS4 = ${OBJS3:.d=.o}
91 OBJS5 = ${OBJS4:.erl=.beam}
92 OBJS6 = ${OBJS5:.java=.class}
93 OBJS7 = ${OBJS6:.m=.o}
94 OBJS8 = ${OBJS7:.mm=.o}
95 OBJS9 = ${OBJS8:.py=.pyc}
96 OBJS10 = ${OBJS9:.rc=.o}
97 OBJS11 = ${OBJS10:.S=.o}
98 OBJS += ${OBJS11:.xpm=.o}
100 LIB_OBJS = ${OBJS:.o=.lib.o}
101 PLUGIN_OBJS = ${OBJS:.o=.plugin.o}
103 MO_FILES = ${LOCALES:.po=.mo}
107 .SUFFIXES: .beam .c .c.dep .cc .cc.dep .class .cxx .cxx.dep .d .erl .lib.o .java .mo .m .m.dep .mm .mm.dep .o .plugin.o .po .py .pyc .rc .S .S.dep .xpm
108 .PHONY: all subdirs ${SUBDIRS} pre-depend depend install install-extra uninstall uninstall-extra clean distclean locales
110 all: subdirs depend ${STATIC_LIB} ${STATIC_LIB_NOINST} ${STATIC_PIC_LIB} ${STATIC_PIC_LIB_NOINST} ${SHARED_LIB} ${SHARED_LIB_NOINST} ${PLUGIN} ${PLUGIN_NOINST} ${PROG} ${PROG_NOINST} ${JARFILE} locales
114 ${MAKE} -C $@ ${MFLAGS}
116 depend: pre-depend ${SRCS}
119 test -f .deps || regen=1; \
120 for i in ${SRCS}; do \
122 *.c | *.cc | *.cxx | *.m | *.mm | *.S) \
123 test $$i -nt .deps && regen=1; \
124 deps="$$deps $$i.dep"; \
128 if test x"$$regen" = x"1" -a x"$$deps" != x""; then \
130 if ${MAKE} ${MFLAGS} $$deps && cat $$deps >.deps; then \
135 touch -t 0001010000 .deps; \
141 ${CPP} ${CPPFLAGS} ${CFLAGS} -M $< | \
142 sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.plugin.o:/' >$@ || \
145 .cc.cc.dep .cxx.cxx.dep:
146 ${CPP} ${CPPFLAGS} ${CXXFLAGS} -M $< | \
147 sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.plugin.o:/' >$@ || \
151 ${CPP} ${CPPFLAGS} ${OBJCFLAGS} -M $< | \
152 sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.plugin.o:/' >$@ || \
156 ${CPP} ${CPPFLAGS} ${OBJCPPFLAGS} -M $< | \
157 sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.plugin.o:/' >$@ || \
161 ${CPP} ${CPPFLAGS} ${ASFLAGS} -M $< | \
162 sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.plugin.o:/' >$@ || \
167 ${PROG} ${PROG_NOINST}: ${EXT_DEPS} ${OBJS} ${OBJS_EXTRA}
168 LDOBJS="${OBJS} ${OBJS_EXTRA}"; \
170 if ${LD} -o $@ ${OBJS} ${OBJS_EXTRA} ${LDFLAGS} ${LIBS}; then \
176 ${JARFILE}: ${EXT_DEPS} ${JAR_MANIFEST} ${OBJS} ${OBJS_EXTRA}
178 if test x"${JAR_MANIFEST}" != x""; then \
179 if ${JAR} cfm ${JARFILE} ${JAR_MANIFEST} ${OBJS} ${OBJS_EXTRA}; then \
185 if ${JAR} cf ${JARFILE} ${OBJS} ${OBJS_EXTRA}; then \
192 ${SHARED_LIB} ${SHARED_LIB_NOINST}: ${EXT_DEPS} ${LIB_OBJS} ${LIB_OBJS_EXTRA}
193 LDOBJS="${LIB_OBJS} ${LIB_OBJS_EXTRA}"; \
197 for i in ${LIB_OBJS} ${LIB_OBJS_EXTRA}; do \
208 dir=".$$(echo $$i | sed 's/\//_/g').objs"; \
214 objs="$$objs $$dir/$$j"; \
218 if ${LD} -o $@ $$objs ${LIB_LDFLAGS} ${LDFLAGS} ${LIBS}; then \
224 dir=".$$(echo $$i | sed 's/\//_/g').objs"; \
228 ${PLUGIN} ${PLUGIN_NOINST}: ${EXT_DEPS} ${PLUGIN_OBJS}
229 LDOBJS="${PLUGIN_OBJS}"; \
233 for i in ${PLUGIN_OBJS}; do \
244 dir=".$$(echo $$i | sed 's/\//_/g').objs"; \
250 objs="$$objs $$dir/$$j"; \
254 if ${LD} -o $@ $$objs ${PLUGIN_LDFLAGS} ${LDFLAGS} ${LIBS}; then \
260 dir=".$$(echo $$i | sed 's/\//_/g').objs"; \
264 ${STATIC_LIB} ${STATIC_LIB_NOINST}: ${EXT_DEPS} ${OBJS} ${OBJS_EXTRA}
265 LDOBJS="${OBJS} ${OBJS_EXTRA}"; \
270 for i in ${OBJS} ${OBJS_EXTRA}; do \
281 dir=".$$(echo $$i | sed 's/\//_/g').objs"; \
287 objs="$$objs $$dir/$$j"; \
291 if ${AR} cr $@ $$objs && ${RANLIB} $@; then \
298 dir=".$$(echo $$i | sed 's/\//_/g').objs"; \
302 ${STATIC_PIC_LIB} ${STATIC_PIC_LIB_NOINST}: ${EXT_DEPS} ${LIB_OBJS} ${LIB_OBJS_EXTRA}
303 LDOBJS="${LIB_OBJS} ${LIB_OBJS_EXTRA}"; \
308 for i in ${LIB_OBJS} ${LIB_OBJS_EXTRA}; do \
319 dir=".$$(echo $$i | sed 's/\//_/g').objs"; \
325 objs="$$objs $$dir/$$j"; \
329 if ${AR} cr $@ $$objs && ${RANLIB} $@; then \
336 dir=".$$(echo $$i | sed 's/\//_/g').objs"; \
344 COMPILER_FLAGS="${CFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
346 $${COMPILER} $${COMPILER_FLAGS}
350 COMPILER_FLAGS="${LIB_CFLAGS} ${CFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
351 ${COMPILE_LIB_STATUS}; \
352 $${COMPILER} $${COMPILER_FLAGS}
356 COMPILER_FLAGS="${PLUGIN_CFLAGS} ${CFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
357 ${COMPILE_PLUGIN_STATUS}; \
358 $${COMPILER} $${COMPILER_FLAGS}
362 COMPILER_FLAGS="${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
364 $${COMPILER} $${COMPILER_FLAGS}
366 .cc.lib.o .cxx.lib.o:
368 COMPILER_FLAGS="${LIB_CFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
369 ${COMPILE_LIB_STATUS}; \
370 $${COMPILER} $${COMPILER_FLAGS}
372 .cc.plugin.o .cxx.plugin.o:
374 COMPILER_FLAGS="${PLUGIN_CFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
375 ${COMPILE_PLUGIN_STATUS}; \
376 $${COMPILER} $${COMPILER_FLAGS}
381 if test x"$(basename ${COMPILER})" = x"dmd"; then \
382 $${COMPILER} ${DFLAGS} -c -of$@ $<; \
384 $${COMPILER} ${DFLAGS} -c -o $@ $<; \
388 COMPILER="${ERLC}"; \
389 COMPILER_FLAGS="${ERLCFLAGS} -o $@ $<"; \
391 $${COMPILER} $${COMPILER_FLAGS}
394 COMPILER="${JAVAC}"; \
395 COMPILER_FLAGS="${JAVACFLAGS} $<"; \
397 $${COMPILER} $${COMPILER_FLAGS}
400 COMPILER="${OBJC}"; \
401 COMPILER_FLAGS="${OBJCFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
403 $${COMPILER} $${COMPILER_FLAGS}
406 COMPILER="${OBJC}"; \
407 COMPILER_FLAGS="${LIB_CFLAGS} ${OBJCFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
408 ${COMPILE_LIB_STATUS}; \
409 $${COMPILER} $${COMPILER_FLAGS}
412 COMPILER="${OBJC}"; \
413 COMPILER_FLAGS="${PLUGIN_CFLAGS} ${OBJCFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
414 ${COMPILE_PLUGIN_STATUS}; \
415 $${COMPILER} $${COMPILER_FLAGS}
418 COMPILER="${OBJCXX}"; \
419 COMPILER_FLAGS="${OBJCXXFLAGS} ${OBJCFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
421 $${COMPILER} $${COMPILER_FLAGS}
424 COMPILER="${OBJCXX}"; \
425 COMPILER_FLAGS="${LIB_CFLAGS} ${OBJCXXFLAGS} ${OBJCFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
426 ${COMPILE_LIB_STATUS}; \
427 $${COMPILER} $${COMPILER_FLAGS}
430 COMPILER="${OBJCXX}"; \
431 COMPILER_FLAGS="${PLUGIN_CFLAGS} ${OBJCXXFLAGS} ${OBJCFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
432 ${COMPILE_PLUGIN_STATUS}; \
433 $${COMPILER} $${COMPILER_FLAGS}
436 COMPILER="${MSGFMT}"; \
437 COMPILER_FLAGS="-c -o $@ $<"; \
438 ${COMPILE_RESOURCE_STATUS}; \
439 $${COMPILER} $${COMPILER_FLAGS}
442 COMPILER="${PYTHON}"; \
443 COMPILER_FLAGS="${PYTHON_FLAGS}"; \
444 ${COMPILE_RESOURCE_STATUS}; \
445 $${COMPILER} $${COMPILER_FLAGS} -c "import py_compile; py_compile.compile('$<')"
447 .rc.o .rc.lib.o .rc.plugin.o:
448 COMPILER="${WINDRES}"; \
449 COMPILER_FLAGS="${CPPFLAGS} -J rc -O coff -o $@ $<"; \
450 ${COMPILE_RESOURCE_STATUS}; \
451 $${COMPILER} $${COMPILER_FLAGS}
455 COMPILER_FLAGS="${ASFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
457 $${COMPILER} $${COMPILER_FLAGS}
461 COMPILER_FLAGS="${LIB_CFLAGS} ${ASFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
462 ${COMPILE_LIB_STATUS}; \
463 $${COMPILER} $${COMPILER_FLAGS}
467 COMPILER_FLAGS="${PLUGIN_CFLAGS} ${ASFLAGS} ${CPPFLAGS} -c -o $@ $<"; \
468 ${COMPILE_PLUGIN_STATUS}; \
469 $${COMPILER} $${COMPILER_FLAGS}
473 COMPILER_FLAGS="${CFLAGS} ${CPPFLAGS} -x c -c -o $@ $<"; \
475 $${COMPILER} $${COMPILER_FLAGS}
479 COMPILER_FLAGS="${LIB_CFLAGS} ${CFLAGS} ${CPPFLAGS} -x c -c -o $@ $<"; \
480 ${COMPILE_LIB_STATUS}; \
481 $${COMPILER} $${COMPILER_FLAGS}
485 COMPILER_FLAGS="${PLUGIN_CFLAGS} ${CFLAGS} ${CPPFLAGS} -x c -c -o $@ $<"; \
486 ${COMPILE_PLUGIN_STATUS}; \
487 $${COMPILER} $${COMPILER_FLAGS}
489 install: ${SHARED_LIB} ${STATIC_LIB} ${STATIC_PIC_LIB} ${PLUGIN} ${PROG} install-extra
490 for i in ${SUBDIRS}; do \
492 ${MAKE} ${MFLAGS} install || exit $$?; \
496 for i in ${SHARED_LIB}; do \
498 if ${MKDIR_P} ${DESTDIR}${libdir} ${INSTALL_LIB}; then \
505 for i in ${STATIC_LIB} ${STATIC_PIC_LIB}; do \
507 if ${MKDIR_P} ${DESTDIR}${libdir} && ${INSTALL} -m 644 $$i ${DESTDIR}${libdir}/$$i; then \
514 for i in ${PLUGIN}; do \
516 if ${MKDIR_P} ${DESTDIR}${plugindir} && ${INSTALL} -m 755 $$i ${DESTDIR}${plugindir}/$$i; then \
523 for i in ${DATA}; do \
525 if ${MKDIR_P} $$(dirname ${DESTDIR}${datadir}/${PACKAGE_NAME}/$$i) && ${INSTALL} -m 644 $$i ${DESTDIR}${datadir}/${PACKAGE_NAME}/$$i; then \
532 for i in ${PROG}; do \
534 if ${MKDIR_P} ${DESTDIR}${bindir} && ${INSTALL} -m 755 $$i ${DESTDIR}${bindir}/$$i; then \
541 for i in ${INCLUDES}; do \
543 if ${MKDIR_P} ${DESTDIR}${includedir}/${includesubdir} && ${INSTALL} -m 644 $$i ${DESTDIR}${includedir}/${includesubdir}/$$i; then \
550 for i in ${MO_FILES}; do \
552 if ${MKDIR_P} ${DESTDIR}${localedir}/$${i%.mo}/LC_MESSAGES && ${INSTALL} -m 644 $$i ${DESTDIR}${localedir}/$${i%.mo}/LC_MESSAGES/${localename}.mo; then \
559 for i in ${MAN}; do \
561 if ${MKDIR_P} ${DESTDIR}${mandir}/${mansubdir} && ${INSTALL} -m 644 $$i ${DESTDIR}${mandir}/${mansubdir}/$$i; then \
570 uninstall: uninstall-extra
571 for i in ${SUBDIRS}; do \
573 ${MAKE} ${MFLAGS} uninstall || exit $$?; \
577 for i in ${SHARED_LIB}; do \
578 if test -f ${DESTDIR}${libdir}/$$i; then \
579 if : ${UNINSTALL_LIB}; then \
587 for i in ${STATIC_LIB} ${STATIC_PIC_LIB}; do \
588 if test -f ${DESTDIR}${libdir}/$$i; then \
589 if rm -f ${DESTDIR}${libdir}/$$i; then \
597 for i in ${PLUGIN}; do \
598 if test -f ${DESTDIR}${plugindir}/$$i; then \
599 if rm -f ${DESTDIR}${plugindir}/$$i; then \
606 -rmdir ${DESTDIR}${plugindir} >/dev/null 2>&1
608 for i in ${DATA}; do \
609 if test -f ${DESTDIR}${datadir}/${PACKAGE_NAME}/$$i; then \
610 if rm -f ${DESTDIR}${datadir}/${PACKAGE_NAME}/$$i; then \
616 rmdir "$$(dirname ${DESTDIR}${datadir}/${PACKAGE_NAME}/$$i)" >/dev/null 2>&1 || true; \
618 -rmdir ${DESTDIR}${datadir}/${PACKAGE_NAME} >/dev/null 2>&1
620 for i in ${PROG}; do \
621 if test -f ${DESTDIR}${bindir}/$$i; then \
622 if rm -f ${DESTDIR}${bindir}/$$i; then \
630 for i in ${INCLUDES}; do \
631 if test -f ${DESTDIR}${includedir}/${includesubdir}/$$i; then \
632 if rm -f ${DESTDIR}${includedir}/${includesubdir}/$$i; then \
639 -rmdir ${DESTDIR}${includedir}/${includesubdir} >/dev/null 2>&1
641 for i in ${MO_FILES}; do \
642 if test -f ${DESTDIR}${localedir}/$${i%.mo}/LC_MESSAGES/${localename}.mo; then \
643 if rm -f ${DESTDIR}${localedir}/$${i%.mo}/LC_MESSAGES/${localename}.mo; then \
651 for i in ${MAN}; do \
652 if test -f ${DESTDIR}${mandir}/${mansubdir}/$$i; then \
653 if rm -f ${DESTDIR}${mandir}/${mansubdir}/$$i; then \
664 for i in ${SUBDIRS}; do \
666 ${MAKE} ${MFLAGS} clean || exit $$?; \
670 for i in ${DEPS} ${OBJS} ${OBJS_EXTRA} ${LIB_OBJS} ${LIB_OBJS_EXTRA} ${PLUGIN_OBJS} ${PROG} ${PROG_NOINST} ${SHARED_LIB} ${SHARED_LIB_NOINST} ${STATIC_LIB} ${STATIC_LIB_NOINST} ${STATIC_PIC_LIB} ${STATIC_PIC_LIB_NOINST} ${PLUGIN} ${PLUGIN_NOINST} ${CLEAN_LIB} ${MO_FILES} ${CLEAN}; do \
671 if test -f $$i -o -d $$i; then \
672 if rm -fr $$i; then \
681 for i in ${SUBDIRS}; do \
683 ${MAKE} ${MFLAGS} distclean || exit $$?; \
687 for i in ${DISTCLEAN} .deps *~; do \
688 if test -f $$i -o -d $$i; then \
689 if rm -fr $$i; then \
699 DIR_ENTER = cd $$i || exit $$?
700 DIR_LEAVE = cd .. || exit $$?
703 DEPEND_FAILED = exit $$?
704 COMPILE_STATUS = printf "CompileExe: $@\n"
706 COMPILE_FAILED = exit $$?
707 COMPILE_LIB_STATUS = printf "CompileLib: $@\n"
708 COMPILE_LIB_OK = true
709 COMPILE_LIB_FAILED = exit $$?
710 COMPILE_PLUGIN_STATUS = printf "CompilePlugin: $@\n"
711 COMPILE_PLUGIN_OK = true
712 COMPILE_PLUGIN_FAILED = exit $$?
713 COMPILE_RESOURCE_STATUS = printf "CompileResource: $@\n"
714 COMPILE_RESOURCE_OK = true
715 COMPILE_RESOURCE_FAILED = exit $$?
716 LINK_STATUS = printf "Link: $@\n"
718 LINK_FAILED = exit $$?
719 INSTALL_STATUS = printf "Install: $$i\n"
721 INSTALL_FAILED = exit $$?
722 DELETE_OK = printf "Delete: $$i\n"
723 DELETE_FAILED = exit $$?
727 DIR_ENTER = cd $$i || exit $$?
728 DIR_LEAVE = cd .. || exit $$?
731 DEPEND_FAILED = exit $$?
732 COMPILE_STATUS = printf "CompileExe: $$COMPILER $${COMPILER_FLAGS}\n"
734 COMPILE_FAILED = exit $$?
735 COMPILE_LIB_STATUS = printf "CompileLib: $$COMPILER $${COMPILER_FLAGS}\n"
736 COMPILE_LIB_OK = true
737 COMPILE_LIB_FAILED = exit $$?
738 COMPILE_PLUGIN_STATUS = printf "CompilePlugin: $$COMPILER $${COMPILER_FLAGS}\n"
739 COMPILE_PLUGIN_OK = true
740 COMPILE_PLUGIN_FAILED = exit $$?
741 COMPILE_RESOURCE_STATUS = printf "CompileResource: $$COMPILER $${COMPILER_FLAGS}\n"
742 COMPILE_RESOURCE_OK = true
743 COMPILE_RESOURCE_FAILED = exit $$?
744 LINK_STATUS = printf "Link: ${LD} -o $@ $$LDOBJS ${LDFLAGS} ${LIBS}\n"
746 LINK_FAILED = exit $$?
747 INSTALL_STATUS = printf "Install: $$i\n"
749 INSTALL_FAILED = exit $$?
750 DELETE_OK = printf "Delete: $$i\n"
751 DELETE_FAILED = exit $$?