#
# Macro: %_K5init
# Description: initial setup for KF5 package
# Usage: %_K5init key1 no_key2 key3 etc
# Keys:
#   <empty>     - put files to default place (recommended)
#   altplace    - put files to alternate place prefix /usr/share/kf5 (default)
#   no_altplace - put files to system prefix /usr
#   man         - don't remove manpages
#   no_man      - remove manpages (default)
#   appdata     - don't remove appdata (default)
#   no_appdata  - remove appdata by default
#     Default place will be changed in the future
# Path macros usage:
# %_K5bin     - default switchable placement of executables
# %_kf5_bin   - hard alternate placement of executables
# %_bindir    - hard system placement of executables

%_K5if_ver_gt() %if "%(rpmvercmp '%1' '%2')" > "0"
%_K5if_ver_gteq() %if "%(rpmvercmp '%1' '%2')" >= "0"
%_K5if_ver_lt() %if "%(rpmvercmp '%2' '%1')" > "0"
%_K5if_ver_lteq() %if "%(rpmvercmp '%2' '%1')" >= "0"
%_K5if_ver_eq() %if "%(rpmvercmp '%1' '%2')" == "0"
%_K5if_ver_not_gt() %if "%(rpmvercmp '%1' '%2')" <= "0"
%_K5if_ver_not_gteq() %if "%(rpmvercmp '%1' '%2')" < "0"
%_K5if_ver_not_lt() %if "%(rpmvercmp '%2' '%1')" <= "0"
%_K5if_ver_not_lteq() %if "%(rpmvercmp '%2' '%1')" < "0"
%_K5if_ver_not_eq() %if "%(rpmvercmp '%1' '%2')" != "0"

%__kf5_altplace_default false
%__kf5_desktop_subdir %nil
%__kf5_opts_list ''
%__kf5_libbindir %prefix/lib

%__kf5_if_have_opt() \
    result_value= \
    option_name="%{1}" \
    option_yes=`echo "$option_name" | sed -e 's|^no_||'` \
    option_no=`echo "no_$option_yes"` \
    # setup defaults \
    case $option_yes in \
	altplace) \
	    result_value=%__kf5_altplace_default \
	    ;; \
	appdata) \
	    result_value=true \
	    ;; \
    esac \
    [ -n "$result_value" ] || result_value=false \
    if echo "%__kf5_opts_list" | grep -qe "\\<${option_yes}\\>"; then \
	result_value=true \
    fi \
    if echo "%__kf5_opts_list" | grep -qe "\\<${option_no}\\>"; then \
	result_value=false \
    fi \
    if [ "$result_value" == "true" ] ; then \
	echo %{2} \
    else \
	echo %{3} \
    fi

%_K5prefix %_prefix
%_K5dir %_K5prefix
%_kf5_data %_datadir/kf5
%_K5data %(%__kf5_if_have_opt altplace %_kf5_data %_datadir)
%_K5archdata %_qt5_archdatadir
%_K5libexecdir %prefix/libexec

%_kf5_xdgconf %_sysconfdir/kf5/xdg
%_K5xdgconf %(%__kf5_if_have_opt altplace %_kf5_xdgconf %_sysconfdir/xdg)
%_kf5_xdgmenu %_kf5_xdgconf/menus
%_K5xdgmenu %(%__kf5_if_have_opt altplace %_kf5_xdgmenu %_sysconfdir/xdg/menus)
%_kf5_xdgapp %_kf5_data/applications%__kf5_desktop_subdir
%_K5xdgapp %(%__kf5_if_have_opt altplace %_kf5_xdgapp %_desktopdir%__kf5_desktop_subdir)
%_kf5_xdgdir %_kf5_data/desktop-directories
%_K5xdgdir %(%__kf5_if_have_opt altplace %_kf5_xdgdir %_datadir/desktop-directories)
%_K5xdgmime %_xdgmimedir/packages

%_kf5_bin %__kf5_libbindir/kf5/bin
%_K5bin %(%__kf5_if_have_opt altplace %_kf5_bin %_bindir)
%_kf5_sbin %__kf5_libbindir/kf5/sbin
%_K5sbin %(%__kf5_if_have_opt altplace %_kf5_sbin %_sbindir)
%_kf5_icon %_kf5_data/icons
%_K5icon %(%__kf5_if_have_opt altplace %_kf5_icon %_iconsdir)
%_K5lib %_libdir
%_K5mod %_K5lib/kf5
%_K5plug %_qt5_plugindir
%_K5qml %_qt5_qmldir
%_K5import %_qt5_importdir
%_kf5_exec %_K5libexecdir/kf5
%_K5exec %(%__kf5_if_have_opt altplace %_kf5_exec %_K5libexecdir)
%_kf5_start %_kf5_xdgconf/autostart
%_K5start %(%__kf5_if_have_opt altplace %_kf5_start %_sysconfdir/xdg/autostart)
%_K5app %_K5data
%_K5emo %_K5data/emoticons
%_K5snd %_K5data/sounds
%_K5tmpl %_K5data/templates
%_K5wall %_K5data/wallpapers
%_K5srv %_datadir/kservices5
%_K5srvtyp %_datadir/kservicetypes5
%_K5notif %_datadir/knotifications5
%_K5xmlgui %_datadir/kxmlgui5
%_K5doc %_K5data/doc/HTML
%_K5i18n %_K5data/locale
%_K5l10n %_K5i18n

%_K5cf %_K5data/config
%_K5conf %_K5cf
%_K5cfg %_K5data/config.kcfg
%_K5conf_up %_K5app/kconf_update
%_K5cf_upd %_K5conf_up
%_K5conf_bin %_K5lib/kconf_update_bin
%_K5cf_bin %_K5conf_bin

%_K5inc %_includedir/KF5
%_K5link %_libdir/kf5/devel

%_K5dbus %_datadir/dbus-1
%_K5conf_dbus_sessd %_sysconfdir/dbus-1/session.d
%_K5conf_dbus_sysd %_sysconfdir/dbus-1/system.d
%_K5dbus_iface %_K5data/dbus-1/interfaces
%_K5dbus_srv %_K5data/dbus-1/services
%_K5dbus_sys_srv /lib/dbus-1/system-services

%K5init() \
    %add_findpackage_path %_kf5_bin \
    %global __kf5_opts_list '%{*}'

%__kf5_buildtype %{!?_K5buildtype:Release}%{?_K5buildtype:%?_K5buildtype}

%K5cmake \
    __kf5_cmake() \
    { \
	export PATH=%_kf5_bin:$PATH; \
	export QTDIR=%_qt5_prefix; \
	export CFLAGS="${CFLAGS:-%optflags}"; \
	export CXXFLAGS="${CXXFLAGS:-%optflags}"; \
	pushd BUILD; \
	cmake .. \\\
	    -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \\\
	    -DCMAKE_USE_RELATIVE_PATHS:BOOL=ON \\\
	    -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \\\
	    -DCMAKE_SKIP_RPATH:BOOL=ON \\\
	    -DBUILD_TESTING:BOOL=FALSE \\\
	    -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON \\\
	    -DCMAKE_BUILD_TYPE=%__kf5_buildtype \\\
	    \\\
	    -DCMAKE_EXE_LINKER_FLAGS:STRING='-L%_libdir -L%_K5link' \\\
	    -DCMAKE_MODULE_LINKER_FLAGS:STRING='-L%_libdir -L%_K5link' \\\
	    -DCMAKE_SHARED_LINKER_FLAGS:STRING='-L%_libdir -L%_K5link' \\\
	    -DCMAKE_LIBRARY_PATH='%_K5link;%_libdir;/%_lib' \\\
	    -DCMAKE_INCLUDE_PATH='%_K5inc;%_includedir' \\\
	    \\\
	    -DCMAKE_INSTALL_PREFIX=%_K5prefix \\\
	    -DCMAKE_PREFIX_PATH=%_K5prefix \\\
	    \\\
	    -DCMAKE_INSTALL_BINDIR=%_K5bin \\\
	    -DCMAKE_INSTALL_FULL_BINDIR=%_K5bin \\\
	    -DBIN_INSTALL_DIR:PATH=%_K5bin \\\
	    \\\
	    -DCMAKE_INSTALL_SBINDIR=%_K5sbin \\\
	    -DCMAKE_INSTALL_FULL_SBINDIR=%_K5sbin \\\
	    -DSBIN_INSTALL_DIR:PATH=%_K5sbin \\\
	    \\\
	    -DLIBEXEC_INSTALL_DIR:PATH=%_K5libexecdir \\\
	    \\\
	    -DINCLUDE_INSTALL_DIR:PATH=%_includedir \\\
	    -DCMAKE_INSTALL_INCLUDEDIR_KF5=%_K5inc \\\
	    \\\
	    -DDATA_INSTALL_DIR:PATH=%_datadir \\\
	    -DCONFIG_INSTALL_DIR:PATH=%_K5xdgconf \\\
	    -DSERVICES_INSTALL_DIR:PATH=%_K5srv \\\
	    -DSERVICETYPES_INSTALL_DIR:PATH=%_K5srvtyp \\\
	    -DKNOTIFYRC_INSTALL_DIR:PATH=%_K5notif \\\
	    -DKXMLGUI_INSTALL_DIR:PATH=%_K5xmlgui \\\
	    \\\
	    -DLIB_INSTALL_DIR:PATH=%_K5lib \\\
	    -DLIB_DESTINATION=%_lib \\\
	    %if "%_lib" == "lib64" \
	    -DLIB_SUFFIX="64" \\\
	    %else \
	    -DLIB_SUFFIX="" \\\
	    %endif \
	    \\\
	    -DSYSCONF_INSTALL_DIR:PATH=%_sysconfdir \\\
	    -DAUTOSTART_INSTALL_DIR=%_K5start \\\
	    \\\
	    -DHTML_INSTALL_DIR=%_K5doc \\\
	    -DICON_INSTALL_DIR=%_K5icon \\\
	    -DXDG_MIME_INSTALL_DIR=%_K5xdgmime \\\
	    -DXDG_APPS_INSTALL_DIR=%_K5xdgapp \\\
	    -DECM_MKSPECS_INSTALL_DIR:PATH=%_K5archdata/mkspecs/modules \\\
	    -DKCFG_INSTALL_DIR:PATH=%_K5cfg \\\
	    -DPLUGIN_INSTALL_DIR:PATH=%_K5plug \\\
	    -DQT_PLUGIN_INSTALL_DIR:PATH=%_K5plug \\\
	    -DQML_INSTALL_DIR:PATH=%_K5qml \\\
	    -DIMPORTS_INSTALL_DIR:PATH=%_K5import \\\
	    -DDBUS_INTERFACES_INSTALL_DIR=%_K5dbus_iface \\\
	    -DDBUS_SERVICES_INSTALL_DIR=%_K5dbus_srv \\\
	    -DDBUS_SYSTEM_SERVICES_INSTALL_DIR=%_K5dbus_sys_srv \\\
	    "$@"; \
	popd \
    } \
    mkdir -p BUILD; \
    __kf5_cmake

%K5make \
    __kf5_make() \
    { \
	pushd BUILD \
	%make_build "$@" \
	popd \
    } \
    __kf5_make

%K5build \
    __kf5_build() \
    { \
	%K5cmake "$@" \
	%K5make \
    } \
    __kf5_build

%__kf5_install_fix_files \
    if [ -d %buildroot/%_datadir ]; then \
	ls -1d %buildroot/%_kf5_data/k*5 | \\\
	while read d ; do \
	    mv "$d" %buildroot/%_datadir/ ||: \
	done \
    fi \
    if [ -d %buildroot/%_K5data/lib64 ]; then \
	mkdir -p %buildroot/%_libdir \
	mv %buildroot/%_K5data/lib64/* %buildroot/%_libdir/ ||: \
	rm -rf %buildroot/%_K5data/lib64 \
    fi \
    if [ -d %buildroot/%_K5data/lib ]; then \
	mkdir -p %buildroot/%_libdir \
	mv %buildroot/%_K5data/lib/* %buildroot/%_libdir/ ||: \
	rm -rf %buildroot/%_K5data/lib \
    fi \
    if [ "%_K5link" != "%_K5lib" ]; then \
	ls -1 %buildroot/%_K5lib/lib*.so 2>/dev/null | \\\
	while read p \
	do \
	    [ -L "$p" ] || continue \
	    mkdir -p %buildroot/%_K5link \
	    f=`readlink "$p"` \
	    l=`basename "$p"` \
	    ln -sf `relative "%buildroot/%_K5lib/$f" "%buildroot/%_K5link/$f"` "%buildroot/%_K5link/$l" \
	    rm -f "$p" \
	done \
    fi \
    if [ -d %buildroot/%_K5data/bin ]; then \
	mkdir -p %buildroot/%_kf5_bin \
	mv %buildroot/%_K5data/bin/* %buildroot/%_kf5_bin/ ||: \
	rm -rf %buildroot/%_K5data/bin \
    fi \
    if [ -d %buildroot/%_K5data/include ]; then \
	mkdir -p %buildroot/%_K5inc \
	mv %buildroot/%_K5data/include/* %buildroot/%_K5inc/ ||: \
	rm -rf %buildroot/%_K5data/include \
    fi \
    if [ -d %buildroot/%_K5bin -a "%(%__kf5_if_have_opt altplace true false)" == "true" ]; then \
	mkdir -p %buildroot/%_bindir \
	ls -1d %buildroot/%_K5bin/*5 2>/dev/null | \\\
	while read b ; do \
	    ln -s `relative "$b" %buildroot/%_bindir/` %buildroot/%_bindir/ ||: \
	done \
	ls -1 %buildroot/%_K5dbus_srv/*5*.service 2>/dev/null | \\\
	while read s \
	do \
	    mkdir -p %buildroot/%_datadir/dbus-1/services \
	    mv $s %buildroot/%_datadir/dbus-1/services/ \
	done \
    fi \
    if [ -d %buildroot/%_datadir/akonadi ]; then \
	mv %buildroot/%_datadir/akonadi %buildroot/%_datadir/akonadi5 ||: \
    fi \
    if [ -d %buildroot/%_kf5_data/akonadi ]; then \
	mkdir -p %buildroot/%_datadir/akonadi5 \
	cp -arl %buildroot/%_kf5_data/akonadi/* %buildroot/%_datadir/akonadi5/ ||: \
	rm -rf %buildroot/%_kf5_data/akonadi ||: \
    fi \
    if [ -d %buildroot/%_mandir -a "%(%__kf5_if_have_opt man keep remove)" == "remove" ]; then \
	rm -rf %buildroot/%_mandir/* 2>/dev/null ||: \
    fi \
    if [ -d %buildroot/%_datadir/appdata -a "%(%__kf5_if_have_opt appdata keep remove)" == "remove" ]; then \
	rm -rf %buildroot/%_datadir/appdata/* 2>/dev/null ||: \
    fi \
    if [ -d %buildroot/%_datadir/metainfo -a "%(%__kf5_if_have_opt appdata keep remove)" == "remove" ]; then \
	rm -rf %buildroot/%_datadir/metainfo/*.{appdata,metainfo}.xml 2>/dev/null ||: \
    fi \
    if [ -d %buildroot/%_libdir/cmake/ ]; then \
        find %buildroot/%_libdir/cmake/ -type f -name \\*.cmake | while read f ; do \
            sed -i -e 's|\\(set(.*\\)${PACKAGE_PREFIX_DIR}//usr/|\\1${PACKAGE_PREFIX_DIR}/|' $f \
            sed -i -e 's|/usr//usr/|/usr/|' $f \
        done \
    fi

%K5install \
    __kf5_install() \
    { \
	%make -C BUILD DESTDIR=%buildroot install "$@" \
	%__kf5_install_fix_files \
    } \
    __kf5_install

%K5find_qtlang rpm-build-kf5-find-qtlang

%K5install_move \
    __kf5_install_move() \
    { \
	if [ "%(%__kf5_if_have_opt altplace true false)" == "false" ]; then \
	    return 0 \
	fi \
	local src_dir="%buildroot/%_prefix" \
	local dst_dir="%buildroot/%_datadir" \
	local type="$1" \
	shift \
	local item="$1" \
	case "$type" in \
	    data) \
		src_dir="%buildroot/%_datadir" \
		dst_dir="%buildroot/%_K5data" \
	    ;; \
	    icon) \
		src_dir="%buildroot/%_datadir/icons" \
		dst_dir="%buildroot/%_K5icon" \
	    ;; \
	    exec) \
		src_dir="%buildroot/%_K5libexecdir" \
		dst_dir="%buildroot/%_K5exec" \
	    ;; \
	    menu) \
		src_dir="%buildroot/%_xdgmenusdir" \
		dst_dir="%buildroot/%_K5xdgmenu" \
	    ;; \
	    bin) \
		src_dir="%buildroot/%_bindir" \
		dst_dir="%buildroot/%_K5bin" \
	    ;; \
	esac \
	if [ -d "$src_dir" ] ; then \
	    if [ "$item" == "all" ] ; then \
		mkdir -p "$dst_dir" \
		ls -1d "$src_dir"/* | \\\
		while read d ; do \
		    [ "`basename $d`" != "kf5" ] || continue \
		    [ "`basename $d`" != "KF5" ] || continue \
		    mv "$d" "$dst_dir/" ||: \
		done \
	    else \
		mkdir -p `dirname "$dst_dir/$item"` \
		while [ -n "$item" ] ; do \
		    mv "$src_dir/$item" `dirname "$dst_dir/$item"` ||: \
		    shift \
		    item="$1" \
		done \
	    fi \
	fi \
    } \
    __kf5_install_move
