# $Header: /magellan-cvs/smage/include/mtools.sminc,v 1.39 2008/04/20 08:28:23 niro Exp $ # some special build tools # automatical inherit mtools.minc # this will provide the service management functions INHERITS="${INHERITS} mtools" # get the pname right with splitpackages mpname() { local pname="${PNAME}" [[ ! -z ${SPLIT_PACKAGE_BASE} ]] && pname="${SPLIT_PACKAGE_BASE}" echo "${pname}" } # get the bindir right with splitpackages mbindir() { echo "${BINDIR}" } # installs initscripts # minstallrc /path/to/rc-script {destfilename} minstallrc() { local rcscript local file [[ -z "$1" ]] && die "No initscript given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then rcscript="$2" else rcscript="$(basename ${file})" fi # needed directory install -d ${BINDIR}/etc/rc.d/init.d || die # install our initscript install -v -m 0755 -o root -g root ${file} ${BINDIR}/etc/rc.d/init.d/${rcscript} || die } # installs environment files # minstallenv /path/to/envdfile {destfilename} minstallenv() { local envdfile local file [[ -z "$1" ]] && die "No envd file given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then envdfile="$2" else envdfile="$(basename ${file})" fi # needed directory install -d ${BINDIR}/etc/env.d || die # install our envfile install -v -m 0644 -o root -g root ${file} ${BINDIR}/etc/env.d/${envdfile} || die } # installs system configuration files # minstallconf /path/to/confdfile {destfilename} minstallconf() { local confdfile local file [[ -z "$1" ]] && die "No confd file given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then confdfile="$2" else confdfile="$(basename ${file})" fi # needed directory install -d ${BINDIR}/etc/conf.d || die # install our configfile install -v -m 0644 -o root -g root ${file} ${BINDIR}/etc/conf.d/${confdfile} || die } # installs system configuration files to etc # minstalletc /path/to/etcfile {destfilename} {destdir path} minstalletc() { local etcfile local file local destdir [[ -z "$1" ]] && die "No etc file given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then etcfile="$2" else etcfile="$(basename ${file})" fi if [[ -n "$3" ]] then destdir="$3" else destdir="/etc" fi # needed directory install -d ${BINDIR}/${destdir} || die # install our configfile install -v -m 0644 -o root -g root ${file} ${BINDIR}/${destdir}/${etcfile} || die } minstalludevrule() { local udevrule local file [[ -z "$1" ]] && die "No udev rule given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then udevrule="$2" else udevrule="$(basename ${file})" fi # needed directory install -d ${BINDIR}/etc/udev/rules.d || die # install our udev rule install -v -m 0644 -o root -g root ${file} ${BINDIR}/etc/udev/rules.d/${udevrule} || die } minstalludevhelper() { local udevhelper local file [[ -z "$1" ]] && die "No udev helper given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then udevhelper="$2" else udevhelper="$(basename ${file})" fi # needed directory install -d ${BINDIR}/lib/udev || die # install our udev-helper install -v -m 0755 -o root -g root ${file} ${BINDIR}/lib/udev/${udevhelper} || die } minstallhalinformation() { local halrule local file [[ -z "$1" ]] && die "No hal rule given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then halrule="$2" else halrule="$(basename ${file})" fi # needed directory install -d ${BINDIR}/usr/share/hal/fdi/information/20thirdparty || die # install our udev rule install -v -m 0644 -o root -g root ${file} ${BINDIR}/usr/share/hal/fdi/information/20thirdparty/${halrule} || die } minstallhalpolicy() { local halrule local file [[ -z "$1" ]] && die "No hal rule given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then halrule="$2" else halrule="$(basename ${file})" fi # needed directory install -d ${BINDIR}/usr/share/hal/fdi/policy/20thirdparty || die # install our udev rule install -v -m 0644 -o root -g root ${file} ${BINDIR}/usr/share/hal/fdi/policy/20thirdparty/${halrule} || die } minstallhalpreprobe() { local halrule local file [[ -z "$1" ]] && die "No hal rule given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then halrule="$2" else halrule="$(basename ${file})" fi # needed directory install -d ${BINDIR}/usr/share/hal/fdi/preprobe/10osvendor || die # install our udev rule install -v -m 0644 -o root -g root ${file} ${BINDIR}/usr/share/hal/fdi/preprobe/10osvendor/${halrule} || die } # install man files to appropiate dirs # minstallman /path/to/manfile.foo minstallman() { local manfile local mandir local file [[ -z "$@" ]] && die "No man file given" for file in $@ do manfile="$(basename ${file})" mandir="man${manfile##*.}" install -d ${BINDIR}/usr/share/man/${mandir} || die install -v -m0644 ${file} ${BINDIR}/usr/share/man/${mandir}/${manfile} || die done } # install info files to appropiate dirs # minstallinfo /path/to/infofile.foo minstallinfo() { local file [[ -z "$@" ]] && die "No info file given" for file in $@ do install -d ${BINDIR}/usr/share/info || die install -v -m0644 ${file} ${BINDIR}/usr/share/info/$(basename ${file}) || die done } # install html files to appropiate dirs # minstallhtml /path/to/infofile.foo minstallhtml() { local file local subfile local prefix local subprefix # handle prefix case "$1" in --prefix|-p) shift; prefix="$1"; shift ;; esac [[ -z "$@" ]] && die "No html file given" for file in $@ do install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER}/html${prefix} || die if [[ -d ${file} ]] then for subfile in ${file}/* do subprefix="$(dirname ${subfile/$(dirname ${file})/})" subprefix="${prefix}${subprefix}/" minstallhtml --prefix ${subprefix} ${subfile} || die done else install -v -m0644 ${file} ${BINDIR}/usr/share/doc/${PNAME}-${PVER}/html/${prefix}$(basename ${file}) || die fi done } # install pixmaps to appropiate dirs # minstallpixmap srcname destname {/path/to} minstallpixmap() { local file local destdir local destfile [[ -z "$1" ]] && die "No pixmap given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then destfile="$2" else destfile="$(basename ${file})" fi if [[ -n "$3" ]] then destdir="$3" else destdir="/usr/share/pixmaps" fi # needed directory install -d ${BINDIR}/${destdir} || die # install our pixmap install -v -m 0644 -o root -g root ${file} ${BINDIR}/${destdir}/${destfile} || die } # installs pam configuration files # minstallpam /path/to/pamfile {destfilename} minstallpam() { local pamfile local file [[ -z "$1" ]] && die "No pam file given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then pamfile="$2" else pamfile="$(basename ${file})" fi # needed directory install -d ${BINDIR}/etc/pam.d || die # install our configfile install -v -m 0644 -o root -g root ${file} ${BINDIR}/etc/pam.d/${pamfile} || die } # installs cronjobs # minstallcron [hourly|daily|weekly|monthly] /path/to/cronfile {destfilename} minstallcron() { local cronfile local loop local file [[ -z "$1" ]] && die "No loop rythem given [hourly|daily|weekly|monthly]" [[ -z "$2" ]] && die "No cronfile given" loop="$1" # if no fullpath given use file from sourcedir if [[ -z $(dirname $2) ]] || [[ $(dirname $2) = . ]] then file="${SOURCEDIR}/$(mpname)/$2" else file="$2" fi if [[ -n "$3" ]] then cronfile="$3" else cronfile="$(basename ${file})" fi # needed directory install -m0750 -d ${BINDIR}/etc/cron.${loop} || die # install our cronfile install -v -m 0750 -o root -g root ${file} ${BINDIR}/etc/cron.${loop}/${cronfile} || die } # installs logrotate configuration files # minstallpam /path/to/logrotatefile {destfilename} minstalllog() { local logfile local file [[ -z "$1" ]] && die "No logrotate file given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then logfile="$2" else logfile="$(basename ${file})" fi # needed directory install -d ${BINDIR}/etc/logrotate.d || die # install our configfile install -v -m 0644 -o root -g root ${file} ${BINDIR}/etc/logrotate.d/${logfile} || die } # installs given directories # minstalldir /path/to/dest/dir {/path/to/dest/dirN} minstalldir() { local argv="$@" local dest [[ -z ${argv} ]] && die "No dest dir given" for dest in ${argv} do [[ -d ${BINDIR}${dest} ]] && continue install -v -d ${BINDIR}/${dest} || die done } # install files to given path (defaults to /usr/bin) # minstallfile {-s} /path/to/file {/path/to/dest} minstallfile() { local file local dest [[ -z $1 ]] && die "No etc file given" if [[ $1 = -s ]] then file="${SOURCEDIR}/$(mpname)/$2" dest="$3" if [[ -z $3 ]] then dest=/usr/bin install -d ${BINDIR}/${dest} || die fi else file="$1" dest="$2" if [[ -z $2 ]] then dest=/usr/bin install -d ${BINDIR}/${dest} || die fi fi # install our configfile install -v -m 0644 -o root -g root ${file} ${BINDIR}/${dest} || die } # installs executables to given path # minstallexec {-s} /path/to/exec {/path/to/dest} minstallexec() { local file local dest [[ -z $1 ]] && die "No file given" if [[ $1 = -s ]] then file="${SOURCEDIR}/$(mpname)/$2" dest="$3" if [[ -z $3 ]] then dest=/usr/bin install -d ${BINDIR}/${dest} || die fi else file="$1" dest="$2" if [[ -z $2 ]] then dest=/usr/bin install -d ${BINDIR}/${dest} || die fi fi # install our configfile install -v -m 0755 -o root -g root ${file} ${BINDIR}/${dest} || die } # installs executables to given path # minstalllib {-s} /path/to/exec {/path/to/dest} minstalllib() { local file local dest local verbose="-v" # check for busybox as it doesn'tz support 'ln -v' [[ $(readlink $(which ln)) = */busybox ]] && verbose="" [[ -z $1 ]] && die "No file given" if [[ $1 = -s ]] then file="${SOURCEDIR}/$(mpname)/$2" dest="$3" if [[ -z $3 ]] then dest=/usr/$(mlibdir) install -d ${BINDIR}/${dest} || die fi else file="$1" dest="$2" if [[ -z $2 ]] then dest=/usr/$(mlibdir) install -d ${BINDIR}/${dest} || die fi fi # install our library install -v -m 0755 -o root -g root ${file} ${BINDIR}/${dest} || die # create libtool symlinks # 1. - library.so.1.0.0 -> library.so.1.0 if [ "${file%.*}" != *.so ] then ln ${verbose} -snf $(basename ${file}) ${BINDIR}/${dest}/$(basename ${file%.*}) fi # 2. - library.so.1.0.0 -> library.so.1 if [ "${file%.*.*}" != *.so ] then ln ${verbose} -snf $(basename ${file}) ${BINDIR}/${dest}/$(basename ${file%.*.*}) fi } mcopy() { local source="$1" local dest="$2" local opts # recursive if [[ $1 = -r ]] || [[ $1 = -R ]] then opts="--recursive" source="$2" dest="$3" fi # recursive if [[ $1 = -rf ]] || [[ $1 = -fr ]] || [[ $1 = -Rf ]] || [[ $1 = -fR ]] then opts="--recursive --force" source="$2" dest="$3" fi [[ -z ${source} ]] && die "No source given." [[ -z ${dest} ]] && die "No dest given." cp -v ${opts} ${source} ${BINDIR}/${dest} || die } mmove() { local source="$1" local dest="$2" local opts # force if [[ $1 = -f ]] then opts="--force" source="$2" dest="$3" fi [[ -z ${source} ]] && die "No source given." [[ -z ${dest} ]] && die "No dest given." mv -v ${opts} ${source} ${BINDIR}/${dest} || die } # mark directories undeletable mkeepdir() { local keepdir [[ -z "$1" ]] && die "No directory given" keepdir="$1" install -v -d ${BINDIR}/${keepdir} || die touch ${BINDIR}/${keepdir}/.keep || die } # creates empty files memptyfile() { local file local path [[ -z "$1" ]] && die "No file given" file="$1" path="$(dirname ${file})" install -d ${BINDIR}/${path} || die touch ${BINDIR}/${file} || die } mchown() { local owner="$1" local path="$2" local recursive # recursive if [[ $1 = -r ]] || [[ $1 = -R ]] then local recursive="--recursive" local owner="$2" local path="$3" fi [[ -z ${owner} ]] && die "No owner given." [[ -z ${path} ]] && die "No path given." chown -v ${recursive} ${owner} ${BINDIR}/${path} || die } mchmod() { local posix="$1" local path="$2" local recursive # recursive if [[ $1 = -r ]] || [[ $1 = -R ]] then local recursive="--recursive" local posix="$2" local path="$3" fi [[ -z ${posix} ]] && die "No posix given." [[ -z ${path} ]] && die "No path given." chmod -v ${recursive} ${posix} ${BINDIR}/${path} || die } mlink() { local symlink="$1" local pathto="$2" local verbose="-v" # check for busybox as it doesn'tz support 'ln -v' [[ $(readlink $(which ln)) = */busybox ]] && verbose="" [[ -z ${symlink} ]] && die "No symlink given." [[ -z ${pathto} ]] && die "No path given." ln ${verbose} -snf ${symlink} ${BINDIR}/${pathto} || die } # installs systemd units # minstallunit /path/to/unit-file {destfilename} minstallunit() { local unit local file [[ -z "$1" ]] && die "No unit given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then unit="$2" else unit="$(basename ${file})" fi # needed directory install -d ${BINDIR}/lib/systemd/system || die # install our initscript install -v -m 0644 -o root -g root ${file} ${BINDIR}/lib/systemd/system/${unit} || die } # installs systemd tmp configs to /etc/tmpfiles.d # minstalltmp /path/to/tmpdfile {destfilename} minstalltmp() { local tmpdfile local file [[ -z "$1" ]] && die "No tmpd file given" # if no fullpath given use file from sourcedir if [[ -z $(dirname $1) ]] || [[ $(dirname $1) = . ]] then file="${SOURCEDIR}/$(mpname)/$1" else file="$1" fi if [[ -n "$2" ]] then tmpdfile="$2" else tmpdfile="$(basename ${file})" fi # needed directory install -d ${BINDIR}/etc/tmpfiles.d || die # install our tmpdfile install -v -m 0644 -o root -g root ${file} ${BINDIR}/etc/tmpfiles.d/${tmpdfile} || die } mclearconfig() { local confdir local prefix="${BINDIR}" [[ -z ${MCONFIG} ]] && die "No \$MCONFIG given!" # no bindir prefix if requested case $1 in -b|--no-bindir) prefix="";; esac confdir="$(dirname ${MCONFIG})" if [[ ! -d ${prefix}/${confdir} ]] then install -d ${prefix}/${confdir} || die fi : > ${prefix}/${MCONFIG} } maddconfig() { local argv="$1" local confdir local prefix="${BINDIR}" [[ -z ${MCONFIG} ]] && die "No \$MCONFIG given!" # no bindir prefix if requested case $1 in -b|--no-bindir) prefix=""; argv="$2" ;; esac [[ -z ${argv} ]] && die "No argument given!" confdir="$(dirname ${MCONFIG})" if [[ ! -d ${prefix}/${confdir} ]] then install -d ${prefix}/${confdir} || die fi echo "${argv}" >> ${prefix}/${MCONFIG} || die }