# $Id$ PNAME="ica-client" PVER="13.8.0.10299729" PBUILD="r4" PCAT="net-misc" DESCRIPTION="Citrix ICA client." HOMEPAGE="http://www.citrix.com/" # install usb daemon, 1=true/ 0=false ENABLE_USBDAEMON=0 # install no x11 components from platform SDK ENABLE_NOX11COMPONENTS=1 # create a split dev-package, 1=true/ 0=false ENABLE_DEV_PACKAGE=1 SPECIAL_VARS="ENABLE_USBDAEMON ENABLE_NOX11COMPONENTS" SPLIT_PACKAGES="ica-client-common ica-client-libs ica-client-wfica ica-client-pnabrowse ica-client-storebrowse ica-client" if [[ ${ENABLE_USBDAEMON} = 1 ]] then SPLIT_PACKAGES+=" ica-client-usbdaemon" fi if [[ ${ENABLE_DEV_PACKAGE} = 1 ]] then SPLIT_PACKAGES+=" ica-client-dev" fi LIBS_DEPEND=">= sys-libs/libstdc++-5.1" COMMON_DEPEND=">= sys-libs/zlib-1.2 >= net-dns/libidn-1.31" STOREBROWSE_DEPEND=">= dev-libs/libxml2-2.9" CLIENT_DEPEND=">= dev-libs/glib2-2.44 >= dev-libs/atk-2.16 >= net-libs/libcurl-7 >= x11-libs/libX11-1.6 >= x11-libs/libXext-1.3 >= x11-libs/libXfixes-5 >= x11-libs/libXinerama-1.1 >= x11-libs/libXrender-0.9 >= x11-libs/cairo-1.14 >= x11-libs/gdk-pixbuf-2.30 >= x11-libs/pango-1.36 >= x11-libs/gtk2+-2.24 >= media-fonts/font-adobe-75dpi-1" # >= media-libs/alsa-lib-1.0.29 # >= media-libs/libogg-1.3 # >= media-libs/libvorbis-1.3 if [[ ${ENABLE_USBDAEMON} = 1 ]] then USB_DEPEND="${LIBS_DEPEND} >= sys-fs/udev-218" fi SDEPEND=">= virtual/sed ${LIBS_DEPEND} ${COMMON_DEPEND} ${STOREBROWSE_DEPEND} ${CLIENT_DEPEND}" if [[ ${ENABLE_USBDAEMON} = 1 ]] then SDEPEND="${SDEPEND} ${USB_DEPEND}" fi SRCFILE="linuxx86-${PVER}.tar.gz" SRCDIR="${BUILDDIR}/${PNAME}-${PVER}" # no X storebrowse etc PLATFORM_SDK_SRCFILE="PlatformOptimizationSDK.linux-${PVER}.tgz" sminclude mtools udev systemd alx # += to add injection files (alx.sminc) SRC_URI+=( http://download2.citrix.com/FILES/en/products/Linux${PVER:0:2}/${SRCFILE} mirror://ica-client/${SRCFILE} ) if [[ ${ENABLE_USBDAEMON} = 1 ]] then SRC_URI+=( mirror://ica-client/ctxusbd.service mirror://ica-client/ctxusbd.rules mirror://ica-client/ctxusbd.tmpfilesd ) fi if [[ ${ENABLE_NOX11COMPONENTS} = 1 ]] then SRC_URI+=( mirror://ica-client/${PLATFORM_SDK_SRCFILE} ) fi split_info_ica-client-common() { DESCRIPTION="Citrix ICA client - common files." DEPEND="" } split_info_ica-client-libs() { DESCRIPTION="Citrix ICA client - minimal libs for pnabrowse/storebrowse/wfica.no_X" DEPEND="${LIBS_DEPEND}" } split_info_ica-client-wfica() { DESCRIPTION="Citrix ICA client - wfica utility." DEPEND="== net-misc/ica-client-common-${PVER} == net-misc/ica-client-libs-${PVER} ${COMMON_DEPEND}" } split_info_ica-client-pnabrowse() { DESCRIPTION="Citrix ICA client - pnabrowse utility." DEPEND="== net-misc/ica-client-common-${PVER} == net-misc/ica-client-libs-${PVER} == net-misc/ica-client-wfica-${PVER}" } split_info_ica-client-storebrowse() { DESCRIPTION="Citrix ICA client - storebrowse utility." DEPEND="== net-misc/ica-client-common-${PVER} == net-misc/ica-client-libs-${PVER} == net-misc/ica-client-wfica-${PVER} ${STOREBROWSE_DEPEND}" } split_info_ica-client() { DESCRIPTION="Citrix ICA client." DEPEND="== net-misc/ica-client-common-${PVER} == net-misc/ica-client-libs-${PVER} == net-misc/ica-client-wfica-${PVER} == net-misc/ica-client-pnabrowse-${PVER} == net-misc/ica-client-storebrowse-${PVER} ${CLIENT_DEPEND}" } split_info_ica-client-usbdaemon() { DESCRIPTION="Citrix ICA client - usb daemon." DEPEND="${USB_DEPEND}" } split_info_ica-client-dev() { DESCRIPTION="Citrix ICA client dev files." DEPEND="== net-misc/ica-client-${PVER}" } install_from_psf() { local psf line type file symlink pkg attr user group psf="$1" minstalldir /opt/Citrix/ICAClient || die cat ${psf} | while read line do set $line type="$1" file="$2" case $type in s|h) symlink="$3" shift ;; d|f) symlink="" ;; esac pkg="$3" attr="$4" user="$5" group="$6" case ${file} in .) continue ;; esac case ${type} in d) minstalldir /opt/Citrix/ICAClient/${file} || die ;; f) case ${attr} in 555) minstallexec ${file} /opt/Citrix/ICAClient/${file} || die ;; 444) minstallfile ${file} /opt/Citrix/ICAClient/${file} || die ;; esac ;; s) mlink ${symlink} /opt/Citrix/ICAClient/${file} || die ;; h) mlink ${symlink} /opt/Citrix/ICAClient/${file} || die ;; esac done } src_prepare() { munpack ${SRCFILE} ${SRCDIR} || die if [[ ${ENABLE_NOX11COMPONENTS} = 1 ]] then munpack ${PLATFORM_SDK_SRCFILE} ${SRCDIR} || die fi cd ${SRCDIR}/linuxx86/linuxx86.cor sed 's:###ICAROOT###:/opt/Citrix/ICAClient:g' usb/ctxusbd.rc usb/ica-usb.rules || die } src_compile() { cd ${SRCDIR}/linuxx86/linuxx86.cor # install to a fake installdir to move them later in packaging phase local old_bindir="${BINDIR}" export BINDIR="${BUILDDIR}/fakeinstall" # read psf file and install files and symlinks minstalldir /opt/Citrix/ICAClient || die install_from_psf ${SRCDIR}/linuxx86/linuxx86.psf || die # eula symlink is a must or wfica and co will not find UIDialog.so mlink ./nls/en.UTF-8/eula.txt /opt/Citrix/ICAClient/eula.txt || die mlink ../en.UTF-8/eula.txt /opt/Citrix/ICAClient/nls/en/eula.txt || die # symlink some inis to config dir from nls dir minstalldir /opt/Citrix/ICAClient/config || die mlink ../nls/en/appsrv.template /opt/Citrix/ICAClient/config/appsrv.template || die mlink ../nls/en/module.ini /opt/Citrix/ICAClient/config/module.ini || die mlink ../nls/en/wfclient.template /opt/Citrix/ICAClient/config/wfclient.template || die # make this installation a server installation to seperate config files for every user memptyfile /opt/Citrix/ICAClient/config/.server || die # # set default browserprotocol to tcp/ip # # ( citrix named this in their config as UDP) # sed -i "s:^\(BrowserProtocol=\).*:\1UDP:" ${BINDIR}/opt/Citrix/ICAClient/config/wfclient.template || die # # newer XenApp use https sed -i "s:^\(BrowserProtocol=\).*:\1HTTPonTCP:" ${BINDIR}/opt/Citrix/ICAClient/config/wfclient.template || die # auto enable com port mapping for com1 and com2 sed -i 's:^\(\[WFClient\]\):\1\nComPort1=/dev/ttyS1\nComPort2=/dev/ttyS2\nLastComPortNum=2\n:' \ ${BINDIR}/opt/Citrix/ICAClient/config/wfclient.template || die # fixes some hardcoded pathes minstalldir /etc/env.d || die MCONFIG="/etc/env.d/10ica-client" mclearconfig || die maddconfig 'ICAROOT=/opt/Citrix/ICAClient' || die # create wfica.sh MCONFIG="/opt/Citrix/ICAClient/wfica.sh" mclearconfig || die maddconfig '#!/bin/sh' || die maddconfig 'ICAROOT=/opt/Citrix/ICAClient' || die maddconfig 'export ICAROOT' || die maddconfig 'LD_LIBRARY_PATH=${ICAROOT}/lib' || die maddconfig 'export LD_LIBRARY_PATH' || die maddconfig '$ICAROOT/wfica -file $1' || die mchmod 0755 /opt/Citrix/ICAClient/wfica.sh || die # create wfica_assoc.sh MCONFIG="/opt/Citrix/ICAClient/wfica_assoc.sh" mclearconfig || die maddconfig '#!/bin/sh' || die maddconfig 'ICAROOT=/opt/Citrix/ICAClient' || die maddconfig 'export ICAROOT' || die maddconfig '$ICAROOT/wfica -associate -fileparam $1' || die mchmod 0755 /opt/Citrix/ICAClient/wfica_assoc.sh || die # install wrappers to prevent slowdowns with other locales than 'C' minstalldir /usr/bin || die MCONFIG="/usr/bin/wfica" mclearconfig || die maddconfig 'env LC_ALL="" LANG="" LD_LIBRARY_PATH="/opt/Citrix/ICAClient/lib" /opt/Citrix/ICAClient/wfica $*' || die mchmod 0755 /usr/bin/wfica || die MCONFIG="/usr/bin/pnabrowse" mclearconfig || die maddconfig 'env LC_ALL="" LANG="" LD_LIBRARY_PATH="/opt/Citrix/ICAClient/lib" /opt/Citrix/ICAClient/util/pnabrowse $*' || die mchmod 0755 /usr/bin/pnabrowse || die MCONFIG="/usr/bin/storebrowse" mclearconfig || die maddconfig 'env LC_ALL="" LANG="" LD_LIBRARY_PATH="/opt/Citrix/ICAClient/lib" /opt/Citrix/ICAClient/util/storebrowse $*' || die mchmod 0755 /usr/bin/storebrowse || die # replace binaries but default wfica to X implementation if [[ ${ENABLE_NOX11COMPONENTS} = 1 ]] then cd ${SRCDIR}/CitrixPluginSDK minstallexec bin/pnabrowse.no_X /opt/Citrix/ICAClient/util/pnabrowse || die minstallexec bin/storebrowse.no_X /opt/Citrix/ICAClient/util/storebrowse || die mmove ${BINDIR}/opt/Citrix/ICAClient/wfica /opt/Citrix/ICAClient/wfica.X || die minstallexec bin/wfica_for_plugins /opt/Citrix/ICAClient/wfica.no_X || die mlink wfica.X /opt/Citrix/ICAClient/wfica || die fi # insert our company cert mcinjectfile ESA-CA.pem /opt/Citrix/ICAClient/keystore/cacerts/ || die # rehash all certificates ICAROOT=${BINDIR}/opt/Citrix/ICAClient/keystore/cacerts ${BINDIR}/opt/Citrix/ICAClient/util/ctx_rehash || die # reset bindir export BINDIR="${old_bindir}" } src_install_ica-client-common() { cd ${BUILDDIR}/fakeinstall # etc minstalldir /etc || die mmove etc/env.d /etc || die # keystore + config + gtk minstalldir /opt/Citrix/ICAClient || die mmove opt/Citrix/ICAClient/config /opt/Citrix/ICAClient/ || die mmove opt/Citrix/ICAClient/keystore /opt/Citrix/ICAClient/ || die mmove opt/Citrix/ICAClient/gtk /opt/Citrix/ICAClient/ || die # minimal nls minstalldir /opt/Citrix/ICAClient/nls || die mmove opt/Citrix/ICAClient/nls/en /opt/Citrix/ICAClient/nls/ || die mmove opt/Citrix/ICAClient/nls/en.UTF-8 /opt/Citrix/ICAClient/nls/ || die # nls symlinks mmove opt/Citrix/ICAClient/nls/C /opt/Citrix/ICAClient/nls/ || die mmove opt/Citrix/ICAClient/nls/en.UTF8 /opt/Citrix/ICAClient/nls/ || die mmove opt/Citrix/ICAClient/nls/en.utf8 /opt/Citrix/ICAClient/nls/ || die # eula mmove opt/Citrix/ICAClient/eula.txt /opt/Citrix/ICAClient/ || die } src_install_ica-client-libs() { cd ${BUILDDIR}/fakeinstall minstalldir /opt/Citrix/ICAClient/lib || die mmove opt/Citrix/ICAClient/libproxy.so /opt/Citrix/ICAClient/ || die mmove opt/Citrix/ICAClient/lib/libAMSDK.so /opt/Citrix/ICAClient/lib/ || die } src_install_ica-client-wfica() { cd ${BUILDDIR}/fakeinstall minstalldir /opt/Citrix/ICAClient || die mmove opt/Citrix/ICAClient/wfica /opt/Citrix/ICAClient/ || die if [[ ${ENABLE_NOX11COMPONENTS} = 1 ]] then mmove opt/Citrix/ICAClient/wfica.X /opt/Citrix/ICAClient/ || die mmove opt/Citrix/ICAClient/wfica.no_X /opt/Citrix/ICAClient/ || die fi minstalldir /usr/bin || die mmove usr/bin/wfica /usr/bin/ || die } src_install_ica-client-pnabrowse() { cd ${BUILDDIR}/fakeinstall minstalldir /opt/Citrix/ICAClient/util || die mmove opt/Citrix/ICAClient/util/pnabrowse /opt/Citrix/ICAClient/util/ || die mmove opt/Citrix/ICAClient/util/pnabrowse_launch /opt/Citrix/ICAClient/util/ || die mmove opt/Citrix/ICAClient/CHARICONV.DLL /opt/Citrix/ICAClient/ || die minstalldir /usr/bin || die mmove usr/bin/pnabrowse /usr/bin/ || die } src_install_ica-client-storebrowse() { cd ${BUILDDIR}/fakeinstall minstalldir /opt/Citrix/ICAClient/util || die mmove opt/Citrix/ICAClient/util/storebrowse /opt/Citrix/ICAClient/util/ || die mmove opt/Citrix/ICAClient/AuthManagerDaemon /opt/Citrix/ICAClient/ || die mmove opt/Citrix/ICAClient/PrimaryAuthManager /opt/Citrix/ICAClient/ || die mmove opt/Citrix/ICAClient/ServiceRecord /opt/Citrix/ICAClient/ || die minstalldir /usr/bin || die mmove usr/bin/storebrowse /usr/bin/ || die } src_install_ica-client() { cd ${BUILDDIR}/fakeinstall minstalldir /opt/Citrix/ICAClient/ || die # only keep the essential files to run wfica, pnabrowse or storebrowse mmove opt/Citrix/ICAClient/PDCRYPT1.DLL /opt/Citrix/ICAClient/ || die minstalldir /opt/Citrix/ICAClient/icons || die mmove opt/Citrix/ICAClient/icons/receiver.png /opt/Citrix/ICAClient/icons/ || die minstalldir /opt/Citrix/ICAClient/keyboard || die mmove opt/Citrix/ICAClient/keyboard/keyboard.ini /opt/Citrix/ICAClient/keyboard/ || die mmove opt/Citrix/ICAClient/keyboard/automatic.kbd /opt/Citrix/ICAClient/keyboard/ || die mmove opt/Citrix/ICAClient/keyboard/linux.kbd /opt/Citrix/ICAClient/keyboard/ || die minstalldir /opt/Citrix/ICAClient/lib || die mmove opt/Citrix/ICAClient/lib/UIDialogLib.so /opt/Citrix/ICAClient/lib/ || die minstalldir /opt/Citrix/ICAClient/util || die mmove opt/Citrix/ICAClient/util/new_store /opt/Citrix/ICAClient/util/ || die } src_install_ica-client-usbdaemon() { cd ${SRCDIR}/linuxx86/linuxx86.cor/usb mcopy -a \* /opt/Citrix/ICAClient || die mdelete /opt/Citrix/ICAClient/ctxusbd.rc || die minstallunit ctxusbd.service || die minstalludevrule ctxusbd.rules 85-ctxusbd.rules || die minstalldir /usr/bin || die mlink /opt/Citrix/ICAClient/ctx_usb_isactive /usr/bin/ctx_usb_isactive || die mlink /opt/Citrix/ICAClient/ctxusb /usr/bin/ctxusb || die minstalldir /usr/sbin || die mlink /opt/Citrix/ICAClient/ctxusbd /usr/sbin/ctxusbd || die minstalltmp ctxusbd.tmpfilesd ctxusbd.conf || die } src_install_ica-client-dev() { cd ${BUILDDIR}/fakeinstall # move the rest to -dev mmove etc / || die mmove opt / || die mmove usr / || die } preinstall_ica-client-common() { add_conf_prot_mask /etc/env.d } postinstall_ica-client-wfica() { if [[ ${ENABLE_NOX11COMPONENTS} = 1 ]] then # replace wfica on serversystem with no_X version if [[ -n $(magequery -n serversystem) ]] then ln -snf wfica.no_X ${MROOT}/opt/Citrix/ICAClient/wfica fi fi } postinstall_ica-client-usbdaemon() { if [[ ${ENABLE_USBDAEMON} = 1 ]] then [ -d ${MROOT}/run/ctxusbd ] || install -d ${MROOT}/run/ctxusbd mstartunit ctxusbd.service fi } postremove_ica-client-usbdaemon() { # always try to stop this service mstopunit ctxusbd.service }