1*7d62b00eSchristos#! /bin/bash - 2*7d62b00eSchristos# 3*7d62b00eSchristos# mkdist - make a distribution directory from a master manifest file 4*7d62b00eSchristos# 5*7d62b00eSchristos# usage: mkdist [-m manifest] [-s srcdir] [-r rootname] [-t] [-v] version 6*7d62b00eSchristos# 7*7d62b00eSchristos# SRCDIR defaults to src 8*7d62b00eSchristos# MANIFEST defaults to $SRCDIR/MANIFEST 9*7d62b00eSchristos# 10*7d62b00eSchristos# Chet Ramey 11*7d62b00eSchristos# chet@po.cwru.edu 12*7d62b00eSchristos 13*7d62b00eSchristos# Copyright (C) 1996-2002 Free Software Foundation, Inc. 14*7d62b00eSchristos# 15*7d62b00eSchristos# This program is free software: you can redistribute it and/or modify 16*7d62b00eSchristos# it under the terms of the GNU General Public License as published by 17*7d62b00eSchristos# the Free Software Foundation, either version 3 of the License, or 18*7d62b00eSchristos# (at your option) any later version. 19*7d62b00eSchristos# 20*7d62b00eSchristos# This program is distributed in the hope that it will be useful, 21*7d62b00eSchristos# but WITHOUT ANY WARRANTY; without even the implied warranty of 22*7d62b00eSchristos# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23*7d62b00eSchristos# GNU General Public License for more details. 24*7d62b00eSchristos# 25*7d62b00eSchristos# You should have received a copy of the GNU General Public License 26*7d62b00eSchristos# along with this program. If not, see <http://www.gnu.org/licenses/>. 27*7d62b00eSchristos# 28*7d62b00eSchristos 29*7d62b00eSchristosSRCDIR=src 30*7d62b00eSchristosROOTNAME=bash 31*7d62b00eSchristos 32*7d62b00eSchristosusage() 33*7d62b00eSchristos{ 34*7d62b00eSchristos echo usage: mkdist [-m manifest] [-s srcdir] [-r rootname] [-t] [-v] version 1>&2 35*7d62b00eSchristos exit 2 36*7d62b00eSchristos} 37*7d62b00eSchristos 38*7d62b00eSchristosvmsg() 39*7d62b00eSchristos{ 40*7d62b00eSchristos if [ -n "$verbose" ]; then 41*7d62b00eSchristos echo mkdist: "$@" 42*7d62b00eSchristos fi 43*7d62b00eSchristos} 44*7d62b00eSchristos 45*7d62b00eSchristoswhile getopts m:s:r:tv name 46*7d62b00eSchristosdo 47*7d62b00eSchristos case $name in 48*7d62b00eSchristos m) MANIFEST=$OPTARG ;; 49*7d62b00eSchristos s) SRCDIR=$OPTARG ;; 50*7d62b00eSchristos r) ROOTNAME=$OPTARG ;; 51*7d62b00eSchristos t) maketar=yes ;; 52*7d62b00eSchristos v) verbose=yes ;; 53*7d62b00eSchristos ?) usage ;; 54*7d62b00eSchristos esac 55*7d62b00eSchristosdone 56*7d62b00eSchristos 57*7d62b00eSchristos: ${MANIFEST:=$SRCDIR/MANIFEST} 58*7d62b00eSchristos 59*7d62b00eSchristosvmsg using $MANIFEST 60*7d62b00eSchristos 61*7d62b00eSchristosshift $(( $OPTIND - 1 )) 62*7d62b00eSchristos 63*7d62b00eSchristosif [ $# -lt 1 ]; then 64*7d62b00eSchristos usage 65*7d62b00eSchristosfi 66*7d62b00eSchristos 67*7d62b00eSchristosversion=$1 68*7d62b00eSchristosnewdir=${ROOTNAME}-$version 69*7d62b00eSchristos 70*7d62b00eSchristostarfile=${newdir}.tar 71*7d62b00eSchristos 72*7d62b00eSchristosvmsg creating distribution for $ROOTNAME version $version in $newdir 73*7d62b00eSchristos 74*7d62b00eSchristosif [ ! -d $newdir ]; then 75*7d62b00eSchristos mkdir $newdir || { echo $0: cannot make directory $newdir 1>&2 ; exit 1; } 76*7d62b00eSchristosfi 77*7d62b00eSchristos 78*7d62b00eSchristosdirmode=755 79*7d62b00eSchristosfilmode=644 80*7d62b00eSchristos 81*7d62b00eSchristoswhile read fname type mode 82*7d62b00eSchristosdo 83*7d62b00eSchristos [ -z "$fname" ] && continue 84*7d62b00eSchristos 85*7d62b00eSchristos case "$fname" in 86*7d62b00eSchristos \#*) continue ;; 87*7d62b00eSchristos esac 88*7d62b00eSchristos 89*7d62b00eSchristos case "$type" in 90*7d62b00eSchristos d) mkdir $newdir/$fname ;; 91*7d62b00eSchristos f) cp -p $SRCDIR/$fname $newdir/$fname ;; 92*7d62b00eSchristos s) ln -s $mode $newdir/$fname ; mode= ;; # symlink 93*7d62b00eSchristos l) ln $mode $newdir/$fname ; mode= ;; # hard link 94*7d62b00eSchristos *) echo "unknown file type $type" 1>&2 ;; 95*7d62b00eSchristos esac 96*7d62b00eSchristos 97*7d62b00eSchristos if [ -n "$mode" ]; then 98*7d62b00eSchristos chmod $mode $newdir/$fname 99*7d62b00eSchristos fi 100*7d62b00eSchristos 101*7d62b00eSchristosdone < $MANIFEST 102*7d62b00eSchristos 103*7d62b00eSchristos# cut off the `-alpha' in something like `2.0-alpha', leaving just the 104*7d62b00eSchristos# numeric version 105*7d62b00eSchristos#version=${version%%-*} 106*7d62b00eSchristos 107*7d62b00eSchristos#case "$version" in 108*7d62b00eSchristos#*.*.*) vers=${version%.*} ;; 109*7d62b00eSchristos#*.*) vers=${version} ;; 110*7d62b00eSchristos#esac 111*7d62b00eSchristos 112*7d62b00eSchristos#echo $vers > $newdir/.distribution 113*7d62b00eSchristos 114*7d62b00eSchristos#case "$version" in 115*7d62b00eSchristos#*.*.*) plevel=${version##*.} ;; 116*7d62b00eSchristos#*) plevel=0 ;; 117*7d62b00eSchristos#esac 118*7d62b00eSchristos#[ -z "$plevel" ] && plevel=0 119*7d62b00eSchristos#echo ${plevel} > $newdir/.patchlevel 120*7d62b00eSchristos 121*7d62b00eSchristosvmsg $newdir created 122*7d62b00eSchristos 123*7d62b00eSchristosif [ -n "$maketar" ]; then 124*7d62b00eSchristos tar cf ${tarfile} $newdir 125*7d62b00eSchristos gzip $tarfile 126*7d62b00eSchristos vmsg ${tarfile}.gz created 127*7d62b00eSchristosfi 128*7d62b00eSchristos 129*7d62b00eSchristosexit 0 130