Patchwork icecc-create-env: Upgrade script

login
register
mail settings
Submitter Iyad Qumei
Date Dec. 4, 2013, 5:07 p.m.
Message ID <1386176874-4286-2-git-send-email-iyadkq@gmail.com>
Download mbox | patch
Permalink /patch/62843/
State New
Headers show

Comments

Iyad Qumei - Dec. 4, 2013, 5:07 p.m.
The original icecc script does not handle toolchain content
properly, resulting in build failures, such as

   gxx: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found

This patch brings in the latest script form the icecream source, and
modifies it for use in the OE build environment.  The change was tested
with OE-Core built toolchain, and external toolchain.

Signed-off-by: Iyad Qumei <iyadkq@gmail.com>
---
 .../icecc-create-env-native/icecc-create-env       |  266 +++++++++++++++-----
 ...ive_0.1.bb => icecc-create-env-native_1.0.1.bb} |    5 +-
 2 files changed, 209 insertions(+), 62 deletions(-)
 rename meta/recipes-devtools/icecc-create-env/{icecc-create-env-native_0.1.bb => icecc-create-env-native_1.0.1.bb} (89%)
Martin Jansa - Dec. 4, 2013, 5:43 p.m.
On Wed, Dec 04, 2013 at 09:07:54AM -0800, Iyad Qumei wrote:
> The original icecc script does not handle toolchain content
> properly, resulting in build failures, such as
> 
>    gxx: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found
> 
> This patch brings in the latest script form the icecream source, and
> modifies it for use in the OE build environment.  The change was tested
> with OE-Core built toolchain, and external toolchain.
> 
> Signed-off-by: Iyad Qumei <iyadkq@gmail.com>
> ---
>  .../icecc-create-env-native/icecc-create-env       |  266 +++++++++++++++-----
>  ...ive_0.1.bb => icecc-create-env-native_1.0.1.bb} |    5 +-
>  2 files changed, 209 insertions(+), 62 deletions(-)
>  rename meta/recipes-devtools/icecc-create-env/{icecc-create-env-native_0.1.bb => icecc-create-env-native_1.0.1.bb} (89%)

NACK

> 
> diff --git a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> index 7e4dbc4..0eb2217 100755
> --- a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> +++ b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> @@ -24,12 +24,12 @@ add_file ()
>    fi
>    test -z "$name" && return
>    # ls -H isn't really the same as readlink, but
> -  # readlink is not portable enough.
> +  # readlink is not portable enough. 

Don't introduce trailing whitespaces

>    path=`ls -H $path`
>    toadd="$name=$path"
>    is_contained "$toadd" && return
>    if test -z "$silent"; then
> -  echo "adding file $toadd"
> +    echo "adding file $toadd"
>    fi
>    target_files="$target_files $toadd"
>    if test -x "$path"; then
> @@ -43,19 +43,81 @@ add_file ()
>  		#         libc.so.6 => /lib/tls/libc.so.6 (0xb7e81000)
>  		#         /lib/ld-linux.so.2 (0xb7fe8000)
>  		# covering both situations ( with => and without )
> -          for lib in `ldd "$path" | sed -n 's,^[^/]*\(/[^ ]*\).*,\1,p'`; do
> -	    test -f "$lib" || continue
> -	    # Check wether the same library also exists in the parent directory,
> -	    # and prefer that on the assumption that it is a more generic one.
> -	    local baselib=`echo "$lib" | sed 's,\(/[^/]*\)/.*\(/[^/]*\)$,\1\2,'`
> -	    test -f "$baselib" && lib=$baselib
> -	  add_file "$lib"
> -        done
> -      fi
> +           for lib in `ldd "$path" | sed -n 's,^[^/]*\(/[^ ]*\).*,\1,p'`; do
> +	     test -f "$lib" || continue
> +	     # Check wether the same library also exists in the parent directory,
> +	     # and prefer that on the assumption that it is a more generic one.
> +	     local baselib=`echo "$lib" | sed 's,\(/[^/]*\)/.*\(/[^/]*\)$,\1\2,'`
> +	     test -f "$baselib" && lib=$baselib
> +             add_file "$lib"
> +           done
> +	fi

Don't mix tabs and spaces.

