#!/bin/bash [ -z "$DESTDIR" ] || exit 0 set -e [ -z "$LIBEXECDIR" ] && LIBEXECDIR="/usr/libexec" [ -z "$DATADIR" ] && DATADIR="/usr/share" [ -z "$SYSTEMMAP" ] && SYSTEM_MAP="/boot/System.map-$(/bin/uname -r)" [ -z "$LIB" ] && $(eu-readelf -h /usr/bin/plymouth | grep Class | grep -q ELF64) && LIB="lib64" || LIB="lib" [ -z "$LIBDIR" ] && LIBDIR="/usr/$LIB" [ -z "$BINDIR" ] && BINDIR="/usr/bin" [ -z "$GRUB_MENU_TITLE" ] && GRUB_MENU_TITLE="Graphical Bootup" [ -z "$PLYMOUTH_LOGO_FILE" ] && PLYMOUTH_LOGO_FILE="@logofile@" INITRDDIR=$1 && shift if [ -z "$INITRDDIR" ]; then echo "usage: plymouth " 1>&2 exit 1 fi RTLD="" function get_dso_deps() { bin="$1" ; shift declare -a FILES declare -a NAMES LDSO=$(echo nash-showelfinterp $bin | /sbin/nash --forcequiet) [ -z "$LDSO" -o "$LDSO" == "$bin" ] && LDSO="$RTLD" [ -z "$LDSO" -o "$LDSO" == "$bin" ] && return 1 [ -z "$RTLD" ] && RTLD="$LDSO" # I hate shell. declare -i n=0 while read NAME I0 FILE ADDR I1 ; do [ "$FILE" == "not" ] && FILE="$FILE $ADDR" NAMES[$n]="$NAME" FILES[$n]="$FILE" let n++ done << EOF $(LD_TRACE_PRELINKING=1 LD_WARN= LD_TRACE_LOADED_OBJECTS=1 \ $LDSO $bin 2>/dev/null) EOF [ ${#FILES[*]} -eq 0 ] && return 1 # we don't want the name of the binary in the list if [ "${FILES[0]}" == "$bin" ]; then FILES[0]="" NAMES[0]="" [ ${#FILES[*]} -eq 1 ] && return 1 fi declare -i n=0 while [ $n -lt ${#FILES[*]} ]; do FILE="${FILES[$n]}" if [ "$FILE" == "not found" ]; then cat 1>&2 < /dev/stderr exit 1 fi if [ ! -f ${LIBDIR}/plymouth/${PLUGIN_NAME}.so ]; then echo "The default plymouth plugin (${PLUGIN_NAME}) doesn't exist" > /dev/stderr exit 1 fi install -m755 ${LIBDIR}/plymouth/${PLUGIN_NAME}.so ${INITRDDIR}${LIBDIR}/plymouth (cd ${INITRDDIR}${LIBDIR}/plymouth; ln -sf ${PLUGIN_NAME}.so default.so) mkdir -p ${INITRDDIR}${DATADIR}/plymouth/${PLUGIN_NAME} install -m644 ${DATADIR}/plymouth/${PLUGIN_NAME}/* ${INITRDDIR}${DATADIR}/plymouth/${PLUGIN_NAME} install -D -m644 ${DATADIR}/plymouth/${PLUGIN_NAME}/* ${INITRDDIR}${DATADIR}/plymouth/${PLUGIN_NAME}