openbsd-ports/x11/kde4/kde4.port.mk
espie 8cd9e9baae dpb junk logic is fine.
kde4 build separation does not work as good as vadim said it should
THIS is the reason for the sporadic build failures in kde3 recently.
2015-05-01 15:39:28 +00:00

349 lines
11 KiB
Makefile

# $OpenBSD: kde4.port.mk,v 1.32 2015/05/01 15:39:28 espie Exp $
# The version of KDE SC in x11/kde4
_MODKDE4_STABLE = 4.14.3
# List of currently supported KDE SC versions, except "stable"
_MODKDE4_OTHERS =
# Handle kde4* FLAVORs: detect what version is requested, and
# set MODKDE4_VERSION, MODKDE4_DEP_VERSION and MODKDE4_DEP_DIR
# accordingly. There is also a shortcut for the latter.
#
# MODKDE4_FLAVOR is read-only for ports, except KDE SC itself.
.for _v in ${_MODKDE4_OTHERS}
MODKDE4_FLAVORS += kde${_v:S/.//g}
.endfor
FLAVORS += ${MODKDE4_FLAVORS}
MODKDE4_FLAVOR ?= ${FLAVOR:Mkde4*}
.if ${MODKDE4_FLAVOR}
. for _f in ${MODKDE4_FLAVOR}
. for _f2 in ${MODKDE4_FLAVOR}
. if "${_f2}" != "${_f}"
ERRORS += "Fatal: cannot use more than one kde4* FLAVOR\n"
. endif
. endfor
. for _v in ${_MODKDE4_OTHERS}
. if "kde${_v:S/.//g}" == "${_f}"
MODKDE4_VERSION ?= ${_v}
MODKDE4_DEP_VERSION ?= ${_v:R}
. endif
. endfor
. endfor
MODKDE4_DEP_DIR = x11/${MODKDE4_FLAVOR}
.else
MODKDE4_DEP_DIR = x11/kde4
.endif
MODKDE4_SPEC = >=${MODKDE4_VERSION},<5
CATEGORIES += ${MODKDE4_DEP_DIR}
.if ${MODKDE4_DEP_DIR} != "x11/kde4"
MODKDE4_MAIN_PKGPATH = ${FULLPKGPATH:S@x11/${MODKDE4_FLAVOR}/@x11/kde4/@}
SUBST_VARS += MODKDE4_MAIN_PKGPATH
PKG_ARGS += -f ${PORTSDIR}/x11/kde4/kde4.pkgpath
.endif
# Can be set by port to force dependency on particular KDE SC version.
MODKDE4_VERSION ?= ${_MODKDE4_STABLE}
MODKDE4_DEP_VERSION ?= ${MODKDE4_VERSION:R}
# General options set by module
SHARED_ONLY ?= Yes
ONLY_FOR_ARCHS ?= ${GCC4_ARCHS}
GH_COMMIT ?=
.if empty(GH_COMMIT)
EXTRACT_SUFX ?= .tar.xz
.endif
.if "${NO_BUILD:L}" != "yes"
# CONFIGURE_STYLE needs separate handling because it is set to empty
# string in bsd.port.mk initially.
. if "${CONFIGURE_STYLE}" == ""
CONFIGURE_STYLE = cmake
. endif
. if ${CONFIGURE_STYLE:Mcmake}
MODULES += devel/cmake
SEPARATE_BUILD ?= flavored
. endif
.endif
# MODKDE4_RESOURCES: Yes/No
# If enabled, disable default Qt and KDE LIB_DEPENDS and RUN_DEPENDS,
# and set PKG_ARCH=*. Also, FLAVORS will not be touched. "libs"
# dependencies in MODKDE4_USE (see below) will become a BUILD_DEPENDS.
MODKDE4_RESOURCES ?= No
# MODKDE4_USE: [libs | runtime | workspace] [PIM] [games]
# - Set to empty for stuff that is a prerequisite for kde base blocks:
# kdelibs, kde-runtime, kdepimlibs or kdepim-runtime.
#
# - Set to "libs" for ports that need only libs, without runtime support.
# All options below imply "libs". If no from "none", "libs" or
# "runtime" were specified, "libs" is implied. This is the default
# value when MODKDE4_RESOURCES is enabled.
#
# - Set to "runtime" for ports which depend on base KDE libraries and
# runtime components. This is the default setting until
# MODKDE4_RESOURCES is enabled.
#
# - Set to "workspace" for ports that require KDE workspace libraries.
# This automatically implies "runtime".
#
# - Add "pim" when port depends on KDE PIM framework, i.e. LIB_DEPENDS
# on kdepimlibs and, if "libs" was not specified, RUN_DEPENDS on
# kdepim-runtime.
#
# - Add "games" when port is usual KDE game. It adds LIB_DEPENDS on
# libkdegames and add kdegames to WANTLIB. Also, Makefile.inc may
# use this value, e.g., to provide different default HOMEPAGE.
#
# NOTE: There are no options like "Kate" or "Okular", they should be handled
# with simple LIB_DEPENDS on corresponding packages in addition to
# options above.
#
.if ${MODKDE4_RESOURCES:L} == "no"
MODKDE4_USE ?= runtime
MODULES += gcc4
MODGCC4_ARCHS = *
MODGCC4_LANGS = c++
.else
MODKDE4_USE ?= libs
.endif
_MODKDE4_USE_ALL = libs runtime workspace pim games
.for _modkde4_u in ${MODKDE4_USE:L}
. if !${_MODKDE4_USE_ALL:M${_modkde4_u}}
ERRORS += "Fatal: unknown KDE 4 use flag: ${_modkde4_u}"
ERRORS += "Fatal: (not one from ${_MODKDE4_USE_ALL})."
. endif
.endfor
.if ${MODKDE4_USE:L:Mworkspace}
MODKDE4_USE += runtime
.endif
.if !empty(MODKDE4_USE) && ${MODKDE4_USE:L:Mlibs} == "" && ${MODKDE4_USE:L:Mruntime} == ""
MODKDE4_USE += runtime
.endif
# Almost all KDE ports use docbook.
MODKDE4_BUILD_DEPENDS = textproc/docbook \
textproc/docbook-xsl
MODKDE4_LIB_DEPENDS =
MODKDE4_RUN_DEPENDS =
MODKDE4_WANTLIB =
MODKDE4_CONF_ARGS =
FLAVOR ?=
.if ${MODKDE4_USE:L:Mruntime} || ${MODKDE4_USE:L:Mpim}
MODKDE4_USE += libs
.endif
KDE4_ONLY ?= Yes
.if ${KDE4_ONLY:L} == "yes"
DPB_PROPERTIES += tag:kde4
.endif
# Small hack, until automoc4 will be gone
PKGNAME ?= ${DISTNAME}
.if !${PKGNAME:Mautomoc4-*}
MODKDE4_BUILD_DEPENDS += devel/automoc
.endif
.if ${MODKDE4_RESOURCES:L} != "no"
PKG_ARCH ?= *
MODKDE4_NO_QT ?= Yes # resources usually don't need Qt
. if ${MODKDE4_USE:L:Mworkspace}
MODKDE4_BUILD_DEPENDS += ${MODKDE4_DEP_DIR}/workspace>=4.11,<5
. endif
. if ${MODKDE4_USE:L:Mlibs}
MODKDE4_BUILD_DEPENDS += ${MODKDE4_DEP_DIR}/libs,-main>=${MODKDE4_DEP_VERSION},<5
. endif
.else
MODKDE4_NO_QT ?= No
. if ${MODKDE4_USE:L:Mlibs}
. if ${MODKDE4_NO_QT:L} == "yes"
ERRORS += "Fatal: KDE libraries require Qt."
. endif
MODKDE4_LIB_DEPENDS += ${MODKDE4_DEP_DIR}/libs,-main>=${MODKDE4_DEP_VERSION},<5
MODKDE4_WANTLIB += ${MODKDE4_LIB_DIR}/kdecore>=8
. if ${MODKDE4_USE:L:Mpim}
MODKDE4_LIB_DEPENDS += ${MODKDE4_DEP_DIR}/pimlibs>=${MODKDE4_DEP_VERSION},<5
MODKDE4_BUILD_DEPENDS += devel/boost
. endif
. if ${MODKDE4_USE:L:Mgames}
MODKDE4_LIB_DEPENDS += ${MODKDE4_DEP_DIR}/libkdegames>=${MODKDE4_DEP_VERSION},<5
MODKDE4_WANTLIB += ${MODKDE4_LIB_DIR}/kdegames
. endif
. if ${MODKDE4_USE:L:Mruntime}
MODKDE4_RUN_DEPENDS += ${MODKDE4_DEP_DIR}/runtime,-main>=${MODKDE4_DEP_VERSION},<5
. if ${MODKDE4_USE:L:Mpim}
MODKDE4_RUN_DEPENDS += ${MODKDE4_DEP_DIR}/pim-runtime>=${MODKDE4_DEP_VERSION},<5
. endif
. if ${MODKDE4_USE:L:Mworkspace}
MODKDE4_LIB_DEPENDS += ${MODKDE4_DEP_DIR}/workspace>=4.11,<5
. endif
. endif
. endif # ${MODKDE4_USE:L:Mlibs}
# See FindKDE4Internal.cmake from kdelibs package for details.
.if ${CONFIGURE_STYLE:Mcmake}
. if ${FLAVOR:Mdebug}
# -g -O0, qDebug/kDebug enabled
MODKDE4_CONF_ARGS += -DCMAKE_BUILD_TYPE:String=DebugFull
MODKDE4_CMAKE_PREFIX = -debugfull
. else
# -O2, qDebug/kDebug disabled
MODKDE4_CONF_ARGS += -DCMAKE_BUILD_TYPE:String=Release
MODKDE4_CMAKE_PREFIX = -release
. endif
# NOTE: due to bugs in make-plist, plist may contain
# ${FLAVORS} instead of ${MODKDE4_CMAKE_PREFIX}.
# You've been warned.
SUBST_VARS += MODKDE4_CMAKE_PREFIX
FLAVORS += debug
.endif
# ${MODKDE4_RESOURCES:L} != "no"
.endif
# Set up directories, avoiding conflicts with KDE3.
# Libraries are handled in kde4-post-install target, see below.
MODKDE4_INCLUDE_DIR = include/kde4
MODKDE4_LIB_DIR = lib/kde4/libs
# shortcut to make WANTLIBs and PLISTs more readable
KDE4LIB = ${MODKDE4_LIB_DIR}
SUBST_VARS += KDE4LIB
.if ${CONFIGURE_STYLE:Mcmake}
. if "${NO_TEST:L}" != "yes"
# Enable regression tests if any
MODKDE4_CONF_ARGS += -DKDE4_BUILD_TESTS:Bool=Yes
. else
MODKDE4_CONF_ARGS += -DKDE4_BUILD_TESTS:Bool=No
. endif
MODKDE4_CONF_ARGS += -DINCLUDE_INSTALL_DIR:Path=${MODKDE4_INCLUDE_DIR} \
-DKDE4_INCLUDE_INSTALL_DIR:Path=${PREFIX}/${MODKDE4_INCLUDE_DIR} \
-DKDE4_INSTALL_DIR:Path=${PREFIX} \
-DKDE4_LIB_DIR:Path=${PREFIX}/${MODKDE4_LIB_DIR} \
-DKDE4_LIB_INSTALL_DIR:Path=${PREFIX}/lib \
-DKDE4_LIBEXEC_INSTALL_DIR:Path=${PREFIX}/libexec \
-DKDE4_INFO_INSTALL_DIR:Path=${PREFIX}/info \
-DKDE4_MAN_INSTALL_DIR:Path=${PREFIX}/man \
-DKDE4_SYSCONF_INSTALL_DIR:Path=${SYSCONFDIR}
# Make sure that KDE4-specific places are searched first
MODKDE4_CONF_ARGS += -DCMAKE_INCLUDE_PATH=${LOCALBASE}/${MODKDE4_INCLUDE_DIR} \
-DCMAKE_LIBRARY_PATH=${LOCALBASE}/${MODKDE4_LIB_DIR}
# KDE 4.11+ doesn't play well with NEW CMP0022
MODKDE4_CONF_ARGS += -DCMAKE_POLICY_DEFAULT_CMP0022=OLD
# Some KDE4 internals still try to read LOCATION directly
MODKDE4_CONF_ARGS += -DCMAKE_POLICY_DEFAULT_CMP0026=OLD
.endif
# FIXME
MODKDE4_CONFIGURE_ENV = HOME=${WRKDIR}
PORTHOME ?= ${WRKDIR}
MODKDE4_NO_QT ?= No
.if ${MODKDE4_NO_QT:L} == "no"
MODULES += x11/qt4
MODQT4_OVERRIDE_UIC ?= No
MODKDE4_CONFIGURE_ENV += QTDIR=${MODQT_LIBDIR}
.endif
.if "${NO_BUILD:L}" != "yes"
BUILD_DEPENDS += ${MODKDE4_BUILD_DEPENDS}
LIB_DEPENDS += ${MODKDE4_LIB_DEPENDS}
.endif
RUN_DEPENDS += ${MODKDE4_RUN_DEPENDS}
WANTLIB += ${MODKDE4_WANTLIB}
CONFIGURE_ENV += ${MODKDE4_CONFIGURE_ENV}
CONFIGURE_ARGS += ${MODKDE4_CONF_ARGS}
# MAKE_FLAGS += ${MODKDE4_CONF_ARGS}
MODKDE4_FIX_GETTEXT ?= Yes
.if ${MODKDE4_FIX_GETTEXT:L} == "yes"
# System (CMake) FindGettext.cmake requires having PO_FILES marker
MODKDE4_post-patch = @echo '====> Fixing GETTEXT_PROCESS_PO_FILES() calls'; \
cd ${WRKSRC} && find . -name CMakeLists.txt | sort | \
while read F; do \
perl -pi.pofilesfix -e '\
if (/GETTEXT_PROCESS_PO_FILES/ and !/\sPO_FILES/) { \
s@\$$\{_po_files\}@PO_FILES $$&@; \
}' "$$F"; \
if cmp -s "$$F" "$$F".pofilesfix; then \
rm "$$F".pofilesfix; \
else \
echo "$$F" >&2; \
fi; \
done
.endif
# Some KDE ports install files under ${SYSCONFDIR}.
# We want to have them under ${PREFIX}/share/examples or such,
# and just be @sample'd under ${SYSCONFDIR}.
# So add "file/dir destination" pairs to this variable, and
# apporiate @sample lines to packing list, e.g.:
# dbus-1 share/examples
MODKDE4_SYSCONF_FILES ?=
# Create soft links for shared libraries in ${PREFIX}/lib to
# ${MODKDE4_LIB_DIR}. Used to avoid clashing with KDE 3.
MODKDE4_LIB_LINKS ?= No
# We cannot use at least "MODKDE4_pre-install", as it means a totally different
# thing for MODULES rather than for ports. So play another game...
# Always create directory for headers, remove later if left empty
MODKDE4_pre-fake = ${_FAKESUDO} ${INSTALL_DATA_DIR} ${WRKINST}/${PREFIX}/include/kde4;
# 1. Remove includes directory created above, if empty.
# 2. Create links for shared libraries in ${PREFIX}/${KDE4LIB},
# to allow using -DDKDE4_LIB_DIR=${PREFIX}/${KDE4LIB}.
# 3. Fixup files in ${SYSCONFDIR}, see notes for MODKDE4_SYSCONF_FILES above.
MODKDE4_post-install = rmdir ${PREFIX}/${MODKDE4_INCLUDE_DIR} 2>/dev/null || :;
.if ${MODKDE4_LIB_LINKS:L} == "yes" && defined(SHARED_LIBS) && !empty(SHARED_LIBS)
MODKDE4_post-install += \
${INSTALL_DATA_DIR} ${PREFIX}/${MODKDE4_LIB_DIR}; \
cd ${PREFIX}/${MODKDE4_LIB_DIR};
# Note that number of upper-level directories depends on
# actual ${MODKDE4_LIB_DIR} value relative to ${PREFIX}/lib.
. for _l _v in ${SHARED_LIBS}
MODKDE4_post-install += \
! test -e ../../lib${_l}.so.${_v} || ln -sf ../../lib${_l}.so.${_v};
. endfor
.endif
.for _f _d in ${MODKDE4_SYSCONF_FILES}
MODKDE4_post-install += \
rm -Rf ${PREFIX}/${_d}/${_f}; \
${INSTALL_DATA_DIR} ${PREFIX}/${_d}; \
mv ${WRKINST}${SYSCONFDIR}/${_f} ${PREFIX}/${_d}/${_f};
.endfor