Message ID | 20210629073247.230001-1-uvv.mail@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Revert "build: Use the original install-sh file from SGI" | expand |
On Tue, Jun 29, 2021 at 09:32:47AM +0200, Vyacheslav Yurkov wrote: > From: Vyacheslav Yurkov <Vyacheslav.Yurkov@bruker.com> > > This reverts commit da7916f72206750cce0d0d306d3ba9094a375880. > > Old install-sh fails in cross-compilation environments like yocto. This install-sh has been used for performance reason, I'd like keep it if possible. Would you please describe the failures you hit in cross-compilation env? It'd be great if we could fix the env issue. Thanks, Eryu > > Signed-off-by: Vyacheslav Yurkov <Vyacheslav.Yurkov@bruker.com> > --- > Makefile | 1 - > include/install-sh | 352 --------------------------------------------- > 2 files changed, 353 deletions(-) > delete mode 100755 include/install-sh > > diff --git a/Makefile b/Makefile > index 86a2d399..c52daeb8 100644 > --- a/Makefile > +++ b/Makefile > @@ -61,7 +61,6 @@ endif > > configure: configure.ac > libtoolize -cfi > - cp include/install-sh . > aclocal -I m4 > autoheader > autoconf > diff --git a/include/install-sh b/include/install-sh > deleted file mode 100755 > index a19cbe31..00000000 > --- a/include/install-sh > +++ /dev/null > @@ -1,352 +0,0 @@ > -#! /bin/bash > -# > -# SPDX-License-Identifier: GPL-2.0 > -# Copyright (c) 2000-2001 Silicon Graphics, Inc. All Rights Reserved. > -# > -# This script emulates bsd install and also recognises > -# two environment variables, with the following semantics :- > -# > -# $DIST_MANIFEST - if set, the name of the file to append manifest > -# information in the following format: > -# File : f mode owner group src target > -# Directory: d mode owner group target > -# Symlink : l linkval target > -# > -# $DIST_ROOT - if set, prepend to target > -# > -# The sematics of all combinations of these two variables > -# are as follows: > -# > -# $DIST_MANIFEST? $DIST_ROOT? | Copy? Append Manifest? > -# -----------------------------+-------------------------- > -# not set not set | yes no > -# not set set | yes no > -# set not set | no yes > -# set set | yes yes > -# > -_usage() { > - echo "Usage: $prog [-o owner] [-g group] [-m mode] -d directory" > - echo "or $prog [-D] [-o owner] [-g group] [-m mode] file directory/file" > - echo "or $prog [-o owner] [-g group] [-m mode] file [file ...] directory" > - echo "or $prog -S file target (creates \"target\" symlink)" > - echo "or $prog -T lt_arg [-o owner] [-g group] [-m mode] libtool.lai directory" > - echo "" > - echo "The \$DIST_MANIFEST and \$DIST_ROOT environment variables affect the" > - echo "behaviour of this command - see comments in the script." > - echo "The -D flag is only available for the second usage, and causes" > - echo "the target directory to be created before installing the file." > - echo "" > - exit 1 > -} > - > -_chown () > -{ > - _st=255 > - if [ $# -eq 3 ] ; then > - chown $1:$2 $3 > - _st=$? > - if [ $_st -ne 0 ] ; then > - if [ $REAL_UID != '0' ] ; then > - if [ ! -f $DIST_ROOT/.chown.quiet ] ; then > - echo '===============================================' > - echo Ownership of files under ${DIST_ROOT:-/} > - echo cannot be changed > - echo '===============================================' > - if [ -n "$DIST_ROOT" ] ; then > - touch $DIST_ROOT/.chown.quiet > - fi > - fi > - _st=0 > - fi > - fi > - fi > - > - return $_st > -} > - > - > -_manifest () > -{ > - echo $* | sed -e 's/\/\//\//g' >>${DIST_MANIFEST:-/dev/null} > -} > - > -prog=`basename $0` > -HERE=`pwd` > -dflag=false > -Dflag=false > -Sflag=false > -Tflag=false > -DIRMODE=755 > -FILEMODE=644 > -OWNER=`id -u` > -GROUP=`id -g` > -REAL_UID=$OWNER > - > -# default is to install and don't append manifest > -INSTALL=true > -MANIFEST=: > - > -: ${DIST_ROOT:=${DESTDIR}} > - > -[ -n "$DIST_MANIFEST" -a -z "$DIST_ROOT" ] && INSTALL=false > -[ -n "$DIST_MANIFEST" ] && MANIFEST="_manifest" > - > -[ $# -eq 0 ] && _usage > - > -if $INSTALL > -then > - CP=cp; LN=ln; MKDIR=mkdir; CHMOD=chmod; CHOWN=_chown > -else > - CP=true; LN=true; MKDIR=true; CHMOD=true; CHOWN=true > -fi > - > -[ -n "$DIST_ROOT" -a $REAL_UID -ne 0 ] && CHOWN=true > - > -while getopts "Dcm:d:S:o:g:T:" c $* > -do > - case $c in > - c) > - ;; > - g) > - GROUP=$OPTARG > - ;; > - o) > - OWNER=$OPTARG > - ;; > - m) > - DIRMODE=`expr $OPTARG` > - FILEMODE=$DIRMODE > - ;; > - D) > - Dflag=true > - ;; > - S) > - symlink=$OPTARG > - Sflag=true > - ;; > - d) > - dir=$DIST_ROOT/$OPTARG > - dflag=true > - ;; > - T) > - lt_install=$OPTARG > - Tflag=true > - ;; > - *) > - _usage > - ;; > - esac > -done > - > -shift `expr $OPTIND - 1` > - > -status=0 > -if $dflag > -then > - # > - # first usage > - # > - $MKDIR -p $dir > - status=$? > - if [ $status -eq 0 ] > - then > - $CHMOD $DIRMODE $dir > - status=$? > - fi > - if [ $status -eq 0 ] > - then > - $CHOWN $OWNER $GROUP $dir > - status=$? > - fi > - $MANIFEST d $DIRMODE $OWNER $GROUP ${dir#$DIST_ROOT} > -elif $Sflag > -then > - # > - # fourth usage (symlink) > - # > - if [ $# -ne 1 ] > - then > - _usage > - else > - target=$DIST_ROOT/$1 > - fi > - $LN -s -f $symlink $target > - status=$? > - $MANIFEST l $symlink ${target#$DIST_ROOT} > -elif $Tflag > -then > - # > - # -T (install libs built by libtool) > - # > - if [ $# -ne 2 ] > - then > - _usage > - else > - libtool_lai=$1 > - # source the libtool variables > - if [ ! -f $libtool_lai ] > - then > - echo "$prog: Unable to find libtool library file $libtool_lai" > - exit 2 > - fi > - . ./$libtool_lai > - target=$DIST_ROOT/$2 > - fi > - case $lt_install in > - so_dot_version) > - # Loop until we find libfoo.so.x.y.z, then break out. > - for solib in $library_names > - do > - # does it have enough parts? libfoo.so.x.y.z == 5 > - cnt=`echo "$solib" | sed -e 's/\./ /g' | wc -w` > - if [ $cnt -eq 5 ] > - then > - install_name=$target/$solib > - $CP $solib $install_name > - status=$? > - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$solib ${install_name#$DIST_ROOT} > - break > - fi > - done > - ;; > - > - so_*) > - case $lt_install in > - so_dot_current) > - # ln -s libfoo.so.x.y.z to libfoo.so.x > - from_parts=5 # libfoo.so.x.y.z > - to_parts=3 # libfoo.so.x > - ;; > - so_base) > - # ln -s libfoo.so.x to libfoo.so > - from_parts=3 # libfoo.so.x > - to_parts=2 # libfoo.so > - ;; > - *) > - echo "$prog: -T $lt_install invalid" > - exit 2 > - ;; > - esac > - > - # Loop until we find the names, then break out. > - for solib in $library_names > - do > - # does it have enough parts? > - cnt=`echo "$solib" | sed -e 's/\./ /g' | wc -w` > - if [ $cnt -eq $from_parts ] > - then > - from_name=$solib > - elif [ $cnt -eq $to_parts ] > - then > - to_name=$solib > - fi > - > - if [ -n "$from_name" ] && [ -n "$to_name" ] > - then > - install_name=$target/$to_name > - $LN -s -f $from_name $install_name > - status=$? > - $MANIFEST l $from_name ${install_name#$DIST_ROOT} > - break > - fi > - done > - ;; > - old_lib) > - install_name=$target/$old_library > - $CP $old_library $install_name > - status=$? > - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$old_library ${install_name#$DIST_ROOT} > - ;; > - *) > - echo "$prog: -T $lt_install invalid" > - exit 2 > - ;; > - esac > - > - case $lt_install in > - old_lib|so_dot_version) > - if [ $status -eq 0 ] > - then > - $CHMOD $FILEMODE $install_name > - $CHOWN $OWNER $GROUP $install_name > - fi > - ;; > - esac > - > -else > - list="" > - dir="" > - if [ $# -eq 2 ] > - then > - # > - # second usage > - # > - f=$1 > - dir=$DIST_ROOT/$2 > - if $Dflag > - then > - mkdir -p `dirname $dir` > - fi > - $CP $f $dir > - status=$? > - if [ $status -eq 0 ] > - then > - if [ -f $dir/$f ] > - then > - $CHMOD $FILEMODE $dir/$f > - status=$? > - if [ $status -eq 0 ] > - then > - $CHOWN $OWNER $GROUP $dir/$f > - status=$? > - fi > - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$f ${dir#$DIST_ROOT}/$f > - else > - $CHMOD $FILEMODE $dir > - status=$? > - if [ $status -eq 0 ] > - then > - $CHOWN $OWNER $GROUP $dir > - status=$? > - fi > - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$dir ${dir#$DIST_ROOT} > - fi > - fi > - else > - # > - # third usage > - # > - n=1 > - while [ $# -gt 0 ] > - do > - if [ $# -gt 1 ] > - then > - list="$list $1" > - else > - dir=$DIST_ROOT/$1 > - fi > - shift > - done > - > - # echo DIR=$dir list=\"$list\" > - for f in $list > - do > - $CP $f $dir > - status=$? > - if [ $status -eq 0 ] > - then > - $CHMOD $FILEMODE $dir/$f > - status=$? > - if [ $status -eq 0 ] > - then > - $CHOWN $OWNER $GROUP $dir/$f > - status=$? > - fi > - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$f ${dir#$DIST_ROOT}/$f > - fi > - [ $status -ne 0 ] && break > - done > - fi > -fi > - > -exit $status > -- > 2.25.1
There are several errors I was getting actually. The first one is something like this: > | configure: error: cannot run /bin/bash ./../config.sub The problem is that yocto/oe build system has distinct stages like fetch/configure/compile/install/etc, and this error occurs during the configure stage when it tries to run automake/autoconf. When I prepend configure stage with copying of include/install-sh, it passes further, but fails at install stage with the errors like: Usage: build/tmp/work/corei7-64-oe-linux/xfstests/git-r0/git/x86_64-oe-linux-libtool [OPTION]... [MODE-ARG]... Try 'x86_64-oe-linux-libtool --help' for more information. x86_64-oe-linux-libtool: error: 'build/tmp/work/corei7-64-oe-linux/xfstests/git-r0/image/usr/xfstests/src' is not a directory make[1]: *** [Makefile:102: install] Error 1 So I honestly didn't look into what's failing there. Using up-to-date scripts just fixed the issue for me. I could keep the patch in my yocto BSP then if you don't like it. Thanks, Vyacheslav - confidential - > -----Original Message----- > From: Eryu Guan <guaneryu@gmail.com> > Sent: Sunday, July 4, 2021 11:44 > To: Vyacheslav Yurkov <uvv.mail@gmail.com> > Cc: fstests@vger.kernel.org; Yurkov, Vyacheslav > <Vyacheslav.Yurkov@bruker.com> > Subject: Re: [PATCH] Revert "build: Use the original install-sh file from SGI" > > **EXTERNAL EMAIL** > > On Tue, Jun 29, 2021 at 09:32:47AM +0200, Vyacheslav Yurkov wrote: > > From: Vyacheslav Yurkov <Vyacheslav.Yurkov@bruker.com> > > > > This reverts commit da7916f72206750cce0d0d306d3ba9094a375880. > > > > Old install-sh fails in cross-compilation environments like yocto. > > This install-sh has been used for performance reason, I'd like keep it > if possible. Would you please describe the failures you hit in > cross-compilation env? It'd be great if we could fix the env issue. > > Thanks, > Eryu > > > > > Signed-off-by: Vyacheslav Yurkov <Vyacheslav.Yurkov@bruker.com> > > --- > > Makefile | 1 - > > include/install-sh | 352 --------------------------------------------- > > 2 files changed, 353 deletions(-) > > delete mode 100755 include/install-sh > > > > diff --git a/Makefile b/Makefile > > index 86a2d399..c52daeb8 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -61,7 +61,6 @@ endif > > > > configure: configure.ac > > libtoolize -cfi > > - cp include/install-sh . > > aclocal -I m4 > > autoheader > > autoconf > > diff --git a/include/install-sh b/include/install-sh > > deleted file mode 100755 > > index a19cbe31..00000000 > > --- a/include/install-sh > > +++ /dev/null > > @@ -1,352 +0,0 @@ > > -#! /bin/bash > > -# > > -# SPDX-License-Identifier: GPL-2.0 > > -# Copyright (c) 2000-2001 Silicon Graphics, Inc. All Rights Reserved. > > -# > > -# This script emulates bsd install and also recognises > > -# two environment variables, with the following semantics :- > > -# > > -# $DIST_MANIFEST - if set, the name of the file to append manifest > > -# information in the following format: > > -# File : f mode owner group src target > > -# Directory: d mode owner group target > > -# Symlink : l linkval target > > -# > > -# $DIST_ROOT - if set, prepend to target > > -# > > -# The sematics of all combinations of these two variables > > -# are as follows: > > -# > > -# $DIST_MANIFEST? $DIST_ROOT? | Copy? Append Manifest? > > -# -----------------------------+-------------------------- > > -# not set not set | yes no > > -# not set set | yes no > > -# set not set | no yes > > -# set set | yes yes > > -# > > -_usage() { > > - echo "Usage: $prog [-o owner] [-g group] [-m mode] -d directory" > > - echo "or $prog [-D] [-o owner] [-g group] [-m mode] file directory/file" > > - echo "or $prog [-o owner] [-g group] [-m mode] file [file ...] directory" > > - echo "or $prog -S file target (creates \"target\" symlink)" > > - echo "or $prog -T lt_arg [-o owner] [-g group] [-m mode] libtool.lai > directory" > > - echo "" > > - echo "The \$DIST_MANIFEST and \$DIST_ROOT environment variables > affect the" > > - echo "behaviour of this command - see comments in the script." > > - echo "The -D flag is only available for the second usage, and causes" > > - echo "the target directory to be created before installing the file." > > - echo "" > > - exit 1 > > -} > > - > > -_chown () > > -{ > > - _st=255 > > - if [ $# -eq 3 ] ; then > > - chown $1:$2 $3 > > - _st=$? > > - if [ $_st -ne 0 ] ; then > > - if [ $REAL_UID != '0' ] ; then > > - if [ ! -f $DIST_ROOT/.chown.quiet ] ; then > > - echo > '===============================================' > > - echo Ownership of files under ${DIST_ROOT:-/} > > - echo cannot be changed > > - echo > '===============================================' > > - if [ -n "$DIST_ROOT" ] ; then > > - touch $DIST_ROOT/.chown.quiet > > - fi > > - fi > > - _st=0 > > - fi > > - fi > > - fi > > - > > - return $_st > > -} > > - > > - > > -_manifest () > > -{ > > - echo $* | sed -e 's/\/\//\//g' >>${DIST_MANIFEST:-/dev/null} > > -} > > - > > -prog=`basename $0` > > -HERE=`pwd` > > -dflag=false > > -Dflag=false > > -Sflag=false > > -Tflag=false > > -DIRMODE=755 > > -FILEMODE=644 > > -OWNER=`id -u` > > -GROUP=`id -g` > > -REAL_UID=$OWNER > > - > > -# default is to install and don't append manifest > > -INSTALL=true > > -MANIFEST=: > > - > > -: ${DIST_ROOT:=${DESTDIR}} > > - > > -[ -n "$DIST_MANIFEST" -a -z "$DIST_ROOT" ] && INSTALL=false > > -[ -n "$DIST_MANIFEST" ] && MANIFEST="_manifest" > > - > > -[ $# -eq 0 ] && _usage > > - > > -if $INSTALL > > -then > > - CP=cp; LN=ln; MKDIR=mkdir; CHMOD=chmod; CHOWN=_chown > > -else > > - CP=true; LN=true; MKDIR=true; CHMOD=true; CHOWN=true > > -fi > > - > > -[ -n "$DIST_ROOT" -a $REAL_UID -ne 0 ] && CHOWN=true > > - > > -while getopts "Dcm:d:S:o:g:T:" c $* > > -do > > - case $c in > > - c) > > - ;; > > - g) > > - GROUP=$OPTARG > > - ;; > > - o) > > - OWNER=$OPTARG > > - ;; > > - m) > > - DIRMODE=`expr $OPTARG` > > - FILEMODE=$DIRMODE > > - ;; > > - D) > > - Dflag=true > > - ;; > > - S) > > - symlink=$OPTARG > > - Sflag=true > > - ;; > > - d) > > - dir=$DIST_ROOT/$OPTARG > > - dflag=true > > - ;; > > - T) > > - lt_install=$OPTARG > > - Tflag=true > > - ;; > > - *) > > - _usage > > - ;; > > - esac > > -done > > - > > -shift `expr $OPTIND - 1` > > - > > -status=0 > > -if $dflag > > -then > > - # > > - # first usage > > - # > > - $MKDIR -p $dir > > - status=$? > > - if [ $status -eq 0 ] > > - then > > - $CHMOD $DIRMODE $dir > > - status=$? > > - fi > > - if [ $status -eq 0 ] > > - then > > - $CHOWN $OWNER $GROUP $dir > > - status=$? > > - fi > > - $MANIFEST d $DIRMODE $OWNER $GROUP ${dir#$DIST_ROOT} > > -elif $Sflag > > -then > > - # > > - # fourth usage (symlink) > > - # > > - if [ $# -ne 1 ] > > - then > > - _usage > > - else > > - target=$DIST_ROOT/$1 > > - fi > > - $LN -s -f $symlink $target > > - status=$? > > - $MANIFEST l $symlink ${target#$DIST_ROOT} > > -elif $Tflag > > -then > > - # > > - # -T (install libs built by libtool) > > - # > > - if [ $# -ne 2 ] > > - then > > - _usage > > - else > > - libtool_lai=$1 > > - # source the libtool variables > > - if [ ! -f $libtool_lai ] > > - then > > - echo "$prog: Unable to find libtool library file $libtool_lai" > > - exit 2 > > - fi > > - . ./$libtool_lai > > - target=$DIST_ROOT/$2 > > - fi > > - case $lt_install in > > - so_dot_version) > > - # Loop until we find libfoo.so.x.y.z, then break out. > > - for solib in $library_names > > - do > > - # does it have enough parts? libfoo.so.x.y.z == 5 > > - cnt=`echo "$solib" | sed -e 's/\./ /g' | wc -w` > > - if [ $cnt -eq 5 ] > > - then > > - install_name=$target/$solib > > - $CP $solib $install_name > > - status=$? > > - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$solib > ${install_name#$DIST_ROOT} > > - break > > - fi > > - done > > - ;; > > - > > - so_*) > > - case $lt_install in > > - so_dot_current) > > - # ln -s libfoo.so.x.y.z to libfoo.so.x > > - from_parts=5 # libfoo.so.x.y.z > > - to_parts=3 # libfoo.so.x > > - ;; > > - so_base) > > - # ln -s libfoo.so.x to libfoo.so > > - from_parts=3 # libfoo.so.x > > - to_parts=2 # libfoo.so > > - ;; > > - *) > > - echo "$prog: -T $lt_install invalid" > > - exit 2 > > - ;; > > - esac > > - > > - # Loop until we find the names, then break out. > > - for solib in $library_names > > - do > > - # does it have enough parts? > > - cnt=`echo "$solib" | sed -e 's/\./ /g' | wc -w` > > - if [ $cnt -eq $from_parts ] > > - then > > - from_name=$solib > > - elif [ $cnt -eq $to_parts ] > > - then > > - to_name=$solib > > - fi > > - > > - if [ -n "$from_name" ] && [ -n "$to_name" ] > > - then > > - install_name=$target/$to_name > > - $LN -s -f $from_name $install_name > > - status=$? > > - $MANIFEST l $from_name ${install_name#$DIST_ROOT} > > - break > > - fi > > - done > > - ;; > > - old_lib) > > - install_name=$target/$old_library > > - $CP $old_library $install_name > > - status=$? > > - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$old_library > ${install_name#$DIST_ROOT} > > - ;; > > - *) > > - echo "$prog: -T $lt_install invalid" > > - exit 2 > > - ;; > > - esac > > - > > - case $lt_install in > > - old_lib|so_dot_version) > > - if [ $status -eq 0 ] > > - then > > - $CHMOD $FILEMODE $install_name > > - $CHOWN $OWNER $GROUP $install_name > > - fi > > - ;; > > - esac > > - > > -else > > - list="" > > - dir="" > > - if [ $# -eq 2 ] > > - then > > - # > > - # second usage > > - # > > - f=$1 > > - dir=$DIST_ROOT/$2 > > - if $Dflag > > - then > > - mkdir -p `dirname $dir` > > - fi > > - $CP $f $dir > > - status=$? > > - if [ $status -eq 0 ] > > - then > > - if [ -f $dir/$f ] > > - then > > - $CHMOD $FILEMODE $dir/$f > > - status=$? > > - if [ $status -eq 0 ] > > - then > > - $CHOWN $OWNER $GROUP $dir/$f > > - status=$? > > - fi > > - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$f > ${dir#$DIST_ROOT}/$f > > - else > > - $CHMOD $FILEMODE $dir > > - status=$? > > - if [ $status -eq 0 ] > > - then > > - $CHOWN $OWNER $GROUP $dir > > - status=$? > > - fi > > - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$dir > ${dir#$DIST_ROOT} > > - fi > > - fi > > - else > > - # > > - # third usage > > - # > > - n=1 > > - while [ $# -gt 0 ] > > - do > > - if [ $# -gt 1 ] > > - then > > - list="$list $1" > > - else > > - dir=$DIST_ROOT/$1 > > - fi > > - shift > > - done > > - > > - # echo DIR=$dir list=\"$list\" > > - for f in $list > > - do > > - $CP $f $dir > > - status=$? > > - if [ $status -eq 0 ] > > - then > > - $CHMOD $FILEMODE $dir/$f > > - status=$? > > - if [ $status -eq 0 ] > > - then > > - $CHOWN $OWNER $GROUP $dir/$f > > - status=$? > > - fi > > - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$f > ${dir#$DIST_ROOT}/$f > > - fi > > - [ $status -ne 0 ] && break > > - done > > - fi > > -fi > > - > > -exit $status > > -- > > 2.25.1
diff --git a/Makefile b/Makefile index 86a2d399..c52daeb8 100644 --- a/Makefile +++ b/Makefile @@ -61,7 +61,6 @@ endif configure: configure.ac libtoolize -cfi - cp include/install-sh . aclocal -I m4 autoheader autoconf diff --git a/include/install-sh b/include/install-sh deleted file mode 100755 index a19cbe31..00000000 --- a/include/install-sh +++ /dev/null @@ -1,352 +0,0 @@ -#! /bin/bash -# -# SPDX-License-Identifier: GPL-2.0 -# Copyright (c) 2000-2001 Silicon Graphics, Inc. All Rights Reserved. -# -# This script emulates bsd install and also recognises -# two environment variables, with the following semantics :- -# -# $DIST_MANIFEST - if set, the name of the file to append manifest -# information in the following format: -# File : f mode owner group src target -# Directory: d mode owner group target -# Symlink : l linkval target -# -# $DIST_ROOT - if set, prepend to target -# -# The sematics of all combinations of these two variables -# are as follows: -# -# $DIST_MANIFEST? $DIST_ROOT? | Copy? Append Manifest? -# -----------------------------+-------------------------- -# not set not set | yes no -# not set set | yes no -# set not set | no yes -# set set | yes yes -# -_usage() { - echo "Usage: $prog [-o owner] [-g group] [-m mode] -d directory" - echo "or $prog [-D] [-o owner] [-g group] [-m mode] file directory/file" - echo "or $prog [-o owner] [-g group] [-m mode] file [file ...] directory" - echo "or $prog -S file target (creates \"target\" symlink)" - echo "or $prog -T lt_arg [-o owner] [-g group] [-m mode] libtool.lai directory" - echo "" - echo "The \$DIST_MANIFEST and \$DIST_ROOT environment variables affect the" - echo "behaviour of this command - see comments in the script." - echo "The -D flag is only available for the second usage, and causes" - echo "the target directory to be created before installing the file." - echo "" - exit 1 -} - -_chown () -{ - _st=255 - if [ $# -eq 3 ] ; then - chown $1:$2 $3 - _st=$? - if [ $_st -ne 0 ] ; then - if [ $REAL_UID != '0' ] ; then - if [ ! -f $DIST_ROOT/.chown.quiet ] ; then - echo '===============================================' - echo Ownership of files under ${DIST_ROOT:-/} - echo cannot be changed - echo '===============================================' - if [ -n "$DIST_ROOT" ] ; then - touch $DIST_ROOT/.chown.quiet - fi - fi - _st=0 - fi - fi - fi - - return $_st -} - - -_manifest () -{ - echo $* | sed -e 's/\/\//\//g' >>${DIST_MANIFEST:-/dev/null} -} - -prog=`basename $0` -HERE=`pwd` -dflag=false -Dflag=false -Sflag=false -Tflag=false -DIRMODE=755 -FILEMODE=644 -OWNER=`id -u` -GROUP=`id -g` -REAL_UID=$OWNER - -# default is to install and don't append manifest -INSTALL=true -MANIFEST=: - -: ${DIST_ROOT:=${DESTDIR}} - -[ -n "$DIST_MANIFEST" -a -z "$DIST_ROOT" ] && INSTALL=false -[ -n "$DIST_MANIFEST" ] && MANIFEST="_manifest" - -[ $# -eq 0 ] && _usage - -if $INSTALL -then - CP=cp; LN=ln; MKDIR=mkdir; CHMOD=chmod; CHOWN=_chown -else - CP=true; LN=true; MKDIR=true; CHMOD=true; CHOWN=true -fi - -[ -n "$DIST_ROOT" -a $REAL_UID -ne 0 ] && CHOWN=true - -while getopts "Dcm:d:S:o:g:T:" c $* -do - case $c in - c) - ;; - g) - GROUP=$OPTARG - ;; - o) - OWNER=$OPTARG - ;; - m) - DIRMODE=`expr $OPTARG` - FILEMODE=$DIRMODE - ;; - D) - Dflag=true - ;; - S) - symlink=$OPTARG - Sflag=true - ;; - d) - dir=$DIST_ROOT/$OPTARG - dflag=true - ;; - T) - lt_install=$OPTARG - Tflag=true - ;; - *) - _usage - ;; - esac -done - -shift `expr $OPTIND - 1` - -status=0 -if $dflag -then - # - # first usage - # - $MKDIR -p $dir - status=$? - if [ $status -eq 0 ] - then - $CHMOD $DIRMODE $dir - status=$? - fi - if [ $status -eq 0 ] - then - $CHOWN $OWNER $GROUP $dir - status=$? - fi - $MANIFEST d $DIRMODE $OWNER $GROUP ${dir#$DIST_ROOT} -elif $Sflag -then - # - # fourth usage (symlink) - # - if [ $# -ne 1 ] - then - _usage - else - target=$DIST_ROOT/$1 - fi - $LN -s -f $symlink $target - status=$? - $MANIFEST l $symlink ${target#$DIST_ROOT} -elif $Tflag -then - # - # -T (install libs built by libtool) - # - if [ $# -ne 2 ] - then - _usage - else - libtool_lai=$1 - # source the libtool variables - if [ ! -f $libtool_lai ] - then - echo "$prog: Unable to find libtool library file $libtool_lai" - exit 2 - fi - . ./$libtool_lai - target=$DIST_ROOT/$2 - fi - case $lt_install in - so_dot_version) - # Loop until we find libfoo.so.x.y.z, then break out. - for solib in $library_names - do - # does it have enough parts? libfoo.so.x.y.z == 5 - cnt=`echo "$solib" | sed -e 's/\./ /g' | wc -w` - if [ $cnt -eq 5 ] - then - install_name=$target/$solib - $CP $solib $install_name - status=$? - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$solib ${install_name#$DIST_ROOT} - break - fi - done - ;; - - so_*) - case $lt_install in - so_dot_current) - # ln -s libfoo.so.x.y.z to libfoo.so.x - from_parts=5 # libfoo.so.x.y.z - to_parts=3 # libfoo.so.x - ;; - so_base) - # ln -s libfoo.so.x to libfoo.so - from_parts=3 # libfoo.so.x - to_parts=2 # libfoo.so - ;; - *) - echo "$prog: -T $lt_install invalid" - exit 2 - ;; - esac - - # Loop until we find the names, then break out. - for solib in $library_names - do - # does it have enough parts? - cnt=`echo "$solib" | sed -e 's/\./ /g' | wc -w` - if [ $cnt -eq $from_parts ] - then - from_name=$solib - elif [ $cnt -eq $to_parts ] - then - to_name=$solib - fi - - if [ -n "$from_name" ] && [ -n "$to_name" ] - then - install_name=$target/$to_name - $LN -s -f $from_name $install_name - status=$? - $MANIFEST l $from_name ${install_name#$DIST_ROOT} - break - fi - done - ;; - old_lib) - install_name=$target/$old_library - $CP $old_library $install_name - status=$? - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$old_library ${install_name#$DIST_ROOT} - ;; - *) - echo "$prog: -T $lt_install invalid" - exit 2 - ;; - esac - - case $lt_install in - old_lib|so_dot_version) - if [ $status -eq 0 ] - then - $CHMOD $FILEMODE $install_name - $CHOWN $OWNER $GROUP $install_name - fi - ;; - esac - -else - list="" - dir="" - if [ $# -eq 2 ] - then - # - # second usage - # - f=$1 - dir=$DIST_ROOT/$2 - if $Dflag - then - mkdir -p `dirname $dir` - fi - $CP $f $dir - status=$? - if [ $status -eq 0 ] - then - if [ -f $dir/$f ] - then - $CHMOD $FILEMODE $dir/$f - status=$? - if [ $status -eq 0 ] - then - $CHOWN $OWNER $GROUP $dir/$f - status=$? - fi - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$f ${dir#$DIST_ROOT}/$f - else - $CHMOD $FILEMODE $dir - status=$? - if [ $status -eq 0 ] - then - $CHOWN $OWNER $GROUP $dir - status=$? - fi - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$dir ${dir#$DIST_ROOT} - fi - fi - else - # - # third usage - # - n=1 - while [ $# -gt 0 ] - do - if [ $# -gt 1 ] - then - list="$list $1" - else - dir=$DIST_ROOT/$1 - fi - shift - done - - # echo DIR=$dir list=\"$list\" - for f in $list - do - $CP $f $dir - status=$? - if [ $status -eq 0 ] - then - $CHMOD $FILEMODE $dir/$f - status=$? - if [ $status -eq 0 ] - then - $CHOWN $OWNER $GROUP $dir/$f - status=$? - fi - $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$f ${dir#$DIST_ROOT}/$f - fi - [ $status -ne 0 ] && break - done - fi -fi - -exit $status