Hi Laurentiu,

Got it, and I will resubmit the patch.

Thanks,
Hongxu


On 11/28/2012 09:08 PM, Laurentiu Palcu wrote:
Hi,

This patch is on a collision course with this one:

http://git.yoctoproject.org/cgit.cgi/poky/commit/?h=master-next&id=86d4b94bf29d68307cc02b235ab737136de70619

Would you please rebase on master-next and then resubmit?

Also, see my comments below.

Thanks,
Laurentiu

On 11/28/2012 02:14 PM, Hongxu Jia wrote:
1.Adds a sudo passwd prompt during installation if the
   user couldn't install on the dir.
2.Adds option -d <dir>  to let user input dir without prompts.
3.Adds option -y for automatic yes to all prompts, a non-
   interactive method.

[YOCTO# 3153]
[YOCTO# 3309]

Signed-off-by: Hongxu Jia <hongxu....@windriver.com>
---
  meta/classes/populate_sdk_base.bbclass |   70 +++++++++++++++++++++++---------
  1 file changed, 51 insertions(+), 19 deletions(-)

diff --git a/meta/classes/populate_sdk_base.bbclass 
b/meta/classes/populate_sdk_base.bbclass
index ac34c32..c817b83 100644
--- a/meta/classes/populate_sdk_base.bbclass
+++ b/meta/classes/populate_sdk_base.bbclass
@@ -128,12 +128,33 @@ fi
DEFAULT_INSTALL_DIR="${SDKPATH}"
  COMPONENTS_LEN=$(echo ".${SDKPATH}" | sed "s/\// /g" | wc -w)
+SUDO_EXEC=""
+target_sdk_dir=""
+answer=""
+while getopts ":yd:" OPT; do
+    case $OPT in
+    y)
+        answer="Y"
+        [ "$target_sdk_dir" = "" ] && target_sdk_dir=$DEFAULT_INSTALL_DIR
+        ;;
+    d)
+        target_sdk_dir=$OPTARG
+        ;;
+    *)
+        echo "Usage: $(basename $0) [-y] [-d <dir>]"
+        echo "  -y         Automatic yes to all prompts"
+        echo "  -d <dir>   Install the SDK to <dir>"
+        exit 1
+        ;;
+    esac
+done
Please, don't use spaces for indentation. The rest of the script uses tabs.
printf "Enter target directory for SDK (default: $DEFAULT_INSTALL_DIR): "
-read target_sdk_dir
-
  if [ "$target_sdk_dir" = "" ]; then
-       target_sdk_dir=$DEFAULT_INSTALL_DIR
+       read target_sdk_dir
+       [ "$target_sdk_dir" = "" ] && target_sdk_dir=$DEFAULT_INSTALL_DIR
+else
+       echo "$target_sdk_dir"
  fi
eval target_sdk_dir=$target_sdk_dir
@@ -144,10 +165,11 @@ else
  fi
printf "You are about to install the SDK to \"$target_sdk_dir\". Proceed[Y/n]?"
-read answer
-
  if [ "$answer" = "" ]; then
-       answer="y"
+       read answer
+       [ "$answer" = "" ] && answer="y"
+else
+       echo $answer
  fi
if [ "$answer" != "Y" -a "$answer" != "y" ]; then
@@ -155,47 +177,57 @@ if [ "$answer" != "Y" -a "$answer" != "y" ]; then
        exit 1
  fi
+# create dir and don't care about the result.
  mkdir -p $target_sdk_dir >/dev/null 2>&1
-if [ $? -ne 0 ]; then
-       echo "Error: Unable to create target directory. Do you have 
permissions?"
-       exit 1
+
+# if don't have the right to access dir, gain by sudo
+if [ ! -x $target_sdk_dir -o ! -w $target_sdk_dir -o ! -r $target_sdk_dir ]; 
then
+       SUDO_EXEC=$(which "sudo")
+       if [ -z $SUDO_EXEC ]; then
+               echo "No command 'sudo' found, please install sduo first. 
Abort!"
s/sduo/sudo/
+               exit 1
+       fi
+
+       # test sudo could gain root right
+       $SUDO_EXEC pwd >/dev/null 2>&1
+       [ $? -ne 0 ] && echo "Sorry, you are not allowed to execute as root." 
&& exit 1
  fi
payload_offset=$(($(grep -na -m1 "^MARKER:$" $0|cut -d':' -f1) + 1)) printf "Extracting SDK..."
-tail -n +$payload_offset $0| tar xj --strip-components=$COMPONENTS_LEN -C 
$target_sdk_dir
+tail -n +$payload_offset $0| $SUDO_EXEC tar xj 
--strip-components=$COMPONENTS_LEN -C $target_sdk_dir
  echo "done"
printf "Setting it up..."
  # fix environment paths
  for env_setup_script in `ls $target_sdk_dir/environment-setup-*`; do
-  sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" -i $env_setup_script
+  $SUDO_EXEC sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" -i 
$env_setup_script
  done
# fix dynamic loader paths in all ELF SDK binaries
-native_sysroot=$(cat $env_setup_script |grep OECORE_NATIVE_SYSROOT|cut -d'=' -f2|tr 
-d '"')
-dl_path=$(find $native_sysroot/lib -name "ld-linux*")
-executable_files=$(find $native_sysroot -type f -perm +111)
-${env_setup_script%/*}/relocate_sdk.py $target_sdk_dir $dl_path 
$executable_files
+native_sysroot=$($SUDO_EXEC cat $env_setup_script |grep OECORE_NATIVE_SYSROOT|cut 
-d'=' -f2|tr -d '"')
+dl_path=$($SUDO_EXEC find $native_sysroot/lib -name "ld-linux*")
+executable_files=$($SUDO_EXEC find $native_sysroot -type f -perm +111)
+$SUDO_EXEC ${env_setup_script%/*}/relocate_sdk.py $target_sdk_dir $dl_path 
$executable_files
  if [ $? -ne 0 ]; then
        echo "SDK could not be set up. Relocate script failed. Abort!"
        exit 1
  fi
# replace ${SDKPATH} with the new prefix in all text files: configs/scripts/etc
-find $native_sysroot -type f -exec file '{}' \;|grep ":.*ASCII.*text"|cut -d':' 
-f1|xargs sed -i -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g"
+$SUDO_EXEC find $native_sysroot -type f -exec file '{}' \;|$SUDO_EXEC grep 
":.*ASCII.*text"|cut -d':' -f1|$SUDO_EXEC xargs sed -i -e 
"s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g"
# change all symlinks pointing to ${SDKPATH}
-for l in $(find $native_sysroot -type l); do
-       ln -sf $(readlink $l|sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:") 
$l
+for l in $($SUDO_EXEC find $native_sysroot -type l); do
+       $SUDO_EXEC ln -sf $(readlink $l| $SUDO_EXEC sed -e 
"s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:") $l
  done
echo done # delete the relocating script, so that user is forced to re-run the installer
  # if he/she wants another location for the sdk
-rm ${env_setup_script%/*}/relocate_sdk.py
+$SUDO_EXEC rm ${env_setup_script%/*}/relocate_sdk.py
echo "SDK has been successfully set up and is ready to be used."


_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to