#
#  W A R N I N G
#  -------------
#
# This file is not part of the Qt API.  It exists purely as an
# implementation detail.  It may change from version to version
# without notice, or even be removed.
#
# We mean it.
#

equals(TEMPLATE, subdirs): return()

# It's likely that these extra flags will be wrong for host builds,
# and the bootstrapped tools usually don't need them anyway.
host_build:cross_compile: return()

# The headersclean check needs defines and includes even for
# header-only modules.
DEFINES += $$EXTRA_DEFINES
INCLUDEPATH += $$EXTRA_INCLUDEPATH

# The other flags are relevant only for actual libraries.
equals(TEMPLATE, aux): return()

QMAKE_LIBDIR += $$EXTRA_LIBDIR
QMAKE_FRAMEWORKPATH += $$EXTRA_FRAMEWORKPATH

# Static libs need no rpaths
static: return()

for (rp, EXTRA_RPATHS) {
    absrp = $$absolute_path($$rp, $$[QT_INSTALL_LIBS])
    !isEqual(absrp, $$rp) {
        isEmpty(QMAKE_REL_RPATH_BASE)|!contains(INSTALLS, target): \
            rp = $$absrp
        else: \
            rp = $$relative_path($$absrp, $$qtRelativeRPathBase())
    }
    QMAKE_RPATHDIR += $$rp
}
