#!/bin/sh # NAME: # stage-install.sh - wrapper around install # # SYNOPSIS: # stage-install.sh [variable="value"] "args" "dest" # # DESCRIPTION: # This script is a wrapper around the normal install(1). # Its role is to add '.dirdep' files to the destination. # The variables we might use are: # # INSTALL # Path to actual install(1), default is # $REAL_INSTALL # # OBJDIR # Path to the dir where '.dirdep' was generated, # default is '.' # # _DIRDEP # Path to actual '.dirdep' file, default is # $OBJDIR/.dirdep # # The "args" and "dest" are passed as is to install(1), and if a # '.dirdep' file exists it will be linked or copied to each # "file".dirdep placed in "dest" or "dest".dirdep if it happed # to be a file rather than a directory. # # SEE ALSO: # meta.stage.mk # # RCSid: # $Id: stage-install.sh,v 1.5 2013/04/19 16:32:24 sjg Exp $ # # @(#) Copyright (c) 2013, Simon J. Gerraty # # This file is provided in the hope that it will # be of use. There is absolutely NO WARRANTY. # Permission to copy, redistribute or otherwise # use this file is hereby granted provided that # the above copyright notice and this notice are # left intact. # # Please send copies of changes and bug-fixes to: # sjg@crufty.net # setglobal INSTALL = $(REAL_INSTALL:-install) setglobal OBJDIR = '.' while : { match $1 { with *=* eval $1; shift with * break } } # if .dirdep doesn't exist, just run install and be done setglobal _DIRDEP = $(_DIRDEP:-$OBJDIR/.dirdep) test -s $_DIRDEP && setglobal EXEC = '' || setglobal EXEC = 'exec' $EXEC $INSTALL @ARGV || exit 1 # from meta.stage.mk proc LnCp { rm -f $2 2> /dev/null ln $1 $2 2> /dev/null || cp -p $1 $2 } proc StageDirdep { setglobal t = $1 if test -s $t.dirdep { cmp -s $_DIRDEP $t.dirdep && return echo "ERROR: $t installed by $[cat $t.dirdep] not $[cat $_DIRDEP]" >&2 exit 1 } LnCp $_DIRDEP $t.dirdep || exit 1 } setglobal args = @ARGV while [ $# -gt 8 ] { shift 8 } eval dest='$'$Argc if test -f $dest { # a file, there can be only one .dirdep needed StageDirdep $dest } elif test -d $dest { for f in [$args] { test -f $f || continue StageDirdep $dest/$(f##*/) } }