>      fi
>    fi
>  }
>  
> +# returns abs path to filedir
> +abs_path()
> +{
> +    local path=$1
> +    if test -f "$path"; then
> +        pushd $(dirname $path) > /dev/null 2>&1
> +        dir_path=`pwd -P`
> +        path=$dir_path/$(basename $path)
> +        popd > /dev/null 2>&1
> +    elif test -d "$path"; then
> +        pushd $path > /dev/null 2>&1
> +        path=`pwd -P`
> +        popd > /dev/null 2>&1
> +    fi
> +    echo $path
> +}
> +
> +# Search and add file to the tarball file.
> +search_addfile()
> +{
> +    local compiler=$1
> +    local file_name=$2
> +    local file_installdir=$3
> +    local file=""
> +
> +    file=$($compiler -print-prog-name=$file_name)
> +
> +    if test -z "$file" || test "$file" = "$file_name" || ! test -e "$file"; then
> +        file=`$compiler -print-file-name=$file_name`
> +    fi
> +
> +    if ! test -e "$file"; then
> +        return 1
> +    fi
> +
> +    if test -z "$file_installdir"; then
> +        # The file is going to be added to the tarball
> +        # in the same path where the compiler found it.
> +
> +        file_installdir=$(dirname $file)
> +        abs_installdir=$(abs_path $file_installdir)
> +
> +        if test "$file_installdir" != "$abs_installdir"; then
> +            # The path where the compiler found the file is relative!
> +            # If the path where the compiler found the file is relative
> +            # to compiler's path, we must change it to be relative to
> +            # /usr/bin path where the compiler is going to be installed
> +            # in the tarball file.
> +            # Replacing relative path by abs path because the tar command
> +            # used to create the tarball file doesn't work well with
> +            # relative path as installdir.
> +
> +            compiler_basedir=$(abs_path ${compiler%/*/*})
> +            file_installdir=${abs_installdir/$compiler_basedir/"/usr"}
> +        fi
> +    fi
> +
> +    add_file "$file" "$file_installdir/$file_name"
> +
> +    return 0
> +}
> +
>  # backward compat
>  if test "$1" = "--respect-path"; then
>    shift
> @@ -67,64 +129,151 @@ if test "$1" = "--silent"; then
>   shift
>  fi
>  
> -
> -added_gcc=$1
> -shift
> -added_gxx=$1
> -shift
> -added_as=$1
> -shift
> -archive_name=$1
> -
> -if test -z "$added_gcc" || test -z "$added_gxx" ; then
> -	echo "usage: $0 <gcc_path> <g++_path>"
> -	exit 1
> +if test "$1" != "--gcc" -a "$1" != "--clang"; then
> +    # backward compat
> +    added_gcc=$1
> +    shift
> +    added_gxx=$1
> +    shift
> +    added_as=$1
> +    shift
> +    archive_name=$1
> +    shift
> +    gcc=1
> +else
> +    if test "$1" = "--gcc"; then
> +        shift
> +        added_gcc=$1
> +        shift
> +        added_gxx=$1
> +        shift
> +        added_as=$1
> +        shift
> +        archive_name=$1
> +        shift
> +        gcc=1
> +    elif test "$1" = "--clang"; then
> +        shift
> +        added_clang=$1
> +        shift
> +        added_compilerwrapper=$1
> +        shift
> +        clang=1
> +    else
> +        usage
> +        exit 1
> +    fi
>  fi
>  
> -if ! test -x "$added_gcc" ; then
> -  echo "'$added_gcc' is no executable."
> -  exit 1
> +if test -n "$gcc"; then
> +    if test -z "$added_gcc" || test -z "$added_gxx"; then
> +        usage
> +        exit 1
> +    fi
> +    if ! test -x "$added_gcc" ; then
> +        echo "'$added_gcc' is no executable."
> +        exit 1
> +    fi
> +    if ! test -x "$added_gxx" ; then
> +        echo "'$added_gxx' is no executable."
> +        exit 1
> +    fi
> +    if test -z "$added_as" ; then
> +      add_file /usr/bin/as /usr/bin/as
> +    else
> +      if ! test -x "$added_as" ; then
> +        echo "'$added_as' is no executable."
> +        exit 1
> +      fi
> +      add_file $added_as  /usr/bin/as
> +    fi
>  fi
>  
> -if ! test -x "$added_gxx" ; then
> -  echo "'$added_gcc' is no executable."
> -  exit 1
> +if test -n "$clang"; then
> +    if ! test -x "$added_clang" ; then
> +        echo "'$added_clang' is no executable."
> +        exit 1
> +    fi
> +    if ! test -x "$added_compilerwrapper" ; then
> +        echo "'$added_compilerwrapper' is no executable."
> +        exit 1
> +    fi
>  fi
>  
> +extrafiles=
> +while test "x$1" = "x--addfile"; do
> +    shift
> +    extrafiles="$extrafiles $1"
> +    shift
> +done
>  
> +tempdir=`mktemp -d /tmp/iceccenvXXXXXX`
>  
> -add_file $added_gcc /usr/bin/gcc
> -add_file $added_gxx /usr/bin/g++
> +# for testing the environment is usable at all
> +add_file /bin/true
>  
> -if test -z "$added_as" ; then
> - add_file /usr/bin/as /usr/bin/as
> -else
> - if ! test -x "$added_as" ; then
> -  echo "'$added_as' is no executable."
> -  exit 1
> - fi
> +if test -n "$gcc"; then
> +    # getting compilers abs path
> +    added_gcc=$(abs_path $added_gcc)
> +    added_gxx=$(abs_path $added_gxx)
>  
> - add_file $added_as  /usr/bin/as
> -fi
> +    if test -z "$clang"; then
> +        add_file $added_gcc /usr/bin/gcc
> +        add_file $added_gxx /usr/bin/g++
> +    else
> +        # HACK: The clang case below will add a wrapper in place of gcc, so add the real
> +        # gcc under a different name that the wrapper will call.
> +        add_file $added_gcc /usr/bin/gcc.bin
> +        add_file $added_gxx /usr/bin/g++.bin
> +    fi
> +    add_file `$added_gcc -print-prog-name=cc1` /usr/bin/cc1
> +    add_file `$added_gxx -print-prog-name=cc1plus` /usr/bin/cc1plus
> +
> +    gcc_as=$($added_gcc -print-prog-name=as)
> +    if test "$gcc_as" = "as"; then
> +      add_file /usr/bin/as
> +    else
> +      add_file "$gcc_as" /usr/bin/as
> +    fi
>  
> -add_file `$added_gcc -print-prog-name=cc1` /usr/bin/cc1
> -add_file `$added_gxx -print-prog-name=cc1plus` /usr/bin/cc1plus
> -specfile=`$added_gcc -print-file-name=specs`
> -if test -n "$specfile" && test -e "$specfile"; then
> -  add_file "$specfile"
> +    search_addfile $added_gcc specs
> +    search_addfile $added_gcc liblto_plugin.so
>  fi
>  
> -ltofile=`$added_gcc -print-prog-name=lto1`
> -pluginfile="${ltofile%lto1}liblto_plugin.so"
> -if test -r "$pluginfile"
> -then
> -  add_file $pluginfile  ${pluginfile#*usr}
> -  add_file $pluginfile  /usr${pluginfile#*usr}
> +if test -n "$clang"; then
> +    add_file $added_clang /usr/bin/clang
> +    # HACK: Older icecream remotes have /usr/bin/{gcc|g++} hardcoded and wouldn't
> +    # call /usr/bin/clang at all. So include a wrapper binary that will call gcc or clang
> +    # depending on an extra argument added by icecream.
> +    add_file $added_compilerwrapper /usr/bin/gcc
> +    add_file $added_compilerwrapper /usr/bin/g++
> +
> +    add_file $($added_clang -print-prog-name=as) /usr/bin/as
> +
> +    # clang always uses its internal .h files
> +    clangincludes=$(dirname $($added_clang -print-file-name=include/limits.h))
> +    clangprefix=$(dirname $(dirname $added_clang))
> +    for file in $(find $clangincludes -type f); do
> +      # get path without ..
> +      destfile=$(readlink -e $file)
> +      # and convert from <prefix> to /usr if needed
> +      destfile=$(echo $destfile | sed "s#$clangprefix#/usr#" )
> +      add_file "$file" "$destfile"
> +    done
>  fi
>  
> -tempdir=`mktemp -d /tmp/iceccenvXXXXXX`
> +for extrafile in $extrafiles; do
> +    add_file $extrafile
> +done
> +
> +# IKLQ ?
> +# special case for weird multilib setups
> +for dir in /lib /lib64 /usr/lib /usr/lib64; do
> +    test -L $dir && cp -p $dir $tempdir$dir
> +done
> +
>  new_target_files=
> -for i in $target_files; do
> +for i in $target_files; do 

Don't introduce trailing whitespaces

>   case $i in
>     *=/*)
>      target=`echo $i | cut -d= -f1`
> @@ -151,11 +300,11 @@ target_files=`for i in $new_target_files; do echo $i; done | sort`
>  #if not use the md5 of all files as the archive name
>  if test -z "$archive_name"; then
>    md5sum=NONE
> -  for file in /usr/bin/md5sum /bin/md5 /usr/bin/md5; do
> -    if test -x $file; then
> -      md5sum=$file
> -      break
> -    fi
> +  for file in /usr/bin/md5sum /bin/md5 /usr/bin/md5 /sbin/md5; do
> +     if test -x $file; then
> +       md5sum=$file
> +       break
> +     fi

Don't introduce wrong indenntation.

>    done
>  
>    #calculate md5 and use it as the archive name
> @@ -190,3 +339,4 @@ tar -czhf "$mydir/$archive_name" $target_files || {
>  }
>  cd ..
>  rm -rf $tempdir
> +
> diff --git a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native_1.0.1.bb
> similarity index 89%
> rename from meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb
> rename to meta/recipes-devtools/icecc-create-env/icecc-create-env-native_1.0.1.bb
> index b04474e..c03cf5a 100644
> --- a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb
> +++ b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native_1.0.1.bb
> @@ -6,16 +6,13 @@ SECTION = "base"
>  LICENSE = "GPLv2+"
>  LIC_FILES_CHKSUM = "file://icecc-create-env;beginline=2;endline=5;md5=ae1df3d6a058bfda40b66094c5f6065f"
>  
> -PR = "r2"
> +PR = "r0"

drop

>  DEPENDS = ""
>  INHIBIT_DEFAULT_DEPS = "1"
>  
> -FILESPATH = "${FILE_DIRNAME}/${PN}/"
> -

You cannot drop it without moving file to BPN (see
http://lists.openembedded.org/pipermail/openembedded-core/2013-December/087239.html
)
>  inherit native
>  
> -PATCHTOOL = "patch"

You cannot drop it without causing dependency loop (see
http://lists.openembedded.org/pipermail/openembedded-core/2013-December/087239.html
)

>  SRC_URI = "file://icecc-create-env"
>  
>  S = "${WORKDIR}"
> -- 
> 1.7.10.4
> 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
Iyad Qumei - Dec. 4, 2013, 10:39 p.m.
On Wed, Dec 4, 2013 at 9:43 AM, Martin Jansa <martin.jansa@gmail.com> wrote:

> On Wed, Dec 04, 2013 at 09:07:54AM -0800, Iyad Qumei wrote:
> > The original icecc script does not handle toolchain content
> > properly, resulting in build failures, such as
> >
> >    gxx: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found
> >
> > This patch brings in the latest script form the icecream source, and
> > modifies it for use in the OE build environment.  The change was tested
> > with OE-Core built toolchain, and external toolchain.
> >
> > Signed-off-by: Iyad Qumei <iyadkq@gmail.com>
> > ---
> >  .../icecc-create-env-native/icecc-create-env       |  266
> +++++++++++++++-----
> >  ...ive_0.1.bb => icecc-create-env-native_1.0.1.bb} |    5 +-
> >  2 files changed, 209 insertions(+), 62 deletions(-)
> >  rename meta/recipes-devtools/icecc-create-env/{
> icecc-create-env-native_0.1.bb => icecc-create-env-native_1.0.1.bb} (89%)
>
> NACK
>
> What are you trying to say?
This patch was created per instructions on how submit patches.



> >
> > diff --git
> a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> > index 7e4dbc4..0eb2217 100755
> > ---
> a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> > +++
> b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> > @@ -24,12 +24,12 @@ add_file ()
> >    fi
> >    test -z "$name" && return
> >    # ls -H isn't really the same as readlink, but
> > -  # readlink is not portable enough.
> > +  # readlink is not portable enough.
>
> Don't introduce trailing whitespaces
>

There is no space problems here, I checked it in vi, and indentation looks
consistent in the context.

>
> >    path=`ls -H $path`
> >    toadd="$name=$path"
> >    is_contained "$toadd" && return
> >    if test -z "$silent"; then
> > -  echo "adding file $toadd"
> > +    echo "adding file $toadd"
> >    fi
> >    target_files="$target_files $toadd"
> >    if test -x "$path"; then
> > @@ -43,19 +43,81 @@ add_file ()
> >               #         libc.so.6 => /lib/tls/libc.so.6 (0xb7e81000)
> >               #         /lib/ld-linux.so.2 (0xb7fe8000)
> >               # covering both situations ( with => and without )
> > -          for lib in `ldd "$path" | sed -n 's,^[^/]*\(/[^
> ]*\).*,\1,p'`; do
> > -         test -f "$lib" || continue
> > -         # Check wether the same library also exists in the parent
> directory,
> > -         # and prefer that on the assumption that it is a more generic
> one.
> > -         local baselib=`echo "$lib" | sed
> 's,\(/[^/]*\)/.*\(/[^/]*\)$,\1\2,'`
> > -         test -f "$baselib" && lib=$baselib
> > -       add_file "$lib"
> > -        done
> > -      fi
> > +           for lib in `ldd "$path" | sed -n 's,^[^/]*\(/[^
> ]*\).*,\1,p'`; do
> > +          test -f "$lib" || continue
> > +          # Check wether the same library also exists in the parent
> directory,
> > +          # and prefer that on the assumption that it is a more generic
> one.
> > +          local baselib=`echo "$lib" | sed
> 's,\(/[^/]*\)/.*\(/[^/]*\)$,\1\2,'`
> > +          test -f "$baselib" && lib=$baselib
> > +             add_file "$lib"
> > +           done
> > +     fi
>
> Don't mix tabs and spaces.
>
> fixed.


> >      fi
> >    fi
> >  }
> >
> > +# returns abs path to filedir
> > +abs_path()
> > +{
> > +    local path=$1
> > +    if test -f "$path"; then
> > +        pushd $(dirname $path) > /dev/null 2>&1
> > +        dir_path=`pwd -P`
> > +        path=$dir_path/$(basename $path)
> > +        popd > /dev/null 2>&1
> > +    elif test -d "$path"; then
> > +        pushd $path > /dev/null 2>&1
> > +        path=`pwd -P`
> > +        popd > /dev/null 2>&1
> > +    fi
> > +    echo $path
> > +}
> > +
> > +# Search and add file to the tarball file.
> > +search_addfile()
> > +{
> > +    local compiler=$1
> > +    local file_name=$2
> > +    local file_installdir=$3
> > +    local file=""
> > +
> > +    file=$($compiler -print-prog-name=$file_name)
> > +
> > +    if test -z "$file" || test "$file" = "$file_name" || ! test -e
> "$file"; then
> > +        file=`$compiler -print-file-name=$file_name`
> > +    fi
> > +
> > +    if ! test -e "$file"; then
> > +        return 1
> > +    fi
> > +
> > +    if test -z "$file_installdir"; then
> > +        # The file is going to be added to the tarball
> > +        # in the same path where the compiler found it.
> > +
> > +        file_installdir=$(dirname $file)
> > +        abs_installdir=$(abs_path $file_installdir)
> > +
> > +        if test "$file_installdir" != "$abs_installdir"; then
> > +            # The path where the compiler found the file is relative!
> > +            # If the path where the compiler found the file is relative
> > +            # to compiler's path, we must change it to be relative to
> > +            # /usr/bin path where the compiler is going to be installed
> > +            # in the tarball file.
> > +            # Replacing relative path by abs path because the tar
> command
> > +            # used to create the tarball file doesn't work well with
> > +            # relative path as installdir.
> > +
> > +            compiler_basedir=$(abs_path ${compiler%/*/*})
> > +            file_installdir=${abs_installdir/$compiler_basedir/"/usr"}
> > +        fi
> > +    fi
> > +
> > +    add_file "$file" "$file_installdir/$file_name"
> > +
> > +    return 0
> > +}
> > +
> >  # backward compat
> >  if test "$1" = "--respect-path"; then
> >    shift
> > @@ -67,64 +129,151 @@ if test "$1" = "--silent"; then
> >   shift
> >  fi
> >
> > -
> > -added_gcc=$1
> > -shift
> > -added_gxx=$1
> > -shift
> > -added_as=$1
> > -shift
> > -archive_name=$1
> > -
> > -if test -z "$added_gcc" || test -z "$added_gxx" ; then
> > -     echo "usage: $0 <gcc_path> <g++_path>"
> > -     exit 1
> > +if test "$1" != "--gcc" -a "$1" != "--clang"; then
> > +    # backward compat
> > +    added_gcc=$1
> > +    shift
> > +    added_gxx=$1
> > +    shift
> > +    added_as=$1
> > +    shift
> > +    archive_name=$1
> > +    shift
> > +    gcc=1
> > +else
> > +    if test "$1" = "--gcc"; then
> > +        shift
> > +        added_gcc=$1
> > +        shift
> > +        added_gxx=$1
> > +        shift
> > +        added_as=$1
> > +        shift
> > +        archive_name=$1
> > +        shift
> > +        gcc=1
> > +    elif test "$1" = "--clang"; then
> > +        shift
> > +        added_clang=$1
> > +        shift
> > +        added_compilerwrapper=$1
> > +        shift
> > +        clang=1
> > +    else
> > +        usage
> > +        exit 1
> > +    fi
> >  fi
> >
> > -if ! test -x "$added_gcc" ; then
> > -  echo "'$added_gcc' is no executable."
> > -  exit 1
> > +if test -n "$gcc"; then
> > +    if test -z "$added_gcc" || test -z "$added_gxx"; then
> > +        usage
> > +        exit 1
> > +    fi
> > +    if ! test -x "$added_gcc" ; then
> > +        echo "'$added_gcc' is no executable."
> > +        exit 1
> > +    fi
> > +    if ! test -x "$added_gxx" ; then
> > +        echo "'$added_gxx' is no executable."
> > +        exit 1
> > +    fi
> > +    if test -z "$added_as" ; then
> > +      add_file /usr/bin/as /usr/bin/as
> > +    else
> > +      if ! test -x "$added_as" ; then
> > +        echo "'$added_as' is no executable."
> > +        exit 1
> > +      fi
> > +      add_file $added_as  /usr/bin/as
> > +    fi
> >  fi
> >
> > -if ! test -x "$added_gxx" ; then
> > -  echo "'$added_gcc' is no executable."
> > -  exit 1
> > +if test -n "$clang"; then
> > +    if ! test -x "$added_clang" ; then
> > +        echo "'$added_clang' is no executable."
> > +        exit 1
> > +    fi
> > +    if ! test -x "$added_compilerwrapper" ; then
> > +        echo "'$added_compilerwrapper' is no executable."
> > +        exit 1
> > +    fi
> >  fi
> >
> > +extrafiles=
> > +while test "x$1" = "x--addfile"; do
> > +    shift
> > +    extrafiles="$extrafiles $1"
> > +    shift
> > +done
> >
> > +tempdir=`mktemp -d /tmp/iceccenvXXXXXX`
> >
> > -add_file $added_gcc /usr/bin/gcc
> > -add_file $added_gxx /usr/bin/g++
> > +# for testing the environment is usable at all
> > +add_file /bin/true
> >
> > -if test -z "$added_as" ; then
> > - add_file /usr/bin/as /usr/bin/as
> > -else
> > - if ! test -x "$added_as" ; then
> > -  echo "'$added_as' is no executable."
> > -  exit 1
> > - fi
> > +if test -n "$gcc"; then
> > +    # getting compilers abs path
> > +    added_gcc=$(abs_path $added_gcc)
> > +    added_gxx=$(abs_path $added_gxx)
> >
> > - add_file $added_as  /usr/bin/as
> > -fi
> > +    if test -z "$clang"; then
> > +        add_file $added_gcc /usr/bin/gcc
> > +        add_file $added_gxx /usr/bin/g++
> > +    else
> > +        # HACK: The clang case below will add a wrapper in place of
> gcc, so add the real
> > +        # gcc under a different name that the wrapper will call.
> > +        add_file $added_gcc /usr/bin/gcc.bin
> > +        add_file $added_gxx /usr/bin/g++.bin
> > +    fi
> > +    add_file `$added_gcc -print-prog-name=cc1` /usr/bin/cc1
> > +    add_file `$added_gxx -print-prog-name=cc1plus` /usr/bin/cc1plus
> > +
> > +    gcc_as=$($added_gcc -print-prog-name=as)
> > +    if test "$gcc_as" = "as"; then
> > +      add_file /usr/bin/as
> > +    else
> > +      add_file "$gcc_as" /usr/bin/as
> > +    fi
> >
> > -add_file `$added_gcc -print-prog-name=cc1` /usr/bin/cc1
> > -add_file `$added_gxx -print-prog-name=cc1plus` /usr/bin/cc1plus
> > -specfile=`$added_gcc -print-file-name=specs`
> > -if test -n "$specfile" && test -e "$specfile"; then
> > -  add_file "$specfile"
> > +    search_addfile $added_gcc specs
> > +    search_addfile $added_gcc liblto_plugin.so
> >  fi
> >
> > -ltofile=`$added_gcc -print-prog-name=lto1`
> > -pluginfile="${ltofile%lto1}liblto_plugin.so"
> > -if test -r "$pluginfile"
> > -then
> > -  add_file $pluginfile  ${pluginfile#*usr}
> > -  add_file $pluginfile  /usr${pluginfile#*usr}
> > +if test -n "$clang"; then
> > +    add_file $added_clang /usr/bin/clang
> > +    # HACK: Older icecream remotes have /usr/bin/{gcc|g++} hardcoded
> and wouldn't
> > +    # call /usr/bin/clang at all. So include a wrapper binary that will
> call gcc or clang
> > +    # depending on an extra argument added by icecream.
> > +    add_file $added_compilerwrapper /usr/bin/gcc
> > +    add_file $added_compilerwrapper /usr/bin/g++
> > +
> > +    add_file $($added_clang -print-prog-name=as) /usr/bin/as
> > +
> > +    # clang always uses its internal .h files
> > +    clangincludes=$(dirname $($added_clang
> -print-file-name=include/limits.h))
> > +    clangprefix=$(dirname $(dirname $added_clang))
> > +    for file in $(find $clangincludes -type f); do
> > +      # get path without ..
> > +      destfile=$(readlink -e $file)
> > +      # and convert from <prefix> to /usr if needed
> > +      destfile=$(echo $destfile | sed "s#$clangprefix#/usr#" )
> > +      add_file "$file" "$destfile"
> > +    done
> >  fi
> >
> > -tempdir=`mktemp -d /tmp/iceccenvXXXXXX`
> > +for extrafile in $extrafiles; do
> > +    add_file $extrafile
> > +done
> > +
> > +# IKLQ ?
> > +# special case for weird multilib setups
> > +for dir in /lib /lib64 /usr/lib /usr/lib64; do
> > +    test -L $dir && cp -p $dir $tempdir$dir
> > +done
> > +
> >  new_target_files=
> > -for i in $target_files; do
> > +for i in $target_files; do
>
> Don't introduce trailing whitespaces
>

fixed


> >   case $i in
> >     *=/*)
> >      target=`echo $i | cut -d= -f1`
> > @@ -151,11 +300,11 @@ target_files=`for i in $new_target_files; do echo
> $i; done | sort`
> >  #if not use the md5 of all files as the archive name
> >  if test -z "$archive_name"; then
> >    md5sum=NONE
> > -  for file in /usr/bin/md5sum /bin/md5 /usr/bin/md5; do
> > -    if test -x $file; then
> > -      md5sum=$file
> > -      break
> > -    fi
> > +  for file in /usr/bin/md5sum /bin/md5 /usr/bin/md5 /sbin/md5; do
> > +     if test -x $file; then
> > +       md5sum=$file
> > +       break
> > +     fi
>
> Don't introduce wrong indenntation.
>

Checked indentation in vi, looks consistent with context.

>
> >    done
> >
> >    #calculate md5 and use it as the archive name
> > @@ -190,3 +339,4 @@ tar -czhf "$mydir/$archive_name" $target_files || {
> >  }
> >  cd ..
> >  rm -rf $tempdir
> > +
> > diff --git a/meta/recipes-devtools/icecc-create-env/
> icecc-create-env-native_0.1.bb b/meta/recipes-devtools/icecc-create-env/
> icecc-create-env-native_1.0.1.bb
> > similarity index 89%
> > rename from meta/recipes-devtools/icecc-create-env/
> icecc-create-env-native_0.1.bb
> > rename to meta/recipes-devtools/icecc-create-env/
> icecc-create-env-native_1.0.1.bb
> > index b04474e..c03cf5a 100644
> > --- a/meta/recipes-devtools/icecc-create-env/
> icecc-create-env-native_0.1.bb
> > +++ b/meta/recipes-devtools/icecc-create-env/
> icecc-create-env-native_1.0.1.bb
> > @@ -6,16 +6,13 @@ SECTION = "base"
> >  LICENSE = "GPLv2+"
> >  LIC_FILES_CHKSUM =
> "file://icecc-create-env;beginline=2;endline=5;md5=ae1df3d6a058bfda40b66094c5f6065f"
> >
> > -PR = "r2"
> > +PR = "r0"
>
> drop
>

why, this new recipe for version 1.0.1.

>
> >  DEPENDS = ""
> >  INHIBIT_DEFAULT_DEPS = "1"
> >
> > -FILESPATH = "${FILE_DIRNAME}/${PN}/"
> > -
>
> You cannot drop it without moving file to BPN (see
>
> http://lists.openembedded.org/pipermail/openembedded-core/2013-December/087239.html
>

You are actually referring us to a patch you just submitted after my
message.  This comment must be a joke!


> )
> >  inherit native
> >
> > -PATCHTOOL = "patch"
>
> You cannot drop it without causing dependency loop (see
>
> http://lists.openembedded.org/pipermail/openembedded-core/2013-December/087239.html
>

ditto.


> )
>
> >  SRC_URI = "file://icecc-create-env"
> >
> >  S = "${WORKDIR}"
> > --
> > 1.7.10.4
> >
> > _______________________________________________
> > Openembedded-core mailing list
> > Openembedded-core@lists.openembedded.org
> > http://lists.openembedded.org/mailman/listinfo/openembedded-core
>
> --
> Martin 'JaMa' Jansa     jabber: Martin.Jansa@gmail.com
>
Iyad Qumei - Dec. 4, 2013, 11:27 p.m.
After more thinking about this, and rebuilding.  I do see both issues.
Although I did successful build last night, which I still do, quilt-native
guilt find, and icecc-create-env in sysroot is the correct version.  The
difference is how I issued the build core-minimal-image vs quilt-native and
icecc-create-env-native.

I will reinstate both definitions to the recipe. Sorry for the
misunderstanding.


>
> >  DEPENDS = ""
> >  INHIBIT_DEFAULT_DEPS = "1"
> >
> > -FILESPATH = "${FILE_DIRNAME}/${PN}/"
> > -
>
> You cannot drop it without moving file to BPN (see
>
> http://lists.openembedded.org/pipermail/openembedded-core/2013-December/087239.html
>
)
> >  inherit native
> >
> > -PATCHTOOL = "patch"
>
> You cannot drop it without causing dependency loop (see
>
> http://lists.openembedded.org/pipermail/openembedded-core/2013-December/087239.html
>
>
)
>
>
> --
> Martin 'JaMa' Jansa     jabber: Martin.Jansa@gmail.com
>

>
l
Martin Jansa - Dec. 5, 2013, 12:14 a.m.
On Wed, Dec 04, 2013 at 02:39:41PM -0800, Iyad Qumei wrote:
> On Wed, Dec 4, 2013 at 9:43 AM, Martin Jansa <martin.jansa@gmail.com> wrote:
> 
> > On Wed, Dec 04, 2013 at 09:07:54AM -0800, Iyad Qumei wrote:
> > > The original icecc script does not handle toolchain content
> > > properly, resulting in build failures, such as
> > >
> > >    gxx: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found
> > >
> > > This patch brings in the latest script form the icecream source, and
> > > modifies it for use in the OE build environment.  The change was tested
> > > with OE-Core built toolchain, and external toolchain.
> > >
> > > Signed-off-by: Iyad Qumei <iyadkq@gmail.com>
> > > ---
> > >  .../icecc-create-env-native/icecc-create-env       |  266
> > +++++++++++++++-----
> > >  ...ive_0.1.bb => icecc-create-env-native_1.0.1.bb} |    5 +-
> > >  2 files changed, 209 insertions(+), 62 deletions(-)
> > >  rename meta/recipes-devtools/icecc-create-env/{
> > icecc-create-env-native_0.1.bb => icecc-create-env-native_1.0.1.bb} (89%)
> >
> > NACK
> >
> > What are you trying to say?

http://en.wikipedia.org/wiki/NAK_(protocol_message)

> This patch was created per instructions on how submit patches.

That doesn't make it correct functionality-wise.

> > >
> > > diff --git
> > a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> > b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> > > index 7e4dbc4..0eb2217 100755
> > > ---
> > a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> > > +++
> > b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> > > @@ -24,12 +24,12 @@ add_file ()
> > >    fi
> > >    test -z "$name" && return
> > >    # ls -H isn't really the same as readlink, but
> > > -  # readlink is not portable enough.
> > > +  # readlink is not portable enough.
> >
> > Don't introduce trailing whitespaces
> >
> 
> There is no space problems here, I checked it in vi, and indentation looks
> consistent in the context.

Then there is something wrong with your vi.

You can even see it by highlighting the line with mouse in patchwork

http://patchwork.openembedded.org/patch/62843/

> 
> >
> > >    path=`ls -H $path`
> > >    toadd="$name=$path"
> > >    is_contained "$toadd" && return
> > >    if test -z "$silent"; then
> > > -  echo "adding file $toadd"
> > > +    echo "adding file $toadd"
> > >    fi
> > >    target_files="$target_files $toadd"
> > >    if test -x "$path"; then
> > > @@ -43,19 +43,81 @@ add_file ()
> > >               #         libc.so.6 => /lib/tls/libc.so.6 (0xb7e81000)
> > >               #         /lib/ld-linux.so.2 (0xb7fe8000)
> > >               # covering both situations ( with => and without )
> > > -          for lib in `ldd "$path" | sed -n 's,^[^/]*\(/[^
> > ]*\).*,\1,p'`; do
> > > -         test -f "$lib" || continue
> > > -         # Check wether the same library also exists in the parent
> > directory,
> > > -         # and prefer that on the assumption that it is a more generic
> > one.
> > > -         local baselib=`echo "$lib" | sed
> > 's,\(/[^/]*\)/.*\(/[^/]*\)$,\1\2,'`
> > > -         test -f "$baselib" && lib=$baselib
> > > -       add_file "$lib"
> > > -        done
> > > -      fi
> > > +           for lib in `ldd "$path" | sed -n 's,^[^/]*\(/[^
> > ]*\).*,\1,p'`; do
> > > +          test -f "$lib" || continue
> > > +          # Check wether the same library also exists in the parent
> > directory,
> > > +          # and prefer that on the assumption that it is a more generic
> > one.
> > > +          local baselib=`echo "$lib" | sed
> > 's,\(/[^/]*\)/.*\(/[^/]*\)$,\1\2,'`
> > > +          test -f "$baselib" && lib=$baselib
> > > +             add_file "$lib"
> > > +           done
> > > +     fi
> >
> > Don't mix tabs and spaces.
> >
> > fixed.
> 
> 
> > >      fi
> > >    fi
> > >  }
> > >
> > > +# returns abs path to filedir
> > > +abs_path()
> > > +{
> > > +    local path=$1
> > > +    if test -f "$path"; then
> > > +        pushd $(dirname $path) > /dev/null 2>&1
> > > +        dir_path=`pwd -P`
> > > +        path=$dir_path/$(basename $path)
> > > +        popd > /dev/null 2>&1
> > > +    elif test -d "$path"; then
> > > +        pushd $path > /dev/null 2>&1
> > > +        path=`pwd -P`
> > > +        popd > /dev/null 2>&1
> > > +    fi
> > > +    echo $path
> > > +}
> > > +
> > > +# Search and add file to the tarball file.
> > > +search_addfile()
> > > +{
> > > +    local compiler=$1
> > > +    local file_name=$2
> > > +    local file_installdir=$3
> > > +    local file=""
> > > +
> > > +    file=$($compiler -print-prog-name=$file_name)
> > > +
> > > +    if test -z "$file" || test "$file" = "$file_name" || ! test -e
> > "$file"; then
> > > +        file=`$compiler -print-file-name=$file_name`
> > > +    fi
> > > +
> > > +    if ! test -e "$file"; then
> > > +        return 1
> > > +    fi
> > > +
> > > +    if test -z "$file_installdir"; then
> > > +        # The file is going to be added to the tarball
> > > +        # in the same path where the compiler found it.
> > > +
> > > +        file_installdir=$(dirname $file)
> > > +        abs_installdir=$(abs_path $file_installdir)
> > > +
> > > +        if test "$file_installdir" != "$abs_installdir"; then
> > > +            # The path where the compiler found the file is relative!
> > > +            # If the path where the compiler found the file is relative
> > > +            # to compiler's path, we must change it to be relative to
> > > +            # /usr/bin path where the compiler is going to be installed
> > > +            # in the tarball file.
> > > +            # Replacing relative path by abs path because the tar
> > command
> > > +            # used to create the tarball file doesn't work well with
> > > +            # relative path as installdir.
> > > +
> > > +            compiler_basedir=$(abs_path ${compiler%/*/*})
> > > +            file_installdir=${abs_installdir/$compiler_basedir/"/usr"}
> > > +        fi
> > > +    fi
> > > +
> > > +    add_file "$file" "$file_installdir/$file_name"
> > > +
> > > +    return 0
> > > +}
> > > +
> > >  # backward compat
> > >  if test "$1" = "--respect-path"; then
> > >    shift
> > > @@ -67,64 +129,151 @@ if test "$1" = "--silent"; then
> > >   shift
> > >  fi
> > >
> > > -
> > > -added_gcc=$1
> > > -shift
> > > -added_gxx=$1
> > > -shift
> > > -added_as=$1
> > > -shift
> > > -archive_name=$1
> > > -
> > > -if test -z "$added_gcc" || test -z "$added_gxx" ; then
> > > -     echo "usage: $0 <gcc_path> <g++_path>"
> > > -     exit 1
> > > +if test "$1" != "--gcc" -a "$1" != "--clang"; then
> > > +    # backward compat
> > > +    added_gcc=$1
> > > +    shift
> > > +    added_gxx=$1
> > > +    shift
> > > +    added_as=$1
> > > +    shift
> > > +    archive_name=$1
> > > +    shift
> > > +    gcc=1
> > > +else
> > > +    if test "$1" = "--gcc"; then
> > > +        shift
> > > +        added_gcc=$1
> > > +        shift
> > > +        added_gxx=$1
> > > +        shift
> > > +        added_as=$1
> > > +        shift
> > > +        archive_name=$1
> > > +        shift
> > > +        gcc=1
> > > +    elif test "$1" = "--clang"; then
> > > +        shift
> > > +        added_clang=$1
> > > +        shift
> > > +        added_compilerwrapper=$1
> > > +        shift
> > > +        clang=1
> > > +    else
> > > +        usage
> > > +        exit 1
> > > +    fi
> > >  fi
> > >
> > > -if ! test -x "$added_gcc" ; then
> > > -  echo "'$added_gcc' is no executable."
> > > -  exit 1
> > > +if test -n "$gcc"; then
> > > +    if test -z "$added_gcc" || test -z "$added_gxx"; then
> > > +        usage
> > > +        exit 1
> > > +    fi
> > > +    if ! test -x "$added_gcc" ; then
> > > +        echo "'$added_gcc' is no executable."
> > > +        exit 1
> > > +    fi
> > > +    if ! test -x "$added_gxx" ; then
> > > +        echo "'$added_gxx' is no executable."
> > > +        exit 1
> > > +    fi
> > > +    if test -z "$added_as" ; then
> > > +      add_file /usr/bin/as /usr/bin/as
> > > +    else
> > > +      if ! test -x "$added_as" ; then
> > > +        echo "'$added_as' is no executable."
> > > +        exit 1
> > > +      fi
> > > +      add_file $added_as  /usr/bin/as
> > > +    fi
> > >  fi
> > >
> > > -if ! test -x "$added_gxx" ; then
> > > -  echo "'$added_gcc' is no executable."
> > > -  exit 1
> > > +if test -n "$clang"; then
> > > +    if ! test -x "$added_clang" ; then
> > > +        echo "'$added_clang' is no executable."
> > > +        exit 1
> > > +    fi
> > > +    if ! test -x "$added_compilerwrapper" ; then
> > > +        echo "'$added_compilerwrapper' is no executable."
> > > +        exit 1
> > > +    fi
> > >  fi
> > >
> > > +extrafiles=
> > > +while test "x$1" = "x--addfile"; do
> > > +    shift
> > > +    extrafiles="$extrafiles $1"
> > > +    shift
> > > +done
> > >
> > > +tempdir=`mktemp -d /tmp/iceccenvXXXXXX`
> > >
> > > -add_file $added_gcc /usr/bin/gcc
> > > -add_file $added_gxx /usr/bin/g++
> > > +# for testing the environment is usable at all
> > > +add_file /bin/true
> > >
> > > -if test -z "$added_as" ; then
> > > - add_file /usr/bin/as /usr/bin/as
> > > -else
> > > - if ! test -x "$added_as" ; then
> > > -  echo "'$added_as' is no executable."
> > > -  exit 1
> > > - fi
> > > +if test -n "$gcc"; then
> > > +    # getting compilers abs path
> > > +    added_gcc=$(abs_path $added_gcc)
> > > +    added_gxx=$(abs_path $added_gxx)
> > >
> > > - add_file $added_as  /usr/bin/as
> > > -fi
> > > +    if test -z "$clang"; then
> > > +        add_file $added_gcc /usr/bin/gcc
> > > +        add_file $added_gxx /usr/bin/g++
> > > +    else
> > > +        # HACK: The clang case below will add a wrapper in place of
> > gcc, so add the real
> > > +        # gcc under a different name that the wrapper will call.
> > > +        add_file $added_gcc /usr/bin/gcc.bin
> > > +        add_file $added_gxx /usr/bin/g++.bin
> > > +    fi
> > > +    add_file `$added_gcc -print-prog-name=cc1` /usr/bin/cc1
> > > +    add_file `$added_gxx -print-prog-name=cc1plus` /usr/bin/cc1plus
> > > +
> > > +    gcc_as=$($added_gcc -print-prog-name=as)
> > > +    if test "$gcc_as" = "as"; then
> > > +      add_file /usr/bin/as
> > > +    else
> > > +      add_file "$gcc_as" /usr/bin/as
> > > +    fi
> > >
> > > -add_file `$added_gcc -print-prog-name=cc1` /usr/bin/cc1
> > > -add_file `$added_gxx -print-prog-name=cc1plus` /usr/bin/cc1plus
> > > -specfile=`$added_gcc -print-file-name=specs`
> > > -if test -n "$specfile" && test -e "$specfile"; then
> > > -  add_file "$specfile"
> > > +    search_addfile $added_gcc specs
> > > +    search_addfile $added_gcc liblto_plugin.so
> > >  fi
> > >
> > > -ltofile=`$added_gcc -print-prog-name=lto1`
> > > -pluginfile="${ltofile%lto1}liblto_plugin.so"
> > > -if test -r "$pluginfile"
> > > -then
> > > -  add_file $pluginfile  ${pluginfile#*usr}
> > > -  add_file $pluginfile  /usr${pluginfile#*usr}
> > > +if test -n "$clang"; then
> > > +    add_file $added_clang /usr/bin/clang
> > > +    # HACK: Older icecream remotes have /usr/bin/{gcc|g++} hardcoded
> > and wouldn't
> > > +    # call /usr/bin/clang at all. So include a wrapper binary that will
> > call gcc or clang
> > > +    # depending on an extra argument added by icecream.
> > > +    add_file $added_compilerwrapper /usr/bin/gcc
> > > +    add_file $added_compilerwrapper /usr/bin/g++
> > > +
> > > +    add_file $($added_clang -print-prog-name=as) /usr/bin/as
> > > +
> > > +    # clang always uses its internal .h files
> > > +    clangincludes=$(dirname $($added_clang
> > -print-file-name=include/limits.h))
> > > +    clangprefix=$(dirname $(dirname $added_clang))
> > > +    for file in $(find $clangincludes -type f); do
> > > +      # get path without ..
> > > +      destfile=$(readlink -e $file)
> > > +      # and convert from <prefix> to /usr if needed
> > > +      destfile=$(echo $destfile | sed "s#$clangprefix#/usr#" )
> > > +      add_file "$file" "$destfile"
> > > +    done
> > >  fi
> > >
> > > -tempdir=`mktemp -d /tmp/iceccenvXXXXXX`
> > > +for extrafile in $extrafiles; do
> > > +    add_file $extrafile
> > > +done
> > > +
> > > +# IKLQ ?
> > > +# special case for weird multilib setups
> > > +for dir in /lib /lib64 /usr/lib /usr/lib64; do
> > > +    test -L $dir && cp -p $dir $tempdir$dir
> > > +done
> > > +
> > >  new_target_files=
> > > -for i in $target_files; do
> > > +for i in $target_files; do
> >
> > Don't introduce trailing whitespaces
> >
> 
> fixed
> 
> 
> > >   case $i in
> > >     *=/*)
> > >      target=`echo $i | cut -d= -f1`
> > > @@ -151,11 +300,11 @@ target_files=`for i in $new_target_files; do echo
> > $i; done | sort`
> > >  #if not use the md5 of all files as the archive name
> > >  if test -z "$archive_name"; then
> > >    md5sum=NONE
> > > -  for file in /usr/bin/md5sum /bin/md5 /usr/bin/md5; do
> > > -    if test -x $file; then
> > > -      md5sum=$file
> > > -      break
> > > -    fi
> > > +  for file in /usr/bin/md5sum /bin/md5 /usr/bin/md5 /sbin/md5; do
> > > +     if test -x $file; then
> > > +       md5sum=$file
> > > +       break
> > > +     fi
> >
> > Don't introduce wrong indenntation.
> >
> 
> Checked indentation in vi, looks consistent with context.

It was using 2 spaces in most cases (tabs and 1 space in few cases).

Adding one space inside that for loop changes it to 5 which cannot be
improvement, fixing all indentation in separate patch would be nice.

Adding /sbin/md5 isn't mentioned in commit message.

> 
> >
> > >    done
> > >
> > >    #calculate md5 and use it as the archive name
> > > @@ -190,3 +339,4 @@ tar -czhf "$mydir/$archive_name" $target_files || {
> > >  }
> > >  cd ..
> > >  rm -rf $tempdir
> > > +
> > > diff --git a/meta/recipes-devtools/icecc-create-env/
> > icecc-create-env-native_0.1.bb b/meta/recipes-devtools/icecc-create-env/
> > icecc-create-env-native_1.0.1.bb
> > > similarity index 89%
> > > rename from meta/recipes-devtools/icecc-create-env/
> > icecc-create-env-native_0.1.bb
> > > rename to meta/recipes-devtools/icecc-create-env/
> > icecc-create-env-native_1.0.1.bb
> > > index b04474e..c03cf5a 100644
> > > --- a/meta/recipes-devtools/icecc-create-env/
> > icecc-create-env-native_0.1.bb
> > > +++ b/meta/recipes-devtools/icecc-create-env/
> > icecc-create-env-native_1.0.1.bb
> > > @@ -6,16 +6,13 @@ SECTION = "base"
> > >  LICENSE = "GPLv2+"
> > >  LIC_FILES_CHKSUM =
> > "file://icecc-create-env;beginline=2;endline=5;md5=ae1df3d6a058bfda40b66094c5f6065f"
> > >
> > > -PR = "r2"
> > > +PR = "r0"
> >
> > drop
> >
> 
> why, this new recipe for version 1.0.1.

drop PR variable completely, we're dropping them with every PV upgrade
for couple months now.

> 
> >
> > >  DEPENDS = ""
> > >  INHIBIT_DEFAULT_DEPS = "1"
> > >
> > > -FILESPATH = "${FILE_DIRNAME}/${PN}/"
> > > -
> >
> > You cannot drop it without moving file to BPN (see
> >
> > http://lists.openembedded.org/pipermail/openembedded-core/2013-December/087239.html
> >
> 
> You are actually referring us to a patch you just submitted after my
> message.  This comment must be a joke!

If you check
http://git.shr-project.org/git/?p=oe-core.git;a=shortlog;h=refs/heads/jansa/test
http://git.shr-project.org/git/?p=oe-core.git;a=commit;h=fd2a9c5538ad5336c3822128a8880cff357754c9

you can see that I did that change 2 days ago, just haven't sent the
patch yet, but that's not the point, point is that I've noticed that
you made the same mistake as I did before, so I've sent my patch as
reference and explanation for you (and everybody else who will also try
to remove seemingly unnecessary PATCHTOOL/FILESPATH).

Sending changes not tested in master must be a joke! I believe you've
tested it in Dylan, but that's not enough.

> > )
> > >  inherit native
> > >
> > > -PATCHTOOL = "patch"
> >
> > You cannot drop it without causing dependency loop (see
> >
> > http://lists.openembedded.org/pipermail/openembedded-core/2013-December/087239.html
> >
> 
> ditto.

ditto

> 
> 
> > )
> >
> > >  SRC_URI = "file://icecc-create-env"
> > >
> > >  S = "${WORKDIR}"
> > > --
> > > 1.7.10.4
> > >
> > > _______________________________________________
> > > Openembedded-core mailing list
> > > Openembedded-core@lists.openembedded.org
> > > http://lists.openembedded.org/mailman/listinfo/openembedded-core
> >
> > --
> > Martin 'JaMa' Jansa     jabber: Martin.Jansa@gmail.com
> >

Patch

diff --git a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
index 7e4dbc4..0eb2217 100755
--- a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
+++ b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
@@ -24,12 +24,12 @@  add_file ()
   fi
   test -z "$name" && return
   # ls -H isn't really the same as readlink, but
-  # readlink is not portable enough.
+  # readlink is not portable enough. 
   path=`ls -H $path`
   toadd="$name=$path"
   is_contained "$toadd" && return
   if test -z "$silent"; then
-  echo "adding file $toadd"
+    echo "adding file $toadd"
   fi
   target_files="$target_files $toadd"
   if test -x "$path"; then
@@ -43,19 +43,81 @@  add_file ()
 		#         libc.so.6 => /lib/tls/libc.so.6 (0xb7e81000)
 		#         /lib/ld-linux.so.2 (0xb7fe8000)
 		# covering both situations ( with => and without )
-          for lib in `ldd "$path" | sed -n 's,^[^/]*\(/[^ ]*\).*,\1,p'`; do
-	    test -f "$lib" || continue
-	    # Check wether the same library also exists in the parent directory,
-	    # and prefer that on the assumption that it is a more generic one.
-	    local baselib=`echo "$lib" | sed 's,\(/[^/]*\)/.*\(/[^/]*\)$,\1\2,'`
-	    test -f "$baselib" && lib=$baselib
-	  add_file "$lib"
-        done
-      fi
+           for lib in `ldd "$path" | sed -n 's,^[^/]*\(/[^ ]*\).*,\1,p'`; do
+	     test -f "$lib" || continue
+	     # Check wether the same library also exists in the parent directory,
+	     # and prefer that on the assumption that it is a more generic one.
+	     local baselib=`echo "$lib" | sed 's,\(/[^/]*\)/.*\(/[^/]*\)$,\1\2,'`
+	     test -f "$baselib" && lib=$baselib
+             add_file "$lib"
+           done
+	fi
     fi
   fi
 }
 
+# returns abs path to filedir
+abs_path()
+{
+    local path=$1
+    if test -f "$path"; then
+        pushd $(dirname $path) > /dev/null 2>&1
+        dir_path=`pwd -P`
+        path=$dir_path/$(basename $path)
+        popd > /dev/null 2>&1
+    elif test -d "$path"; then
+        pushd $path > /dev/null 2>&1
+        path=`pwd -P`
+        popd > /dev/null 2>&1
+    fi
+    echo $path
+}
+
+# Search and add file to the tarball file.
+search_addfile()
+{
+    local compiler=$1
+    local file_name=$2
+    local file_installdir=$3
+    local file=""
+
+    file=$($compiler -print-prog-name=$file_name)
+
+    if test -z "$file" || test "$file" = "$file_name" || ! test -e "$file"; then
+        file=`$compiler -print-file-name=$file_name`
+    fi
+
+    if ! test -e "$file"; then
+        return 1
+    fi
+
+    if test -z "$file_installdir"; then
+        # The file is going to be added to the tarball
+        # in the same path where the compiler found it.
+
+        file_installdir=$(dirname $file)
+        abs_installdir=$(abs_path $file_installdir)
+
+        if test "$file_installdir" != "$abs_installdir"; then
+            # The path where the compiler found the file is relative!
+            # If the path where the compiler found the file is relative
+            # to compiler's path, we must change it to be relative to
+            # /usr/bin path where the compiler is going to be installed
+            # in the tarball file.
+            # Replacing relative path by abs path because the tar command
+            # used to create the tarball file doesn't work well with
+            # relative path as installdir.
+
+            compiler_basedir=$(abs_path ${compiler%/*/*})
+            file_installdir=${abs_installdir/$compiler_basedir/"/usr"}
+        fi
+    fi
+
+    add_file "$file" "$file_installdir/$file_name"
+
+    return 0
+}
+
 # backward compat
 if test "$1" = "--respect-path"; then
   shift
