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