stage-install.sh revision 284345
1220297Sadrian#!/bin/sh
2220297Sadrian
3220297Sadrian# NAME:
4220297Sadrian#	stage-install.sh - wrapper around install
5220297Sadrian#
6220297Sadrian# SYNOPSIS:
7220297Sadrian#	stage-install.sh [variable="value"] "args" "dest"
8220297Sadrian#
9220297Sadrian# DESCRIPTION:
10220297Sadrian#	This script is a wrapper around the normal install(1).
11220297Sadrian#	Its role is to add '.dirdep' files to the destination.
12220297Sadrian#	The variables we might use are:
13220297Sadrian#
14220297Sadrian#	INSTALL
15220297Sadrian#		Path to actual install(1), default is
16220297Sadrian#		$REAL_INSTALL
17220297Sadrian#
18220297Sadrian#	OBJDIR
19220297Sadrian#		Path to the dir where '.dirdep' was generated,
20220297Sadrian#		default is '.'
21220297Sadrian#
22220297Sadrian#	_DIRDEP
23220297Sadrian#		Path to actual '.dirdep' file, default is
24220297Sadrian#		$OBJDIR/.dirdep
25220297Sadrian#
26220297Sadrian#	The "args" and "dest" are passed as is to install(1), and if a
27220297Sadrian#	'.dirdep' file exists it will be linked or copied to each
28220297Sadrian#	"file".dirdep placed in "dest" or "dest".dirdep if it happed
29220297Sadrian#	to be a file rather than a directory.
30220297Sadrian#
31220297Sadrian# SEE ALSO:
32220297Sadrian#	meta.stage.mk
33220297Sadrian#	
34220297Sadrian
35220297Sadrian# RCSid:
36220297Sadrian# 	$FreeBSD: head/share/mk/stage-install.sh 284345 2015-06-13 19:20:56Z sjg $
37220297Sadrian#	$Id: stage-install.sh,v 1.5 2013/04/19 16:32:24 sjg Exp $
38220297Sadrian#
39220297Sadrian#	@(#) Copyright (c) 2013, Simon J. Gerraty
40220297Sadrian#
41220297Sadrian#	This file is provided in the hope that it will
42220297Sadrian#	be of use.  There is absolutely NO WARRANTY.
43220297Sadrian#	Permission to copy, redistribute or otherwise
44220297Sadrian#	use this file is hereby granted provided that 
45220297Sadrian#	the above copyright notice and this notice are
46220297Sadrian#	left intact. 
47220297Sadrian#      
48220297Sadrian#	Please send copies of changes and bug-fixes to:
49220297Sadrian#	sjg@crufty.net
50220297Sadrian#
51220297Sadrian
52220297SadrianINSTALL=${REAL_INSTALL:-install}
53220297SadrianOBJDIR=.
54220297Sadrian
55220297Sadrianwhile :
56220297Sadriando
57220297Sadrian    case "$1" in
58220297Sadrian    *=*) eval "$1"; shift;;
59220297Sadrian    *) break;;
60220297Sadrian    esac
61220297Sadriandone
62220297Sadrian
63220297Sadrian# if .dirdep doesn't exist, just run install and be done
64220297Sadrian_DIRDEP=${_DIRDEP:-$OBJDIR/.dirdep}
65220297Sadrian[ -s $_DIRDEP ] && EXEC= || EXEC=exec
66220297Sadrian$EXEC $INSTALL "$@" || exit 1
67220297Sadrian
68220297Sadrian# from meta.stage.mk
69220297SadrianLnCp() {
70220297Sadrian    rm -f $2 2> /dev/null
71220297Sadrian    ln $1 $2 2> /dev/null || cp -p $1 $2
72220297Sadrian}
73220297Sadrian
74220297SadrianStageDirdep() {
75220297Sadrian  t=$1
76220297Sadrian  if [ -s $t.dirdep ]; then
77220297Sadrian      cmp -s $_DIRDEP $t.dirdep && return
78220297Sadrian      echo "ERROR: $t installed by `cat $t.dirdep` not `cat $_DIRDEP`" >&2
79220297Sadrian      exit 1
80220297Sadrian  fi
81220297Sadrian  LnCp $_DIRDEP $t.dirdep || exit 1
82220297Sadrian}
83220297Sadrian
84220297Sadrianargs="$@"
85220297Sadrianwhile [ $# -gt 8 ]
86220297Sadriando
87220297Sadrian    shift 8
88220297Sadriandone
89220297Sadrianeval dest=\$$#
90220297Sadrianif [ -f $dest ]; then
91220297Sadrian    # a file, there can be only one .dirdep needed
92220297Sadrian    StageDirdep $dest
93220297Sadrianelif [ -d $dest ]; then
94220297Sadrian    for f in $args
95220297Sadrian    do
96220297Sadrian        test -f $f || continue
97220297Sadrian        StageDirdep $dest/${f##*/}
98220297Sadrian    done
99220297Sadrianfi
100220297Sadrian