diff -r 000000000000 -r 16d8024aca5e configure.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/configure.py Mon Apr 19 14:02:13 2010 +0300
@@ -0,0 +1,731 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+#############################################################################
+##
+## Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+## Contact: Nokia Corporation (developer.feedback@nokia.com)
+##
+## This file is part of the UI Extensions for Mobile.
+##
+## GNU Lesser General Public License Usage
+## This file may be used under the terms of the GNU Lesser General Public
+## License version 2.1 as published by the Free Software Foundation and
+## appearing in the file LICENSE.LGPL included in the packaging of this file.
+## Please review the following information to ensure the GNU Lesser General
+## Public License version 2.1 requirements will be met:
+## http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+##
+## In addition, as a special exception, Nokia gives you certain additional
+## rights. These rights are described in the Nokia Qt LGPL Exception
+## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at developer.feedback@nokia.com.
+##
+#############################################################################
+
+import re
+import os
+import sys
+import shutil
+import tempfile
+import optparse
+if sys.version_info[0] == 2 and sys.version_info[1] < 4:
+ # for scratchbox compatibility
+ import popen2
+else:
+ import subprocess
+
+# ============================================================================
+# Globals
+# ============================================================================
+HB_MAKE_PARTS = [ "tutorials" ]
+HB_NOMAKE_PARTS = [ "tests", "performance", "localization" ]
+
+# ============================================================================
+# Utils
+# ============================================================================
+def add_remove_part(part, add):
+ global HB_MAKE_PARTS, HB_NOMAKE_PARTS
+ if add:
+ while part in HB_NOMAKE_PARTS:
+ HB_NOMAKE_PARTS.remove(part)
+ if not part in HB_MAKE_PARTS:
+ HB_MAKE_PARTS.append(part)
+ else:
+ while part in HB_MAKE_PARTS:
+ HB_MAKE_PARTS.remove(part)
+ if not part in HB_NOMAKE_PARTS:
+ HB_NOMAKE_PARTS.append(part)
+
+def run_process(command, cwd=None):
+ code = 0
+ output = ""
+ try:
+ if cwd != None:
+ oldcwd = os.getcwd()
+ os.chdir(cwd)
+ if sys.version_info[0] == 2 and sys.version_info[1] < 4:
+ process = popen2.Popen4(command)
+ code = process.wait()
+ output = process.fromchild.read()
+ else:
+ process = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
+ (stdout, stderr) = process.communicate()
+ code = process.returncode
+ output = stdout + stderr
+ if cwd != None:
+ os.chdir(oldcwd)
+ except:
+ code = -1
+ return [code, output]
+
+# ============================================================================
+# OptionParser
+# ============================================================================
+class OptionParser(optparse.OptionParser):
+ def __init__(self, platform, make, prefix):
+ optparse.OptionParser.__init__(self, formatter=optparse.TitledHelpFormatter())
+ self.add_option("-v", "--verbose", action="store_true", dest="verbose",
+ help="Print verbose information during the configure.")
+ self.set_defaults(verbose=False)
+
+ if platform != "symbian":
+ group = optparse.OptionGroup(self, "Installation options")
+ group.add_option("--prefix", dest="prefix", metavar="dir",
+ help="Install everything relative to
. The default value is '%s'. "
+ "NOTE: Use '--prefix .' to configure a local setup. A local "
+ "setup will install nothing else than the qmake "
+ "feature file." % prefix)
+ self.add_option_group(group)
+ self.set_defaults(prefix=None)
+
+ group = optparse.OptionGroup(self, "Configure options")
+ group.add_option("--platform", dest="platform", metavar="platform",
+ help="Specify the platform (symbian/win32/unix). "
+ "The one detected by qmake is used by default "
+ "if not specified.")
+ group.add_option("--make-bin", dest="makebin", metavar="path",
+ help="Specify the make tool (make, nmake, mingw32-make, gmake...). "
+ "The one detected in PATH is used by default if not specified.")
+ if platform == "win32" and make == "nmake":
+ group.add_option("--msvc", action="store_true", dest="msvc",
+ help="Generate a MSVC solution.")
+ group.add_option("--release", action="store_const", dest="config", const="release",
+ help="Build in release mode.")
+ group.add_option("--debug", action="store_const", dest="config", const="debug",
+ help="Build in debug mode.")
+ group.add_option("--debug_and_release", action="store_const", dest="config", const="debug_and_release",
+ help="Build in both debug and release modes.")
+ if platform != "symbian":
+ group.add_option("--silent", action="store_true", dest="silent",
+ help="Suppress verbose compiler output.")
+ group.add_option("--fast", action="store_true", dest="fast",
+ help="Run qmake in non-recursive mode. Running qmake "
+ "in recursive mode (default) is more reliable but "
+ "takes relatively long due to deep project hierarchy. "
+ "The build tree should be clean ie. no existing "
+ "makefiles in subdirs, because those won't be "
+ "regenerated if this option is enabled.")
+ group.add_option("--defines", dest="defines", metavar="defines",
+ help="Define compiler macros for selecting features "
+ "and debugging purposes eg. --defines HB_FOO_DEBUG,HB_BAR_ENABLED")
+ self.add_option_group(group)
+ self.set_defaults(platform=None)
+ self.set_defaults(makebin=None)
+ self.set_defaults(msvc=None)
+ self.set_defaults(config=None)
+ self.set_defaults(silent=False)
+ self.set_defaults(fast=False)
+ self.set_defaults(defines=None)
+
+ group = optparse.OptionGroup(self, "qmake options")
+ group.add_option("--qmake-bin", dest="qmakebin", metavar="path",
+ help="Specify the path to the qmake. The one "
+ "in PATH is used by default if not specified.")
+ group.add_option("--qmake-spec", dest="qmakespec", metavar="spec",
+ help="The operating system and compiler you are building on.")
+ group.add_option("--qmake-options", dest="qmakeopt", metavar="options",
+ help="Additional qmake options "
+ "eg. --qmake-options \"CONFIG+=foo DEFINES+=BAR\".")
+ self.add_option_group(group)
+ self.set_defaults(qmakebin=None)
+ self.set_defaults(qmakespec=None)
+ self.set_defaults(qmakeopt=None)
+
+ group = optparse.OptionGroup(self, "Feature options")
+ group.add_option("--make", action="append", dest="make", metavar="part",
+ help="Do build . Valid parts: tests localization performance")
+ group.add_option("--nomake", action="append", dest="nomake", metavar="part",
+ help="Do not build . Valid parts: tutorials tests fute unit localization performance")
+ group.add_option("--no-effects", action="store_false", dest="effects",
+ help="Do not build effects.")
+ group.add_option("--no-gestures", action="store_false", dest="gestures",
+ help="Do not build gestures.")
+ group.add_option("--no-text-measurement", action="store_false", dest="textMeasurement",
+ help="Do not build text measurement support (needed for localization).")
+ group.add_option("--no-inputs", action="store_false", dest="inputs",
+ help="DEPRECATED: Use --nomake hbinput.")
+ group.add_option("--no-feedback", action="store_false", dest="feedback",
+ help="DEPRECATED: Use --nomake hbfeedback.")
+ group.add_option("--no-tutorials", action="store_false", dest="tutorials",
+ help="DEPRECATED: Use --nomake tutorials.")
+ self.add_option_group(group)
+ self.set_defaults(make=None)
+ self.set_defaults(nomake=None)
+ self.set_defaults(effects=True)
+ self.set_defaults(gestures=True)
+ self.set_defaults(textMeasurement=True)
+ self.set_defaults(inputs=None)
+ self.set_defaults(feedback=None)
+ self.set_defaults(tutorials=None)
+
+ group = optparse.OptionGroup(self, "Qt options")
+ group.add_option("--qt-mobility", action="store_true", dest="qtmobility",
+ help="Assumes that Qt Mobility is available without performing a compilation test.")
+ group.add_option("--no-qt-mobility", action="store_false", dest="qtmobility",
+ help="Assumes that Qt Mobility is not available without performing a compilation test.")
+ group.add_option("--qt-animation", action="store_true", dest="qtanimation",
+ help="DEPRECATED: Qt 4.6 includes the animation framework.")
+ group.add_option("--no-qt-animation", action="store_false", dest="qtanimation",
+ help="DEPRECATED: Qt 4.6 includes the animation framework.")
+ group.add_option("--qt-gestures", action="store_true", dest="qtgestures",
+ help="DEPRECATED: Qt 4.6 includes the gestures framework.")
+ group.add_option("--no-qt-gestures", action="store_false", dest="qtgestures",
+ help="DEPRECATED: Qt 4.6 includes the gestures framework.")
+ if platform == "symbian" or platform == None:
+ group.add_option("--qt-symbian-eventfilter", action="store_false", dest="s60eventfilter",
+ help="DEPRECATED: Qt 4.6 includes QApplication::symbianEventFilter().")
+ group.add_option("--qt-s60-eventfilter", action="store_true", dest="s60eventfilter",
+ help="DEPRECATED: Qt 4.6 includes QApplication::symbianEventFilter().")
+ self.add_option_group(group)
+ self.set_defaults(qtmobility=None)
+ self.set_defaults(qtanimation=None)
+ self.set_defaults(qtgestures=None)
+ self.set_defaults(qts60eventfilter=None)
+
+ group = optparse.OptionGroup(self, "Developer options")
+ group.add_option("--developer", action="store_true", dest="developer",
+ help="Enables the developer mode ie. builds tests and exports necessary symbols. "
+ "NOTE: The developer mode implies a local setup by default.")
+ if platform != "symbian":
+ group.add_option("--coverage", action="store_true", dest="coverage",
+ help="Builds with test coverage measurement support. "
+ "This implies the developer mode.")
+ group.add_option("--tests", action="store_true", dest="tests",
+ help="DEPRECATED: Use --make tests.")
+ group.add_option("--performance", action="store_true", dest="performance",
+ help="DEPRECATED: Use --make performance.")
+ group.add_option("--localization", action="store_true", dest="localization",
+ help="DEPRECATED: Use --make localization.")
+ self.add_option_group(group)
+ self.set_defaults(developer=False)
+ self.set_defaults(coverage=False)
+ self.set_defaults(tests=None)
+ self.set_defaults(performance=None)
+ self.set_defaults(localization=None)
+
+# ============================================================================
+# Platform
+# ============================================================================
+class Platform:
+ def __init__(self, qmake):
+ self._platform = None
+ self._make = None
+ self._error = None
+ self._qmake = qmake
+ self._spec = None
+
+ def name(self):
+ if not self._platform:
+ self._platform = self._detect_platform()
+ return self._platform
+
+ def make(self):
+ if not self._make:
+ self._make = self._detect_make()
+ return self._make
+
+ def qmake(self):
+ return self._qmake
+
+ def error(self):
+ return self._error
+
+ def spec(self):
+ return self._spec
+
+ def _detect_platform(self):
+ lines = list()
+ lines.append("symbian:message(symbian)\n")
+ lines.append("else:macx:message(macx)\n")
+ lines.append("else:unix:message(unix)\n")
+ lines.append("else:win32:message(win32)\n")
+
+ try:
+ if not os.path.exists("tmp"):
+ os.makedirs("tmp")
+ fd, filepath = tempfile.mkstemp(dir="tmp", text=True, suffix=".pro")
+ file = os.fdopen(fd, "w+")
+ file.writelines(lines)
+ file.close()
+ except Exception, e:
+ print(e)
+ self._error = "Unable to write a temporary file. Make sure to configure in a writable directory."
+ return None
+
+ # do not use .qmake.cache when detecting the platform
+ args = []
+ if os.name == "nt":
+ args += "cmd.exe", "/C"
+ args += [self._qmake, "-nocache", os.path.split(filepath)[1]]
+ if self._spec:
+ args += ["-spec", self._spec]
+ (code, output) = run_process(args, "tmp")
+ shutil.rmtree("tmp", ignore_errors=True)
+ if code != 0:
+ self._error = "Unable to execute %s" % self._qmake
+ if self._qmake == "qmake":
+ self._error += ". Add qmake to PATH or pass --qmake-bin ."
+ return None
+
+ try:
+ return re.match("Project MESSAGE: (\w+)", output).group(1)
+ except:
+ self._error = "Unable to parse qmake output (%s)" % output.strip()
+ if output.find("QMAKESPEC") != -1:
+ self._error += ". Set QMAKESPEC environment variable or pass --qmake-spec ."
+ return None
+
+ def _detect_make(self):
+ if self.name() == "win32" and Platform._test_make("nmake", "/?"):
+ return "nmake"
+ if Platform._test_make("make", "-v"):
+ return "make"
+ if Platform._test_make("gmake", "-v"):
+ return "gmake"
+ if self.name() == "win32" and Platform._test_make("mingw32-make", "-v"):
+ return "mingw32-make"
+ return "(n)make"
+
+ def _test_make(command, param):
+ try:
+ return run_process([command, param])[0] == 0
+ except:
+ return False
+
+ _test_make = staticmethod(_test_make)
+
+# ============================================================================
+# ConfigTest
+# ============================================================================
+class ConfigTest:
+ def __init__(self, platform):
+ self._make = platform.make()
+ self._qmake = platform.qmake()
+ self._platform = platform.name()
+ self._spec = platform.spec()
+
+ def setup(self, sourcedir, builddir):
+ self._sourcedir = sourcedir
+ self._builddir = builddir
+
+ def compile(self, test, patterns=None):
+ code = -1
+ prevdir = os.getcwd()
+ try:
+ sourcedir = os.path.join(self._sourcedir, test)
+ filepath = os.path.join(sourcedir, os.path.basename(sourcedir) + ".pro")
+ builddir = os.path.join(self._builddir, test)
+
+ if not os.path.exists(builddir):
+ os.makedirs(builddir)
+ os.chdir(builddir)
+
+ args = [self._qmake, filepath]
+ if self._spec:
+ args += ["-spec", self._spec]
+ run_process(args)
+ (code, output) = run_process(self._make)
+ if code == 0 and patterns:
+ for pattern in patterns:
+ if re.search(pattern, output) != None:
+ code = -1
+ break
+ run_process([self._make, "clean"])
+ except:
+ code = -1
+ os.chdir(prevdir)
+ return code == 0
+
+# ============================================================================
+# ConfigFile
+# ============================================================================
+class ConfigFile:
+ def __init__(self):
+ self._lines = list()
+
+ def set_value(self, key, value):
+ self._lines.append("%s = %s\n" % (key, value))
+
+ def add_value(self, key, value):
+ self._lines.append("%s += %s\n" % (key, value))
+
+ def remove_value(self, key, value):
+ self._lines.append("%s -= %s\n" % (key, value))
+
+ def format_dir(dir):
+ return "$$quote(%s)" % dir.replace("\\", "/")
+ format_dir = staticmethod(format_dir)
+
+ def quote_dir(dir):
+ return "\\\"\\\\\\\"%s\\\\\\\"\\\"" % ConfigFile.format_dir(dir)
+ quote_dir = staticmethod(quote_dir)
+
+ def write(self, filename):
+ try:
+ file = open(filename, "w+")
+ file.writelines(self._lines)
+ file.close()
+ except IOError, e:
+ print(e)
+ return False
+ return True
+
+# ============================================================================
+# main()
+# ============================================================================
+def main():
+ global HB_MAKE_PARTS, HB_NOMAKE_PARTS
+
+ qmake = "qmake"
+ cmdline = " ".join(sys.argv[1:])
+ match = re.search("--qmake-bin[=\s](\S+)", cmdline)
+ if match:
+ qmake = match.group(1)
+
+ # detect platform
+ platform = Platform(qmake)
+ match = re.search("--platform[=\s](\S+)", cmdline)
+ if match:
+ platform._platform = match.group(1)
+
+ match = re.search("--qmake-spec[=\s](\S+)", cmdline)
+ if match:
+ platform._spec = match.group(1)
+
+ help = False
+ match = re.search("--help\s*", cmdline)
+ if match or re.search("-h\s*", cmdline):
+ help = True
+
+ if not help and not platform.name():
+ print("ERROR: %s" % platform.error())
+ return
+
+ # detect make
+ match = re.search("--make-bin[=\s](\S+)", cmdline)
+ if match:
+ platform._make = match.group(1)
+ if not platform.make():
+ print("ERROR: %s" % platform.error())
+ return
+
+ currentdir = os.path.abspath(os.getcwd())
+ sourcedir = os.path.abspath(sys.path[0])
+
+ # default prefixes
+ symbianprefix = None
+ if platform.name() == "symbian":
+ if os.path.isdir("/s60"):
+ symbianprefix = "$${EPOCROOT}epoc32/include/hb"
+ else:
+ symbianprefix = "$${EPOCROOT}epoc32/include/mw/hb"
+ prefixes = { "symbian" : symbianprefix,
+ "unix" : "/usr/local/hb",
+ "win32" : "C:/hb" }
+
+ # parse command line options
+ parser = OptionParser(platform.name(), platform.make(), prefixes.get(platform.name(), currentdir))
+ (options, args) = parser.parse_args()
+
+ # coverage implies developer mode
+ if options.coverage:
+ options.developer = True
+
+ print("Configuring Hb...")
+ print("INFO: Platform: %s" % platform.name())
+ print("INFO: Make: %s" % platform.make())
+
+ # warn about deprecated options
+ if options.qtanimation != None:
+ print("WARNING: --qt-animation and --qt-no-animation are DEPRECATED. Qt 4.6 includes the animation framework.")
+ if options.qtgestures != None:
+ print("WARNING: --qt-gestures and --qt-no-gestures are DEPRECATED. Qt 4.6 includes the gestures framework.")
+ if options.qts60eventfilter != None:
+ print("WARNING: --qt-symbian-eventfilter and --qt-s60-eventfilter are DEPRECATED. Qt 4.6 includes QApplication::symbianEventFilter().")
+ if options.inputs != None:
+ print("WARNING: --no-inputs is DEPRECATED. Use --nomake hbinput.")
+ add_remove_part("hbinput", options.inputs)
+ if options.feedback != None:
+ print("WARNING: --no-feedback is DEPRECATED. Use --nomake hbfeedback.")
+ add_remove_part("hbfeedback", options.feedback)
+ if options.tutorials != None:
+ print("WARNING: --no-tutorials is DEPRECATED. Use --nomake tutorials.")
+ add_remove_part("tutorials", options.tutorials)
+ if options.tests != None:
+ print("WARNING: --tests is DEPRECATED. Use --make tests.")
+ add_remove_part("tests", options.tests)
+ if options.performance != None:
+ print("WARNING: --performance is DEPRECATED. Use --make performance.")
+ add_remove_part("performance", options.performance)
+ if options.localization != None:
+ print("WARNING: --localization is DEPRECATED. Use --make localization.")
+ add_remove_part("localization", options.localization)
+
+ # sort out directories
+ if not options.prefix:
+ # developer mode implies local setup
+ if options.developer:
+ options.prefix = currentdir
+ else:
+ options.prefix = prefixes.get(platform.name(), currentdir)
+ basedir = options.prefix
+ if platform.name() != "symbian":
+ basedir = os.path.abspath(basedir)
+
+ local = os.path.isdir(basedir) and (basedir == currentdir)
+ if not local:
+ resourcedir = basedir + "/resources"
+ else:
+ resourcedir = sourcedir + "/src/hbcore/resources"
+
+ # generate local build wrapper headers
+ synchb = "bin/synchb.py"
+ if options.verbose:
+ synchb = "%s -v" % synchb
+ print("INFO: Running %s" % synchb)
+ os.system("python %s/%s -i %s -o %s" % (sourcedir, synchb, sourcedir, currentdir))
+
+ # write config
+ config = ConfigFile()
+ config.set_value("HB_INSTALL_DIR", ConfigFile.format_dir(basedir))
+ config.set_value("HB_RESOURCES_DIR", ConfigFile.format_dir(resourcedir))
+
+ # generate a qrc for resources
+ args = [os.path.join(sourcedir, "bin/resourcifier.py")]
+ args += ["-i", "%s" % os.path.join(sys.path[0], "src/hbcore/resources")]
+ # TODO: make it currentdir
+ args += ["-o", "%s" % os.path.join(sourcedir, "src/hbcore/resources/resources.qrc")]
+ args += ["--exclude", "\"*distribution.policy.s60\""]
+ args += ["--exclude", "\"*readme.txt\""]
+ args += ["--exclude", "\"*.pr?\""]
+ args += ["--exclude", "\"*.qrc\""]
+ args += ["--exclude", "\"*~\""]
+ args += ["--exclude", "variant/*"]
+ if options.verbose:
+ print("INFO: Running %s" % " ".join(args))
+ os.system("python %s" % " ".join(args))
+
+ # compilation tests to detect available features
+ test = ConfigTest(platform)
+ test.setup(sourcedir, currentdir)
+ print("INFO: Detecting available features...")
+ patterns = { "symbian" : ["\\*\\*\\*", "Errors caused tool to abort"],
+ "unix" : ["\\*\\*\\*"],
+ "win32" : ["\\*\\*\\*"] }
+ if options.qtmobility == None:
+ options.qtmobility = test.compile("config.tests/all/mobility", patterns.get(platform.name(), None))
+ print("INFO:\tQt Mobility:\t\t\t%s" % options.qtmobility)
+ if options.qtmobility:
+ config.add_value("DEFINES", "HB_HAVE_QT_MOBILITY")
+ if platform.name() == "symbian":
+ advanced_tactile_result = test.compile("config.tests/symbian/advancedtactile", patterns.get(platform.name(), None))
+ if advanced_tactile_result:
+ config.add_value("CONFIG", "advanced_tactile_support")
+ print("INFO:\tAdvanced Tactile:\t\t%s" % advanced_tactile_result)
+ #sgimagelite_result = test.compile("config.tests/symbian/sgimagelite", patterns.get(platform.name(), None))
+ #if sgimagelite_result:
+ # config.add_value("CONFIG", "sgimage")
+ #print("INFO:\tSgImage-Lite:\t\t\t%s" % sgimagelite_result)
+ print("NOTE:\t(For SgImage-Lite support, pass --qmake-options \"CONFIG+=sgimage\")")
+
+ config.set_value("HB_BIN_DIR", ConfigFile.format_dir(basedir + "/bin"))
+ config.set_value("HB_LIB_DIR", ConfigFile.format_dir(basedir + "/lib"))
+ config.set_value("HB_DOC_DIR", ConfigFile.format_dir(basedir + "/doc"))
+ if not options.developer and platform.name() == "symbian":
+ config.set_value("HB_INCLUDE_DIR", ConfigFile.format_dir(basedir))
+ else:
+ config.set_value("HB_INCLUDE_DIR", ConfigFile.format_dir(basedir + "/include"))
+
+ if platform.name() == "symbian":
+ plugins_dir = "$${EPOCROOT}resource/qt/plugins/hb"
+ else:
+ plugins_dir = basedir + "/plugins"
+ config.set_value("HB_PLUGINS_DIR", ConfigFile.format_dir(plugins_dir))
+ if platform.name() == "symbian":
+ config.set_value("HB_PLUGINS_EXPORT_DIR", ConfigFile.format_dir("$${EPOCROOT}epoc32/winscw/c/resource/qt/plugins/hb"))
+
+ if options.gestures:
+ config.add_value("DEFINES", "HB_GESTURE_FW")
+ if options.effects:
+ config.add_value("DEFINES", "HB_EFFECTS")
+ if options.textMeasurement:
+ config.add_value("DEFINES", "HB_TEXT_MEASUREMENT_UTILITY")
+ if options.defines:
+ config.add_value("DEFINES", " ".join(options.defines.split(",")))
+
+ if options.verbose:
+ print("INFO: Writing hb_install.prf")
+ if not config.write("hb_install.prf"):
+ print("ERROR: Unable to write hb_install_prf.")
+ return
+
+ config.set_value("HB_BUILD_DIR", ConfigFile.format_dir(currentdir))
+ config.set_value("HB_SOURCE_DIR", ConfigFile.format_dir(sourcedir))
+
+ if platform.name() == "symbian":
+ if os.path.isdir("/s60"):
+ config.set_value("HB_EXPORT_DIR", "hb/%1/%2")
+ config.set_value("HB_PRIVATE_EXPORT_DIR", "hb/%1/private/%2")
+ else:
+ config.set_value("HB_EXPORT_DIR", "$${EPOCROOT}epoc32/include/mw/hb/%1/%2")
+ config.set_value("HB_PRIVATE_EXPORT_DIR", "$${EPOCROOT}epoc32/include/mw/hb/%1/private/%2")
+
+ if options.developer:
+ add_remove_part("tests", True)
+ add_remove_part("performance", True)
+ add_remove_part("localization", True)
+
+ if options.make:
+ for part in options.make:
+ add_remove_part(part, True)
+ if options.nomake:
+ for part in options.nomake:
+ add_remove_part(part, False)
+
+ for part in HB_MAKE_PARTS:
+ add_remove_part(part, True)
+
+ for nomake in HB_NOMAKE_PARTS:
+ config.add_value("HB_NOMAKE_PARTS", nomake)
+
+ if local:
+ config.add_value("CONFIG", "local")
+ if options.silent:
+ config.add_value("CONFIG", "silent")
+ if options.effects:
+ config.add_value("CONFIG", "effects")
+ if options.gestures:
+ config.add_value("CONFIG", "gestures")
+ if options.developer:
+ config.add_value("CONFIG", "developer")
+ if options.coverage:
+ config.add_value("CONFIG", "coverage")
+ if options.config:
+ config.add_value("CONFIG", options.config)
+
+ # disable debug & warning outputs for non-developer symbian-armv5-release builds
+ if not options.developer and platform.name() == "symbian":
+ config._lines.append("no_output = \\ \n")
+ config._lines.append("\"$${LITERAL_HASH}if defined(ARMV5) && defined(UREL)\" \\ \n")
+ config._lines.append("\"MACRO\tQT_NO_DEBUG_OUTPUT\" \\ \n")
+ config._lines.append("\"MACRO\tQT_NO_WARNING_OUTPUT\" \\ \n")
+ config._lines.append("\"$${LITERAL_HASH}endif\" \n")
+ config._lines.append("MMP_RULES += no_output \n")
+
+ # TODO: is there any better way to expose functions to the whole source tree?
+ config._lines.append("include(%s)\n" % (os.path.splitdrive(sourcedir)[1] + "/src/functions.prf"))
+
+ if options.verbose:
+ print("INFO: Writing .qmake.cache")
+ if not config.write(".qmake.cache"):
+ print("ERROR: Unable to write .qmake.cache.")
+ return
+
+ # run qmake
+ if options.qmakebin:
+ qmake = options.qmakebin
+ profile = os.path.join(sourcedir, "hb.pro")
+ cachefile = os.path.join(currentdir, ".qmake.cache")
+ if options.msvc:
+ qmake = "%s -tp vc" % qmake
+ if not options.fast:
+ qmake = "%s -r" % qmake
+ if options.qmakespec:
+ qmake = "%s -spec %s" % (qmake, options.qmakespec)
+ if options.qmakeopt:
+ qmake = "%s \\\"%s\\\"" % (qmake, options.qmakeopt)
+ if options.verbose:
+ print("INFO: Running %s" % qmake)
+ try:
+ ret = os.system("%s -cache %s %s" % (qmake, cachefile, profile))
+ except KeyboardInterrupt:
+ ret = -1
+ if ret != 0:
+ print("")
+ print("ERROR: Aborted!")
+ print("")
+ return
+
+ if "tests" not in HB_NOMAKE_PARTS:
+ # run qmake for tests
+ profile = "%s/tsrc/tsrc.pro" % sourcedir
+ if os.path.exists(profile):
+ tsrcdir = os.path.join(currentdir, "tsrc")
+ if not os.path.exists(tsrcdir):
+ os.makedirs(tsrcdir)
+ os.chdir(tsrcdir)
+ os.system("%s %s" % (qmake, profile))
+ os.chdir(currentdir)
+
+ # create output dirs
+ outputdir = os.path.join(currentdir, "autotest")
+ if not os.path.exists(outputdir):
+ os.makedirs(outputdir)
+ outputdir = os.path.join(currentdir, "coverage")
+ if not os.path.exists(outputdir):
+ os.makedirs(outputdir)
+
+ # print summary
+ print("")
+ if platform.make() == "nmake" and options.msvc:
+ conf = "MSVC"
+ act = "open 'hb.sln'"
+ elif options.coverage:
+ conf = "test coverage measurement"
+ act = "run '%s coverage'" % platform.make()
+ elif options.developer:
+ conf = "development"
+ act = "run '%s'" % platform.make()
+ else:
+ conf = "building"
+ act = "run '%s'" % platform.make()
+ print("Hb is now configured for %s. Just %s." % (conf, act))
+
+ if not options.coverage:
+ if platform.name() == "symbian" or local:
+ print("You must run '%s install' to copy the .prf file in place." % platform.make())
+ else:
+ print("Once everything is built, you must run '%s install'." % platform.make())
+ if platform != "symbian":
+ if local:
+ print("Hb will be used from '%s'." % sourcedir)
+ else:
+ print("Hb will be installed to '%s'." % basedir)
+ if platform.name() == "win32":
+ path = os.path.join(basedir, "bin")
+ if local:
+ path = os.path.join(currentdir, "bin")
+ print("NOTE: Make sure that '%s' is in PATH." % path)
+ if options.coverage:
+ print("Test code coverage measurement will FAIL if wrong Hb DLLs are found in PATH before '%s'." % path)
+
+ print("")
+ print("To reconfigure, run '%s clean' and '%s'." % (platform.make(), sys.argv[0]))
+ print("")
+
+if __name__ == "__main__":
+ main()