diff options
| author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-02-04 13:20:28 +0000 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-02-07 09:06:37 +0000 |
| commit | 984e90f4d71d866580131c4927b0a77baf1bb9bd (patch) | |
| tree | adfe717341c87f2719990a962951492b65c03c1c /meta/classes/base.bbclass | |
| parent | ca7adf75295c2a6041b891bfa61e0b4bc2f7c860 (diff) | |
| download | poky-984e90f4d71d866580131c4927b0a77baf1bb9bd.tar.gz | |
meta/classes: Update classes to use new fetcher API
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/base.bbclass')
| -rw-r--r-- | meta/classes/base.bbclass | 176 |
1 files changed, 25 insertions, 151 deletions
diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass index d8efcc0f8c..edb65eb96b 100644 --- a/meta/classes/base.bbclass +++ b/meta/classes/base.bbclass | |||
| @@ -116,163 +116,38 @@ addtask setscene before do_fetch | |||
| 116 | addtask fetch | 116 | addtask fetch |
| 117 | do_fetch[dirs] = "${DL_DIR}" | 117 | do_fetch[dirs] = "${DL_DIR}" |
| 118 | python base_do_fetch() { | 118 | python base_do_fetch() { |
| 119 | import sys | 119 | |
| 120 | src_uri = (bb.data.getVar('SRC_URI', d, True) or "").split() | ||
| 121 | if len(src_uri) == 0: | ||
| 122 | return | ||
| 120 | 123 | ||
| 121 | localdata = bb.data.createCopy(d) | 124 | localdata = bb.data.createCopy(d) |
| 122 | bb.data.update_data(localdata) | 125 | bb.data.update_data(localdata) |
| 123 | 126 | ||
| 124 | src_uri = bb.data.getVar('SRC_URI', localdata, 1) | 127 | try: |
| 125 | if not src_uri: | 128 | fetcher = bb.fetch2.Fetch(src_uri, localdata) |
| 126 | return 1 | 129 | fetcher.download() |
| 127 | 130 | except bb.fetch2.BBFetchException, e: | |
| 128 | try: | 131 | raise bb.build.FuncFailed(e) |
| 129 | bb.fetch.init(src_uri.split(),d) | ||
| 130 | except bb.fetch.NoMethodError: | ||
| 131 | (type, value, traceback) = sys.exc_info() | ||
| 132 | raise bb.build.FuncFailed("No method: %s" % value) | ||
| 133 | except bb.MalformedUrl: | ||
| 134 | (type, value, traceback) = sys.exc_info() | ||
| 135 | raise bb.build.FuncFailed("Malformed URL: %s" % value) | ||
| 136 | |||
| 137 | try: | ||
| 138 | if bb.fetch.__version__ == "1": | ||
| 139 | bb.fetch.go(localdata) | ||
| 140 | else: | ||
| 141 | bb.fetch.download(localdata) | ||
| 142 | except bb.fetch.MissingParameterError: | ||
| 143 | (type, value, traceback) = sys.exc_info() | ||
| 144 | raise bb.build.FuncFailed("Missing parameters: %s" % value) | ||
| 145 | except bb.fetch.FetchError: | ||
| 146 | (type, value, traceback) = sys.exc_info() | ||
| 147 | raise bb.build.FuncFailed("Fetch failed: %s" % value) | ||
| 148 | except bb.fetch.MD5SumError: | ||
| 149 | (type, value, traceback) = sys.exc_info() | ||
| 150 | raise bb.build.FuncFailed("MD5 failed: %s" % value) | ||
| 151 | except: | ||
| 152 | (type, value, traceback) = sys.exc_info() | ||
| 153 | raise bb.build.FuncFailed("Unknown fetch Error: %s" % value) | ||
| 154 | } | 132 | } |
| 155 | 133 | ||
| 156 | def subprocess_setup(): | ||
| 157 | import signal | ||
| 158 | # Python installs a SIGPIPE handler by default. This is usually not what | ||
| 159 | # non-Python subprocesses expect. | ||
| 160 | # SIGPIPE errors are known issues with gzip/bash | ||
| 161 | signal.signal(signal.SIGPIPE, signal.SIG_DFL) | ||
| 162 | |||
| 163 | def oe_unpack_file(file, data, url = None): | ||
| 164 | import subprocess | ||
| 165 | if not url: | ||
| 166 | url = "file://%s" % file | ||
| 167 | dots = file.split(".") | ||
| 168 | if dots[-1] in ['gz', 'bz2', 'Z']: | ||
| 169 | efile = os.path.join(bb.data.getVar('WORKDIR', data, 1),os.path.basename('.'.join(dots[0:-1]))) | ||
| 170 | else: | ||
| 171 | efile = file | ||
| 172 | cmd = None | ||
| 173 | if file.endswith('.tar'): | ||
| 174 | cmd = 'tar x --no-same-owner -f %s' % file | ||
| 175 | elif file.endswith('.tgz') or file.endswith('.tar.gz') or file.endswith('.tar.Z'): | ||
| 176 | cmd = 'tar xz --no-same-owner -f %s' % file | ||
| 177 | elif file.endswith('.tbz') or file.endswith('.tbz2') or file.endswith('.tar.bz2'): | ||
| 178 | cmd = 'bzip2 -dc %s | tar x --no-same-owner -f -' % file | ||
| 179 | elif file.endswith('.gz') or file.endswith('.Z') or file.endswith('.z'): | ||
| 180 | cmd = 'gzip -dc %s > %s' % (file, efile) | ||
| 181 | elif file.endswith('.bz2'): | ||
| 182 | cmd = 'bzip2 -dc %s > %s' % (file, efile) | ||
| 183 | elif file.endswith('.tar.xz'): | ||
| 184 | cmd = 'xz -dc %s | tar x --no-same-owner -f -' % file | ||
| 185 | elif file.endswith('.xz'): | ||
| 186 | cmd = 'xz -dc %s > %s' % (file, efile) | ||
| 187 | elif file.endswith('.zip') or file.endswith('.jar'): | ||
| 188 | cmd = 'unzip -q -o' | ||
| 189 | (type, host, path, user, pswd, parm) = bb.decodeurl(url) | ||
| 190 | if 'dos' in parm: | ||
| 191 | cmd = '%s -a' % cmd | ||
| 192 | cmd = "%s '%s'" % (cmd, file) | ||
| 193 | elif os.path.isdir(file): | ||
| 194 | filesdir = os.path.realpath(bb.data.getVar("FILESDIR", data, 1)) | ||
| 195 | destdir = "." | ||
| 196 | if file[0:len(filesdir)] == filesdir: | ||
| 197 | destdir = file[len(filesdir):file.rfind('/')] | ||
| 198 | destdir = destdir.strip('/') | ||
| 199 | if len(destdir) < 1: | ||
| 200 | destdir = "." | ||
| 201 | elif not os.access("%s/%s" % (os.getcwd(), destdir), os.F_OK): | ||
| 202 | os.makedirs("%s/%s" % (os.getcwd(), destdir)) | ||
| 203 | cmd = 'cp -pPR %s %s/%s/' % (file, os.getcwd(), destdir) | ||
| 204 | else: | ||
| 205 | (type, host, path, user, pswd, parm) = bb.decodeurl(url) | ||
| 206 | if not 'patch' in parm: | ||
| 207 | # The "destdir" handling was specifically done for FILESPATH | ||
| 208 | # items. So, only do so for file:// entries. | ||
| 209 | if type == "file" and path.find("/") != -1: | ||
| 210 | destdir = path.rsplit("/", 1)[0] | ||
| 211 | else: | ||
| 212 | destdir = "." | ||
| 213 | bb.mkdirhier("%s/%s" % (os.getcwd(), destdir)) | ||
| 214 | cmd = 'cp %s %s/%s/' % (file, os.getcwd(), destdir) | ||
| 215 | |||
| 216 | if not cmd: | ||
| 217 | return True | ||
| 218 | |||
| 219 | dest = os.path.join(os.getcwd(), os.path.basename(file)) | ||
| 220 | if os.path.exists(dest): | ||
| 221 | if os.path.samefile(file, dest): | ||
| 222 | return True | ||
| 223 | |||
| 224 | # Change to subdir before executing command | ||
| 225 | save_cwd = os.getcwd(); | ||
| 226 | parm = bb.decodeurl(url)[5] | ||
| 227 | if 'subdir' in parm: | ||
| 228 | newdir = ("%s/%s" % (os.getcwd(), parm['subdir'])) | ||
| 229 | bb.mkdirhier(newdir) | ||
| 230 | os.chdir(newdir) | ||
| 231 | |||
| 232 | cmd = "PATH=\"%s\" %s" % (bb.data.getVar('PATH', data, 1), cmd) | ||
| 233 | bb.note("Unpacking %s to %s/" % (file, os.getcwd())) | ||
| 234 | ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True) | ||
| 235 | |||
| 236 | os.chdir(save_cwd) | ||
| 237 | |||
| 238 | return ret == 0 | ||
| 239 | |||
| 240 | addtask unpack after do_fetch | 134 | addtask unpack after do_fetch |
| 241 | do_unpack[dirs] = "${WORKDIR}" | 135 | do_unpack[dirs] = "${WORKDIR}" |
| 242 | python base_do_unpack() { | 136 | python base_do_unpack() { |
| 243 | import re | 137 | src_uri = (bb.data.getVar('SRC_URI', d, True) or "").split() |
| 138 | if len(src_uri) == 0: | ||
| 139 | return | ||
| 244 | 140 | ||
| 245 | localdata = bb.data.createCopy(d) | 141 | localdata = bb.data.createCopy(d) |
| 246 | bb.data.update_data(localdata) | 142 | bb.data.update_data(localdata) |
| 247 | 143 | ||
| 248 | urldata = bb.fetch.init([], localdata) | 144 | rootdir = bb.data.getVar('WORKDIR', localdata, True) |
| 249 | 145 | ||
| 250 | src_uri = bb.data.getVar('SRC_URI', localdata, True) | 146 | try: |
| 251 | if not src_uri: | 147 | fetcher = bb.fetch2.Fetch(src_uri, localdata) |
| 252 | return | 148 | fetcher.unpack(rootdir) |
| 253 | for url in src_uri.split(): | 149 | except bb.fetch2.BBFetchException, e: |
| 254 | try: | 150 | raise bb.build.FuncFailed(e) |
| 255 | local = bb.data.expand(bb.fetch.localpath(url, localdata), localdata) | ||
| 256 | except bb.MalformedUrl, e: | ||
| 257 | raise FuncFailed('Unable to generate local path for malformed uri: %s' % e) | ||
| 258 | if local is None: | ||
| 259 | continue | ||
| 260 | local = os.path.realpath(local) | ||
| 261 | lockfile = urldata[url].lockfile | ||
| 262 | if lockfile: | ||
| 263 | lf = bb.utils.lockfile(urldata[url].lockfile) | ||
| 264 | |||
| 265 | if bb.fetch.__version__ == "1": | ||
| 266 | ret = oe_unpack_file(local, localdata, url) | ||
| 267 | else: | ||
| 268 | # use bb.fetch2 unpack API | ||
| 269 | ud = urldata[url] | ||
| 270 | rootdir = bb.data.getVar('WORKDIR', localdata, True) | ||
| 271 | ret = ud.method.unpack(ud, rootdir, localdata) | ||
| 272 | if lockfile: | ||
| 273 | bb.utils.unlockfile(lf) | ||
| 274 | if not ret: | ||
| 275 | raise bb.build.FuncFailed("oe_unpack_file failed with return value %s" % ret) | ||
| 276 | } | 151 | } |
| 277 | 152 | ||
| 278 | GIT_CONFIG = "${STAGING_DIR_NATIVE}/usr/etc/gitconfig" | 153 | GIT_CONFIG = "${STAGING_DIR_NATIVE}/usr/etc/gitconfig" |
| @@ -550,7 +425,8 @@ python () { | |||
| 550 | for s in srcuri.split(): | 425 | for s in srcuri.split(): |
| 551 | if not s.startswith("file://"): | 426 | if not s.startswith("file://"): |
| 552 | continue | 427 | continue |
| 553 | local = bb.data.expand(bb.fetch.localpath(s, d), d) | 428 | fetcher = bb.fetch2.Fetch([s], d) |
| 429 | local = fetcher.localpath(s) | ||
| 554 | for mp in paths: | 430 | for mp in paths: |
| 555 | if local.startswith(mp): | 431 | if local.startswith(mp): |
| 556 | #bb.note("overriding PACKAGE_ARCH from %s to %s" % (pkg_arch, mach_arch)) | 432 | #bb.note("overriding PACKAGE_ARCH from %s to %s" % (pkg_arch, mach_arch)) |
| @@ -594,14 +470,12 @@ python do_cleanall() { | |||
| 594 | dl_dir = bb.data.getVar('DL_DIR', localdata, True) | 470 | dl_dir = bb.data.getVar('DL_DIR', localdata, True) |
| 595 | dl_dir = os.path.realpath(dl_dir) | 471 | dl_dir = os.path.realpath(dl_dir) |
| 596 | 472 | ||
| 597 | src_uri = bb.data.getVar('SRC_URI', localdata, True) | 473 | src_uri = (bb.data.getVar('SRC_URI', localdata, True) or "").split() |
| 598 | if not src_uri: | 474 | if len(src_uri) == 0: |
| 599 | return | 475 | return |
| 600 | for url in src_uri.split(): | 476 | fetcher = bb.fetch2.Fetch(src_uri, localdata) |
| 601 | try: | 477 | for url in src_uri: |
| 602 | local = bb.data.expand(bb.fetch.localpath(url, localdata), localdata) | 478 | local = fetcher.localpath(url) |
| 603 | except bb.MalformedUrl, e: | ||
| 604 | raise FuncFailed('Unable to generate local path for malformed uri: %s' % e) | ||
| 605 | if local is None: | 479 | if local is None: |
| 606 | continue | 480 | continue |
| 607 | local = os.path.realpath(local) | 481 | local = os.path.realpath(local) |
