1#!/bin/sh 2 3# 4# Installation script 5# 6# This script ressembles the BSD "install" program, but it 7# also substitutes some patterns (TCLSH, LIBNETMAGIS, CONFFILE 8# and CONFPROG) while installing the files. 9# 10# Usage: 11# ninstall opt tclsh libnetmagis conffile confprog file ... file dir 12# with opt: [-m mode][-o owner][-g group][-d][-e sed-pattern] 13# 14 15mode=0755 16owner= 17group= 18createdir=false 19subst= 20 21usage () 22{ 23 ( 24 echo "usage: `basename $0` opt tclsh libnetmagis conffile confprog file ... file dir" 25 echo " opt: [-m mode][-o owner][-g group][-d][-e sed-pattern]" 26 echo " Warning: no shell special characters in sed-pattern (including space)" 27 ) 28} 29 30args=`getopt "dm:o:g:e:" $*` 31if [ $? != 0 ] 32then 33 usage 34 exit 1 35fi 36 37set -- $args 38 39while : 40do 41 case "$1" in 42 -d) createdir=true ; shift ;; 43 -e) subst="$subst -e $2" ; shift 2 ;; 44 -o) owner=$2 ; shift 2 ;; 45 -g) group=$2 ; shift 2 ;; 46 -m) mode=$2 ; shift 2 ;; 47 --) shift ; break ;; 48 esac 49done 50 51if [ $# -lt 6 ] 52then 53 usage 54 exit 1 55fi 56 57tclsh=$1 58libnetmagis=$2 59conffile=$3 60confprog=$4 61 62shift 4 63 64# 65# Search for dest directory (last argument) and create it if needed 66# 67 68files="" 69destdir="" 70nfiles=0 71while [ $# != 1 ] 72do 73 files=" $files $1" 74 nfiles=`expr $nfiles + 1` 75 shift 76done 77destdir="$1" 78 79# 80# Particular case : destdir is a file. In this case, there must 81# be at most one file to install. 82# 83 84dest="dir" 85if [ $createdir = true ] 86then 87 mkdir -p $destdir 88else 89 if [ $nfiles = 1 -a ! -d $destdir ] 90 then dest="file" 91 fi 92fi 93 94# 95# Process files 96# 97 98for f in $files 99do 100 b=`basename $f` 101 102 if [ $dest = "dir" ] 103 then destfile="$destdir/$b" 104 else destfile="$destdir" 105 fi 106 107 sed \ 108 -e "s|%TCLSH%|$tclsh|g" \ 109 -e "s|%LIBNETMAGIS%|$libnetmagis|g" \ 110 -e "s|%CONFFILE%|$conffile|g" \ 111 -e "s|%CONFPROG%|$confprog|g" \ 112 $subst \ 113 $f > "$destfile" \ 114 && chmod $mode "$destfile" \ 115 && if [ ! -z "$owner" ] ; then chown $owner "$destfile" ; fi \ 116 && if [ ! -z "$group" ] ; then chgrp $group "$destfile" ; fi 117 if [ $? != 0 ] 118 then 119 echo "abort." 120 exit 1 121 fi 122done 123 124exit 0 125