@@ -67,64 +129,151 @@  if test "$1" = "--silent"; then
  shift
 fi
 
-
-added_gcc=$1
-shift
-added_gxx=$1
-shift
-added_as=$1
-shift
-archive_name=$1
-
-if test -z "$added_gcc" || test -z "$added_gxx" ; then
-	echo "usage: $0 <gcc_path> <g++_path>"
-	exit 1
+if test "$1" != "--gcc" -a "$1" != "--clang"; then
+    # backward compat
+    added_gcc=$1
+    shift
+    added_gxx=$1
+    shift
+    added_as=$1
+    shift
+    archive_name=$1
+    shift
+    gcc=1
+else
+    if test "$1" = "--gcc"; then
+        shift
+        added_gcc=$1
+        shift
+        added_gxx=$1
+        shift
+        added_as=$1
+        shift
+        archive_name=$1
+        shift
+        gcc=1
+    elif test "$1" = "--clang"; then
+        shift
+        added_clang=$1
+        shift
+        added_compilerwrapper=$1
+        shift
+        clang=1
+    else
+        usage
+        exit 1
+    fi
 fi
 
-if ! test -x "$added_gcc" ; then
-  echo "'$added_gcc' is no executable."
-  exit 1
+if test -n "$gcc"; then
+    if test -z "$added_gcc" || test -z "$added_gxx"; then
+        usage
+        exit 1
+    fi
+    if ! test -x "$added_gcc" ; then
+        echo "'$added_gcc' is no executable."
+        exit 1
+    fi
+    if ! test -x "$added_gxx" ; then
+        echo "'$added_gxx' is no executable."
+        exit 1
+    fi
+    if test -z "$added_as" ; then
+      add_file /usr/bin/as /usr/bin/as
+    else
+      if ! test -x "$added_as" ; then
+        echo "'$added_as' is no executable."
+        exit 1
+      fi
+      add_file $added_as  /usr/bin/as
+    fi
 fi
 
