]> rtime.felk.cvut.cz Git - omk.git/blobdiff - snippets/qt
Added forgotten Makefile for QT test
[omk.git] / snippets / qt
index c865b91bcb17a555c33e86949faa449a487342c9..df11bc0199ceae78a5215a76ccf56cf25219fca3 100644 (file)
@@ -1,21 +1,49 @@
-# QT_SUBDIRS       .. subdirectories where to build QT applications using qmake
+# QT_PROJECTS     .. list of QT .pro file to use for compilation
+# QT_SUBDIRS       .. subdirectories where to build QT applications using qmake (depricated)
 # QTDIR                   .. where QT resides
 
-ifneq ($(QT_SUBDIRS),)
+ifneq ($(QT_SUBDIRS)$(QT_PROJECTS),)
 
-.PHONY: qt-subpass
-qt-subpass:
-       +@$(foreach dir, $(QT_SUBDIRS), $(call mkdir_def,$(USER_OBJS_DIR)/$(dir)) ; \
-               if [ ! -e $(SOURCES_DIR)/$(dir)/Makefile ] ; then  \
-               ( cd $(SOURCES_DIR)/$(dir) ; $(QTDIR:%=%/bin/)qmake TOP_DIR=$(MAKERULES_DIR) \
-                    RELATIVE_DIR=$(RELATIVE_PREFIX)$(dir) $(QTDIR:%=QTDIR=%) CC=$(CC) \
-                    CXX=$(CXX) || exit 1 ;) ; fi ; \
-               $(MAKE) SOURCES_DIR=$(SOURCES_DIR)/$(dir) \
-               RELATIVE_DIR=$(RELATIVE_PREFIX)$(dir) -C $(SOURCES_DIR)/$(dir) \
-               -f $(SOURCES_DIR)/$(dir)/Makefile || exit 1 ;)
+# Usage: $(call qt_project_template,<.pro_file relative to SOURCES_DIR>)
+define qt_project_template
+
+.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)
+
+# 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: qt-subpass
+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 ;
+
+# 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))))
 
 endif