#
# Macro: %_K6init
# Description: initial setup for KF6 package
# Usage: %_K6init key1 no_key2 key3 etc
# Keys:
#   <empty>     - put files to default place (recommended)
#   altplace    - put files to alternate place prefix /usr/share/kf6
#   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 may be changed in the future
# Path macros usage:
# %_K6bin     - default switchable placement of executables
# %_kf6_bin   - hard alternate placement of executables
# %_bindir    - hard system placement of executables

%_K6if_ver_gt() %if "%(rpmvercmp '%1' '%2')" > "0"
%_K6if_ver_gteq() %if "%(rpmvercmp '%1' '%2')" >= "0"
%_K6if_ver_lt() %if "%(rpmvercmp '%2' '%1')" > "0"
%_K6if_ver_lteq() %if "%(rpmvercmp '%2' '%1')" >= "0"
%_K6if_ver_eq() %if "%(rpmvercmp '%1' '%2')" == "0"
%_K6if_ver_not_gt() %if "%(rpmvercmp '%1' '%2')" <= "0"
%_K6if_ver_not_gteq() %if "%(rpmvercmp '%1' '%2')" < "0"
%_K6if_ver_not_lt() %if "%(rpmvercmp '%2' '%1')" <= "0"
%_K6if_ver_not_lteq() %if "%(rpmvercmp '%2' '%1')" < "0"
%_K6if_ver_not_eq() %if "%(rpmvercmp '%1' '%2')" != "0"

%__kf6_altplace_default false
%__kf6_desktop_subdir %nil
%__kf6_opts_list ''
%__kf6_libbindir %prefix/lib

%__kf6_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=%__kf6_altplace_default \
	    ;; \
	appdata) \
	    result_value=true \
	    ;; \
    esac \
    [ -n "$result_value" ] || result_value=false \
    if echo "%__kf6_opts_list" | grep -qe "\\<${option_yes}\\>"; then \
	result_value=true \
    fi \
    if echo "%__kf6_opts_list" | grep -qe "\\<${option_no}\\>"; then \
	result_value=false \
    fi \
    if [ "$result_value" == "true" ] ; then \
	echo %{2} \
    else \
	echo %{3} \
    fi

%_K6prefix %_prefix
%_K6dir %_K6prefix
%_kf6_data %_datadir/kf6
%_K6data %(%__kf6_if_have_opt altplace %_kf6_data %_datadir)
%_K6archdata %_qt6_archdatadir
%_K6libexecdir %prefix/libexec

%_kf6_xdgconf %_sysconfdir/kf6/xdg
%_K6xdgconf %(%__kf6_if_have_opt altplace %_kf6_xdgconf %_sysconfdir/xdg)
%_kf6_xdgmenu %_kf6_xdgconf/menus
%_K6xdgmenu %(%__kf6_if_have_opt altplace %_kf6_xdgmenu %_sysconfdir/xdg/menus)
%_kf6_xdgapp %_kf6_data/applications%__kf6_desktop_subdir
%_K6xdgapp %(%__kf6_if_have_opt altplace %_kf6_xdgapp %_desktopdir%__kf6_desktop_subdir)
%_kf6_xdgdir %_kf6_data/desktop-directories
%_K6xdgdir %(%__kf6_if_have_opt altplace %_kf6_xdgdir %_datadir/desktop-directories)
%_K6xdgmime %_xdgmimedir/packages