-if ! test -x "$added_gxx" ; then
-  echo "'$added_gcc' is no executable."
-  exit 1
+if test -n "$clang"; then
+    if ! test -x "$added_clang" ; then
+        echo "'$added_clang' is no executable."
+        exit 1
+    fi
+    if ! test -x "$added_compilerwrapper" ; then
+        echo "'$added_compilerwrapper' is no executable."
+        exit 1
+    fi
 fi
 
+extrafiles=
+while test "x$1" = "x--addfile"; do
+    shift
+    extrafiles="$extrafiles $1"
+    shift
+done
 
+tempdir=`mktemp -d /tmp/iceccenvXXXXXX`
 
-add_file $added_gcc /usr/bin/gcc
-add_file $added_gxx /usr/bin/g++
+# for testing the environment is usable at all
+add_file /bin/true
 
-if test -z "$added_as" ; then
- add_file /usr/bin/as /usr/bin/as
-else
- if ! test -x "$added_as" ; then
-  echo "'$added_as' is no executable."
-  exit 1
- fi
+if test -n "$gcc"; then
+    # getting compilers abs path
+    added_gcc=$(abs_path $added_gcc)
+    added_gxx=$(abs_path $added_gxx)
 
- add_file $added_as  /usr/bin/as
-fi
+    if test -z "$clang"; then
+        add_file $added_gcc /usr/bin/gcc
+        add_file $added_gxx /usr/bin/g++
+    else
+        # HACK: The clang case below will add a wrapper in place of gcc, so add the real
+        # gcc under a different name that the wrapper will call.
+        add_file $added_gcc /usr/bin/gcc.bin
+        add_file $added_gxx /usr/bin/g++.bin
+    fi
+    add_file `$added_gcc -print-prog-name=cc1` /usr/bin/cc1
+    add_file `$added_gxx -print-prog-name=cc1plus` /usr/bin/cc1plus
+
+    gcc_as=$($added_gcc -print-prog-name=as)
+    if test "$gcc_as" = "as"; then
+      add_file /usr/bin/as
+    else
+      add_file "$gcc_as" /usr/bin/as
+    fi
 
-add_file `$added_gcc -print-prog-name=cc1` /usr/bin/cc1
-add_file `$added_gxx -print-prog-name=cc1plus` /usr/bin/cc1plus
-specfile=`$added_gcc -print-file-name=specs`
-if test -n "$specfile" && test -e "$specfile"; then
-  add_file "$specfile"
+    search_addfile $added_gcc specs
+    search_addfile $added_gcc liblto_plugin.so
 fi
 
-ltofile=`$added_gcc -print-prog-name=lto1`
-pluginfile="${ltofile%lto1}liblto_plugin.so"
-if test -r "$pluginfile"
-then
-  add_file $pluginfile  ${pluginfile#*usr}
-  add_file $pluginfile  /usr${pluginfile#*usr}
+if test -n "$clang"; then
+    add_file $added_clang /usr/bin/clang
+    # HACK: Older icecream remotes have /usr/bin/{gcc|g++} hardcoded and wouldn't
+    # call /usr/bin/clang at all. So include a wrapper binary that will call gcc or clang
+    # depending on an extra argument added by icecream.
+    add_file $added_compilerwrapper /usr/bin/gcc
+    add_file $added_compilerwrapper /usr/bin/g++
+
+    add_file $($added_clang -print-prog-name=as) /usr/bin/as
+
+    # clang always uses its internal .h files
+    clangincludes=$(dirname $($added_clang -print-file-name=include/limits.h))
+    clangprefix=$(dirname $(dirname $added_clang))
+    for file in $(find $clangincludes -type f); do
+      # get path without ..
+      destfile=$(readlink -e $file)
+      # and convert from <prefix> to /usr if needed
+      destfile=$(echo $destfile | sed "s#$clangprefix#/usr#" )
+      add_file "$file" "$destfile"
+    done
 fi
 
-tempdir=`mktemp -d /tmp/iceccenvXXXXXX`
+for extrafile in $extrafiles; do
+    add_file $extrafile
+done
+
+# IKLQ ?
+# special case for weird multilib setups
+for dir in /lib /lib64 /usr/lib /usr/lib64; do
+    test -L $dir && cp -p $dir $tempdir$dir
+done
+
 new_target_files=
-for i in $target_files; do
+for i in $target_files; do 
  case $i in
    *=/*)
     target=`echo $i | cut -d= -f1`
@@ -151,11 +300,11 @@  target_files=`for i in $new_target_files; do echo $i; done | sort`
 #if not use the md5 of all files as the archive name
 if test -z "$archive_name"; then
   md5sum=NONE
-  for file in /usr/bin/md5sum /bin/md5 /usr/bin/md5; do
-    if test -x $file; then
-      md5sum=$file
-      break
-    fi
+  for file in /usr/bin/md5sum /bin/md5 /usr/bin/md5 /sbin/md5; do
+     if test -x $file; then
+       md5sum=$file
+       break
+     fi
   done
 
   #calculate md5 and use it as the archive name
@@ -190,3 +339,4 @@  tar -czhf "$mydir/$archive_name" $target_files || {
 }
 cd ..
 rm -rf $tempdir
+
diff --git a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native_1.0.1.bb
similarity index 89%
rename from meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb
rename to meta/recipes-devtools/icecc-create-env/icecc-create-env-native_1.0.1.bb
index b04474e..c03cf5a 100644
--- a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb
+++ b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native_1.0.1.bb
@@ -6,16 +6,13 @@  SECTION = "base"
 LICENSE = "GPLv2+"
 LIC_FILES_CHKSUM = "file://icecc-create-env;beginline=2;endline=5;md5=ae1df3d6a058bfda40b66094c5f6065f"
 
-PR = "r2"
+PR = "r0"
 
 DEPENDS = ""
 INHIBIT_DEFAULT_DEPS = "1"
 
-FILESPATH = "${FILE_DIRNAME}/${PN}/"
-
 inherit native
 
-PATCHTOOL = "patch"
 SRC_URI = "file://icecc-create-env"
 
 S = "${WORKDIR}"