From: Jihye Won Date: Sun, 15 Nov 2015 08:04:15 +0000 (+0900) Subject: build: improve build script and verification X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5b62d8d26fed6d6fee60df592ea2b3b03646980d;p=sdk%2Femulator%2Femulator-lib.git build: improve build script and verification Change-Id: I2cdf59ff5ed16ec9ba7a0fe7b01566dcd5df4799 Signed-off-by: Jihye Won --- diff --git a/package/build.common b/package/build.common index 90c2678..b89fd65 100644 --- a/package/build.common +++ b/package/build.common @@ -1,15 +1,8 @@ #!/bin/sh -e -TMP_LIB_DIR="$SRCDIR/lib" -TMP_DEV_DIR="$SRCDIR/dev" -TMP_DEV_INCLUDE_DIR="$TMP_DEV_DIR/include/" -TMP_DEV_LIB_DIR="$TMP_DEV_DIR/lib/" -TMP_DEV_BIN_DIR="$TMP_DEV_DIR/bin/" -TMP_SWT_DIR="$SRCDIR/swt" OS_COMMON_DIR="$ROOTDIR/os-common" -LIB_PACKAGE_DIR="$SRCDIR/package/${BUILD_LIB_PACKAGE}.package.${TARGET_OS}/data/platforms/tizen-3.0/common/emulator/bin/" -DEV_PACKAGE_DIR="$SRCDIR/package/${BUILD_DEV_PACKAGE}.package.${TARGET_OS}/data/" -SWT_PACKAGE_DIR="$SRCDIR/package/${BUILD_DEV_PACKAGE}.package.${TARGET_OS}/data/swt_4.3/" +LIB_PACKAGE_DIR="$SRCDIR/package/${BUILD_LIB_PACKAGE}.package.${TARGET_OS}/data/platforms/tizen-3.0/common/emulator/bin" +DEV_PACKAGE_DIR="$SRCDIR/package/${BUILD_DEV_PACKAGE}.package.${TARGET_OS}/data" RESULT_CONTAINS=contains RESULT_NOT_CONTAINS=not_contains @@ -38,19 +31,8 @@ contains_string() fi } -# $1: mf file path (e.g. xxx.mf) -exists_file() -{ - FILE=${1%%.mf} - if [ ! -f "$FILE" ];then - echo $FILE does not exist. - exit 1 - fi - echo "$FILE" -} - # $1: file to set permission -set_permission() +set_file_permission() { string="$(/usr/bin/file "$1")" substring="executable" @@ -59,7 +41,6 @@ set_permission() # if not, set 644 permission if test "${string#*$substring}" != "$string" then - echo "$1 is excutable" chmod 755 "$1" else chmod 644 "$1" @@ -67,36 +48,26 @@ set_permission() } # $1: directory including files to set permission -set_dev_permission() +find_file_to_set_permission() { - echo "set file permission in this directory: $1" for file in $(find "$1" -type f) do - set_permission "$file" + set_file_permission "$file" echo "change the pemission of $file" done } -# check if the file can be executed on the target os -# $1: mf file name -check_os() +verify_swt() { - OSES=$(cat $1 | grep "OS:" | cut -d ':' -f2) - if [ "$(contains_string "$OSES" "$TARGET_OS")" = "$RESULT_NOT_CONTAINS" ];then - echo "$OSES not supported" - exit 1 - fi - echo "$OSES supported" -} + TMP_SWT_DIR="$SRCDIR/swt" -# $1: swt file path -# TODO: checking version -check_swt() -{ - FILE=$(exists_file "$1") + if [ -d "$TMP_SWT_DIR" ] ; then + rm -rf "$TMP_SWT_DIR" + fi + mkdir -p "$TMP_SWT_DIR" # especially check for swt.jar - unzip -jo "$FILE" META-INF/MANIFEST.MF -d "$TMP_SWT_DIR" + unzip -jo "$1" META-INF/MANIFEST.MF -d "$TMP_SWT_DIR" TEMP_SWT_WS=$(cat "$TMP_SWT_DIR/MANIFEST.MF" | grep "SWT-WS:" | cut -d ':' -f2) SWT_WS=$(trim_string "$TEMP_SWT_WS") if [ "$(contains_string "$SWT_WS" $BUILD_WS)" = "$RESULT_NOT_CONTAINS" ];then @@ -112,81 +83,50 @@ check_swt() fi # if file type has excutable, set 755 permission. if not, set 644 permission - set_permission "$FILE" - - # copy file if validation passed. - echo "copy $FILE to $TMP_LIB_DIR" - cp -pPR "$FILE" "$TMP_LIB_DIR" + set_file_permission "$1" } -# organize files in library directories -# by copying the files into the following directories -# include, lib, bin -# $1: meta.mf file path -organize_dev_file() +# $1: BUILD_LIB_PACKAGE (e.g. 3.0-emulator-lib) +# $2: DIRECTORY_PATH (optional) +traverse_directory() { - DIR=$(dirname $1) - if [ -d "$DIR/include" ] ; then - cp -pPR "$DIR/include/"* "$TMP_DEV_INCLUDE_DIR" - echo "copy "$DIR/include/*" to $TMP_DEV_INCLUDE_DIR" - fi - if [ -d "$DIR/lib" ] ; then - cp -pPR "$DIR/lib/"* "$TMP_DEV_LIB_DIR" - echo "copy "$DIR/lib/*" to $TMP_DEV_LIB_DIR" - fi - if [ -d "$DIR/bin" ] ; then - cp -pPR "$DIR/bin/"* "$TMP_DEV_BIN_DIR" - echo "copy "$DIR/bin/*" to $TMP_DEV_BIN_DIR" + if [ "$2" = "$OS_COMMON_DIR" ];then + TRAVERSE_DIRECTORY_PATH="$2" + else + TRAVERSE_DIRECTORY_PATH="$ROOTDIR/$TARGET_OS/*/" fi - for file in $(find "$DIR" -maxdepth 1 -type f) + + for dirname in $(ls -d $TRAVERSE_DIRECTORY_PATH) do - cp -pPR "$file" "$TMP_DEV_DIR" - echo "copy "$file" to $TMP_DEV_DIR" + cd $dirname + if [ -f "$dirname/dev.install" ];then + . dev.install + dev_install "$DEV_PACKAGE_DIR" + fi + + if [ -f "$dirname/lib.install" ];then + . lib.install + lib_install "$LIB_PACKAGE_DIR" + fi done } clean_common() { rm -rf "$SRCDIR"/*.zip - - rm -rf "$TMP_LIB_DIR" - rm -rf "$TMP_DEV_DIR" - rm -rf "$TMP_SWT_DIR" } prepare_common() { - echo "make temp directory for emulator install : ( $TMP_LIB_DIR )" - mkdir "$TMP_LIB_DIR" - - echo "make temp directory for emulator install : ( $TMP_DEV_DIR )" - mkdir "$TMP_DEV_DIR" - echo "make temp directory for emulator install : ( $TMP_DEV_INCLUDE_DIR )" - mkdir "$TMP_DEV_INCLUDE_DIR" - echo "make temp directory for emulator install : ( $TMP_DEV_LIB_DIR )" - mkdir "$TMP_DEV_LIB_DIR" - echo "make temp directory for emulator install : ( $TMP_DEV_BIN_DIR )" - mkdir "$TMP_DEV_BIN_DIR" - - echo "make temp directory for emulator install : ( $TMP_SWT_DIR )" - mkdir "$TMP_SWT_DIR" -} - -build_common() -{ - set_dev_permission "$TMP_DEV_INCLUDE_DIR" - set_dev_permission "$TMP_DEV_LIB_DIR" - set_dev_permission "$TMP_DEV_BIN_DIR" + mkdir -p "$LIB_PACKAGE_DIR" + mkdir -p "$DEV_PACKAGE_DIR" + mkdir -p "$DEV_PACKAGE_DIR/lib" + mkdir -p "$DEV_PACKAGE_DIR/include" + mkdir -p "$DEV_PACKAGE_DIR/bin" } install_common() { - mkdir -p "$LIB_PACKAGE_DIR" - mkdir -p "$DEV_PACKAGE_DIR" - mkdir -p "$SWT_PACKAGE_DIR" - - # move for general case - cp -f "$TMP_LIB_DIR"/swt.jar "$SWT_PACKAGE_DIR" - mv -f "$TMP_LIB_DIR"/* "$LIB_PACKAGE_DIR" - mv -f "$TMP_DEV_DIR"/* "$DEV_PACKAGE_DIR" + find_file_to_set_permission "$LIB_PACKAGE_DIR" + find_file_to_set_permission "$DEV_PACKAGE_DIR" } diff --git a/package/build.linux b/package/build.linux index 6e3fd70..12fccf1 100755 --- a/package/build.linux +++ b/package/build.linux @@ -76,77 +76,39 @@ check_archi_ubuntu_64() fi } -# $1: mf file path (e.g. xxx.mf) -check_lib_file() +# $1: directory path that library files are in +verify_library() { - # include build.common source - . $SRCDIR/package/build.common - - FILE=$(exists_file "$1") - check_os "$1" - if [ "${TARGET_OS}" = "windows-32" ];then - check_archi_windows_32 "$FILE" - elif [ "${TARGET_OS}" = "windows-64" ];then - check_archi_windows_64 "$FILE" - elif [ "${TARGET_OS}" = "ubuntu-32" ];then - check_archi_ubuntu_32 "$FILE" - elif [ "${TARGET_OS}" = "ubuntu-64" ];then - check_archi_ubuntu_64 "$FILE" + if [ "${TARGET_OS}" = "windows-32" ] || [ "${TARGET_OS}" = "windows-64" ];then + LIBRARY_EXTENSION=dll + elif [ "${TARGET_OS}" = "ubuntu-32" ] || [ "${TARGET_OS}" = "ubuntu-64" ];then + LIBRARY_EXTENSION=so fi - set_permission "$FILE" - # copy file if validation passed. - echo "copy $FILE to $TMP_LIB_DIR" - cp -pPR "$FILE" "$TMP_LIB_DIR" + for file in $(find "$1" -iname '*.'$LIBRARY_EXTENSION) + do + echo "$file" + if [ "${TARGET_OS}" = "windows-32" ];then + check_archi_windows_32 "$file" + elif [ "${TARGET_OS}" = "windows-64" ];then + check_archi_windows_64 "$file" + elif [ "${TARGET_OS}" = "ubuntu-32" ];then + check_archi_ubuntu_32 "$file" + elif [ "${TARGET_OS}" = "ubuntu-64" ];then + check_archi_ubuntu_64 "$file" + fi + done } -# $1: meta.mf file path -check_dev_file() +verify() { . $SRCDIR/package/build.common - check_os "$1" - - # copy directory if validation passed. - organize_dev_file "$1" - # TODO: need checking architecture of libraries under DIR -} - -# $1: root directory for traversing -traverse_manifest() -{ - . $SRCDIR/package/build.common - - for i in $(find "$1" -iname '*.mf') - do - TEMP_PACKAGE=$(cat "$i" | grep "Package:" | cut -d ':' -f2) - PACKAGES=$(trim_string "$(echo "$TEMP_PACKAGE" | tr "," "\n")") - BUILD_OK=0 - - # if filename is meta.mf, it's used for packaging dev, lib - for PACKAGE in $PACKAGES - do - if [ ! -e "$PACKAGE" ] && [ "$PACKAGE" = $BUILD_DEV_PACKAGE ];then - # BUILD_OK=1 means this manifest file support current build project - BUILD_OK=1 - check_dev_file "$i" - fi - if [ $BUILD_OK -eq 0 ];then - echo "cannot find $BUILD_DEV_PACKAGE in $i skipped." - fi - if [ ! -e "$PACKAGE" ] && [ "$PACKAGE" = $BUILD_LIB_PACKAGE ];then - BUILD_OK=1 - - if [ "${BASENAME%%.mf}" = "swt.jar" ];then - check_swt "$i" - else - check_lib_file "$i" - fi - fi - if [ $BUILD_OK -eq 0 ];then - echo "cannot find $BUILD_LIB_PACKAGE in $i skipped." - fi - done - done + verify_library "$LIB_PACKAGE_DIR" + verify_library "$DEV_PACKAGE_DIR" + find_file_to_set_permission "$LIB_PACKAGE_DIR" + find_file_to_set_permission "$DEV_PACKAGE_DIR" + verify_swt "$LIB_PACKAGE_DIR/swt-4.3.jar" + verify_swt "$DEV_PACKAGE_DIR/swt-4.3.jar" } clean() @@ -178,32 +140,17 @@ prepare() build() { - prepare - . $SRCDIR/package/build.common - - echo "traverse_manifest $OS_COMMON_DIR" - traverse_manifest "$OS_COMMON_DIR" - - echo "traverse_manifest $ROOTDIR/$TARGET_OS" - traverse_manifest "$ROOTDIR/$TARGET_OS" - - build_common + echo "nothing to do." } install() { + prepare . $SRCDIR/package/build.common + traverse_directory "$BUILD_LIB_PACKAGE" "$ROOTDIR/os-common" + traverse_directory "$BUILD_LIB_PACKAGE" + verify install_common - - if [ "${TARGET_OS}" = "windows-32" ] || [ "${TARGET_OS}" = "windows-64" ];then - cp -pPR "$ROOTDIR/$TARGET_OS/Qt_5.3.1/plugins/imageformats" "$LIB_PACKAGE_DIR" - cp -pPR "$ROOTDIR/$TARGET_OS/Qt_5.3.1/plugins/platforms" "$LIB_PACKAGE_DIR" - - elif [ "${TARGET_OS}" = "ubuntu-32" ] || [ "${TARGET_OS}" = "ubuntu-64" ];then - cp -pPR "$ROOTDIR/$TARGET_OS/Qt_5.4.1/plugins/imageformats" "$LIB_PACKAGE_DIR" - cp -pPR "$ROOTDIR/$TARGET_OS/Qt_5.4.1/plugins/platforms" "$LIB_PACKAGE_DIR" - cp -pPR "$ROOTDIR/$TARGET_OS/Qt_5.4.1/plugins/platformthemes" "$LIB_PACKAGE_DIR" - fi } echo "build success" diff --git a/package/build.macos-64 b/package/build.macos similarity index 57% rename from package/build.macos-64 rename to package/build.macos index 477d19e..3c77de9 100644 --- a/package/build.macos-64 +++ b/package/build.macos @@ -16,7 +16,7 @@ patch_loader_path() # add library to patch loader_path for i in $(ls "$LIB_PACKAGE_DIR") do - FILE_RESULT="$(/usr/bin/file "$LIB_PACKAGE_DIR$i")" + FILE_RESULT="$(/usr/bin/file "$LIB_PACKAGE_DIR/$i")" if [ $(contains_string "$FILE_RESULT" "dynamically linked shared library") == "contains" ];then Libs[$cnt]="$i" cnt=$cnt+1 @@ -26,7 +26,7 @@ patch_loader_path() for i in "${Libs[@]}" do # read line by line of otool result - otool -L "$LIB_PACKAGE_DIR$i" | sed 1d | \ + otool -L "$LIB_PACKAGE_DIR/$i" | sed 1d | \ while read j do # parse only loader path @@ -43,28 +43,28 @@ patch_loader_path() exit 1 fi - arr=( $(otool -L "$LIB_PACKAGE_DIR$i" | awk '/\/opt\/local\/lib/ { split($1,lib,"/"); print lib[5] }') ) + arr=( $(otool -L "$LIB_PACKAGE_DIR/$i" | awk '/\/opt\/local\/lib/ { split($1,lib,"/"); print lib[5] }') ) for lib in "${arr[@]}" do echo $lib if [ "$i" == "$lib" ] then # echo $i - install_name_tool -id $i "$LIB_PACKAGE_DIR$i" + install_name_tool -id $i "$LIB_PACKAGE_DIR/$i" else - install_name_tool -change /opt/local/lib/$lib @loader_path/$lib "$LIB_PACKAGE_DIR$i" + install_name_tool -change /opt/local/lib/$lib @loader_path/$lib "$LIB_PACKAGE_DIR/$i" fi done - arr2=( $(otool -L "$LIB_PACKAGE_DIR$i" | awk '/\/opt\/local\/Library/ { split($1,lib,"/"); print lib[9] }') ) + arr2=( $(otool -L "$LIB_PACKAGE_DIR/$i" | awk '/\/opt\/local\/Library/ { split($1,lib,"/"); print lib[9] }') ) for lib in "${arr2[@]}" do echo $lib if [ "$i" == "$lib" ] then # echo $i - install_name_tool -id $i "$LIB_PACKAGE_DIR$i" + install_name_tool -id $i "$LIB_PACKAGE_DIR/$i" else - install_name_tool -change /opt/local/Library/Frameworks/$lib.framework/Versions/5/$lib @loader_path/$lib "$LIB_PACKAGE_DIR$i" + install_name_tool -change /opt/local/Library/Frameworks/$lib.framework/Versions/5/$lib @loader_path/$lib "$LIB_PACKAGE_DIR/$i" fi done done @@ -117,72 +117,37 @@ check_archi_macos_64() echo "$1 has not the supported architecture" exit 1 fi + echo "$1 has the supported architecture" fi } -# $1: mf file path (e.g. xxx.mf) -check_lib_file() +# $1: directory path that library files are in +verify_library() { - # include build.common source - . $SRCDIR/package/build.common - - FILE=$(exists_file "$1") - check_os "$1" - check_archi_macos_64 "$FILE" - set_permission "$FILE" + LIBRARY_EXTENSION=dylib - # copy file if validation passed. - echo "copy $FILE to $TMP_LIB_DIR" - cp -pPR "$FILE" "$TMP_LIB_DIR" + for file in $(find "$1" -iname '*.'$LIBRARY_EXTENSION) + do + echo "$file" + check_archi_macos_64 "$file" + done } -# $1: meta.mf file path -check_dev_file() +verify() { . $SRCDIR/package/build.common - check_os "$1" - - # copy directory if validation passed. - organize_dev_file "$1" - # TODO: need checking architecture of libraries under DIR + verify_library "$LIB_PACKAGE_DIR" + verify_library "$DEV_PACKAGE_DIR" + find_file_to_set_permission "$LIB_PACKAGE_DIR" + find_file_to_set_permission "$DEV_PACKAGE_DIR" + verify_swt "$LIB_PACKAGE_DIR/swt-4.3.jar" + verify_swt "$DEV_PACKAGE_DIR/swt-4.3.jar" } -# $1: root directory for traversing -traverse_manifest() +clean() { . $SRCDIR/package/build.common - - for i in $(find "$1" -iname '*.mf') - do - TEMP_PACKAGE=$(cat "$i" | grep "Package:" | cut -d ':' -f2) - PACKAGES=$(trim_string "$(echo "$TEMP_PACKAGE" | tr "," "\n")") - BUILD_OK=0 - - # if filename is meta.mf, it's used for packaging dev, lib - for PACKAGE in $PACKAGES - do - if [ ! -e "$PACKAGE" ] && [ "$PACKAGE" == $BUILD_DEV_PACKAGE ];then - # BUILD_OK=1 means this manifest file support current build project - BUILD_OK=1 - check_dev_file "$i" - fi - if [ $BUILD_OK -eq 0 ];then - echo "cannot find $BUILD_DEV_PACKAGE in $i skipped." - fi - if [ ! -e "$PACKAGE" ] && [ "$PACKAGE" == $BUILD_LIB_PACKAGE ];then - BUILD_OK=1 - - if [ "${BASENAME%%.mf}" == "swt.jar" ];then - check_swt "$i" - else - check_lib_file "$i" - fi - fi - if [ $BUILD_OK -eq 0 ];then - echo "cannot find $BUILD_LIB_PACKAGE in $i skipped." - fi - done - done + clean_common } prepare() @@ -192,34 +157,19 @@ prepare() prepare_common } -clean() -{ - . $SRCDIR/package/build.common - clean_common -} - build() { - prepare - . $SRCDIR/package/build.common - - echo "traverse_manifest $OS_COMMON_DIR" - traverse_manifest "$OS_COMMON_DIR" - - echo "traverse_manifest $ROOTDIR/$TARGET_OS" - traverse_manifest "$ROOTDIR/$TARGET_OS" - - build_common + echo "nothing to do." } install() { + prepare . $SRCDIR/package/build.common + traverse_directory "$BUILD_LIB_PACKAGE" "$ROOTDIR/os-common" + traverse_directory "$BUILD_LIB_PACKAGE" + verify install_common - - cp -pPR "$ROOTDIR/$TARGET_OS/Qt_5.3.1/plugins/imageformats" "$LIB_PACKAGE_DIR" - cp -pPR "$ROOTDIR/$TARGET_OS/Qt_5.3.1/plugins/platforms" "$LIB_PACKAGE_DIR" - patch_loader_path }