%_kf6_bin %__kf6_libbindir/kf6/bin
%_K6bin %(%__kf6_if_have_opt altplace %_kf6_bin %_bindir)
%_kf6_sbin %__kf6_libbindir/kf6/sbin
%_K6sbin %(%__kf6_if_have_opt altplace %_kf6_sbin %_sbindir)
%_kf6_icon %_kf6_data/icons
%_K6icon %(%__kf6_if_have_opt altplace %_kf6_icon %_iconsdir)
%_K6lib %_libdir
%_K6mod %_K6lib/kf6
%_K6plug %_qt6_plugindir
%_K6qml %_qt6_qmldir
%_K6import %_qt6_importdir
%_kf6_exec %_K6libexecdir
%_K6exec %_K6libexecdir/kf6
%_kf6_start %_kf6_xdgconf/autostart
%_K6start %(%__kf6_if_have_opt altplace %_kf6_start %_sysconfdir/xdg/autostart)
%_K6app %_K6data
%_K6emo %_K6data/emoticons
%_K6snd %_K6data/sounds
%_K6tmpl %_K6data/templates
%_K6wall %_K6data/wallpapers
%_K6srv %_datadir/kservices6
%_K6srvtyp %_datadir/kservicetypes6
%_K6notif %_datadir/knotifications6
%_K6xmlgui %_datadir/kxmlgui6
%_K6doc %_K6data/doc/HTML
%_K6i18n %_K6data/locale
%_K6l10n %_K6i18n

%_K6cf %_K6data/config
%_K6conf %_K6cf
%_K6cfg %_K6data/config.kcfg
%_K6conf_up %_K6app/kconf_update
%_K6cf_upd %_K6conf_up
%_K6conf_bin %_K6lib/kconf_update_bin
%_K6cf_bin %_K6conf_bin

%_K6inc %_includedir/KF6
%_K6link %_libdir/kf6/devel

%_K6dbus %_datadir/dbus-1
%_K6conf_dbus_sessd %_sysconfdir/dbus-1/session.d
%_K6conf_dbus_sysd %_sysconfdir/dbus-1/system.d
%_K6dbus_iface %_datadir/dbus-1/interfaces
%_K6dbus_srv %_datadir/dbus-1/services
%_K6dbus_sys_srv %_datadir/dbus-1/system-services

%K6init() \
    %add_findpackage_path %_kf6_bin \
    %global __kf6_opts_list '%{*}'

# ifdef _K6buildsubdir
%__kf6_buildsubdir %{!?_K6buildsubdir:BUILD}%{?_K6buildsubdir:%?_K6buildsubdir}
# ifdef _K6buildtype
%__kf6_buildtype %{!?_K6buildtype:Release}%{?_K6buildtype:%?_K6buildtype}

%K6cmake \
    __kf6_cmake() \
    { \
	export LC_ALL=C.UTF-8; \
	export PATH=%_kf6_bin:$PATH; \
	export QTDIR=%_qt6_prefix; \
	export CFLAGS="${CFLAGS:-%optflags}"; \
	export CXXFLAGS="${CXXFLAGS:-%optflags}"; \
	pushd %__kf6_buildsubdir; \
	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=OFF \\\
	    -DSKIP_LICENSE_TESTS:BOOL=ON \\\
	    -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON \\\
	    -DCMAKE_BUILD_TYPE=%__kf6_buildtype \\\
	    \\\
	    -DCMAKE_EXE_LINKER_FLAGS:STRING='-L%_libdir -L%_K6link' \\\
	    -DCMAKE_MODULE_LINKER_FLAGS:STRING='-L%_libdir -L%_K6link' \\\
	    -DCMAKE_SHARED_LINKER_FLAGS:STRING='-L%_libdir -L%_K6link' \\\
	    -DCMAKE_LIBRARY_PATH='%_K6link;%_libdir;/%_lib' \\\
	    -DCMAKE_INCLUDE_PATH='%_K6inc;%_includedir' \\\
	    \\\
	    -DCMAKE_INSTALL_PREFIX=%_K6prefix \\\
	    -DCMAKE_PREFIX_PATH=%_K6prefix \\\
	    \\\
	    -DCMAKE_INSTALL_BINDIR=%_K6bin \\\
	    -DCMAKE_INSTALL_FULL_BINDIR=%_K6bin \\\
	    -DBIN_INSTALL_DIR:PATH=%_K6bin \\\
	    \\\
	    -DCMAKE_INSTALL_SBINDIR=%_K6sbin \\\
	    -DCMAKE_INSTALL_FULL_SBINDIR=%_K6sbin \\\
	    -DSBIN_INSTALL_DIR:PATH=%_K6sbin \\\
	    \\\
	    -DLIBEXEC_INSTALL_DIR:PATH=%_K6libexecdir \\\
	    -DKDE_INSTALL_LIBEXECDIR:PATH=%_K6libexecdir \\\
	    \\\
	    -DINCLUDE_INSTALL_DIR:PATH=%_includedir \\\
	    -DCMAKE_INSTALL_INCLUDEDIR_KF6=%_K6inc \\\
	    \\\
	    -DDATA_INSTALL_DIR:PATH=%_datadir \\\
	    -DCONFIG_INSTALL_DIR:PATH=%_K6xdgconf \\\
	    -DSERVICES_INSTALL_DIR:PATH=%_K6srv \\\
	    -DSERVICETYPES_INSTALL_DIR:PATH=%_K6srvtyp \\\
	    -DKNOTIFYRC_INSTALL_DIR:PATH=%_K6notif \\\
	    -DKXMLGUI_INSTALL_DIR:PATH=%_K6xmlgui \\\
	    \\\
	    -DLIB_INSTALL_DIR:PATH=%_K6lib \\\
	    -DLIB_DESTINATION=%_lib \\\
	    %if "%_lib" == "lib64" \
	    -DLIB_SUFFIX="64" \\\
	    %else \
	    -DLIB_SUFFIX="" \\\
	    %endif \
	    \\\
	    -DSYSCONF_INSTALL_DIR:PATH=%_sysconfdir \\\
	    -DAUTOSTART_INSTALL_DIR=%_K6start \\\
	    \\\
	    -DHTML_INSTALL_DIR=%_K6doc \\\
	    -DICON_INSTALL_DIR=%_K6icon \\\
	    -DXDG_MIME_INSTALL_DIR=%_K6xdgmime \\\
	    -DXDG_APPS_INSTALL_DIR=%_K6xdgapp \\\
	    -DECM_MKSPECS_INSTALL_DIR:PATH=%_K6archdata/mkspecs/modules \\\
	    -DKCFG_INSTALL_DIR:PATH=%_K6cfg \\\
	    -DPLUGIN_INSTALL_DIR:PATH=%_K6plug \\\
	    -DQT_PLUGIN_INSTALL_DIR:PATH=%_K6plug \\\
	    -DQML_INSTALL_DIR:PATH=%_K6qml \\\
	    -DIMPORTS_INSTALL_DIR:PATH=%_K6import \\\
	    -DDBUS_INTERFACES_INSTALL_DIR=%_K6dbus_iface \\\
	    -DDBUS_SERVICES_INSTALL_DIR=%_K6dbus_srv \\\
	    -DDBUS_SYSTEM_SERVICES_INSTALL_DIR=%_K6dbus_sys_srv \\\
	    "$@"; \
	popd \
    } \
    mkdir -p %__kf6_buildsubdir; \
    __kf6_cmake

%K6make \
    __kf6_make() \
    { \
	pushd %__kf6_buildsubdir \
	%make_build "$@" \
	popd \
    } \
    __kf6_make

%K6build \
    __kf6_build() \
    { \
	%K6cmake "$@" \
	%K6make \
    } \
    __kf6_build

%__kf6_install_fix_files \
    if [ -d %buildroot/%_datadir ]; then \
	ls -1d %buildroot/%_kf6_data/*k*6 | \\\
	while read d ; do \
	    mv "$d" %buildroot/%_datadir/ ||: \
	done \
    fi \
    if [ -d %buildroot/%_K6data/lib64 ]; then \
	mkdir -p %buildroot/%_libdir \
	mv %buildroot/%_K6data/lib64/* %buildroot/%_libdir/ ||: \
	rm -rf %buildroot/%_K6data/lib64 \
    fi \
    if [ -d %buildroot/%_K6data/lib ]; then \
	mkdir -p %buildroot/%_libdir \
	mv %buildroot/%_K6data/lib/* %buildroot/%_libdir/ ||: \
	rm -rf %buildroot/%_K6data/lib \
    fi \
    if [ "%_K6link" != "%_K6lib" ]; then \
	ls -1 %buildroot/%_K6lib/lib*.so 2>/dev/null | \\\
	while read p \
	do \
	    [ -L "$p" ] || continue \
	    mkdir -p %buildroot/%_K6link \
	    f=`readlink "$p"` \
	    l=`basename "$p"` \
	    ln -sf `relative "%buildroot/%_K6lib/$f" "%buildroot/%_K6link/$f"` "%buildroot/%_K6link/$l" \
	    rm -f "$p" \
	done \
    fi \
    if [ -d %buildroot/%_K6data/bin ]; then \
	mkdir -p %buildroot/%_kf6_bin \
	mv %buildroot/%_K6data/bin/* %buildroot/%_kf6_bin/ ||: \
	rm -rf %buildroot/%_K6data/bin \
    fi \
    if [ -d %buildroot/%_K6data/include ]; then \
	mkdir -p %buildroot/%_K6inc \
	mv %buildroot/%_K6data/include/* %buildroot/%_K6inc/ ||: \
	rm -rf %buildroot/%_K6data/include \
    fi \
    if [ -d %buildroot/%_K6bin -a "%(%__kf6_if_have_opt altplace true false)" == "true" ]; then \
	mkdir -p %buildroot/%_bindir \
	ls -1d %buildroot/%_K6bin/*6 2>/dev/null | \\\
	while read b ; do \
	    ln -s `relative "$b" %buildroot/%_bindir/` %buildroot/%_bindir/ ||: \
	done \
	ls -1 %buildroot/%_K6dbus_srv/*6*.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/%_mandir -a "%(%__kf6_if_have_opt man keep remove)" == "remove" ]; then \
	rm -rf %buildroot/%_mandir/* 2>/dev/null ||: \
    fi \
    if [ -d %buildroot/%_datadir/appdata -a "%(%__kf6_if_have_opt appdata keep remove)" == "remove" ]; then \
	rm -rf %buildroot/%_datadir/appdata/* 2>/dev/null ||: \
    fi \
    if [ -d %buildroot/%_datadir/metainfo -a "%(%__kf6_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

%K6install \
    __kf6_install() \
    { \
	%make -C %__kf6_buildsubdir DESTDIR=%buildroot install "$@" \
	%__kf6_install_fix_files \
    } \
    __kf6_install

%K6find_qtlang rpm-build-kf6-find-qtlang

%K6install_move \
    __kf6_install_move() \
    { \
	if [ "%(%__kf6_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/%_K6data" \
	    ;; \
	    icon) \
		src_dir="%buildroot/%_datadir/icons" \
		dst_dir="%buildroot/%_K6icon" \
	    ;; \
	    exec) \
		src_dir="%buildroot/%_K6libexecdir" \
		dst_dir="%buildroot/%_K6exec" \
	    ;; \
	    menu) \
		src_dir="%buildroot/%_xdgmenusdir" \
		dst_dir="%buildroot/%_K6xdgmenu" \
	    ;; \
	    bin) \
		src_dir="%buildroot/%_bindir" \
		dst_dir="%buildroot/%_K6bin" \
	    ;; \
	esac \
	if [ -d "$src_dir" ] ; then \
	    if [ "$item" == "all" ] ; then \
		mkdir -p "$dst_dir" \
		ls -1d "$src_dir"/* | \\\
		while read d ; do \
		    [ "`basename $d`" != "kf6" ] || continue \
		    [ "`basename $d`" != "KF6" ] || 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 \
    } \
    __kf6_install_move
