df0c9f8737
OBS-URL: https://build.opensuse.org/package/show/LibreOffice:Factory/libreoffice?expand=0&rev=206
94 lines
2.8 KiB
Bash
94 lines
2.8 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
usage() {
|
|
echo "This script (un)links or unlinks the given to/from libreoffice home"
|
|
echo
|
|
echo "Usage: ${0##*/} [--unlink] filelist"
|
|
}
|
|
|
|
change_linking() {
|
|
local libdir="$1"
|
|
local filelist="$2"
|
|
local linkfile=""
|
|
local linkdir=""
|
|
|
|
# Decide if we are linking or wiping first
|
|
if ${link_mode}; then
|
|
# Grab all files from the proper folder
|
|
for file in `cat ${filelist} | grep "/usr/share/libreoffice" | sort`; do
|
|
# if we get ourselves folder then just create it
|
|
# it might not be around so lets be safe
|
|
if [[ -d "${file}" ]] ; then
|
|
dirname="${file/${datadir}/${libdir}}"
|
|
# if the location is already there skip it
|
|
if [[ ! -e "${dirname}" ]]; then
|
|
mkdir -p "${dirname}"
|
|
fi
|
|
continue
|
|
fi
|
|
linkfile="${file/${datadir}/${libdir}}"
|
|
# if the file is already there, skip it
|
|
# this is true when the parent folder is link
|
|
if [[ ! -e "${linkfile}" ]]; then
|
|
ln -sf "${file}" "${linkfile}" || exit 1
|
|
fi
|
|
done
|
|
else
|
|
# first just remove the symlinks
|
|
for file in `cat ${filelist} | grep "/usr/share/libreoffice" | sort`; do
|
|
linkfile=${file/${datadir}/${libdir}}
|
|
if [[ -L "${linkfile}" && ! -r "${linkfile}" && ! -d "${linkfile}" ]]; then
|
|
rm -f "${linkfile}" || exit 1
|
|
fi
|
|
done
|
|
# continue by wiping out all EMPTY dirs
|
|
# we have to be sure it is not owned by anything else
|
|
# doing in 2nd run to ensure avoiding collisions
|
|
for file in `cat ${filelist} | grep "/usr/share/libreoffice" | sort`; do
|
|
linkdir="${file/${datadir}/${libdir}}"
|
|
if [[ -d "${linkdir}" && -z `ls "${linkdir}"/*` ]]; then
|
|
# check if nothing else owns the dir
|
|
if [[ $(rpm -qf "${file}" 2>/dev/null |wc -l) == 0 ]]; then
|
|
rmdir "${linkdir}" || exit 1
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
}
|
|
|
|
# Global VARS
|
|
link_mode=true
|
|
datadir=/usr/share
|
|
libdirs=(
|
|
"/usr/lib/"
|
|
"/usr/lib64/"
|
|
"/usr/lib32/"
|
|
)
|
|
|
|
if [[ "$1" == "--unlink" ]]; then
|
|
link_mode=false
|
|
shift
|
|
fi
|
|
|
|
if [[ "$1" == "--help" ]]; then
|
|
usage
|
|
exit 0
|
|
fi
|
|
|
|
# Verify we have just one left argument which is the filelist
|
|
if [[ $# > 1 || ! -f "$1" ]]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
for libdir in ${libdirs[@]}; do
|
|
# for each dir verify there is libreoffice folder, otherwise skip
|
|
if [[ ! -d "${libdir}/libreoffice/" ]]; then
|
|
continue
|
|
fi
|
|
change_linking ${libdir} $1
|
|
# remove dangling links as they might happen when migratin from older
|
|
# libreoffice versions
|
|
find %{libdir}/libreoffice -type l -xtype l -delete
|
|
done
|