.PHONY: qt-subpass clean-qt distclean-qt
# Usage: $(call qt_makefile_template,<qt-subdir>)
-define qt_makefile_template
-$(SOURCES_DIR)/$(1)/Makefile: $(wildcard $(SOURCES_DIR)/$(1)/*.pro)
- cd $(SOURCES_DIR)/$(1); $(QTDIR:%=%/bin/)qmake TOP_DIR=$(OUTPUT_DIR) \
- RELATIVE_DIR=$(RELATIVE_PREFIX)$(1) $(QTDIR:%=QTDIR=%) CC=$(CC) \
- CXX=$(CXX) LIBS+="-L$(USER_LIB_DIR)" INCLUDEPATH+="$(USER_INCLUDE_DIR)"
-endef
-$(foreach dir,$(QT_SUBDIRS), $(eval $(call qt_makefile_template,$(dir))))
-
-qt-subpass: $(foreach dir,$(QT_SUBDIRS), $(SOURCES_DIR)/$(dir)/Makefile)
- $(foreach dir,$(QT_SUBDIRS),\
- $(MAKE) SOURCES_DIR=$(SOURCES_DIR)/$(dir) \
- RELATIVE_DIR=$(RELATIVE_PREFIX)$(dir) -C $(SOURCES_DIR)/$(dir) \
- -f $(SOURCES_DIR)/$(dir)/Makefile || exit 1 ;)
+define qt_subdir_template
+
+$(LOCAL_BUILD_DIR)/$(1)/Makefile: $(wildcard $(SOURCES_DIR)/$(1)/*.pro)
+ $(Q)mkdir -p $(LOCAL_BUILD_DIR)/$(1) && \
+ cd $(LOCAL_BUILD_DIR)/$(1) && \
+ $(QTDIR:%=%/bin/)qmake \
+ TOP_DIR=$(OUTPUT_DIR) RELATIVE_DIR=$(RELATIVE_PREFIX)$(1) \
+ $(QTDIR:%=QTDIR=%) CC=$(CC) CXX=$(CXX) \
+ LIBS+="-L$(USER_LIB_DIR)" DESTDIR=$(USER_BIN_DIR) \
+ INCLUDEPATH+="$(USER_INCLUDE_DIR)" \
+ QMAKE_LFLAGS="-Wl,-rpath-link,$(USER_LIB_DIR) $$(QMAKE_LFLAGS)" \
+ $(SOURCES_DIR)/$(1)/*.pro
+
+# This horrible substitution is here to properly escape
+# -Wl,-rpath,$ORIGIN flags. It includes escaping for make, shell,
+# qmake and again make and shell run on qmake generated makefile.
+QMAKE_LFLAGS = $$(subst $$$$,\\\\\\$$$$\$$$$,$$(LDFLAGS))
# Hook to binary pass
-binary-pass-submakes: qt-subpass
+binary-pass-submakes: qt-subpass-$(1)
+qt-subpass-$(1): $(LOCAL_BUILD_DIR)/$(1)/Makefile
+ $(Q)$(MAKE) SOURCES_DIR=$(SOURCES_DIR)/$(1) \
+ RELATIVE_DIR=$(RELATIVE_PREFIX)$(1) -C $(LOCAL_BUILD_DIR)/$(1) || exit 1 ;
# Hook to clean pass
-clean-local: clean-qt
-clean-qt:
- +@$(foreach dir, $(QT_SUBDIRS), \
- $(if $(wildcard $(SOURCES_DIR)/$(dir)/Makefile), \
- @$(QUIET_CMD_ECHO) " CLEAN $(dir)"; \
- $(MAKE) SOURCES_DIR=$(SOURCES_DIR)/$(dir) \
- RELATIVE_DIR=$(RELATIVE_PREFIX)$(dir) -C $(SOURCES_DIR)/$(dir) \
- -f $(SOURCES_DIR)/$(dir)/Makefile clean|| exit 1 ;))
-
-
-# Hook to distclean
-distclean: distclean-qt
-
-# TODO: Add distclean-qt-pass to handle QT_SUBDIRS in the whole
-# tree. This way we only distclean toplevel subdirs.
-distclean-qt:
- +@$(foreach dir, $(QT_SUBDIRS), \
- $(if $(wildcard $(SOURCES_DIR)/$(dir)/Makefile), \
- @$(QUIET_CMD_ECHO) " DISTCLEAN $(dir)"; \
- $(MAKE) SOURCES_DIR=$(SOURCES_DIR)/$(dir) \
- RELATIVE_DIR=$(RELATIVE_PREFIX)$(dir) -C $(SOURCES_DIR)/$(dir) \
- -f $(SOURCES_DIR)/$(dir)/Makefile distclean|| exit 1 ;))
+clean-local: clean-qt-$(1)
+clean-qt-$(1): $(LOCAL_BUILD_DIR)/$(1)/Makefile
+ @$(QUIET_CMD_ECHO) " QT CLEAN $(1)"
+ $(Q)$(MAKE) SOURCES_DIR=$(SOURCES_DIR)/$(1) \
+ RELATIVE_DIR=$(RELATIVE_PREFIX)$(1) \
+ -C $(LOCAL_BUILD_DIR)/$(1) clean
+ $(Q)rm $(LOCAL_BUILD_DIR)/$(1)/Makefile
+endef
+
+$(foreach dir,$(QT_SUBDIRS), $(eval $(call qt_subdir_template,$(dir))))
+
endif
# Local Variables: