Advertisement
Guest User

openelec.sh build with custom xbmc

a guest
May 30th, 2012
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 10.60 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. XBMC_PKG=xbmc-pvr
  4. OPENELEC_BRANCH=openelec-2.0
  5. OPENELEC_TAG=d1b622a377
  6. OPENELEC_GIT=https://github.com/OpenELEC/OpenELEC.tv.git
  7.  
  8. ARCHS=( x86_64 )
  9. #ARCHS=( i386 x86_64 )
  10. PROJECTS=( ION Ultra )
  11. PVR=yes
  12.  
  13. TOP=$PWD
  14. OPENELEC_DIR=$TOP/OpenELEC.tv_$OPENELEC_BRANCH
  15. OPENELEC_PATCHES=$TOP/OpenELEC.tv_patches
  16.  
  17. XBMC=$1
  18. OPENELEC=$2
  19. DEBUG=$3
  20.  
  21. if [ "$XBMC" == "" ]; then
  22.     XBMC=tsp
  23. fi
  24. if [ "$OPENELEC" == "" ]; then
  25.     OPENELEC=pull
  26. fi
  27. if [ "$DEBUG" == "" ]; then
  28.     DEBUG=release
  29. fi
  30.  
  31. echo "Build config:"
  32. echo "XBMC:     ${XBMC}"
  33. echo "OPENELEC: ${OPENELEC}"
  34. echo "DEBUG:    ${DEBUG}"
  35.  
  36. GIT_TAG_NEW=null
  37.  
  38. # Download & pack custom XBMC package
  39. if [ "$XBMC" == "tsp" ] || [ "$XBMC" == "ino" ]; then
  40.     cd xbmc_pvr_$XBMC
  41.  
  42.     if [ "$DEBUG" == "debug" ]; then
  43.         echo "Use XBMC from ${XBMC}'s source, but don't update and don't tar"
  44.         cd ${XBMC_PKG}-latest
  45.  
  46.         GIT_TAG_NEW=`git log -n1 --format=%h`
  47.     else
  48.         echo "Update XBMC from ${XBMC}'s source and create tar"
  49.         ./mkpkg_$XBMC_PKG
  50.  
  51.         GIT_TAG_NEW=`ls $XBMC_PKG-*.tar.xz | grep -v theme | cut -d'-' -f3 | cut -d'.' -f1`
  52.  
  53.         echo "Move XBMC tar to webserver"
  54.         mv $XBMC_PKG-*.tar.xz /home/www/openelec
  55.     fi
  56.  
  57.     echo "GIT_TAG_NEW=$GIT_TAG_NEW"
  58.  
  59.     cd $TOP
  60. fi
  61.  
  62. IGNORE_XBMC_PATCHES=( xbmc-pvr-$GIT_TAG_NEW-457-fix_connection_check-0.1.patch \
  63.                       xbmc-pvr-$GIT_TAG_NEW-801.01-cec-PR570.patch \
  64.                       xbmc-pvr-$GIT_TAG_NEW-801.02-cec-fixed_possible_deadlock.patch \
  65.                       xbmc-pvr-$GIT_TAG_NEW-801.03-cec-fixed_make_sure_the_old_thread_is_stopped_before_starting_a_new_one.patch \
  66.                       xbmc-pvr-$GIT_TAG_NEW-801.04-cec-PR887.patch \
  67.                       xbmc-pvr-$GIT_TAG_NEW-806.01-cdrip-PR616.patch \
  68.                       xbmc-pvr-$GIT_TAG_NEW-806.02-cdrip-PR718.patch \
  69.                       xbmc-pvr-$GIT_TAG_NEW-901.01-ffmpeg-10.2-28b186f.patch \
  70.                       xbmc-pvr-$GIT_TAG_NEW-901.02-ffmpeg_dvd_still_frames_ended_up_in_internal_lavf_buffer.patch \
  71.                       xbmc-pvr-$GIT_TAG_NEW-901.03-ffmpeg_crystalhd_implementation.patch \
  72.                       xbmc-pvr-$GIT_TAG_NEW-901.31-ffmpeg_add_xvba_support.patch \
  73.                       xbmc-pvr-$GIT_TAG_NEW-901.32-ffmpeg_xvba_adapt_to_new_ffmpeg_fix_artifacts_for_h.264.patch \
  74.                       xbmc-pvr-$GIT_TAG_NEW-901.33-ffmpeg_xvba_xvba_vc-1_new_ffmpeg.patch \
  75.                       xbmc-pvr-$GIT_TAG_NEW-901.41-avfilter-depends-on-avformat.patch \
  76.                       xbmc-pvr-$GIT_TAG_NEW-902.00-xdpau_reset_pvr_changes.patch \
  77.                       xbmc-pvr-$GIT_TAG_NEW-902.01-xvba_support_vdpau_rework-c633159.patch \
  78.                       xbmc-pvr-$GIT_TAG_NEW-902.02-xvba_support-gcc-4.7.patch \
  79.                       xbmc-pvr-$GIT_TAG_NEW-981-toggleButtonState.patch \
  80.                       xbmc-pvr-$GIT_TAG_NEW-982-UDisk-device-must-be-remount-in-DeviceChanged-event.patch \
  81.                       xbmc-pvr-$GIT_TAG_NEW-983-fixed-failure-to-broswe-for-smb-shares.patch \
  82.                       xbmc-pvr-$GIT_TAG_NEW-990-wiimote.patch )
  83.  
  84. if [ ! -d $OPENELEC_DIR ]; then
  85.     mkdir $OPENELEC_DIR
  86.     cd $OPENELEC_DIR
  87.     git clone -b $OPENELEC_BRANCH $OPENELEC_GIT
  88.     cd $TOP
  89. fi
  90.  
  91. cd $OPENELEC_DIR
  92.  
  93. if [ "$DEBUG" != "debug" ]; then
  94.     echo "Clean OpenELEC clone"
  95.     git checkout -f $OPENELEC_TAG
  96.     if [ "$OPENELEC" == "pull" ]; then
  97.         echo "Pulling OpenELEC from GIT"
  98.         git pull
  99.     fi
  100. fi
  101.  
  102. # Apply local changes for custom XBMC package
  103. if [ "$XBMC" == "tsp" ] || [ "$XBMC" == "ino" ]; then
  104.     echo "Take XBMC from tsp's sources"
  105.  
  106.     cd packages/mediacenter/$XBMC_PKG
  107.     GIT_TAG_OLD=`cat meta | grep -e ^PKG_VERSION | cut -d'"' -f2`
  108.     cd $OPENELEC_DIR
  109.     echo "GIT_TAG_OLD=$GIT_TAG_OLD"
  110.  
  111.     if [ "$GIT_TAG_OLD" == "$GIT_TAG_NEW" ]; then
  112.         echo "XBMC git tags didn't change, so OpenELEC patched already"
  113.     fi
  114.  
  115. #    if [ "$DEBUG" == "debug" ]; then
  116. #        echo "Patch XBMC build file"
  117. #        cat ${OPENELEC_PATCHES}/debug_build_xbmc-pvr.patch | patch -N -p1
  118. #    fi
  119.  
  120.     if [ "$GIT_TAG_OLD" != "$GIT_TAG_NEW" ]; then
  121.         if [ -e sources/$XBMC_PKG/$XBMC_PKG-$GIT_TAG_NEW.tar.xz ]; then
  122.             echo "Removing source tar"
  123.             rm sources/$XBMC_PKG/$XBMC_PKG-$GIT_TAG_NEW.tar.xz*
  124.         fi
  125.         if [ -e sources/$XBMC_PKG-theme-Confluence/$XBMC_PKG-theme-Confluence-$GIT_TAG_NEW.tar.xz ]; then
  126.             echo "Removing source theme tar"
  127.             rm sources/$XBMC_PKG-theme-Confluence/$XBMC_PKG-theme-Confluence-$GIT_TAG_NEW.tar.xz*
  128.         fi
  129.  
  130.         echo "Patch XBMC meta file"
  131.         cd packages/mediacenter/$XBMC_PKG
  132.         if [ ! -e meta_org ]; then
  133.             mv meta meta_org
  134.         fi
  135.         cp meta_org meta
  136.         sed -e "s/^PKG_VERSION=\"${GIT_TAG_OLD}\"/PKG_VERSION=\"${GIT_TAG_NEW}\"/g" -i meta
  137.         sed -e "s/^PKG_URL=/#PKG_URL=/g" -i meta
  138.         sed -e "s/^PKG_DEPENDS=/PKG_URL=\"http:\/\/www.inodekker.com\/openelec\/\$PKG_NAME-\$PKG_VERSION.tar.xz\"\nPKG_DEPENDS=/g" -i meta
  139.         echo "###### BEGIN meta"
  140.         cat meta
  141.         echo "###### END meta"
  142.         cd $OPENELEC_DIR
  143.  
  144.         echo "Rename XBMC patches that should be ignored"
  145.         cd packages/mediacenter/$XBMC_PKG/patches
  146.         ./rename.sh $GIT_TAG_OLD $GIT_TAG_NEW
  147.         for IGNORE_XBMC_PATCH in "${IGNORE_XBMC_PATCHES[@]}"
  148.         do
  149.             if [ ! -e ${IGNORE_XBMC_PATCH} ]; then
  150.                 echo "${IGNORE_XBMC_PATCH} does not exist!"
  151.             else
  152.                 mv ${IGNORE_XBMC_PATCH} ${IGNORE_XBMC_PATCH}_
  153.             fi
  154.         done
  155.         cd $OPENELEC_DIR
  156.     fi
  157.  
  158.     echo "Remove personal XBMC patches"
  159.     cd ${OPENELEC_PATCHES}
  160.     for i in `ls $XBMC_PKG-*.patch`; do
  161.         PATCH_FILE=${OPENELEC_DIR}/packages/mediacenter/$XBMC_PKG/patches/`echo $i | sed "s,${XBMC_PKG},${XBMC_PKG}-${GIT_TAG_NEW},g"`
  162.         if [ -e $PATCH_FILE ]; then
  163.             rm $PATCH_FILE
  164.         fi
  165.     done
  166.  
  167.     if [ "$DEBUG" == "debug" ]; then
  168.         echo "Copy personal XBMC patches"
  169.         #git diff -u > ${OPENELEC_DIR}_patches
  170.         for i in `ls $XBMC_PKG-$XBMC-*.patch`; do
  171.             PATCH_FILE=${OPENELEC_DIR}/packages/mediacenter/$XBMC_PKG/patches/`echo $i | sed "s,${XBMC_PKG},${XBMC_PKG}-${GIT_TAG_NEW},g"`
  172.             if [ -e $PATCH_FILE ]; then
  173.                 echo "Removing old patch file"
  174.                 rm $PATCH_FILE
  175.             fi
  176.             cp $i $PATCH_FILE
  177.         done
  178.     fi
  179.     cd $OPENELEC_DIR
  180.  
  181.     if [ "$GIT_TAG_OLD" != "$GIT_TAG_NEW" ]; then
  182.         echo "Patch XBMC Confluence theme meta file"
  183.         cd packages/mediacenter/$XBMC_PKG-theme-Confluence
  184.         if [ ! -e meta_org ]; then
  185.             mv meta meta_org
  186.         fi
  187.         cp meta_org meta
  188.         sed -e "s/^PKG_VERSION=\"${GIT_TAG_OLD}\"/PKG_VERSION=\"${GIT_TAG_NEW}\"/g" -i meta
  189.         sed -e "s/^PKG_URL=/#PKG_URL=/g" -i meta
  190.         sed -e "s/^PKG_DEPENDS=/PKG_URL=\"http:\/\/192.168.1.253\/openelec\/\$PKG_NAME-\$PKG_VERSION.tar.xz\"\nPKG_DEPENDS=/g" -i meta
  191.         echo "###### BEGIN meta"
  192.         cat meta
  193.         echo "###### END meta"
  194.         cd $OPENELEC_DIR
  195.  
  196.         echo "Patch boost build file"
  197.         cd packages/devel/boost
  198.         patch -b --suffix=_org build ${OPENELEC_PATCHES}/openelec_boost_filesystem.patch
  199.         echo "###### BEGIN build"
  200.         cat build
  201.         echo "###### END build"
  202.         cd $OPENELEC_DIR
  203.  
  204.         echo "Patch XBMC build file"
  205.         cat ${OPENELEC_PATCHES}/xbmc-pvr-disable_libavcodec_codec_names_script.patch | patch -N -p1
  206.     fi
  207. fi
  208.  
  209. # Build OpenELEC
  210. echo "Start building OpenELEC"
  211.  
  212. BUILD_DATE=`date +%Y%m%d%H%M%S`
  213. OPENELEC_VERSION=`cat config/version | grep OPENELEC_VERSION | cut -d'"' -f2`
  214. TARGET_SUFFIX=${XBMC_PKG}-${XBMC}-${GIT_TAG_NEW}-${BUILD_DATE}
  215. if [ "$DEBUG" == "debug" ]; then
  216.     TARGET_SUFFIX=${TARGET_SUFFIX}-debug
  217. fi
  218.  
  219. for PROJECT in "${PROJECTS[@]}"; do
  220.     for ARCH in "${ARCHS[@]}"; do
  221.         export PVR
  222.         export PROJECT
  223.         export ARCH
  224.  
  225.         ionice -c 3 nice -5 make release > build_${PROJECT}_${ARCH}.txt 2>&1
  226.         echo "Done" >> build_${PROJECT}_${ARCH}.txt
  227.  
  228.         if [ "$OPENELEC_BRANCH" != "master" ]; then
  229.             PROJECT_NAME=OpenELEC-${PROJECT}.${ARCH}-${OPENELEC_VERSION}
  230.             if [ "$PVR" == "yes" ]; then
  231.                 PROJECT_NAME=OpenELEC_PVR-${PROJECT}.${ARCH}-${OPENELEC_VERSION}
  232.             fi
  233.             cd target
  234.             if [ -e ${PROJECT_NAME}.kernel ] && [ -e ${PROJECT_NAME}.system ]; then
  235.                 echo "Rename target files."
  236.                 mv ${PROJECT_NAME}.kernel ${PROJECT_NAME}-${TARGET_SUFFIX}.kernel
  237.                 mv ${PROJECT_NAME}.system ${PROJECT_NAME}-${TARGET_SUFFIX}.system
  238.                 if [ -e ${PROJECT_NAME}.tar.bz2 ]; then
  239.                     mv ${PROJECT_NAME}.tar.bz2 ${PROJECT_NAME}-${TARGET_SUFFIX}.tar.bz2
  240.                 fi
  241.             else
  242.                 echo "Kernel and/or system file(s) does not exist, build must have failed."
  243.             fi
  244.             cd $OPENELEC_DIR
  245.         fi
  246.     done
  247. done
  248. echo "Finish building OpenELEC"
  249.  
  250. # Undo local changes
  251. if [ "$DEBUG" != "debug" ]; then
  252. #    echo "Unpatch XBMC build file"
  253. #    cat ${OPENELEC_PATCHES}/debug_build_xbmc-pvr.patch | patch -R -p1
  254.  
  255.     echo "Unpatch XBMC meta file"
  256.     cd packages/mediacenter/$XBMC_PKG
  257.     mv meta_org meta
  258.     if [ -e build_org ]; then
  259.         mv build_org build
  260.     fi
  261.     cd $OPENELEC_DIR
  262.  
  263.     echo "Remove personal XBMC patches"
  264.     cd ${OPENELEC_PATCHES}
  265.     for i in `ls $XBMC_PKG-*.patch`; do
  266.         PATCH_FILE=${OPENELEC_DIR}/packages/mediacenter/$XBMC_PKG/patches/`echo $i | sed "s,${XBMC_PKG},${XBMC_PKG}-${GIT_TAG_NEW},g"`
  267.         if [ -e $PATCH_FILE ]; then
  268.             rm $PATCH_FILE
  269.         fi
  270.     done
  271.     cd $OPENELEC_DIR
  272.  
  273.     echo "Restore XBMC patches back to original state"
  274.     cd packages/mediacenter/$XBMC_PKG/patches
  275.     for IGNORE_XBMC_PATCH in "${IGNORE_XBMC_PATCHES[@]}"
  276.     do
  277.         if [ ! -e "${IGNORE_XBMC_PATCH}_" ]; then
  278.             echo "${IGNORE_XBMC_PATCH}_ does not exist!"
  279.         else
  280.             mv ${IGNORE_XBMC_PATCH}_ ${IGNORE_XBMC_PATCH}
  281.         fi
  282.     done
  283.     ./rename.sh $GIT_TAG_NEW $GIT_TAG_OLD
  284.     cd $OPENELEC_DIR
  285.  
  286.     echo "Unpatch XBMC Confluence theme meta file"
  287.     cd packages/mediacenter/$XBMC_PKG-theme-Confluence
  288.     mv meta_org meta
  289.     cd $OPENELEC_DIR
  290.  
  291.     echo "Unpatch boost build file"
  292.     cd packages/devel/boost
  293.     mv build_org build
  294.     cd $OPENELEC_DIR
  295.  
  296.     echo "Unpatch XBMC build file"
  297.     cat ${OPENELEC_PATCHES}/xbmc-pvr-disable_libavcodec_codec_names_script.patch | patch -R -p1
  298. fi
  299.  
  300. cd $TOP
  301.  
  302. echo "Finished!"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement