From 3fde8aef176d34e28b31d179580b0e3a8f0c7686 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Tue, 17 Feb 2009 13:50:15 +0100 Subject: [PATCH] Updated QT rules All temporary files are automatically put under _build and binaries under _compiled. Also LDFLAGS are propagated to qmake-generated Makefile. Clean target works correctly and no special target for distclean is needed as everything is put under _build. This behavior is problematic during development of QT application since it cannot be compiled by running make in sources directory. --- snippets/qt | 68 +++++++++++++++++------------------ tests/qt/runtest | 10 ++++-- tests/qt/somelib/Makefile.omk | 3 +- 3 files changed, 41 insertions(+), 40 deletions(-) diff --git a/snippets/qt b/snippets/qt index c09b28a..613b16f 100644 --- a/snippets/qt +++ b/snippets/qt @@ -6,46 +6,42 @@ ifneq ($(QT_SUBDIRS),) .PHONY: qt-subpass clean-qt distclean-qt # Usage: $(call qt_makefile_template,) -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: diff --git a/tests/qt/runtest b/tests/qt/runtest index 4543537..4961fd3 100755 --- a/tests/qt/runtest +++ b/tests/qt/runtest @@ -2,6 +2,8 @@ . ../functions.sh +trap 'rm -f qtapp/Makefile' EXIT + touch config.omk-default QTDIR=/usr/share/qt4 export QTDIR @@ -9,10 +11,12 @@ export QTDIR cp Makefile1.omk Makefile.omk make || error "QT compilation" -[ -x qtapp/qtapp ] || error "QT application was not compiled" +[ -x _compiled/bin/qtapp ] || error "QT application was not compiled" -make distclean || error "QT distclean" +make clean || error "QT clean" cp Makefile2.omk Makefile.omk make || error "QT Compilation in subdir" -[ -x qtapp/qtapp ] || error "QT application was not compiled" +[ -x _compiled/bin/qtapp ] || error "QT application was not compiled" + +make clean || error "QT clean" diff --git a/tests/qt/somelib/Makefile.omk b/tests/qt/somelib/Makefile.omk index 0726c15..3d26c89 100644 --- a/tests/qt/somelib/Makefile.omk +++ b/tests/qt/somelib/Makefile.omk @@ -1,4 +1,5 @@ include_HEADERS = header.h -lib_LIBRARIES = somelib +shared_LIBRARIES = somelib + somelib_SOURCES = somelib.c -- 2.39.2