Merge oe-devel@oe-devel.bkbits.net:packages
[openembedded.git] / classes / split_ipk_feeds.oeclass
1 #
2 # Splits packages into feeds, depending on the "Section" entry in "Packages"
3 #
4
5
6 die () {
7         echo "split_feed: ERROR: $1"
8         exit 1
9 }
10
11 do_split_feed () {
12         test -z "$FEED_PATTERN" && die "No feed pattern in FEED_PATTERN"
13         test -z "$FEED_NAME" && die "No feed name in FEED_NAME"
14         test -z "${DEPLOY_DIR_IPK}" && die "DEPLOY_DIR_IPK is empty, how do you do that?"
15         
16         echo "Rebuilding [${DEPLOY_DIR_IPK}/Packages]"
17         touch ${DEPLOY_DIR_IPK}/Packages
18         ipkg-make-index -r ${DEPLOY_DIR_IPK}/Packages -p ${DEPLOY_DIR_IPK}/Packages -l ${DEPLOY_DIR_IPK}/Packages.filelist -m ${DEPLOY_DIR_IPK}
19         
20         echo "Working on pattern [$FEED_PATTERN] for feed [$FEED_NAME]"
21         
22         # Don't we all love sed?
23         cat "${DEPLOY_DIR_IPK}/Packages" |sed -n "/^Section/s/Section\:\ //p;/^Package/s/Package\:\ //p" |sed '$!N;s/\n/ /;s/\(.*\)\ \(.*\)/\2 \1/'| sort | egrep -i -- "$FEED_PATTERN" > feed-content.tmp      
24
25         if ! test -z "$EXCLUDE_FROM_FEED"
26         then
27                 cat feed-content.tmp | egrep -iv -- "$EXCLUDE_FROM_FEED" | sed -n "s/\(.*\)\ \(.*\)/\2/p" > feed-content.tmp2           
28         else
29                 cat feed-content.tmp | sed -n "s/\(.*\)\ \(.*\)/\2/p" > feed-content.tmp2
30         fi
31         rm feed-content.tmp ; mv feed-content.tmp2 feed-content.tmp
32         
33         if ! test -d ${DEPLOY_DIR_IPK}/${FEED_NAME}
34         then
35                 mkdir -p ${DEPLOY_DIR_IPK}/${FEED_NAME}
36         else            
37                 test "${DEPLOY_DIR_IPK}/${FEED_NAME}" = "/" && die "EMERGENCY BAIL-OUT"
38                 rm -rf ${DEPLOY_DIR_IPK}/${FEED_NAME}
39                 mkdir -p ${DEPLOY_DIR_IPK}/${FEED_NAME}
40         fi      
41         
42         for package in `cat feed-content.tmp`
43         do
44                 cp ${DEPLOY_DIR_IPK}/${package}_*.ipk ${DEPLOY_DIR_IPK}/${FEED_NAME}
45         done
46         
47         touch ${DEPLOY_DIR_IPK}/${FEED_NAME}/Packages
48         ipkg-make-index -r ${DEPLOY_DIR_IPK}/${FEED_NAME}/Packages -p ${DEPLOY_DIR_IPK}/${FEED_NAME}/Packages -l ${DEPLOY_DIR_IPK}/${FEED_NAME}/Packages.filelist -m ${DEPLOY_DIR_IPK}/${FEED_NAME} || die "ipkg-make-index failed!" && echo "Packages done"
49         
50         echo "###"
51         test -d ${DEPLOY_DIR_IPK}/${FEED_NAME}/morgue && rm -rf ${DEPLOY_DIR_IPK}/${FEED_NAME}/morgue
52         echo "###"      
53 }
54         
55 addtask split_feed before do_build 
56
57 # Feed splitting should be done explicitly, not as part of world
58 EXCLUDE_FROM_WORLD = "1"