#!/usr/bin/make -f export QTDIR := $(shell pwd) export PATH := $(QTDIR)/bin:$(PATH) # workaround to use lrelease. export LD_LIBRARY_PATH := $(QTDIR)/lib:$(LD_LIBRARY_PATH) export QT_PLUGIN_PATH := $(QTDIR)/plugins export DH_VERBOSE=1 # Only present in official source package #QTVERSION := $(shell ls changes-* | cut -f2 -d '-') CURRENTVERSION := $(shell head -1 debian/changelog | sed 's/[^(]*(\([^)]*\)).*/\1/') include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/makefile.mk include /usr/share/cdbs/1/rules/patchsys-quilt.mk include /usr/share/cdbs/1/rules/utils.mk # Find out how many parallel threads to run TMP_BUILD_OPTS = $(subst $(comma),$(space),$(DEB_BUILD_OPTIONS)) ifneq (,$(filter parallel=%,$(TMP_BUILD_OPTS))) NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(TMP_BUILD_OPTS))) PARALLEL_MAKEFLAGS += -j$(NUMJOBS) endif BUILD_NOOPT := no ifneq (,$(filter noopt,$(TMP_BUILD_OPTS))) BUILD_NOOPT := yes endif BUILD_DOCS := yes ifneq (,$(filter nodoc,$(TMP_BUILD_OPTS))) BUILD_DOCS := no endif ifneq (,$(filter nodocs,$(TMP_BUILD_OPTS))) BUILD_DOCS := no endif TRY_TARGET_BUILD := no ifneq (,$(filter native-tools,$(TMP_BUILD_OPTS))) TRY_TARGET_BUILD := yes endif DEB_MAKE_INVOKE := $(MAKE) $(PARALLEL_MAKEFLAGS) DEB_MAKE_BUILD_TARGET := sub-src DEB_MAKE_INSTALL_TARGET := INSTALL_ROOT=$(DEB_DESTDIR) install DEB_DH_INSTALL_SOURCEDIR := debian/tmp # Ensure the *.debug files aren't included in any package other than libqt4-dbg DEB_DH_INSTALL_ARGS := --exclude=.debug DEB_MAKE_CLEAN_TARGET := confclean distclean # Shlibs of the current upstream version DEB_DH_MAKESHLIBS_ARGS_ALL := -V DEB_DH_SHLIBDEPS_ARGS_ALL := --exclude=.debug -Xusr/bin/host- # Only present in official source package #DEB_INSTALL_CHANGELOGS_ALL := changes-$(QTVERSION) QT_MAEMO_TESTDIR := debian/tests export QMAKEFEATURES=$(CURDIR)/debian/tests export QMAKE_INVOKE=$(CURDIR)/bin/qmake export QMAKE_BUILD_ROOT=$(CURDIR) #Test packages that will run using -style option QT_AUTOTESTS_GUI_STYLE := "libqt4-gui-tests" # Select OpenGL backend driver # Enable multituch support ifeq ($(DEB_HOST_ARCH),arm) CONFIG_ARCH_OPT = armv6 else ifeq ($(DEB_HOST_ARCH),armel) CONFIG_ARCH_OPT = armv6 else CONFIG_ARCH_OPT = i386 endif endif EXTRA_CONFIGURE_OPTS += -DQT_QLOCALE_USES_FCVT -DQT_EXPERIMENTAL_CLIENT_DECORATIONS -DQT_MEEGO_EXPERIMENTAL_SHADERCACHE -DQT_MEEGO_EXPERIMENTAL_SHADERCACHE_TRACE # Check if running inside scratchbox, and that host-gcc works IN_SBOX = $(shell if [ -f /targets/links/scratchbox.config ]; then echo yes; else echo no; fi) HOST_GCC_WORKS = $(shell if host-gcc --version > /dev/null; then echo yes; else echo no; fi) TARGET_BUILD = no ifeq ($(TRY_TARGET_BUILD),yes) ifeq ($(IN_SBOX),yes) ifeq ($(HOST_GCC_WORKS),yes) TARGET_BUILD = yes endif endif # Except don't use host-gcc if building for i386 ifeq ($(DEB_HOST_ARCH),i386) TARGET_BUILD = no endif endif TARGET_PLATFORM = linux-g++-maemo HOST_PLATFORM = unsupported/linux-host-g++ PLATFORM_FLAG = -platform $(TARGET_PLATFORM) FORCE_PKG_CONFIG_FLAG = HOST_EXLUDES = ifeq ($(TARGET_BUILD),yes) PLATFORM_FLAG = -platform $(HOST_PLATFORM) \ -xplatform $(TARGET_PLATFORM) FORCE_PKG_CONFIG_FLAG = -force-pkg-config HOST_EXCLUDES := usr/bin/host- usr/bin/qmake endif DEB_STRIP_EXCLUDE := $(HOST_EXCLUDES) # Determine target architecture ifeq ($(DEB_HOST_ARCH_OS),linux) ifeq ($(CONFIG_ARCH_OPT),armv6) GL_BACKEND=es2 EXTRA_CONFIGURE_OPTS += -graphicssystem runtime \ -runtimegraphicssystem meego CONFIG_BUILD_OPT = -release else GL_BACKEND=desktop CONFIG_BUILD_OPT = -debug endif else TARGET_PLATFORM = glibc-g++ endif #If noopt is selected, force -debug and some compilation flags ifeq ($(BUILD_NOOPT),yes) CONFIG_BUILD_OPT = -debug CFLAGS = -g CXXFLAGS = -g export CFLAGS export CXXFLAGS endif MAKE_DOCS := -make docs DOCS_EXCLUDE := ifeq ($(BUILD_DOCS),no) MAKE_DOCS := -nomake docs endif common-build-arch:: debian/stamp-makefile-build-tools debian/stamp-makefile-build-tools: debian/stamp-makefile-build $(DEB_MAKE_INVOKE) sub-tools touch $@ common-configure-arch:: config.status config.status: # Create mkspecs/glibc-g++ from mkspecs/linux-g++, needed by GNU/kFreeBSD # we cannot use directly linux-g++ due to src/corelib/io/io.pri rm -rf mkspecs/glibc-g++ cp -a mkspecs/linux-g++ mkspecs/glibc-g++ ./configure -opensource \ -confirm-license \ $(CONFIG_BUILD_OPT) \ -prefix "/usr" \ -bindir "/usr/bin" \ -libdir "/usr/lib" \ -docdir "/usr/share/qt4/doc" \ -headerdir "/usr/include/qt4" \ -datadir "/usr/share/qt4" \ -plugindir "/usr/lib/qt4/plugins" \ -importdir "/usr/lib/qt4/imports" \ -translationdir "/usr/share/qt4/translations" \ -sysconfdir "/etc/xdg" \ $(PLATFORM_FLAG) \ $(FORCE_PKG_CONFIG_FLAG) \ -arch $(CONFIG_ARCH_OPT) \ -fast \ -no-optimized-qmake \ -reduce-relocations \ -no-separate-debug-info \ -no-rpath \ -system-zlib \ -system-libtiff \ -system-libpng \ -system-libjpeg \ -no-nas-sound \ -qt-gif \ -no-qt3support \ -no-libmng \ -opengl $(GL_BACKEND) \ -accessibility \ -make tools \ $(MAKE_DOCS) \ -nomake examples \ -nomake demos \ -little-endian \ -no-cups \ -no-gtkstyle \ -exceptions \ -no-xinerama \ -no-xcursor \ -dbus-linked \ -glib \ -no-pch \ -gstreamer \ -svg \ -no-webkit \ -no-sql-ibase \ -xmlpatterns \ -system-sqlite \ -plugin-sql-sqlite \ -openssl \ -phonon \ -xinput2 \ -icu \ $(EXTRA_CONFIGURE_OPTS) BINARY_NAMES := qmake moc lrelease rcc uic HOST_BINARIES := $(addprefix $(CURDIR)/bin/, $(addprefix host-, $(BINARY_NAMES))) # host-prefixed binaries are to be copied anyway regardless of the platform common-build-arch:: $(HOST_BINARIES) debian/stamp-makefile-build-target-binaries $(HOST_BINARIES): cp "$(subst host-,,$@)" "$@" if [ -n "$(HOST_EXCLUDES)" ]; then host-strip --strip-all "$@"; fi debian/stamp-makefile-build-target-binaries: $(HOST_BINARIES) # Build target-platform tools when cross-compiling # First make sure qdoc3 is built if [ "x$(BUILD_DOCS)" = "xyes" ]; then $(DEB_MAKE_INVOKE) -C tools/qdoc3; fi # Keep qmake as is while building the rest, build into native-qmake (cd qmake && $(DEB_MAKE_INVOKE) clean && $(QMAKE_INVOKE) -spec "$(CURDIR)/mkspecs/$(TARGET_PLATFORM)" && $(DEB_MAKE_INVOKE) "TARGET=$(QTDIR)/bin/native-qmake") # bootstrap needs to be first for dir in src/tools/bootstrap src/tools/moc tools/linguist/lrelease src/tools/rcc src/tools/uic; do \ (cd "$$dir" && $(DEB_MAKE_INVOKE) clean && $(QMAKE_INVOKE) -spec "$(CURDIR)/mkspecs/$(TARGET_PLATFORM)" && $(DEB_MAKE_INVOKE)) \ done #Use the host binaries for the rest of the Qt build for binary in moc rcc uic lrelease; do \ mv "$(CURDIR)/bin/$$binary" "$(CURDIR)/bin/native-$$binary" ; \ cp "$(CURDIR)/bin/host-$$binary" "$(CURDIR)/bin/$$binary"; \ done touch $@ #Build the auto tests TEST_PACKAGES := $(filter %-tests, $(DEB_PACKAGES)) common-build-arch:: $(addprefix debian/stamp-makefile-build-autotest-,$(TEST_PACKAGES)) BUILD_TEST_PACKAGE_NAME = $(subst debian/stamp-makefile-build-autotest-,,$@) BUILD_TEST_DIR = build_tests/$(BUILD_TEST_PACKAGE_NAME) $(addprefix debian/stamp-makefile-build-autotest-,$(TEST_PACKAGES)) : rm -f tests/auto/$(BUILD_TEST_PACKAGE_NAME).pro cp debian/tests/$(BUILD_TEST_PACKAGE_NAME).pro tests/auto mkdir -p $(BUILD_TEST_DIR) cd $(BUILD_TEST_DIR) && $(QMAKE_INVOKE) -recursive $(CURDIR)/tests/auto/$(BUILD_TEST_PACKAGE_NAME).pro CONFIG+=maemo_tests $(DEB_MAKE_INVOKE) -C $(BUILD_TEST_DIR) touch $@ clean:: # Extra stuff missed by confclean/distclean # Misc. files rm -f \ config.status \ config.tests/.qmake.cache \ .qmake.cache \ examples/dbus/*/Makefile.* \ mkspecs/qconfig.pri \ src/corelib/global/qconfig.* \ src/tools/uic/qclass_lib_map.h \ lib/*.so.* \ lib/*.la \ tests/auto/libqt4-gui-tests.pri \ tests/auto/maemo-auto.pro \ tests/auto/qt4-acceptance-tests.pri \ tests/auto/qt4-maemo-auto-tests.pri \ ; # Misc. directories rm -rf \ examples/tools/plugandpaint/plugins/ \ examples/tools/styleplugin/styles/ \ mkspecs/glibc-g++/ \ plugins/ \ include/ \ doc-build/ \ doc/html/ \ doc/qch/ \ ; # hppa test directory rm -rf debian/hppa-tmp # Leftover dirs find -depth -type d \( -false \ -o -name debug-shared \ -o -name debug-static \ -o -name \*.gch \ -o -name .moc\* \ -o -name .obj\* \ -o -name .pch \ -o -name pkgconfig \ -o -name .rcc \ -o -name release-shared \ -o -name release-static \ -o -name .uic \ \) -print0 | xargs -0 rm -rf # Leftover files and all symlinks except those in .git find \( -false \ -o \( -name \*.a -a ! -path \*/tests/auto/qdir/types/\*.a \) \ -o -name Makefile.Debug \ -o -name Makefile.Release \ -o -name \*.o \ -o -name \*.prl \ -o \( -name \*.so -a ! -path \*/tests/auto/qlibrary/library_path/invalid.so \) \ -o -name \*.so.debug \ -o -type l \ \! -path ./.git/\* \ \) -print0 | xargs -0 rm -rf # Delete all Makefiles, excluding some from src/3rdparty find $(CURDIR) -name Makefile \ ! -path $(CURDIR)/src/3rdparty/Makefile \ ! -path $(CURDIR)/src/3rdparty/freetype/\* \ ! -path $(CURDIR)/src/3rdparty/zlib/\* \ ! -path $(CURDIR)/src/3rdparty/ptmalloc/Makefile \ ! -path $(CURDIR)/util/gencmap/Makefile \ -print0 | xargs -0 rm -rf # Any remaining executables find $(CURDIR) -type f -perm +111 -exec file -i '{}' \; \ | grep -e application/x-executable \ | cut -d ':' -f 1 | xargs rm -f # Generated on build rm -f debian/shlibs.local rm -f debian/stamp-makefile-build-tools rm -f debian/stamp-makefile-build-docs rm -f debian/stamp-makefile-build-target-binaries rm -f $(addprefix debian/stamp-makefile-build-autotest-,$(TEST_PACKAGES)) rm -f $(addprefix debian/,$(addsuffix .install, $(TEST_PACKAGES))) rm -f $(addprefix tests/auto/,$(addsuffix .pro, $(TEST_PACKAGES))) rm -rf build_tests/ common-install-arch:: mkdir -p $(DEB_DESTDIR)/usr/share/qt4/translations/ cp $(CURDIR)/translations/*.ts $(DEB_DESTDIR)/usr/share/qt4/translations/. find $(DEB_DESTDIR)/usr/share/qt4/translations/ -type f -name "*.ts" | xargs $(CURDIR)/bin/lrelease rm -rf $(DEB_DESTDIR)/usr/share/qt4/translations/*.ts # Fix wrong path in pkgconfig files find $(DEB_DESTDIR)/usr/lib/pkgconfig -type f -name '*.pc' \ -exec perl -pi -e "s, -L$(CURDIR)/?\S+,,g" {} \; # Fix wrong path in prl files find $(DEB_DESTDIR)/usr/lib -type f -name '*.prl' \ -exec perl -pi -e "s, -L$(CURDIR)/\S+,,g" {} \; find $(DEB_DESTDIR)/usr/lib -type f -name '*.prl' \ -exec sed -i -e "/^QMAKE_PRL_BUILD_DIR/d;s/\(QMAKE_PRL_LIBS =\).*/\1/" {} \; install/qt4-declarative-qmlviewer:: install -p -D "debian/QMLViewer.desktop" "$(DEB_DESTDIR)/usr/share/applications/QMLViewer.desktop" install -p -D "debian/QMLViewer.png" "$(DEB_DESTDIR)/usr/share/icons/hicolor/64x64/apps/QMLViewer.png" $(patsubst %,install/%,$(TEST_PACKAGES)) :: install/%: rm -f debian/$(cdbs_curpkg).install $(DEB_MAKE_INVOKE) -C build_tests/$(cdbs_curpkg) $(DEB_MAKE_INSTALL_TARGET) $(DEB_MAKE_INVOKE) -C build_tests/$(cdbs_curpkg) QTM_TEST_INSTALL_FILE=$(CURDIR)/debian/$(cdbs_curpkg).install installtests if [ -z "$(findstring $(cdbs_curpkg),$(QT_AUTOTESTS_GUI_STYLE))" ]; then \ $(QT_MAEMO_TESTDIR)/create_tests_xml -t $(QT_MAEMO_TESTDIR) \ -i $(DEB_DESTDIR) -p $(CURDIR)/debian/$(cdbs_curpkg).install ;\ else \ $(QT_MAEMO_TESTDIR)/create_tests_xml -t $(QT_MAEMO_TESTDIR) -c "-style plastique" \ -i $(DEB_DESTDIR) -p $(CURDIR)/debian/$(cdbs_curpkg).install ;\ fi common-install-arch:: find "$(CURDIR)/bin" -name "host-*" -exec install -p -D {} "$(DEB_DESTDIR)/usr/bin" \; find "$(CURDIR)/bin" -name "native-*" -exec install -p -D {} "$(DEB_DESTDIR)/usr/bin" \; install/libqt4-doc:: mkdir -p "$(DEB_DESTDIR)/usr/share/qt4/doc/html/" if [ "x$(BUILD_DOCS)" = "xno" ]; then touch "$(DEB_DESTDIR)/usr/share/qt4/doc/html/BUILT_WITH_NODOCS"; fi common-build-indep:: debian/stamp-makefile-build-docs debian/stamp-makefile-build-docs: if [ "x$(BUILD_DOCS)" = "xyes" ]; then $(DEB_MAKE_INVOKE) docs; fi touch $@ binary-predeb/libqt4-dev:: sed -i -e 's/#PLATFORM_ARG#/$(TARGET_PLATFORM)/g' debian/$(cdbs_curpkg)/DEBIAN/postinst # Automatically install lintian overrides, stolen from debian-qt-kde.mk $(patsubst %,binary-install/%,$(DEB_PACKAGES)) :: binary-install/%: if test -e debian/$(cdbs_curpkg).lintian; then \ install -p -D -m644 debian/$(cdbs_curpkg).lintian \ debian/$(cdbs_curpkg)/usr/share/lintian/overrides/$(cdbs_curpkg); \ fi # Generate shlibs local files $(patsubst %,binary-fixup/%,$(DEB_ALL_PACKAGES)) :: binary-fixup/%: binary-strip/% if test -e debian/$(cdbs_curpkg)/DEBIAN/shlibs ; then \ sed 's/>=[^)]*/= $(CURRENTVERSION)/' debian/$(cdbs_curpkg)/DEBIAN/shlibs >> debian/shlibs.local ;\ fi