]> rtime.felk.cvut.cz Git - omk.git/blobdiff - snippets/qt.omk
Merge branch 'master' into devel
[omk.git] / snippets / qt.omk
index df11bc0199ceae78a5215a76ccf56cf25219fca3..101d10dcd89572c0689c70f11338fe32f5a4b5fa 100644 (file)
@@ -1,52 +1,49 @@
-# QT_PROJECTS     .. list of QT .pro file to use for compilation
-# QT_SUBDIRS       .. subdirectories where to build QT applications using qmake (depricated)
+# QT_SUBDIRS       .. subdirectories where to build QT applications using qmake
 # QTDIR                   .. where QT resides
 
-ifneq ($(QT_SUBDIRS)$(QT_PROJECTS),)
+ifneq ($(QT_SUBDIRS),)
 
-# Usage: $(call qt_project_template,<.pro_file relative to SOURCES_DIR>)
-define qt_project_template
+.PHONY: qt-subpass clean-qt distclean-qt
 
-.PHONY: qt-subpass-$(1) clean-qt-$(dir $(1))
-
-# FIXME: Handle multiple .pro files correctly
-$(LOCAL_BUILD_DIR)/$(dir $(1))Makefile: $(SOURCES_DIR)/$(1)
-       $(Q)mkdir -p $$(dir $$(@)) && cd $$(dir $$(@)) &&               \
-       $(QTDIR:%=%/bin/)qmake                                          \
-            TOP_DIR=$(OUTPUT_DIR)                                      \
-            RELATIVE_DIR=$(RELATIVE_PREFIX)$(dir $(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)
+# 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))))
 
-# 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))
+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 ;)
 
 # Hook to binary pass
-binary-pass-submakes: qt-subpass-$(1)
-qt-subpass-$(1): $(LOCAL_BUILD_DIR)/$(dir $(1))Makefile
-       $(Q)$(MAKE) SOURCES_DIR=$(SOURCES_DIR)/$(dir $(1)) \
-               RELATIVE_DIR=$(RELATIVE_PREFIX)$(dir $(1)) -C $(LOCAL_BUILD_DIR)/$(dir $(1)) || exit 1 ;
+binary-pass-submakes: qt-subpass
 
 # Hook to clean pass
-clean-local: clean-qt-$(dir $(1))
-clean-qt-$(dir $(1)): $(LOCAL_BUILD_DIR)/$(dir $(1))Makefile
-       @$(QUIET_CMD_ECHO) "  QT CLEAN $(dir $(1))"
-       $(Q)$(MAKE) SOURCES_DIR=$(SOURCES_DIR)/$(dir $(1)) \
-         RELATIVE_DIR=$(RELATIVE_PREFIX)$(dir $(1)) \
-         -C $(LOCAL_BUILD_DIR)/$(dir $(1)) clean
-       $(Q)rm $(LOCAL_BUILD_DIR)/$(dir $(1))Makefile
-endef
-
-$(foreach pro,$(QT_PROJECTS), $(eval $(call qt_project_template,$(pro))))
-$(foreach pro,$(foreach dir,$(QT_SUBDIRS), $(wildcard $(dir)/*.pro)), $(eval $(call qt_project_template,$(pro))))
-
+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 ;))
 endif
-
-# Local Variables:
-# mode:makefile
-# End: