diff options
author | sjg <sjg@FreeBSD.org> | 2013-04-19 18:45:03 +0000 |
---|---|---|
committer | sjg <sjg@FreeBSD.org> | 2013-04-19 18:45:03 +0000 |
commit | 76506db45de5128ae22c941ebd030e98c023690d (patch) | |
tree | d9544fd3861e9ee52ea48469d4454f4156ad1159 /share/mk | |
parent | fc5871dce75eba44c86055567c300d53f8ea0e5a (diff) | |
download | FreeBSD-src-76506db45de5128ae22c941ebd030e98c023690d.zip FreeBSD-src-76506db45de5128ae22c941ebd030e98c023690d.tar.gz |
Add stage-install.sh so we can do away with the need to have
$STAGE_OBJTOP/include for src/include.
Diffstat (limited to 'share/mk')
-rw-r--r-- | share/mk/local.sys.mk | 6 | ||||
-rw-r--r-- | share/mk/meta.stage.mk | 15 | ||||
-rwxr-xr-x | share/mk/stage-install.sh | 98 |
3 files changed, 115 insertions, 4 deletions
diff --git a/share/mk/local.sys.mk b/share/mk/local.sys.mk index aea9a75..5d5c2c8 100644 --- a/share/mk/local.sys.mk +++ b/share/mk/local.sys.mk @@ -156,7 +156,7 @@ STAGE_SYMLINKS_DIR= ${STAGE_OBJTOP} .if ${MACHINE} != "host" CFLAGS_LAST+= -nostdinc .endif -CFLAGS_LAST+= -isystem ${STAGE_OBJTOP}/usr/include -isystem ${STAGE_OBJTOP}/include +CFLAGS_LAST+= -isystem ${STAGE_OBJTOP}/usr/include CFLAGS_LAST += ${CFLAGS_LAST.${COMPILER_TYPE}} LDFLAGS_LAST+= -B${STAGE_LIBDIR} -L${STAGE_LIBDIR} CXXFLAGS_LAST += -isystem ${STAGE_OBJTOP}/usr/include/c++/${GCCVER:U4.2} @@ -166,10 +166,10 @@ CFLAGS_LAST.clang += -isystem ${STAGE_OBJTOP}/usr/include/clang/3.2 CXXFLAGS_LAST += ${CFLAGS_LAST.${COMPILER_TYPE}} .else # if ld suppored sysroot, this would suffice -CFLAGS_LAST+= --sysroot=${STAGE_OBJTOP} -isystem ${STAGE_OBJTOP}/include +CFLAGS_LAST+= --sysroot=${STAGE_OBJTOP} .endif .endif -STAGED_INCLUDE_DIR= ${STAGE_OBJTOP}/include +STAGED_INCLUDE_DIR= ${STAGE_OBJTOP}/usr/include .if ${USE_META:Uyes} == "yes" .include "meta.sys.mk" .endif diff --git a/share/mk/meta.stage.mk b/share/mk/meta.stage.mk index 0faeef3..2f02700 100644 --- a/share/mk/meta.stage.mk +++ b/share/mk/meta.stage.mk @@ -1,4 +1,4 @@ -# $Id: meta.stage.mk,v 1.24 2013/03/23 02:25:19 sjg Exp $ +# $Id: meta.stage.mk,v 1.30 2013/04/19 16:32:57 sjg Exp $ # # @(#) Copyright (c) 2011, Simon J. Gerraty # @@ -228,4 +228,17 @@ STAGING_WAIT ?= .WAIT all: ${STAGING_WAIT} staging +.if exists(${.PARSEDIR}/stage-install.sh) && !defined(STAGE_INSTALL) +# this will run install(1) and then followup with .dirdep files. +STAGE_INSTALL := sh ${.PARSEDIR:tA}/stage-install.sh INSTALL="${INSTALL}" OBJDIR=${.OBJDIR:tA} +.endif + +# if ${INSTALL} gets run during 'all' assume it is for staging? +.if ${.TARGETS:Nall} == "" && defined(STAGE_INSTALL) +INSTALL := ${STAGE_INSTALL} +.if target(beforeinstall) +beforeinstall: .dirdep +.endif +.endif + .endif diff --git a/share/mk/stage-install.sh b/share/mk/stage-install.sh new file mode 100755 index 0000000..64d044f --- /dev/null +++ b/share/mk/stage-install.sh @@ -0,0 +1,98 @@ +#!/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 +# + +INSTALL=${REAL_INSTALL:-install} +OBJDIR=. + +while : +do + case "$1" in + *=*) eval "$1"; shift;; + *) break;; + esac +done + +# if .dirdep doesn't exist, just run install and be done +_DIRDEP=${_DIRDEP:-$OBJDIR/.dirdep} +[ -s $_DIRDEP ] && EXEC= || EXEC=exec +$EXEC $INSTALL "$@" || exit 1 + +# from meta.stage.mk +LnCp() { + rm -f $2 2> /dev/null + ln $1 $2 2> /dev/null || cp -p $1 $2 +} + +StageDirdep() { + t=$1 + if [ -s $t.dirdep ]; then + cmp -s $_DIRDEP $t.dirdep && return + echo "ERROR: $t installed by `cat $t.dirdep` not `cat $_DIRDEP`" >&2 + exit 1 + fi + LnCp $_DIRDEP $t.dirdep || exit 1 +} + +args="$@" +while [ $# -gt 8 ] +do + shift 8 +done +eval dest=\$$# +if [ -f $dest ]; then + # a file, there can be only one .dirdep needed + StageDirdep $dest +elif [ -d $dest ]; then + for f in $args + do + test -f $f || continue + StageDirdep $dest/${f##*/} + done +fi |