mirror of
https://git.yoctoproject.org/poky
synced 2026-02-21 00:49:41 +01:00
Compare commits
170 Commits
yocto-1.6
...
daisy-11.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c4f1f0f491 | ||
|
|
810dd79720 | ||
|
|
b0ce70ffa8 | ||
|
|
ac2d94b684 | ||
|
|
ce2336ddc7 | ||
|
|
5b8c5ea151 | ||
|
|
7a42bfecc2 | ||
|
|
26db62e359 | ||
|
|
18224a4a46 | ||
|
|
6d0ae0ef44 | ||
|
|
153787d4df | ||
|
|
c55dea6a82 | ||
|
|
4ab29fc58f | ||
|
|
0bc0ee66a8 | ||
|
|
db6819b0c3 | ||
|
|
bc3484e76c | ||
|
|
9d84b2440d | ||
|
|
f8e61ed564 | ||
|
|
1db22d39b5 | ||
|
|
b7bf8bb051 | ||
|
|
839892ed27 | ||
|
|
232af2ec04 | ||
|
|
6a6bd2e96b | ||
|
|
3103f04a30 | ||
|
|
bb27ca7562 | ||
|
|
7dcd9a6b72 | ||
|
|
a43dba8c29 | ||
|
|
d52b91316e | ||
|
|
efbf15ce20 | ||
|
|
3caae900f3 | ||
|
|
3428e6e0e4 | ||
|
|
96ca984621 | ||
|
|
8386f4203d | ||
|
|
b4b50e52d2 | ||
|
|
6101dd2b4c | ||
|
|
ebf62ba85d | ||
|
|
9deb3333b0 | ||
|
|
5bb9a05e0f | ||
|
|
9ee3f77ed9 | ||
|
|
a714cf8700 | ||
|
|
d376e31c92 | ||
|
|
333e5f7076 | ||
|
|
a2fa51bdde | ||
|
|
cb468dfaf0 | ||
|
|
d4c5f12601 | ||
|
|
7e6902963f | ||
|
|
c166a5add3 | ||
|
|
303d17ac3c | ||
|
|
28938930ba | ||
|
|
bff6db6712 | ||
|
|
62b1fef787 | ||
|
|
fc9229e4ba | ||
|
|
8509c1a7e5 | ||
|
|
05d751c23a | ||
|
|
b8f6c7c794 | ||
|
|
474ea6b826 | ||
|
|
21d15fac0e | ||
|
|
e98512e1e3 | ||
|
|
1f80e7f675 | ||
|
|
6a4a66aabb | ||
|
|
c03bb4d0c7 | ||
|
|
f91b780b1a | ||
|
|
938e925356 | ||
|
|
c899777010 | ||
|
|
afb6a3688f | ||
|
|
4209379cc8 | ||
|
|
6add5ac648 | ||
|
|
af515ca686 | ||
|
|
f9f97a1fed | ||
|
|
48169ac9bc | ||
|
|
f091b8a3cf | ||
|
|
38083d01e7 | ||
|
|
278c551168 | ||
|
|
83d1ce9e27 | ||
|
|
d44881fecc | ||
|
|
948b8461e8 | ||
|
|
7bcc609bf0 | ||
|
|
f372806546 | ||
|
|
2361a8171b | ||
|
|
ee4d106987 | ||
|
|
896511d564 | ||
|
|
01c613e4bc | ||
|
|
295dd76931 | ||
|
|
cd7e7addd7 | ||
|
|
ac9725acc5 | ||
|
|
b6124bdbfb | ||
|
|
989013222e | ||
|
|
87eaf4cf4a | ||
|
|
8e22337e22 | ||
|
|
e130d2c8eb | ||
|
|
a692a9182a | ||
|
|
44fddc9ba1 | ||
|
|
8bbd5958b0 | ||
|
|
6d898aef4c | ||
|
|
412cb58083 | ||
|
|
57ccbc4c15 | ||
|
|
5d3c54a318 | ||
|
|
e5727ad31a | ||
|
|
0cafa0eafe | ||
|
|
bea6067392 | ||
|
|
c056b5e9a2 | ||
|
|
7bb4692ead | ||
|
|
dea4a69cfc | ||
|
|
53d2def225 | ||
|
|
94e2a1793e | ||
|
|
b20ba9c4e5 | ||
|
|
7f4ff1a5c5 | ||
|
|
8fd7098318 | ||
|
|
9662a47204 | ||
|
|
78366c7e2c | ||
|
|
287c3bec51 | ||
|
|
80f625a364 | ||
|
|
978c6c00d6 | ||
|
|
090cb60d49 | ||
|
|
2784c08229 | ||
|
|
b1ab59a8d0 | ||
|
|
3141bc16a5 | ||
|
|
b057375f77 | ||
|
|
4f0c5e5b32 | ||
|
|
9fb409bcc5 | ||
|
|
3d95a1cce5 | ||
|
|
361ddb10de | ||
|
|
133472e7aa | ||
|
|
e4b9dabfbb | ||
|
|
45dbb4a080 | ||
|
|
517c2cc88d | ||
|
|
a1958d47c6 | ||
|
|
6547137fa3 | ||
|
|
651f3dc078 | ||
|
|
8333887235 | ||
|
|
33a8687635 | ||
|
|
7fee883b8b | ||
|
|
e6ea60b131 | ||
|
|
342eff6b38 | ||
|
|
8e5103a026 | ||
|
|
52fa8b8582 | ||
|
|
7892063223 | ||
|
|
5f4a75f904 | ||
|
|
b4e7ebe227 | ||
|
|
9ac13c344b | ||
|
|
9b6c56a07d | ||
|
|
02faddb5ca | ||
|
|
77439dafd0 | ||
|
|
5709daae36 | ||
|
|
f0a153a7f6 | ||
|
|
f2103de785 | ||
|
|
ec984f1697 | ||
|
|
619c449b68 | ||
|
|
8bd20eb128 | ||
|
|
2645411074 | ||
|
|
d8b564530e | ||
|
|
af91e98e32 | ||
|
|
46c39b60c5 | ||
|
|
9153d11e6c | ||
|
|
de20bf01e4 | ||
|
|
56aaa6450b | ||
|
|
5ca9285434 | ||
|
|
7631f6bbfc | ||
|
|
08e2f06d36 | ||
|
|
424643f463 | ||
|
|
84396ed610 | ||
|
|
b28a902253 | ||
|
|
b94ebc582f | ||
|
|
07600df4cb | ||
|
|
00d8024741 | ||
|
|
aa39d9a2df | ||
|
|
98ad3cb2c0 | ||
|
|
88b7b1a88a | ||
|
|
ec1f93c50c | ||
|
|
6157ab451b |
@@ -118,5 +118,5 @@ else:
|
||||
logger.error('Invalid signature data - ensure you are specifying sigdata/siginfo files')
|
||||
sys.exit(1)
|
||||
|
||||
if output:
|
||||
print '\n'.join(output)
|
||||
if output:
|
||||
print '\n'.join(output)
|
||||
|
||||
@@ -610,7 +610,7 @@ class DataSmart(MutableMapping):
|
||||
else:
|
||||
cachename = var + "[" + flag + "]"
|
||||
value = self.expand(value, cachename)
|
||||
if value is not None and flag == "_content" and local_var is not None and "_removeactive" in local_var:
|
||||
if value and flag == "_content" and local_var is not None and "_removeactive" in local_var:
|
||||
filtered = filter(lambda v: v not in local_var["_removeactive"],
|
||||
value.split(" "))
|
||||
value = " ".join(filtered)
|
||||
|
||||
@@ -1255,7 +1255,7 @@ class FetchMethod(object):
|
||||
destdir = destdir.strip('/')
|
||||
if destdir != "." and not os.access("%s/%s" % (rootdir, destdir), os.F_OK):
|
||||
os.makedirs("%s/%s" % (rootdir, destdir))
|
||||
cmd = 'cp -pPR %s %s/%s/' % (file, rootdir, destdir)
|
||||
cmd = 'cp -fpPR %s %s/%s/' % (file, rootdir, destdir)
|
||||
#cmd = 'tar -cf - -C "%d" -ps . | tar -xf - -C "%s/%s/"' % (file, rootdir, destdir)
|
||||
else:
|
||||
# The "destdir" handling was specifically done for FILESPATH
|
||||
@@ -1265,7 +1265,7 @@ class FetchMethod(object):
|
||||
else:
|
||||
destdir = "."
|
||||
bb.utils.mkdirhier("%s/%s" % (rootdir, destdir))
|
||||
cmd = 'cp %s %s/%s/' % (file, rootdir, destdir)
|
||||
cmd = 'cp -f %s %s/%s/' % (file, rootdir, destdir)
|
||||
|
||||
if not cmd:
|
||||
return
|
||||
|
||||
@@ -110,7 +110,10 @@ class Hg(FetchMethod):
|
||||
options.append("-r %s" % ud.revision)
|
||||
|
||||
if command == "fetch":
|
||||
cmd = "%s clone %s %s://%s/%s %s" % (basecmd, " ".join(options), proto, hgroot, ud.module, ud.module)
|
||||
if ud.user and ud.pswd:
|
||||
cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" clone %s %s://%s/%s %s" % (basecmd, ud.user, ud.pswd, proto, " ".join(options), proto, hgroot, ud.module, ud.module)
|
||||
else:
|
||||
cmd = "%s clone %s %s://%s/%s %s" % (basecmd, " ".join(options), proto, hgroot, ud.module, ud.module)
|
||||
elif command == "pull":
|
||||
# do not pass options list; limiting pull to rev causes the local
|
||||
# repo not to contain it and immediately following "update" command
|
||||
@@ -120,7 +123,7 @@ class Hg(FetchMethod):
|
||||
else:
|
||||
cmd = "%s pull" % (basecmd)
|
||||
elif command == "update":
|
||||
cmd = "%s update -C %s" % (basecmd, " ".join(options))
|
||||
cmd = "%s update --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" -C %s" % (basecmd, ud.user, ud.pswd, proto, " ".join(options))
|
||||
else:
|
||||
raise FetchError("Invalid hg command %s" % command, ud.url)
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ class Perforce(FetchMethod):
|
||||
(user, pswd, host, port) = path.split('@')[0].split(":")
|
||||
path = path.split('@')[1]
|
||||
else:
|
||||
(host, port) = data.getVar('P4PORT', d).split(':')
|
||||
(host, port) = d.getVar('P4PORT').split(':')
|
||||
user = ""
|
||||
pswd = ""
|
||||
|
||||
@@ -81,7 +81,7 @@ class Perforce(FetchMethod):
|
||||
if host:
|
||||
p4opt += " -p %s" % (host)
|
||||
|
||||
p4date = data.getVar("P4DATE", d, True)
|
||||
p4date = d.getVar("P4DATE", True)
|
||||
if "revision" in parm:
|
||||
depot += "#%s" % (parm["revision"])
|
||||
elif "label" in parm:
|
||||
@@ -89,7 +89,7 @@ class Perforce(FetchMethod):
|
||||
elif p4date:
|
||||
depot += "@%s" % (p4date)
|
||||
|
||||
p4cmd = data.getVar('FETCHCMD_p4', d, True)
|
||||
p4cmd = d.getVar('FETCHCMD_p4', True) or "p4"
|
||||
logger.debug(1, "Running %s%s changes -m 1 %s", p4cmd, p4opt, depot)
|
||||
p4file, errors = bb.process.run("%s%s changes -m 1 %s" % (p4cmd, p4opt, depot))
|
||||
cset = p4file.strip()
|
||||
@@ -145,7 +145,7 @@ class Perforce(FetchMethod):
|
||||
if host:
|
||||
p4opt += " -p %s" % (host)
|
||||
|
||||
p4cmd = data.getVar('FETCHCMD_p4', d, True)
|
||||
p4cmd = d.getVar('FETCHCMD_p4', True) or "p4"
|
||||
|
||||
# create temp directory
|
||||
logger.debug(2, "Fetch: creating temporary directory")
|
||||
|
||||
@@ -139,7 +139,7 @@ class RunQueueScheduler(object):
|
||||
bestprio = None
|
||||
for taskid in self.buildable:
|
||||
prio = self.rev_prio_map[taskid]
|
||||
if not bestprio or bestprio > prio:
|
||||
if bestprio is None or bestprio > prio:
|
||||
stamp = self.stamps[taskid]
|
||||
if stamp in self.rq.build_stamps.itervalues():
|
||||
continue
|
||||
@@ -370,11 +370,11 @@ class RunQueueData:
|
||||
|
||||
for listid in xrange(numTasks):
|
||||
task_done.append(False)
|
||||
weight.append(0)
|
||||
weight.append(1)
|
||||
deps_left.append(len(self.runq_revdeps[listid]))
|
||||
|
||||
for listid in endpoints:
|
||||
weight[listid] = 1
|
||||
weight[listid] = 10
|
||||
task_done[listid] = True
|
||||
|
||||
while True:
|
||||
|
||||
@@ -253,6 +253,11 @@ class TestConcatOverride(unittest.TestCase):
|
||||
bb.data.update_data(self.d)
|
||||
self.assertEqual(self.d.getVar("TEST_TEST", True), "bar bar")
|
||||
|
||||
def test_empty_remove(self):
|
||||
self.d.setVar("TEST", "")
|
||||
self.d.setVar("TEST_remove", "val")
|
||||
bb.data.update_data(self.d)
|
||||
self.assertEqual(self.d.getVar("TEST", True), "")
|
||||
|
||||
class TestOverrides(unittest.TestCase):
|
||||
def setUp(self):
|
||||
|
||||
@@ -166,9 +166,18 @@ class Task(models.Model):
|
||||
def get_related_setscene(self):
|
||||
return Task.objects.related_setscene(self)
|
||||
|
||||
def get_outcome_text(self):
|
||||
return Task.TASK_OUTCOME[self.outcome + 1][1]
|
||||
|
||||
def get_outcome_help(self):
|
||||
return Task.TASK_OUTCOME_HELP[self.outcome][1]
|
||||
|
||||
def get_sstate_text(self):
|
||||
if self.sstate_result==Task.SSTATE_NA:
|
||||
return ''
|
||||
else:
|
||||
return Task.SSTATE_RESULT[self.sstate_result][1]
|
||||
|
||||
def get_executed_display(self):
|
||||
if self.task_executed:
|
||||
return "Executed"
|
||||
@@ -200,6 +209,9 @@ class Task(models.Model):
|
||||
message = models.CharField(max_length=240)
|
||||
logfile = models.FilePathField(max_length=255, blank=True)
|
||||
|
||||
outcome_text = property(get_outcome_text)
|
||||
sstate_text = property(get_sstate_text)
|
||||
|
||||
class Meta:
|
||||
ordering = ('order', 'recipe' ,)
|
||||
unique_together = ('build', 'recipe', 'task_name', )
|
||||
|
||||
@@ -1,18 +1,43 @@
|
||||
{% load projecttags %}
|
||||
<!-- component to display a generic table -->
|
||||
<script>
|
||||
function showhideTableColumn(clname, sh) {
|
||||
if (sh) $('.' + clname).show(100);
|
||||
else $('.' + clname).hide(100);
|
||||
|
||||
// save cookie for all checkboxes
|
||||
save = '';
|
||||
$('.chbxtoggle').each(function() { if ($(this).attr('id') != undefined) { save += ';' + $(this).attr('id') +':'+ $(this).is(':checked')} })
|
||||
$.cookie('_displaycols_{{objectname}}', save);
|
||||
save = '';
|
||||
//
|
||||
// most of the following javascript is for managing the 'Edit Columns'
|
||||
// pop-up dialog and actions. the idea is that there are 2 types
|
||||
// of actions: immediate - performed while the dialog is still
|
||||
// visible - hide/show columns, and delayed - performed when the
|
||||
// dialog becomes invisible - any resorting if necessary.
|
||||
//
|
||||
// When the dialog is open, an interval timer is set up to
|
||||
// determine if the dialog is still visible. when the dialog
|
||||
// closes - goes invisible, the delayed actions are performed.
|
||||
//
|
||||
// the interval timer and interrupt handler is a way of simulating
|
||||
// an onclose event. there is probably a simpler way to do this
|
||||
// however the pop-up window id was elusive.
|
||||
//
|
||||
|
||||
var editColTimer;
|
||||
var editColAction;
|
||||
|
||||
//
|
||||
// this is the target function of the interval timeout.
|
||||
// check to see if the dialog is visible. if the dialog
|
||||
// has gone invisible since the last check, take any delayed
|
||||
// actions indicated in the action list and clear the timer.
|
||||
//
|
||||
|
||||
function checkVisible( ) {
|
||||
editcol = document.getElementById( 'editcol' );
|
||||
if ( editcol.offsetWidth <= 0 ) {
|
||||
clearInterval( editColTimer );
|
||||
editColTimer = false;
|
||||
hideshowColumns( );
|
||||
editColAction = [ ];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function filterTableRows(test) {
|
||||
if (test.length > 0) {
|
||||
var r = test.split(/[ ,]+/).map(function (e) { return new RegExp(e, 'i') });
|
||||
@@ -24,6 +49,113 @@
|
||||
$('tr.data').show();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// determine the value of the indicated url arg.
|
||||
// this is needed to determine whether a resort
|
||||
// is necessary. it looks like a lot of gorp stuff
|
||||
// but its actually pretty simple.
|
||||
//
|
||||
|
||||
function getURLParameter( name ) {
|
||||
return decodeURIComponent((new RegExp('[?|&]' + name + '=' +
|
||||
'([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g,
|
||||
'%20'))||null
|
||||
}
|
||||
|
||||
//
|
||||
// when the dialog box goes invisible
|
||||
// this function is called to interpret
|
||||
// the action list and take any delayed actions necessary.
|
||||
// the editColAction list is a hash table with
|
||||
// the column name as the hash key, the hash value
|
||||
// is a 2 element list. the first element is a flag
|
||||
// indicating whether the column is on or off. the
|
||||
// 2nd element is the sort order indicator for the column.
|
||||
//
|
||||
|
||||
function hideshowColumns( ) {
|
||||
for( var k in editColAction ) {
|
||||
showhideDelayedTableAction( k, editColAction[ k ][ 0 ], editColAction[ k ][ 1 ]);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// this function actually performs the delayed table actions
|
||||
// namely any resorting if necessary
|
||||
//
|
||||
|
||||
function showhideDelayedTableAction( clname, sh, orderkey ) {
|
||||
if ( !sh ) {
|
||||
p = getURLParameter( "orderby" ).split( ":" )[ 0 ];
|
||||
if ( p == orderkey ) {
|
||||
reload_params({ 'orderby' : '{{default_orderby}}'});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// this function actually performs the immediate table actions
|
||||
// namely any colums that need to be hidden/shown
|
||||
//
|
||||
|
||||
function showhideImmediateTableAction( clname, sh, orderkey ) {
|
||||
if ( sh ) {
|
||||
$( '.' + clname ).show( 100 );
|
||||
}
|
||||
else {
|
||||
$( '.' + clname ).hide( 100 );
|
||||
}
|
||||
|
||||
// save cookie for all checkboxes
|
||||
save = '';
|
||||
$( '.chbxtoggle' ).each(function( ) {
|
||||
if ( $( this ).attr( 'id' ) != undefined ) {
|
||||
save += ';' + $( this ).attr( 'id' ) +':'+ $( this ).is( ':checked' )
|
||||
}
|
||||
});
|
||||
$.cookie( '_displaycols_{{objectname}}', save );
|
||||
save = '';
|
||||
}
|
||||
|
||||
//
|
||||
// this is the onclick handler for all of the check box
|
||||
// items in edit columns dialog
|
||||
//
|
||||
|
||||
function showhideTableColumn( clname, sh, orderkey ) {
|
||||
editcol = document.getElementById( 'editcol' );
|
||||
if ( editcol.offsetWidth <= 0 ) {
|
||||
|
||||
//
|
||||
// this path is taken when the page is first
|
||||
// getting initialized - no dialog visible,
|
||||
// perform both the immediate and delayed actions
|
||||
//
|
||||
|
||||
showhideImmediateTableAction( clname, sh, orderkey );
|
||||
showhideDelayedTableAction( clname, sh, orderkey );
|
||||
return;
|
||||
}
|
||||
if ( !editColTimer ) {
|
||||
|
||||
//
|
||||
// we don't have a timer active so set one up
|
||||
// and clear the action list
|
||||
//
|
||||
|
||||
editColTimer = setInterval( checkVisible, 250 );
|
||||
editColAction = [ ];
|
||||
}
|
||||
|
||||
//
|
||||
// save the action to be taken when the dialog closes
|
||||
//
|
||||
|
||||
editColAction[ clname ] = [ sh, orderkey ];
|
||||
showhideImmediateTableAction( clname, sh, orderkey );
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<!-- control header -->
|
||||
@@ -33,7 +165,6 @@
|
||||
<input class="input-xxlarge" id="search" name="search" type="text" placeholder="Search {%if object_search_display %}{{object_search_display}}{%else%}{{objectname}}{%endif%}" value="{{request.GET.search}}"/>{% if request.GET.search %}<a href="javascript:$('#search').val('');searchform.submit()" class="add-on btn" tabindex="-1"><i class="icon-remove"></i></a>{%endif%}
|
||||
<input type="hidden" name="orderby" value="{{request.GET.orderby}}">
|
||||
<input type="hidden" name="page" value="1">
|
||||
<input type="hidden" name="count" value="{{request.GET.count}}">
|
||||
<button class="btn" type="submit" value="Search">Search</button>
|
||||
</form>
|
||||
<div class="pull-right">
|
||||
@@ -45,12 +176,27 @@
|
||||
<!--
|
||||
{{tablecols|sortcols}}
|
||||
-->
|
||||
<ul class="dropdown-menu">{% for i in tablecols|sortcols %}
|
||||
<ul id='editcol' class="dropdown-menu">
|
||||
{% for i in tablecols|sortcols %}
|
||||
<li>
|
||||
<label {% if not i.clclass %} class="checkbox muted" {%else%} class="checkbox" {%endif%}>
|
||||
<input type="checkbox" class="chbxtoggle" {% if i.clclass %}id="{{i.clclass}}" value="ct{{i.name}}" {% if not i.hidden %}checked="checked"{%endif%} onchange="showhideTableColumn($(this).attr('id'), $(this).is(':checked'))" {%else%} checked disabled {% endif %}/> {{i.name}}
|
||||
<input type="checkbox" class="chbxtoggle"
|
||||
{% if i.clclass %}
|
||||
id="{{i.clclass}}"
|
||||
value="ct{{i.name}}"
|
||||
{% if not i.hidden %}
|
||||
checked="checked"
|
||||
{%endif%}
|
||||
onclick="showhideTableColumn(
|
||||
$(this).attr('id'),
|
||||
$(this).is(':checked'),
|
||||
'{{i.orderkey}}' )"
|
||||
{%else%}
|
||||
checked disabled
|
||||
{% endif %}/> {{i.name}}
|
||||
</label>
|
||||
</li>{% endfor %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
@@ -83,9 +83,27 @@
|
||||
<dd><a href="{% url 'target' build.pk target.target.pk %}">{{target.npkg}}</a></dd>
|
||||
<dt>Total package size</dt>
|
||||
<dd>{{target.pkgsz|filtered_filesizeformat}}</dd>
|
||||
{% if target.targetHasNoImages %}
|
||||
</dl>
|
||||
<div class="row-fluid">
|
||||
<div class="alert alert-info span7">
|
||||
<p>
|
||||
<b>This build did not create any image files</b>
|
||||
</p>
|
||||
<p>
|
||||
This is probably because valid image and license manifest
|
||||
files from a previous build already exist in your
|
||||
<code>.../poky/build/tmp/deploy</code>
|
||||
directory. You can
|
||||
also <a href="{% url 'targetpkg' build.pk target.target.pk %}">view the
|
||||
license manifest information</a> in Toaster.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<dt>
|
||||
<i class="icon-question-sign get-help" title="The location in disk of the license manifest, a document listing all packages installed in your image and their licenses"></i>
|
||||
<a href="{% url 'target' build.pk target.target.pk %}">License manifest</a>
|
||||
<a href="{% url 'targetpkg' build.pk target.target.pk %}">License manifest</a>
|
||||
</dt>
|
||||
<dd><code>{{target.target.license_manifest_path}}</code></dd>
|
||||
<dt>
|
||||
@@ -101,9 +119,11 @@
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@@ -125,7 +145,7 @@
|
||||
<div class="well span4 dashboard-section">
|
||||
<h4><a href="{%url 'tasks' build.pk%}">Tasks</a></h4>
|
||||
<dl>
|
||||
<dt>Total number of tasks</dt><dd><a href="{% url 'tasks' build.pk %}">{{build.task_build.all.count}}</a></dd>
|
||||
<dt>Total number of tasks</dt><dd><a href="{% url 'tasks' build.pk %}">{% query build.task_build order__gt=0 as alltasks %}{{alltasks.count}}</a></dd>
|
||||
<dt>
|
||||
Tasks executed
|
||||
<i class="icon-question-sign get-help" title="'Executed' tasks are those that need to be run in order to generate the task output"></i>
|
||||
|
||||
@@ -45,31 +45,39 @@
|
||||
<td><a href="{% url "recipe" build.pk recipe.pk %}">{{recipe.version}}</a></td>
|
||||
<!-- Depends -->
|
||||
<td class="depends_on">
|
||||
{% if recipe.r_dependencies_recipe.all.count %}
|
||||
{% with deps=recipe_deps|get_dict_value:recipe.pk %}
|
||||
{% with count=deps|length %}
|
||||
{% if count %}
|
||||
<a class="btn"
|
||||
title="<a href='{% url "recipe" build.pk recipe.pk %}#dependencies'>{{recipe.name}}</a> dependencies"
|
||||
data-content="<ul class='unstyled'>
|
||||
{% for i in recipe.r_dependencies_recipe.all|dictsort:"depends_on.name"%}
|
||||
{% for i in deps|dictsort:"depends_on.name"%}
|
||||
<li><a href='{% url "recipe" build.pk i.depends_on.pk %}'>{{i.depends_on.name}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>">
|
||||
{{recipe.r_dependencies_recipe.all.count}}
|
||||
{{count}}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
{% endwith %}
|
||||
</td>
|
||||
<!-- Brought in by -->
|
||||
<td class="depends_by">
|
||||
{% if recipe.r_dependencies_depends.all.count %}
|
||||
{% with revs=recipe_revs|get_dict_value:recipe.pk %}
|
||||
{% with count=revs|length %}
|
||||
{% if count %}
|
||||
<a class="btn"
|
||||
title="<a href='{% url "recipe" build.pk recipe.pk %}#brought-in-by'>{{recipe.name}}</a> reverse dependencies"
|
||||
data-content="<ul class='unstyled'>
|
||||
{% for i in recipe.r_dependencies_depends.all|dictsort:"recipe.name"%}
|
||||
{% for i in revs|dictsort:"recipe.name" %}
|
||||
<li><a href='{% url "recipe" build.pk i.recipe.pk %}'>{{i.recipe.name}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>">
|
||||
{{recipe.r_dependencies_depends.all.count}}
|
||||
{{count}}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
{% endwith %}
|
||||
</td>
|
||||
<!-- Recipe file -->
|
||||
<td class="recipe_file">{{recipe.file_path}}</td>
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
{{package.version|filtered_packageversion:package.revision}}
|
||||
</a>
|
||||
</td>
|
||||
<td class="package-size sizecol">
|
||||
<td class="size sizecol">
|
||||
{{package.size|filtered_installedsize:package.installed_size|filtered_filesizeformat}}
|
||||
</td>
|
||||
<td class="size_over_total sizecol">
|
||||
|
||||
@@ -46,6 +46,7 @@ urlpatterns = patterns('toastergui.views',
|
||||
|
||||
# images are known as targets in the internal model
|
||||
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'target', name='target'),
|
||||
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/targetpkg$', 'targetpkg', name='targetpkg'),
|
||||
url(r'^dentries/build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'dirinfo_ajax', name='dirinfo_ajax'),
|
||||
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo$', 'dirinfo', name='dirinfo'),
|
||||
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo_filepath/(?P<file_path>(?:/[^/\n]+)*)$', 'dirinfo', name='dirinfo_filepath'),
|
||||
|
||||
341
bitbake/lib/toaster/toastergui/views.py
Normal file → Executable file
341
bitbake/lib/toaster/toastergui/views.py
Normal file → Executable file
@@ -230,11 +230,10 @@ def builds(request):
|
||||
b.completeper = tf.exclude(order__isnull=True).count()*100/tf.count()
|
||||
else:
|
||||
b.completeper = 0
|
||||
b.eta = timezone.now()
|
||||
|
||||
b.eta = 0
|
||||
if b.completeper > 0:
|
||||
b.eta += ((timezone.now() - b.started_on)*100/b.completeper)
|
||||
else:
|
||||
b.eta = 0
|
||||
b.eta = timezone.now() + ((timezone.now() - b.started_on)*(100-b.completeper)/b.completeper)
|
||||
|
||||
# set up list of fstypes for each build
|
||||
fstypes_map = {};
|
||||
@@ -262,6 +261,7 @@ def builds(request):
|
||||
# TODO: common objects for all table views, adapt as needed
|
||||
'objects' : build_info,
|
||||
'objectname' : "builds",
|
||||
'default_orderby' : 'completed_on:-',
|
||||
'fstypes' : fstypes_map,
|
||||
'search_term' : search_term,
|
||||
'total_count' : queryset_with_search.count(),
|
||||
@@ -311,6 +311,7 @@ def builds(request):
|
||||
'qhelp': "The date and time the build finished",
|
||||
'orderfield': _get_toggle_order(request, "completed_on", True),
|
||||
'ordericon':_get_toggle_order_icon(request, "completed_on"),
|
||||
'orderkey' : 'completed_on',
|
||||
'filter' : {'class' : 'completed_on',
|
||||
'label': 'Show:',
|
||||
'options' : [
|
||||
@@ -334,6 +335,7 @@ def builds(request):
|
||||
'qhelp': "How many errors were encountered during the build (if any)",
|
||||
'orderfield': _get_toggle_order(request, "errors_no", True),
|
||||
'ordericon':_get_toggle_order_icon(request, "errors_no"),
|
||||
'orderkey' : 'errors_no',
|
||||
'filter' : {'class' : 'errors_no',
|
||||
'label': 'Show:',
|
||||
'options' : [
|
||||
@@ -346,6 +348,7 @@ def builds(request):
|
||||
'qhelp': "How many warnings were encountered during the build (if any)",
|
||||
'orderfield': _get_toggle_order(request, "warnings_no", True),
|
||||
'ordericon':_get_toggle_order_icon(request, "warnings_no"),
|
||||
'orderkey' : 'warnings_no',
|
||||
'filter' : {'class' : 'warnings_no',
|
||||
'label': 'Show:',
|
||||
'options' : [
|
||||
@@ -358,6 +361,7 @@ def builds(request):
|
||||
'qhelp': "How long it took the build to finish",
|
||||
'orderfield': _get_toggle_order(request, "timespent", True),
|
||||
'ordericon':_get_toggle_order_icon(request, "timespent"),
|
||||
'orderkey' : 'timespent',
|
||||
},
|
||||
{'name': 'Log',
|
||||
'dclass': "span4",
|
||||
@@ -365,6 +369,7 @@ def builds(request):
|
||||
'clclass': 'log', 'hidden': 1,
|
||||
'orderfield': _get_toggle_order(request, "cooker_log_path"),
|
||||
'ordericon':_get_toggle_order_icon(request, "cooker_log_path"),
|
||||
'orderkey' : 'cooker_log_path',
|
||||
},
|
||||
{'name': 'Output', 'clclass': 'output',
|
||||
'qhelp': "The root file system types produced by the build. You can find them in your <code>/build/tmp/deploy/images/</code> directory",
|
||||
@@ -397,6 +402,7 @@ def builddashboard( request, build_id ):
|
||||
targets = [ ]
|
||||
ntargets = 0
|
||||
hasImages = False
|
||||
targetHasNoImages = False
|
||||
for t in tgts:
|
||||
elem = { }
|
||||
elem[ 'target' ] = t
|
||||
@@ -423,7 +429,11 @@ def builddashboard( request, build_id ):
|
||||
ndx = 0;
|
||||
f = i.file_name[ ndx + 1: ]
|
||||
imageFiles.append({ 'path': f, 'size' : i.file_size })
|
||||
if ( t.is_image and
|
||||
(( len( imageFiles ) <= 0 ) or ( len( t.license_manifest_path ) <= 0 ))):
|
||||
targetHasNoImages = True
|
||||
elem[ 'imageFiles' ] = imageFiles
|
||||
elem[ 'targetHasNoImages' ] = targetHasNoImages
|
||||
targets.append( elem )
|
||||
|
||||
##
|
||||
@@ -502,7 +512,7 @@ def task( request, build_id, task_id ):
|
||||
'log_head' : log_head,
|
||||
'log_body' : log_body,
|
||||
'showing_matches' : False,
|
||||
'uri_list' : uri_list,
|
||||
'uri_list' : uri_list,
|
||||
}
|
||||
if request.GET.get( 'show_matches', "" ):
|
||||
context[ 'showing_matches' ] = True
|
||||
@@ -535,123 +545,174 @@ def recipe(request, build_id, recipe_id):
|
||||
}
|
||||
return render(request, template, context)
|
||||
|
||||
def target(request, build_id, target_id):
|
||||
def target_common( request, build_id, target_id, variant ):
|
||||
template = "target.html"
|
||||
default_orderby = 'name:+';
|
||||
mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'name:+'};
|
||||
retval = _verify_parameters( request.GET, mandatory_parameters )
|
||||
if retval:
|
||||
return _redirect_parameters( 'target', request.GET, mandatory_parameters, build_id = build_id, target_id = target_id)
|
||||
(filter_string, search_term, ordering_string) = _search_tuple(request, Package)
|
||||
return _redirect_parameters(
|
||||
variant, request.GET, mandatory_parameters,
|
||||
build_id = build_id, target_id = target_id )
|
||||
( filter_string, search_term, ordering_string ) = _search_tuple( request, Package )
|
||||
|
||||
# FUTURE: get rid of nested sub-queries replacing with ManyToMany field
|
||||
queryset = Package.objects.filter(size__gte=0, id__in=Target_Installed_Package.objects.filter(target_id=target_id).values('package_id'))
|
||||
packages_sum = queryset.aggregate(Sum('installed_size'))
|
||||
queryset = _get_queryset(Package, queryset, filter_string, search_term, ordering_string, 'name')
|
||||
packages = _build_page_range(Paginator(queryset, request.GET.get('count', 25)),request.GET.get('page', 1))
|
||||
queryset = Package.objects.filter(
|
||||
size__gte = 0,
|
||||
id__in = Target_Installed_Package.objects.filter(
|
||||
target_id=target_id ).values( 'package_id' ))
|
||||
packages_sum = queryset.aggregate( Sum( 'installed_size' ))
|
||||
queryset = _get_queryset(
|
||||
Package, queryset, filter_string, search_term, ordering_string, 'name' )
|
||||
packages = _build_page_range( Paginator(
|
||||
queryset, request.GET.get( 'count', 25 )),request.GET.get( 'page', 1 ))
|
||||
|
||||
# bring in package dependencies
|
||||
for p in packages.object_list:
|
||||
p.runtime_dependencies = p.package_dependencies_source.filter(target_id = target_id, dep_type=Package_Dependency.TYPE_TRDEPENDS)
|
||||
p.reverse_runtime_dependencies = p.package_dependencies_target.filter(target_id = target_id, dep_type=Package_Dependency.TYPE_TRDEPENDS)
|
||||
|
||||
context = { 'build': Build.objects.filter(pk=build_id)[0],
|
||||
'target': Target.objects.filter(pk=target_id)[0],
|
||||
'objects': packages,
|
||||
'packages_sum' : packages_sum['installed_size__sum'],
|
||||
'object_search_display': "packages included",
|
||||
'tablecols':[
|
||||
{
|
||||
'name':'Package',
|
||||
'qhelp':'Packaged output resulting from building a recipe and included in this image',
|
||||
'orderfield': _get_toggle_order(request, "name"),
|
||||
'ordericon':_get_toggle_order_icon(request, "name"),
|
||||
},
|
||||
{
|
||||
'name':'Package version',
|
||||
'qhelp':'The package version and revision',
|
||||
},
|
||||
{
|
||||
'name':'Size',
|
||||
'qhelp':'The size of the package',
|
||||
'orderfield': _get_toggle_order(request, "size", True),
|
||||
'ordericon':_get_toggle_order_icon(request, "size"),
|
||||
'clclass': 'package_size span2',
|
||||
'hidden' : 0,
|
||||
},
|
||||
{
|
||||
'name':'Size over total (%)',
|
||||
'qhelp':'Proportion of the overall included package size represented by this package',
|
||||
'clclass': 'size_over_total span2',
|
||||
'hidden' : 1,
|
||||
},
|
||||
{
|
||||
'name':'License',
|
||||
'qhelp':'The license under which the package is distributed. Multiple license names separated by the pipe character indicates a choice between licenses. Multiple license names separated by the ampersand character indicates multiple licenses exist that cover different parts of the source',
|
||||
'orderfield': _get_toggle_order(request, "license"),
|
||||
'ordericon':_get_toggle_order_icon(request, "license"),
|
||||
'clclass': 'license',
|
||||
'hidden' : 1,
|
||||
},
|
||||
{
|
||||
'name':'Dependencies',
|
||||
'qhelp':"Package runtime dependencies (i.e. other packages)",
|
||||
'clclass': 'depends',
|
||||
'hidden' : 0,
|
||||
},
|
||||
{
|
||||
'name':'Reverse dependencies',
|
||||
'qhelp':'Package run-time reverse dependencies (i.e. other packages that depend on this package)',
|
||||
'clclass': 'brought_in_by',
|
||||
'hidden' : 0,
|
||||
},
|
||||
{
|
||||
'name':'Recipe',
|
||||
'qhelp':'The name of the recipe building the package',
|
||||
'orderfield': _get_toggle_order(request, "recipe__name"),
|
||||
'ordericon':_get_toggle_order_icon(request, "recipe__name"),
|
||||
'clclass': 'recipe_name',
|
||||
'hidden' : 0,
|
||||
},
|
||||
{
|
||||
'name':'Recipe version',
|
||||
'qhelp':'Version and revision of the recipe building the package',
|
||||
'clclass': 'recipe_version',
|
||||
'hidden' : 1,
|
||||
},
|
||||
{
|
||||
'name':'Layer',
|
||||
'qhelp':'The name of the layer providing the recipe that builds the package',
|
||||
'orderfield': _get_toggle_order(request, "recipe__layer_version__layer__name"),
|
||||
'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__layer__name"),
|
||||
'clclass': 'layer_name',
|
||||
'hidden' : 1,
|
||||
},
|
||||
{
|
||||
'name':'Layer branch',
|
||||
'qhelp':'The Git branch of the layer providing the recipe that builds the package',
|
||||
'orderfield': _get_toggle_order(request, "recipe__layer_version__branch"),
|
||||
'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__branch"),
|
||||
'clclass': 'layer_branch',
|
||||
'hidden' : 1,
|
||||
},
|
||||
{
|
||||
'name':'Layer commit',
|
||||
'qhelp':'The Git commit of the layer providing the recipe that builds the package',
|
||||
'clclass': 'layer_commit',
|
||||
'hidden' : 1,
|
||||
},
|
||||
{
|
||||
'name':'Layer directory',
|
||||
'qhelp':'Path to the layer providing the recipe that builds the package',
|
||||
'orderfield': _get_toggle_order(request, "recipe__layer_version__layer__local_path"),
|
||||
'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__layer__local_path"),
|
||||
'clclass': 'layer_directory',
|
||||
'hidden' : 1,
|
||||
},
|
||||
p.runtime_dependencies = p.package_dependencies_source.filter(
|
||||
target_id = target_id, dep_type=Package_Dependency.TYPE_TRDEPENDS )
|
||||
p.reverse_runtime_dependencies = p.package_dependencies_target.filter(
|
||||
target_id = target_id, dep_type=Package_Dependency.TYPE_TRDEPENDS )
|
||||
tc_package = {
|
||||
'name' : 'Package',
|
||||
'qhelp' : 'Packaged output resulting from building a recipe included in this image',
|
||||
'orderfield' : _get_toggle_order( request, "name" ),
|
||||
'ordericon' : _get_toggle_order_icon( request, "name" ),
|
||||
}
|
||||
tc_packageVersion = {
|
||||
'name' : 'Package version',
|
||||
'qhelp' : 'The package version and revision',
|
||||
}
|
||||
tc_size = {
|
||||
'name' : 'Size',
|
||||
'qhelp' : 'The size of the package',
|
||||
'orderfield' : _get_toggle_order( request, "size", True ),
|
||||
'ordericon' : _get_toggle_order_icon( request, "size" ),
|
||||
'orderkey' : 'size',
|
||||
'clclass' : 'size',
|
||||
'dclass' : 'span2',
|
||||
}
|
||||
if ( variant == 'target' ):
|
||||
tc_size[ "hidden" ] = 0
|
||||
else:
|
||||
tc_size[ "hidden" ] = 1
|
||||
tc_sizePercentage = {
|
||||
'name' : 'Size over total (%)',
|
||||
'qhelp' : 'Proportion of the overall size represented by this package',
|
||||
'orderfield' : _get_toggle_order( request, "size" ),
|
||||
'ordericon' : _get_toggle_order_icon( request, "size" ),
|
||||
'clclass' : 'size_over_total',
|
||||
'hidden' : 1,
|
||||
}
|
||||
tc_license = {
|
||||
'name' : 'License',
|
||||
'qhelp' : 'The license under which the package is distributed. Separate license names u\
|
||||
sing | (pipe) means there is a choice between licenses. Separate license names using & (ampersand) m\
|
||||
eans multiple licenses exist that cover different parts of the source',
|
||||
'orderfield' : _get_toggle_order( request, "license" ),
|
||||
'ordericon' : _get_toggle_order_icon( request, "license" ),
|
||||
'orderkey' : 'license',
|
||||
'clclass' : 'license',
|
||||
}
|
||||
if ( variant == 'target' ):
|
||||
tc_license[ "hidden" ] = 1
|
||||
else:
|
||||
tc_license[ "hidden" ] = 0
|
||||
tc_dependencies = {
|
||||
'name' : 'Dependencies',
|
||||
'qhelp' : "Package runtime dependencies (other packages)",
|
||||
'clclass' : 'depends',
|
||||
}
|
||||
if ( variant == 'target' ):
|
||||
tc_dependencies[ "hidden" ] = 0
|
||||
else:
|
||||
tc_dependencies[ "hidden" ] = 1
|
||||
tc_rdependencies = {
|
||||
'name' : 'Reverse dependencies',
|
||||
'qhelp' : 'Package run-time reverse dependencies (i.e. which other packages depend on t\
|
||||
his package',
|
||||
'clclass' : 'brought_in_by',
|
||||
}
|
||||
if ( variant == 'target' ):
|
||||
tc_rdependencies[ "hidden" ] = 0
|
||||
else:
|
||||
tc_rdependencies[ "hidden" ] = 1
|
||||
tc_recipe = {
|
||||
'name' : 'Recipe',
|
||||
'qhelp' : 'The name of the recipe building the package',
|
||||
'orderfield' : _get_toggle_order( request, "recipe__name" ),
|
||||
'ordericon' : _get_toggle_order_icon( request, "recipe__name" ),
|
||||
'clclass' : 'recipe_name',
|
||||
'hidden' : 0,
|
||||
}
|
||||
tc_recipeVersion = {
|
||||
'name' : 'Recipe version',
|
||||
'qhelp' : 'Version and revision of the recipe building the package',
|
||||
'clclass' : 'recipe_version',
|
||||
'hidden' : 1,
|
||||
}
|
||||
tc_layer = {
|
||||
'name' : 'Layer',
|
||||
'qhelp' : 'The name of the layer providing the recipe that builds the package',
|
||||
'orderfield' : _get_toggle_order( request, "recipe__layer_version__layer__name" ),
|
||||
'ordericon' : _get_toggle_order_icon( request, "recipe__layer_version__layer__name" ),
|
||||
'clclass' : 'layer_name',
|
||||
'hidden' : 1,
|
||||
}
|
||||
tc_layerBranch = {
|
||||
'name' : 'Layer branch',
|
||||
'qhelp' : 'The Git branch of the layer providing the recipe that builds the package',
|
||||
'orderfield' : _get_toggle_order( request, "recipe__layer_version__branch" ),
|
||||
'ordericon' : _get_toggle_order_icon( request, "recipe__layer_version__branch" ),
|
||||
'clclass' : 'layer_branch',
|
||||
'hidden' : 1,
|
||||
}
|
||||
tc_layerCommit = {
|
||||
'name' : 'Layer commit',
|
||||
'qhelp' : 'The Git commit of the layer providing the recipe that builds the package',
|
||||
'clclass' : 'layer_commit',
|
||||
'hidden' : 1,
|
||||
}
|
||||
tc_layerDir = {
|
||||
'name':'Layer directory',
|
||||
'qhelp':'Location in disk of the layer providing the recipe that builds the package',
|
||||
'orderfield' : _get_toggle_order( request, "recipe__layer_version__layer__local_path" ),
|
||||
'ordericon' : _get_toggle_order_icon( request, "recipe__layer_version__layer__local_path" )\
|
||||
,
|
||||
'clclass' : 'layer_directory',
|
||||
'hidden' : 1,
|
||||
}
|
||||
context = {
|
||||
'objectname': variant,
|
||||
'build' : Build.objects.filter( pk = build_id )[ 0 ],
|
||||
'target' : Target.objects.filter( pk = target_id )[ 0 ],
|
||||
'objects' : packages,
|
||||
'packages_sum' : packages_sum[ 'installed_size__sum' ],
|
||||
'object_search_display': "packages included",
|
||||
'default_orderby' : default_orderby,
|
||||
'tablecols' : [
|
||||
tc_package,
|
||||
tc_packageVersion,
|
||||
tc_license,
|
||||
tc_size,
|
||||
tc_sizePercentage,
|
||||
tc_dependencies,
|
||||
tc_rdependencies,
|
||||
tc_recipe,
|
||||
tc_recipeVersion,
|
||||
tc_layer,
|
||||
tc_layerBranch,
|
||||
tc_layerCommit,
|
||||
tc_layerDir,
|
||||
]
|
||||
}
|
||||
return( render( request, template, context ))
|
||||
|
||||
return render(request, template, context)
|
||||
def target( request, build_id, target_id ):
|
||||
return( target_common( request, build_id, target_id, "target" ))
|
||||
|
||||
def targetpkg( request, build_id, target_id ):
|
||||
return( target_common( request, build_id, target_id, "targetpkg" ))
|
||||
|
||||
from django.core.serializers.json import DjangoJSONEncoder
|
||||
from django.http import HttpResponse
|
||||
@@ -828,21 +889,25 @@ def tasks_common(request, build_id, variant, task_anchor):
|
||||
object_search_display="time data"
|
||||
filter_search_display="tasks"
|
||||
mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'elapsed_time:-'};
|
||||
default_orderby = 'elapsed_time:-';
|
||||
elif 'diskio' == variant:
|
||||
title_variant='Disk I/O'
|
||||
object_search_display="disk I/O data"
|
||||
filter_search_display="tasks"
|
||||
mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'disk_io:-'};
|
||||
default_orderby = 'disk_io:-';
|
||||
elif 'cpuusage' == variant:
|
||||
title_variant='CPU usage'
|
||||
object_search_display="CPU usage data"
|
||||
filter_search_display="tasks"
|
||||
mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'cpu_usage:-'};
|
||||
default_orderby = 'cpu_usage:-';
|
||||
else :
|
||||
title_variant='Tasks'
|
||||
object_search_display="tasks"
|
||||
filter_search_display="tasks"
|
||||
mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'order:+'};
|
||||
default_orderby = 'order:+';
|
||||
|
||||
template = 'tasks.html'
|
||||
retval = _verify_parameters( request.GET, mandatory_parameters )
|
||||
@@ -853,7 +918,14 @@ def tasks_common(request, build_id, variant, task_anchor):
|
||||
(filter_string, search_term, ordering_string) = _search_tuple(request, Task)
|
||||
queryset_all = Task.objects.filter(build=build_id).exclude(order__isnull=True).exclude(outcome=Task.OUTCOME_NA)
|
||||
queryset_with_search = _get_queryset(Task, queryset_all, None , search_term, ordering_string, 'order')
|
||||
queryset = _get_queryset(Task, queryset_all, filter_string, search_term, ordering_string, 'order')
|
||||
if ordering_string.startswith('outcome'):
|
||||
queryset = _get_queryset(Task, queryset_all, filter_string, search_term, 'order:+', 'order')
|
||||
queryset = sorted(queryset, key=lambda ur: (ur.outcome_text), reverse=ordering_string.endswith('-'))
|
||||
elif ordering_string.startswith('sstate_result'):
|
||||
queryset = _get_queryset(Task, queryset_all, filter_string, search_term, 'order:+', 'order')
|
||||
queryset = sorted(queryset, key=lambda ur: (ur.sstate_text), reverse=ordering_string.endswith('-'))
|
||||
else:
|
||||
queryset = _get_queryset(Task, queryset_all, filter_string, search_term, ordering_string, 'order')
|
||||
|
||||
# compute the anchor's page
|
||||
if anchor:
|
||||
@@ -877,12 +949,14 @@ def tasks_common(request, build_id, variant, task_anchor):
|
||||
'name':'Order',
|
||||
'qhelp':'The running sequence of each task in the build',
|
||||
'clclass': 'order', 'hidden' : 1,
|
||||
'orderkey' : 'order',
|
||||
'orderfield':_get_toggle_order(request, "order"),
|
||||
'ordericon':_get_toggle_order_icon(request, "order")}
|
||||
if 'tasks' == variant: tc_order['hidden']='0'; del tc_order['clclass']
|
||||
tc_recipe={
|
||||
'name':'Recipe',
|
||||
'qhelp':'The name of the recipe to which each task applies',
|
||||
'orderkey' : 'recipe__name',
|
||||
'orderfield': _get_toggle_order(request, "recipe__name"),
|
||||
'ordericon':_get_toggle_order_icon(request, "recipe__name"),
|
||||
}
|
||||
@@ -896,6 +970,7 @@ def tasks_common(request, build_id, variant, task_anchor):
|
||||
'qhelp':'The name of the task',
|
||||
'orderfield': _get_toggle_order(request, "task_name"),
|
||||
'ordericon':_get_toggle_order_icon(request, "task_name"),
|
||||
'orderkey' : 'task_name',
|
||||
}
|
||||
tc_executed={
|
||||
'name':'Executed',
|
||||
@@ -903,6 +978,7 @@ def tasks_common(request, build_id, variant, task_anchor):
|
||||
'clclass': 'executed', 'hidden' : 0,
|
||||
'orderfield': _get_toggle_order(request, "task_executed"),
|
||||
'ordericon':_get_toggle_order_icon(request, "task_executed"),
|
||||
'orderkey' : 'task_executed',
|
||||
'filter' : {
|
||||
'class' : 'executed',
|
||||
'label': 'Show:',
|
||||
@@ -919,6 +995,7 @@ def tasks_common(request, build_id, variant, task_anchor):
|
||||
'clclass': 'outcome', 'hidden' : 0,
|
||||
'orderfield': _get_toggle_order(request, "outcome"),
|
||||
'ordericon':_get_toggle_order_icon(request, "outcome"),
|
||||
'orderkey' : 'outcome',
|
||||
'filter' : {
|
||||
'class' : 'outcome',
|
||||
'label': 'Show:',
|
||||
@@ -928,7 +1005,7 @@ def tasks_common(request, build_id, variant, task_anchor):
|
||||
('Cached Tasks', 'outcome:%d'%Task.OUTCOME_CACHED, queryset_with_search.filter(outcome=Task.OUTCOME_CACHED).count(), 'Cached tasks restore output from the <code>sstate-cache</code> directory or mirrors'),
|
||||
('Prebuilt Tasks', 'outcome:%d'%Task.OUTCOME_PREBUILT, queryset_with_search.filter(outcome=Task.OUTCOME_PREBUILT).count(),'Prebuilt tasks didn\'t need to run because their output was reused from a previous build'),
|
||||
('Covered Tasks', 'outcome:%d'%Task.OUTCOME_COVERED, queryset_with_search.filter(outcome=Task.OUTCOME_COVERED).count(), 'Covered tasks didn\'t need to run because their output is provided by another task in this build'),
|
||||
('Empty Tasks', 'outcome:%d'%Task.OUTCOME_EMPTY, queryset_with_search.filter(outcome=Task.OUTCOME_NA).count(), 'Empty tasks have no executable content'),
|
||||
('Empty Tasks', 'outcome:%d'%Task.OUTCOME_EMPTY, queryset_with_search.filter(outcome=Task.OUTCOME_EMPTY).count(), 'Empty tasks have no executable content'),
|
||||
]
|
||||
}
|
||||
|
||||
@@ -938,6 +1015,7 @@ def tasks_common(request, build_id, variant, task_anchor):
|
||||
'qhelp':'Path to the task log file',
|
||||
'orderfield': _get_toggle_order(request, "logfile"),
|
||||
'ordericon':_get_toggle_order_icon(request, "logfile"),
|
||||
'orderkey' : 'logfile',
|
||||
'clclass': 'task_log', 'hidden' : 1,
|
||||
}
|
||||
tc_cache={
|
||||
@@ -946,6 +1024,7 @@ def tasks_common(request, build_id, variant, task_anchor):
|
||||
'clclass': 'cache_attempt', 'hidden' : 0,
|
||||
'orderfield': _get_toggle_order(request, "sstate_result"),
|
||||
'ordericon':_get_toggle_order_icon(request, "sstate_result"),
|
||||
'orderkey' : 'sstate_result',
|
||||
'filter' : {
|
||||
'class' : 'cache_attempt',
|
||||
'label': 'Show:',
|
||||
@@ -964,6 +1043,7 @@ def tasks_common(request, build_id, variant, task_anchor):
|
||||
'qhelp':'How long it took the task to finish in seconds',
|
||||
'orderfield': _get_toggle_order(request, "elapsed_time", True),
|
||||
'ordericon':_get_toggle_order_icon(request, "elapsed_time"),
|
||||
'orderkey' : 'elapsed_time',
|
||||
'clclass': 'time_taken', 'hidden' : 1,
|
||||
}
|
||||
if 'buildtime' == variant: tc_time['hidden']='0'; del tc_time['clclass']; tc_cache['hidden']='1';
|
||||
@@ -972,6 +1052,7 @@ def tasks_common(request, build_id, variant, task_anchor):
|
||||
'qhelp':'The percentage of task CPU utilization',
|
||||
'orderfield': _get_toggle_order(request, "cpu_usage", True),
|
||||
'ordericon':_get_toggle_order_icon(request, "cpu_usage"),
|
||||
'orderkey' : 'cpu_usage',
|
||||
'clclass': 'cpu_used', 'hidden' : 1,
|
||||
}
|
||||
if 'cpuusage' == variant: tc_cpu['hidden']='0'; del tc_cpu['clclass']; tc_cache['hidden']='1';
|
||||
@@ -980,6 +1061,7 @@ def tasks_common(request, build_id, variant, task_anchor):
|
||||
'qhelp':'Number of miliseconds the task spent doing disk input and output',
|
||||
'orderfield': _get_toggle_order(request, "disk_io", True),
|
||||
'ordericon':_get_toggle_order_icon(request, "disk_io"),
|
||||
'orderkey' : 'disk_io',
|
||||
'clclass': 'disk_io', 'hidden' : 1,
|
||||
}
|
||||
if 'diskio' == variant: tc_diskio['hidden']='0'; del tc_diskio['clclass']; tc_cache['hidden']='1';
|
||||
@@ -991,6 +1073,7 @@ def tasks_common(request, build_id, variant, task_anchor):
|
||||
'title': title_variant,
|
||||
'build': Build.objects.filter(pk=build_id)[0],
|
||||
'objects': tasks,
|
||||
'default_orderby' : default_orderby,
|
||||
'search_term': search_term,
|
||||
'total_count': queryset_with_search.count(),
|
||||
'tablecols':[
|
||||
@@ -1037,10 +1120,26 @@ def recipes(request, build_id):
|
||||
|
||||
recipes = _build_page_range(Paginator(queryset, request.GET.get('count', 100)),request.GET.get('page', 1))
|
||||
|
||||
# prefetch the forward and reverse recipe dependencies
|
||||
deps = { }; revs = { }
|
||||
queryset_dependency=Recipe_Dependency.objects.filter(recipe__layer_version__build_id = build_id)
|
||||
for recipe in recipes:
|
||||
deplist = [ ]
|
||||
for recipe_dep in [x for x in queryset_dependency if x.recipe_id == recipe.id]:
|
||||
deplist.append(recipe_dep)
|
||||
deps[recipe.id] = deplist
|
||||
revlist = [ ]
|
||||
for recipe_dep in [x for x in queryset_dependency if x.depends_on_id == recipe.id]:
|
||||
revlist.append(recipe_dep)
|
||||
revs[recipe.id] = revlist
|
||||
|
||||
context = {
|
||||
'objectname': 'recipes',
|
||||
'build': Build.objects.filter(pk=build_id)[0],
|
||||
'objects': recipes,
|
||||
'default_orderby' : 'name:+',
|
||||
'recipe_deps' : deps,
|
||||
'recipe_revs' : revs,
|
||||
'tablecols':[
|
||||
{
|
||||
'name':'Recipe',
|
||||
@@ -1067,6 +1166,7 @@ def recipes(request, build_id):
|
||||
'qhelp':'Path to the recipe .bb file',
|
||||
'orderfield': _get_toggle_order(request, "file_path"),
|
||||
'ordericon':_get_toggle_order_icon(request, "file_path"),
|
||||
'orderkey' : 'file_path',
|
||||
'clclass': 'recipe_file', 'hidden': 0,
|
||||
},
|
||||
{
|
||||
@@ -1074,6 +1174,7 @@ def recipes(request, build_id):
|
||||
'qhelp':'The section in which recipes should be categorized',
|
||||
'orderfield': _get_toggle_order(request, "section"),
|
||||
'ordericon':_get_toggle_order_icon(request, "section"),
|
||||
'orderkey' : 'section',
|
||||
'clclass': 'recipe_section', 'hidden': 0,
|
||||
},
|
||||
{
|
||||
@@ -1081,6 +1182,7 @@ def recipes(request, build_id):
|
||||
'qhelp':'The list of source licenses for the recipe. Multiple license names separated by the pipe character indicates a choice between licenses. Multiple license names separated by the ampersand character indicates multiple licenses exist that cover different parts of the source',
|
||||
'orderfield': _get_toggle_order(request, "license"),
|
||||
'ordericon':_get_toggle_order_icon(request, "license"),
|
||||
'orderkey' : 'license',
|
||||
'clclass': 'recipe_license', 'hidden': 0,
|
||||
},
|
||||
{
|
||||
@@ -1088,6 +1190,7 @@ def recipes(request, build_id):
|
||||
'qhelp':'The name of the layer providing the recipe',
|
||||
'orderfield': _get_toggle_order(request, "layer_version__layer__name"),
|
||||
'ordericon':_get_toggle_order_icon(request, "layer_version__layer__name"),
|
||||
'orderkey' : 'layer_version__layer__name',
|
||||
'clclass': 'layer_version__layer__name', 'hidden': 0,
|
||||
},
|
||||
{
|
||||
@@ -1095,6 +1198,7 @@ def recipes(request, build_id):
|
||||
'qhelp':'The Git branch of the layer providing the recipe',
|
||||
'orderfield': _get_toggle_order(request, "layer_version__branch"),
|
||||
'ordericon':_get_toggle_order_icon(request, "layer_version__branch"),
|
||||
'orderkey' : 'layer_version__branch',
|
||||
'clclass': 'layer_version__branch', 'hidden': 1,
|
||||
},
|
||||
{
|
||||
@@ -1107,6 +1211,7 @@ def recipes(request, build_id):
|
||||
'qhelp':'Path to the layer prodiving the recipe',
|
||||
'orderfield': _get_toggle_order(request, "layer_version__layer__local_path"),
|
||||
'ordericon':_get_toggle_order_icon(request, "layer_version__layer__local_path"),
|
||||
'orderkey' : 'layer_version__layer__local_path',
|
||||
'clclass': 'layer_version__layer__local_path', 'hidden': 1,
|
||||
},
|
||||
]
|
||||
@@ -1189,6 +1294,7 @@ def configvars(request, build_id):
|
||||
'build': Build.objects.filter(pk=build_id)[0],
|
||||
'objects' : variables,
|
||||
'total_count':queryset_with_search.count(),
|
||||
'default_orderby' : 'variable_name:+',
|
||||
'search_term':search_term,
|
||||
# Specifies the display of columns for the table, appearance in "Edit columns" box, toggling default show/hide, and specifying filters for columns
|
||||
'tablecols' : [
|
||||
@@ -1204,6 +1310,7 @@ def configvars(request, build_id):
|
||||
{'name': 'Set in file',
|
||||
'qhelp': "The last configuration file that touched the variable value",
|
||||
'clclass': 'file', 'hidden' : 0,
|
||||
'orderkey' : 'vhistory__file_name',
|
||||
'filter' : {
|
||||
'class' : 'vhistory__file_name',
|
||||
'label': 'Show:',
|
||||
@@ -1250,6 +1357,7 @@ def bpackage(request, build_id):
|
||||
'objectname': 'packages built',
|
||||
'build': Build.objects.filter(pk=build_id)[0],
|
||||
'objects' : packages,
|
||||
'default_orderby' : 'name:+',
|
||||
'tablecols':[
|
||||
{
|
||||
'name':'Package',
|
||||
@@ -1266,13 +1374,16 @@ def bpackage(request, build_id):
|
||||
'qhelp':'The size of the package',
|
||||
'orderfield': _get_toggle_order(request, "size", True),
|
||||
'ordericon':_get_toggle_order_icon(request, "size"),
|
||||
'clclass': 'size span2', 'hidden': 0,
|
||||
'orderkey' : 'size',
|
||||
'clclass': 'size', 'hidden': 0,
|
||||
'dclass' : 'span2',
|
||||
},
|
||||
{
|
||||
'name':'License',
|
||||
'qhelp':'The license under which the package is distributed. Multiple license names separated by the pipe character indicates a choice between licenses. Multiple license names separated by the ampersand character indicates multiple licenses exist that cover different parts of the source',
|
||||
'orderfield': _get_toggle_order(request, "license"),
|
||||
'ordericon':_get_toggle_order_icon(request, "license"),
|
||||
'orderkey' : 'license',
|
||||
'clclass': 'license', 'hidden': 1,
|
||||
},
|
||||
{
|
||||
@@ -1280,6 +1391,7 @@ def bpackage(request, build_id):
|
||||
'qhelp':'The name of the recipe building the package',
|
||||
'orderfield': _get_toggle_order(request, "recipe__name"),
|
||||
'ordericon':_get_toggle_order_icon(request, "recipe__name"),
|
||||
'orderkey' : 'recipe__name',
|
||||
'clclass': 'recipe__name', 'hidden': 0,
|
||||
},
|
||||
{
|
||||
@@ -1292,6 +1404,7 @@ def bpackage(request, build_id):
|
||||
'qhelp':'The name of the layer providing the recipe that builds the package',
|
||||
'orderfield': _get_toggle_order(request, "recipe__layer_version__layer__name"),
|
||||
'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__layer__name"),
|
||||
'orderkey' : 'recipe__layer_version__layer__name',
|
||||
'clclass': 'recipe__layer_version__layer__name', 'hidden': 1,
|
||||
},
|
||||
{
|
||||
@@ -1299,6 +1412,7 @@ def bpackage(request, build_id):
|
||||
'qhelp':'The Git branch of the layer providing the recipe that builds the package',
|
||||
'orderfield': _get_toggle_order(request, "recipe__layer_version__branch"),
|
||||
'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__branch"),
|
||||
'orderkey' : 'recipe__layer_version__layer__branch',
|
||||
'clclass': 'recipe__layer_version__branch', 'hidden': 1,
|
||||
},
|
||||
{
|
||||
@@ -1311,6 +1425,7 @@ def bpackage(request, build_id):
|
||||
'qhelp':'Path to the layer providing the recipe that builds the package',
|
||||
'orderfield': _get_toggle_order(request, "recipe__layer_version__layer__local_path"),
|
||||
'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__layer__local_path"),
|
||||
'orderkey' : 'recipe__layer_version__layer__local_path',
|
||||
'clclass': 'recipe__layer_version__layer__local_path', 'hidden': 1,
|
||||
},
|
||||
]
|
||||
|
||||
53
bitbake/lib/toaster/toastermain/management/commands/perf.py
Normal file
53
bitbake/lib/toaster/toastermain/management/commands/perf.py
Normal file
@@ -0,0 +1,53 @@
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.test.client import Client
|
||||
import os, sys, re
|
||||
import requests
|
||||
import toastermain.settings as settings
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Test the response time for all toaster urls"
|
||||
|
||||
def handle(self, *args, **options):
|
||||
root_urlconf = __import__(settings.ROOT_URLCONF)
|
||||
patterns = root_urlconf.urls.urlpatterns
|
||||
global full_url
|
||||
for pat in patterns:
|
||||
if pat.__class__.__name__ == 'RegexURLResolver':
|
||||
url_root_res = str(pat).split('^')[1].replace('>', '')
|
||||
if 'gui' in url_root_res:
|
||||
for url_patt in pat.url_patterns:
|
||||
full_url = self.get_full_url(url_patt, url_root_res)
|
||||
info = self.url_info(full_url)
|
||||
status_code = info[0]
|
||||
load_time = info[1]
|
||||
print 'Trying \'' + full_url + '\', ' + str(status_code) + ', ' + str(load_time)
|
||||
|
||||
def get_full_url(self, url_patt, url_root_res):
|
||||
full_url = str(url_patt).split('^')[1].replace('$>', '').replace('(?P<file_path>(?:/[', '/bin/busybox').replace('.*', '')
|
||||
full_url = str(url_root_res + full_url)
|
||||
full_url = re.sub('\(\?P<.*?>\\\d\+\)', '1', full_url)
|
||||
full_url = 'http://localhost:8000/' + full_url
|
||||
return full_url
|
||||
|
||||
def url_info(self, full_url):
|
||||
client = Client()
|
||||
info = []
|
||||
try:
|
||||
resp = client.get(full_url, follow = True)
|
||||
except Exception as e_status_code:
|
||||
self.error('Url: %s, error: %s' % (full_url, e_status_code))
|
||||
resp = type('object', (), {'status_code':0, 'content': str(e_status_code)})
|
||||
status_code = resp.status_code
|
||||
info.append(status_code)
|
||||
try:
|
||||
req = requests.get(full_url)
|
||||
except Exception as e_load_time:
|
||||
self.error('Url: %s, error: %s' % (full_url, e_load_time))
|
||||
load_time = req.elapsed
|
||||
info.append(load_time)
|
||||
return info
|
||||
|
||||
def error(self, *args):
|
||||
for arg in args:
|
||||
print >>sys.stderr, arg,
|
||||
print >>sys.stderr
|
||||
@@ -76,6 +76,11 @@
|
||||
<date>April 2014</date>
|
||||
<revremark>Released with the Yocto Project 1.6 Release.</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>1.6.1</revnumber>
|
||||
<date>July 2014</date>
|
||||
<revremark>Released with the Yocto Project 1.6.1 Release.</revremark>
|
||||
</revision>
|
||||
</revhistory>
|
||||
|
||||
<copyright>
|
||||
|
||||
@@ -88,6 +88,11 @@
|
||||
<date>April 2014</date>
|
||||
<revremark>Released with the Yocto Project 1.6 Release.</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>1.6.1</revnumber>
|
||||
<date>July 2014</date>
|
||||
<revremark>Released with the Yocto Project 1.6.1 Release.</revremark>
|
||||
</revision>
|
||||
</revhistory>
|
||||
|
||||
<copyright>
|
||||
|
||||
@@ -1278,7 +1278,7 @@
|
||||
<literallayout class='monospaced'>
|
||||
cups_1.7.0.bb
|
||||
gawk_4.0.2.bb
|
||||
xdg-utils_1.1.0-rc1.bb
|
||||
irssi_0.8.16-rc1.bb
|
||||
</literallayout></para></listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
@@ -2147,6 +2147,43 @@
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id='properly-versioning-pre-release-recipes'>
|
||||
<title>Properly Versioning Pre-Release Recipes</title>
|
||||
|
||||
<para>
|
||||
Sometimes the name of a recipe can lead to versioning
|
||||
problems when the recipe is upgraded to a final release.
|
||||
For example, consider the
|
||||
<filename>irssi_0.8.16-rc1.bb</filename> recipe file in
|
||||
the list of example recipes in the
|
||||
"<link linkend='new-recipe-storing-and-naming-the-recipe'>Storing and Naming the Recipe</link>"
|
||||
section.
|
||||
This recipe is at a release candidate stage (i.e.
|
||||
"rc1").
|
||||
When the recipe is released, the recipe filename becomes
|
||||
<filename>irssi_0.8.16.bb</filename>.
|
||||
The version change from <filename>0.8.16-rc1</filename>
|
||||
to <filename>0.8.16</filename> is seen as a decrease by the
|
||||
build system and package managers, so the resulting packages
|
||||
will not correctly trigger an upgrade.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
In order to ensure the versions compare properly, the
|
||||
recommended convention is to set
|
||||
<ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
|
||||
within the recipe to
|
||||
"<previous version>+<current version>".
|
||||
You can use an additional variable so that you can use the
|
||||
current version elsewhere.
|
||||
Here is an example:
|
||||
<literallayout class='monospaced'>
|
||||
REALPV = "0.8.16-rc1"
|
||||
PV = "0.8.15+${REALPV}"
|
||||
</literallayout>
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id='new-recipe-post-installation-scripts'>
|
||||
<title>Post-Installation Scripts</title>
|
||||
|
||||
|
||||
@@ -18,8 +18,7 @@
|
||||
"<ulink url='&YOCTO_DOCS_BSP_URL;#creating-a-new-bsp-layer-using-the-yocto-bsp-script'>Creating a New BSP Layer Using the yocto-bsp Script</ulink>"
|
||||
section in the Yocto Project Board Support Package (BSP) Developer's Guide.
|
||||
For more complete information on how to work with the kernel, see the
|
||||
<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;'>Yocto Project Linux Kernel
|
||||
Development Manual</ulink>.
|
||||
<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;'>Yocto Project Linux Kernel Development Manual</ulink>.
|
||||
</para></listitem>
|
||||
<listitem><para><emphasis>User Application Development:</emphasis>
|
||||
User Application Development covers development of applications that you intend
|
||||
|
||||
@@ -66,6 +66,11 @@
|
||||
<date>April 2014</date>
|
||||
<revremark>Released with the Yocto Project 1.6 Release.</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>1.6.1</revnumber>
|
||||
<date>July 2014</date>
|
||||
<revremark>Released with the Yocto Project 1.6.1 Release.</revremark>
|
||||
</revision>
|
||||
</revhistory>
|
||||
|
||||
<copyright>
|
||||
|
||||
@@ -51,6 +51,11 @@
|
||||
<date>April 2014</date>
|
||||
<revremark>Released with the Yocto Project 1.6 Release.</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>1.6.1</revnumber>
|
||||
<date>July 2014</date>
|
||||
<revremark>Released with the Yocto Project 1.6.1 Release.</revremark>
|
||||
</revision>
|
||||
</revhistory>
|
||||
|
||||
<copyright>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!ENTITY DISTRO "1.6">
|
||||
<!ENTITY DISTRO_COMPRESSED "16">
|
||||
<!ENTITY DISTRO "1.6.1">
|
||||
<!ENTITY DISTRO_COMPRESSED "161">
|
||||
<!ENTITY DISTRO_NAME "daisy">
|
||||
<!ENTITY YOCTO_DOC_VERSION "1.6">
|
||||
<!ENTITY POKYVERSION "11.0.0">
|
||||
<!ENTITY POKYVERSION_COMPRESSED "1100">
|
||||
<!ENTITY YOCTO_DOC_VERSION "1.6.1">
|
||||
<!ENTITY POKYVERSION "11.0.1">
|
||||
<!ENTITY POKYVERSION_COMPRESSED "1101">
|
||||
<!ENTITY YOCTO_POKY "poky-&DISTRO_NAME;-&POKYVERSION;">
|
||||
<!ENTITY COPYRIGHT_YEAR "2010-2014">
|
||||
<!ENTITY YOCTO_DL_URL "http://downloads.yoctoproject.org">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<chapter id='profile-manual-intro'>
|
||||
|
||||
<title>Yocto Project Tracing and Profiling Manual</title>
|
||||
<title>Yocto Project Profiling and Tracing Manual</title>
|
||||
<section id='intro'>
|
||||
<title>Introduction</title>
|
||||
|
||||
|
||||
@@ -51,6 +51,11 @@
|
||||
<date>April 2014</date>
|
||||
<revremark>Released with the Yocto Project 1.6 Release.</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>1.6.1</revnumber>
|
||||
<date>July 2014</date>
|
||||
<revremark>Released with the Yocto Project 1.6.1 Release.</revremark>
|
||||
</revision>
|
||||
</revhistory>
|
||||
|
||||
<copyright>
|
||||
|
||||
@@ -627,8 +627,8 @@
|
||||
hardware, but it will run on a wider range of systems than the
|
||||
<filename>atom-pc</filename> did.
|
||||
<note>
|
||||
Additionally, a <filename>genericx86-64</filename> BSP has been
|
||||
added for 64-bit systems.
|
||||
Additionally, a <filename>genericx86-64</filename> BSP has
|
||||
been added for 64-bit Atom systems.
|
||||
</note>
|
||||
</para>
|
||||
</section>
|
||||
@@ -1359,6 +1359,20 @@
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id='migration-1.6-package-test-ptest'>
|
||||
<title>Package Test (ptest)</title>
|
||||
|
||||
<para>
|
||||
Package Tests (ptest) are built but not installed by default.
|
||||
For information on using Package Tests, see the
|
||||
"<ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Setting up and running package test (ptest)</ulink>"
|
||||
section in the Yocto Project Development Manual.
|
||||
For information on the <filename>ptest</filename> class, see the
|
||||
"<link linkend='ref-classes-ptest'><filename>ptest.bbclass</filename></link>"
|
||||
section.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id='migration-1.6-build-changes'>
|
||||
<title>Build Changes</title>
|
||||
|
||||
|
||||
@@ -82,6 +82,11 @@
|
||||
<date>April 2014</date>
|
||||
<revremark>Released with the Yocto Project 1.6 Release.</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>1.6.1</revnumber>
|
||||
<date>July 2014</date>
|
||||
<revremark>Released with the Yocto Project 1.6.1 Release.</revremark>
|
||||
</revision>
|
||||
</revhistory>
|
||||
|
||||
<copyright>
|
||||
|
||||
@@ -29,10 +29,10 @@
|
||||
<title>Mailing lists</title>
|
||||
|
||||
<para>
|
||||
A number of mailing lists maintained by the Yocto Project exist
|
||||
as well as related OpenEmbedded mailing lists for discussion,
|
||||
A number of mailing lists maintained by the Yocto Project exist
|
||||
as well as related OpenEmbedded mailing lists for discussion,
|
||||
patch submission and announcements.
|
||||
To subscribe to one of the following mailing lists, click on the
|
||||
To subscribe to one of the following mailing lists, click on the
|
||||
appropriate URL in the following list and follow the instructions:
|
||||
<itemizedlist>
|
||||
<listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo/yocto'></ulink> -
|
||||
@@ -42,11 +42,11 @@
|
||||
<listitem><para><ulink url='&OE_LISTS_URL;/listinfo/openembedded-devel'></ulink> -
|
||||
Discussion mailing list about OpenEmbedded.</para></listitem>
|
||||
<listitem><para><ulink url='&OE_LISTS_URL;/listinfo/bitbake-devel'></ulink> -
|
||||
Discussion mailing list about the
|
||||
Discussion mailing list about the
|
||||
<ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
|
||||
build tool.</para></listitem>
|
||||
<listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo/poky'></ulink> -
|
||||
Discussion mailing list about
|
||||
Discussion mailing list about
|
||||
<ulink url='&YOCTO_DOCS_DEV_URL;#poky'>Poky</ulink>.
|
||||
</para></listitem>
|
||||
<listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo/yocto-announce'></ulink> -
|
||||
@@ -76,28 +76,28 @@
|
||||
<itemizedlist>
|
||||
<listitem><para><emphasis>
|
||||
<ulink url='&YOCTO_HOME_URL;'>The Yocto Project website</ulink>:
|
||||
</emphasis> The home site for the Yocto
|
||||
</emphasis> The home site for the Yocto
|
||||
Project.</para></listitem>
|
||||
<listitem><para><emphasis>
|
||||
<ulink url='http://www.intel.com/'>Intel Corporation</ulink>:</emphasis>
|
||||
The company who acquired OpenedHand in 2008 and began
|
||||
The company who acquired OpenedHand in 2008 and began
|
||||
development on the Yocto Project.</para></listitem>
|
||||
<listitem><para><emphasis>
|
||||
<ulink url='&OE_HOME_URL;'>OpenEmbedded</ulink>:</emphasis>
|
||||
The upstream, generic, embedded distribution used as the basis
|
||||
The upstream, generic, embedded distribution used as the basis
|
||||
for the build system in the Yocto Project.
|
||||
Poky derives from and contributes back to the OpenEmbedded
|
||||
Poky derives from and contributes back to the OpenEmbedded
|
||||
project.</para></listitem>
|
||||
<listitem><para><emphasis>
|
||||
<ulink url='http://developer.berlios.de/projects/bitbake/'>
|
||||
BitBake</ulink>:</emphasis> The tool used to process metadata.</para></listitem>
|
||||
<listitem><para><emphasis>
|
||||
BitBake User Manual:</emphasis>
|
||||
<ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>:</emphasis>
|
||||
A comprehensive guide to the BitBake tool.
|
||||
You can find the BitBake User Manual in the
|
||||
<filename>bitbake/doc/manual</filename> directory, which is
|
||||
found in the
|
||||
<ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
|
||||
In the
|
||||
<ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>,
|
||||
you can find the BitBake User Manual in the
|
||||
<filename>bitbake/doc/bitbake-user-manual</filename> directory.
|
||||
</para></listitem>
|
||||
<listitem><para><emphasis>
|
||||
<ulink url='http://wiki.qemu.org/Index.html'>QEMU</ulink>:
|
||||
@@ -112,7 +112,7 @@
|
||||
|
||||
<para>
|
||||
The Yocto Project gladly accepts contributions.
|
||||
You can submit changes to the project either by creating and sending
|
||||
You can submit changes to the project either by creating and sending
|
||||
pull requests,
|
||||
or by submitting patches through email.
|
||||
For information on how to do both as well as information on how
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
# Processes ref-manual and yocto-project-qs manual (<word>-<word>-<word> style)
|
||||
s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/[a-z]*-[a-z]*-[a-z]*\/[a-z]*-[a-z]*-[a-z]*.html#/\"link\" href=\"#/g
|
||||
s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6.1\/[a-z]*-[a-z]*-[a-z]*\/[a-z]*-[a-z]*-[a-z]*.html#/\"link\" href=\"#/g
|
||||
|
||||
# Processes all other manuals (<word>-<word> style)
|
||||
s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/[a-z]*-[a-z]*\/[a-z]*-[a-z]*.html#/\"link\" href=\"#/g
|
||||
s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6.1\/[a-z]*-[a-z]*\/[a-z]*-[a-z]*.html#/\"link\" href=\"#/g
|
||||
|
||||
# Process cases where just an external manual is referenced without an id anchor
|
||||
s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/yocto-project-qs\/yocto-project-qs.html\" target=\"_top\">Yocto Project Quick Start<\/a>/Yocto Project Quick Start/g
|
||||
s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/dev-manual\/dev-manual.html\" target=\"_top\">Yocto Project Development Manual<\/a>/Yocto Project Development Manual/g
|
||||
s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/adt-manual\/adt-manual.html\" target=\"_top\">Yocto Project Application Developer's Guide<\/a>/Yocto Project Application Developer's Guide/g
|
||||
s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/bsp-guide\/bsp-guide.html\" target=\"_top\">Yocto Project Board Support Package (BSP) Developer's Guide<\/a>/Yocto Project Board Support Package (BSP) Developer's Guide/g
|
||||
s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/kernel-dev\/kernel-dev.html\" target=\"_top\">Yocto Project Linux Kernel Development Manual<\/a>/Yocto Project Linux Kernel Development Manual/g
|
||||
s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/ref-manual\/ref-manual.html\" target=\"_top\">Yocto Project Reference Manual<\/a>/Yocto Project Reference Manual/g
|
||||
s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6.1\/yocto-project-qs\/yocto-project-qs.html\" target=\"_top\">Yocto Project Quick Start<\/a>/Yocto Project Quick Start/g
|
||||
s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6.1\/dev-manual\/dev-manual.html\" target=\"_top\">Yocto Project Development Manual<\/a>/Yocto Project Development Manual/g
|
||||
s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6.1\/adt-manual\/adt-manual.html\" target=\"_top\">Yocto Project Application Developer's Guide<\/a>/Yocto Project Application Developer's Guide/g
|
||||
s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6.1\/bsp-guide\/bsp-guide.html\" target=\"_top\">Yocto Project Board Support Package (BSP) Developer's Guide<\/a>/Yocto Project Board Support Package (BSP) Developer's Guide/g
|
||||
s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6.1\/profile-manual\/profile-manual.html\" target=\"_top\">Yocto Project Profiling and Tracing Manual<\/a>/Yocto Project Profiling and Tracing Manual/g
|
||||
s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6.1\/kernel-dev\/kernel-dev.html\" target=\"_top\">Yocto Project Linux Kernel Development Manual<\/a>/Yocto Project Linux Kernel Development Manual/g
|
||||
s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6.1\/ref-manual\/ref-manual.html\" target=\"_top\">Yocto Project Reference Manual<\/a>/Yocto Project Reference Manual/g
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
DISTRO = "poky"
|
||||
DISTRO_NAME = "Poky (Yocto Project Reference Distro)"
|
||||
DISTRO_VERSION = "1.6"
|
||||
DISTRO_VERSION = "1.6.1"
|
||||
DISTRO_CODENAME = "daisy"
|
||||
SDK_VENDOR = "-pokysdk"
|
||||
SDK_VERSION := "${@'${DISTRO_VERSION}'.replace('snapshot-${DATE}','snapshot')}"
|
||||
SDK_VERSION := "${@'${DISTRO_VERSION}'}"
|
||||
|
||||
MAINTAINER = "Poky <poky@yoctoproject.org>"
|
||||
|
||||
|
||||
@@ -243,6 +243,7 @@ BB_DISKMON_DIRS = "\
|
||||
# seen. The two lines below enable the SDL backend too. This assumes there is a
|
||||
# libsdl library available on your build system.
|
||||
PACKAGECONFIG_pn-qemu-native = "sdl"
|
||||
PACKAGECONFIG_pn-nativesdk-qemu = "sdl"
|
||||
ASSUME_PROVIDED += "libsdl-native"
|
||||
|
||||
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
FILESEXTRAPATHS_prepend_poky := "${THISDIR}/${P}:"
|
||||
FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ python () {
|
||||
for f in required_distro_features:
|
||||
if f in distro_features:
|
||||
break
|
||||
else:
|
||||
raise bb.parse.SkipPackage("missing required distro feature %s (not in DISTRO_FEATURES)" % required_distro_features)
|
||||
else:
|
||||
raise bb.parse.SkipPackage("missing required distro feature %s (not in DISTRO_FEATURES)" % required_distro_features)
|
||||
|
||||
conflict_distro_features = d.getVar('CONFLICT_DISTRO_FEATURES', True)
|
||||
if conflict_distro_features:
|
||||
|
||||
@@ -352,29 +352,14 @@ python do_checkpkg() {
|
||||
We don't want to exit whole build due to one recipe error. So handle all exceptions
|
||||
gracefully w/o leaking to outer.
|
||||
"""
|
||||
def internal_fetch_wget(url, d, tmpf):
|
||||
def internal_fetch_wget(url, ud, d, tmpf):
|
||||
status = "ErrFetchUnknown"
|
||||
"""
|
||||
Clear internal url cache as it's a temporary check. Not doing so will have
|
||||
bitbake check url multiple times when looping through a single url
|
||||
"""
|
||||
fn = d.getVar('FILE', True)
|
||||
bb.fetch2.urldata_cache[fn] = {}
|
||||
|
||||
"""
|
||||
To avoid impacting bitbake build engine, this trick is required for reusing bitbake
|
||||
interfaces. bb.fetch.go() is not appliable as it checks downloaded content in ${DL_DIR}
|
||||
while we don't want to pollute that place. So bb.fetch2.checkstatus() is borrowed here
|
||||
which is designed for check purpose but we override check command for our own purpose
|
||||
"""
|
||||
ld = bb.data.createCopy(d)
|
||||
d.setVar('CHECKCOMMAND_wget', "/usr/bin/env wget -t 1 --passive-ftp -O %s --user-agent=\"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.12) Gecko/20101027 Ubuntu/9.10 (karmic) Firefox/3.6.12\" '${URI}'" \
|
||||
% tmpf.name)
|
||||
bb.data.update_data(ld)
|
||||
|
||||
agent = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.12) Gecko/20101027 Ubuntu/9.10 (karmic) Firefox/3.6.12"
|
||||
fetchcmd = "/usr/bin/env wget -t 1 --passive-ftp -O %s --user-agent=\"%s\" '%s'" % (tmpf.name, agent, url)
|
||||
try:
|
||||
fetcher = bb.fetch2.Fetch([url], ld)
|
||||
fetcher.checkstatus()
|
||||
fetcher = bb.fetch2.wget.Wget(d)
|
||||
fetcher._runwget(ud, d, fetchcmd, True)
|
||||
status = "SUCC"
|
||||
except bb.fetch2.BBFetchException, e:
|
||||
status = "ErrFetch"
|
||||
@@ -388,10 +373,10 @@ python do_checkpkg() {
|
||||
'curver' - current version
|
||||
Return new version if success, or else error in "Errxxxx" style
|
||||
"""
|
||||
def check_new_dir(url, curver, d):
|
||||
def check_new_dir(url, curver, ud, d):
|
||||
pn = d.getVar('PN', True)
|
||||
f = tempfile.NamedTemporaryFile(delete=False, prefix="%s-1-" % pn)
|
||||
status = internal_fetch_wget(url, d, f)
|
||||
status = internal_fetch_wget(url, ud, d, f)
|
||||
fhtml = f.read()
|
||||
if status == "SUCC" and len(fhtml):
|
||||
newver = parse_inter(curver)
|
||||
@@ -447,14 +432,14 @@ python do_checkpkg() {
|
||||
'curname' - current package name
|
||||
Return new version if success, or else error in "Errxxxx" style
|
||||
"""
|
||||
def check_new_version(url, curname, d):
|
||||
def check_new_version(url, curname, ud, d):
|
||||
"""possible to have no version in pkg name, such as spectrum-fw"""
|
||||
if not re.search("\d+", curname):
|
||||
return pcurver
|
||||
pn = d.getVar('PN', True)
|
||||
newver_regex = d.getVar('REGEX', True)
|
||||
f = tempfile.NamedTemporaryFile(delete=False, prefix="%s-2-" % pn)
|
||||
status = internal_fetch_wget(url, d, f)
|
||||
status = internal_fetch_wget(url, ud, d, f)
|
||||
fhtml = f.read()
|
||||
|
||||
if status == "SUCC" and len(fhtml):
|
||||
@@ -605,6 +590,7 @@ python do_checkpkg() {
|
||||
|
||||
|
||||
if type in ['http', 'https', 'ftp']:
|
||||
ud = bb.fetch2.FetchData(uri, d)
|
||||
newver = pcurver
|
||||
altpath = path
|
||||
dirver = "-"
|
||||
@@ -629,7 +615,7 @@ python do_checkpkg() {
|
||||
else:
|
||||
newver = d.getVar('PV', True)
|
||||
else:
|
||||
newver = check_new_dir(alturi, dirver, d)
|
||||
newver = check_new_dir(alturi, dirver, ud, d)
|
||||
altpath = path
|
||||
if not re.match("Err", newver) and dirver != newver:
|
||||
altpath = altpath.replace(dirver, newver, True)
|
||||
@@ -650,13 +636,13 @@ python do_checkpkg() {
|
||||
alturi = bb.fetch.encodeurl([type, host, altpath, user, pswd, {}])
|
||||
else:
|
||||
alturi = chk_uri
|
||||
newver = check_new_version(alturi, curname, d)
|
||||
newver = check_new_version(alturi, curname, ud, d)
|
||||
while(newver == "ErrHostNoDir"):
|
||||
if alturi == "/download":
|
||||
break
|
||||
else:
|
||||
alturi = "/".join(alturi.split("/")[0:-2]) + "/download"
|
||||
newver = check_new_version(alturi, curname, d)
|
||||
newver = check_new_version(alturi, curname, ud, d)
|
||||
if not re.match("Err", newver):
|
||||
pupver = newver
|
||||
if pupver != pcurver:
|
||||
|
||||
@@ -43,7 +43,10 @@ distutils_do_install() {
|
||||
|
||||
# support filenames with *spaces*
|
||||
find ${D} -name "*.py" -print0 | while read -d $'\0' i ; do \
|
||||
sed -i -e s:${D}::g "$i"
|
||||
# only modify file if it contains path to avoid recompilation on the target
|
||||
if grep -q "${D}" "$i"; then
|
||||
sed -i -e s:${D}::g "$i"
|
||||
fi
|
||||
done
|
||||
|
||||
if test -e ${D}${bindir} ; then
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
#Error checking is kept to minimum so double check any parameters you pass to the class
|
||||
###########################################################################################
|
||||
|
||||
BB_HASHBASE_WHITELIST += "ICECC_PARALLEL_MAKE ICECC_DISABLED ICECC_USER_PACKAGE_BL ICECC_USER_CLASS_BL ICECC_USER_PACKAGE_WL"
|
||||
BB_HASHBASE_WHITELIST += "ICECC_PARALLEL_MAKE ICECC_DISABLED ICECC_USER_PACKAGE_BL ICECC_USER_CLASS_BL ICECC_USER_PACKAGE_WL ICECC_PATH ICECC_ENV_EXEC"
|
||||
|
||||
ICECC_ENV_EXEC ?= "${STAGING_BINDIR_NATIVE}/icecc-create-env"
|
||||
|
||||
@@ -148,6 +148,10 @@ def icc_is_native(bb, d):
|
||||
# Don't pollute allarch signatures with TARGET_FPU
|
||||
icc_version[vardepsexclude] += "TARGET_FPU"
|
||||
def icc_version(bb, d):
|
||||
if d.getVar('ICECC_DISABLED') == "1":
|
||||
# don't even try it, when explicitly disabled
|
||||
return ""
|
||||
|
||||
if use_icc(bb, d) == "no":
|
||||
return ""
|
||||
|
||||
@@ -175,6 +179,10 @@ def icc_version(bb, d):
|
||||
return tar_file
|
||||
|
||||
def icc_path(bb,d):
|
||||
if d.getVar('ICECC_DISABLED') == "1":
|
||||
# don't create unnecessary directories when icecc is disabled
|
||||
return
|
||||
|
||||
if icc_is_kernel(bb, d):
|
||||
return create_path( [get_cross_kernel_cc(bb,d), ], bb, d)
|
||||
|
||||
@@ -238,7 +246,7 @@ def set_icecc_env():
|
||||
return
|
||||
|
||||
set_icecc_env() {
|
||||
if [ "x${ICECC_DISABLED}" != "x" ]
|
||||
if [ "${ICECC_DISABLED}" = "1" ]
|
||||
then
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -93,7 +93,8 @@ IMAGE_CMD_ubi () {
|
||||
echo vol_type=dynamic >> ubinize.cfg
|
||||
echo vol_name=${UBI_VOLNAME} >> ubinize.cfg
|
||||
echo vol_flags=autoresize >> ubinize.cfg
|
||||
mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs ${MKUBIFS_ARGS} && ubinize -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubi ${UBINIZE_ARGS} ubinize.cfg
|
||||
mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs ${MKUBIFS_ARGS}
|
||||
ubinize -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubi ${UBINIZE_ARGS} ubinize.cfg
|
||||
}
|
||||
IMAGE_CMD_ubifs = "mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs ${MKUBIFS_ARGS}"
|
||||
|
||||
|
||||
@@ -232,7 +232,7 @@ kernel_do_install() {
|
||||
# dir. This ensures the original Makefiles are used and not the
|
||||
# redirecting Makefiles in the build directory.
|
||||
#
|
||||
find . -depth -not -name "*.cmd" -not -name "*.o" -not -path "./Documentation*" -not -path "./.*" -print0 | cpio --null -pdlu $kerneldir
|
||||
find . -depth -not -name "*.cmd" -not -name "*.o" -not -path "./Documentation*" -not -path "./source*" -not -path "./.*" -print0 | cpio --null -pdlu $kerneldir
|
||||
cp .config $kerneldir
|
||||
if [ "${S}" != "${B}" ]; then
|
||||
pwd="$PWD"
|
||||
|
||||
@@ -26,6 +26,10 @@ TARGET_PREFIX = "${BUILD_PREFIX}"
|
||||
TARGET_CC_ARCH = "${BUILD_CC_ARCH}"
|
||||
TARGET_LD_ARCH = "${BUILD_LD_ARCH}"
|
||||
TARGET_AS_ARCH = "${BUILD_AS_ARCH}"
|
||||
TARGET_CPPFLAGS = "${BUILD_CPPFLAGS}"
|
||||
TARGET_CFLAGS = "${BUILD_CFLAGS}"
|
||||
TARGET_CXXFLAGS = "${BUILD_CXXFLAGS}"
|
||||
TARGET_LDFLAGS = "${BUILD_LDFLAGS}"
|
||||
TARGET_FPU = ""
|
||||
|
||||
HOST_ARCH = "${BUILD_ARCH}"
|
||||
|
||||
@@ -46,14 +46,16 @@ python populate_packages_append() {
|
||||
}
|
||||
|
||||
#
|
||||
# Add a sstate postinst hook to update the cache for native packages
|
||||
# Add an sstate postinst hook to update the cache for native packages.
|
||||
# An error exit during populate_sysroot_setscene allows bitbake to
|
||||
# try to recover by re-building the package.
|
||||
#
|
||||
SSTATEPOSTINSTFUNCS_append_class-native = " pixbufcache_sstate_postinst"
|
||||
|
||||
pixbufcache_sstate_postinst() {
|
||||
if [ "${BB_CURRENTTASK}" = "populate_sysroot" -o "${BB_CURRENTTASK}" = "populate_sysroot_setscene" ]
|
||||
then
|
||||
GDK_PIXBUF_FATAL_LOADER=1 gdk-pixbuf-query-loaders --update-cache
|
||||
GDK_PIXBUF_FATAL_LOADER=1 gdk-pixbuf-query-loaders --update-cache || exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ PTEST_ENABLED_class-cross-canadian = ""
|
||||
RDEPENDS_${PN}-ptest_class-native = ""
|
||||
RDEPENDS_${PN}-ptest_class-nativesdk = ""
|
||||
|
||||
PACKAGES =+ "${@base_contains('DISTRO_FEATURES', 'ptest', '${PN}-ptest', '', d)}"
|
||||
PACKAGES =+ "${@bb.utils.contains('PTEST_ENABLED', '1', '${PN}-ptest', '', d)}"
|
||||
|
||||
do_configure_ptest() {
|
||||
:
|
||||
|
||||
@@ -59,7 +59,6 @@ def can_use_autotools_base(cfgdata, d):
|
||||
|
||||
def can_delete_FILESPATH(cfgdata, d):
|
||||
expected = cfgdata.get("FILESPATH")
|
||||
#expected = "${@':'.join([os.path.normpath(os.path.join(fp, p, o)) for fp in d.getVar('FILESPATHBASE', True).split(':') for p in d.getVar('FILESPATHPKG', True).split(':') for o in (d.getVar('OVERRIDES', True) + ':').split(':') if os.path.exists(os.path.join(fp, p, o))])}:${FILESDIR}"
|
||||
expectedpaths = d.expand(expected)
|
||||
unexpanded = d.getVar("FILESPATH", 0)
|
||||
filespath = d.getVar("FILESPATH", True).split(":")
|
||||
|
||||
@@ -60,6 +60,7 @@ python errorreport_handler () {
|
||||
filename = "error_report_" + e.data.getVar("BUILDNAME")+".txt"
|
||||
datafile = errorreport_savedata(e, jsondata, filename)
|
||||
bb.note("The errors of this build are stored in: %s. You can send the errors to an upstream server by running: send-error-report %s [server]" % (datafile, datafile))
|
||||
bb.note("The contents of these logs will be posted in public if you use the above script. Please ensure you remove any identifying or propriety information before sending.")
|
||||
}
|
||||
|
||||
addhandler errorreport_handler
|
||||
|
||||
@@ -550,6 +550,10 @@ def check_sanity_version_change(status, d):
|
||||
if not check_app_exists("qemu-arm", d):
|
||||
status.addresult("qemu-native was in ASSUME_PROVIDED but the QEMU binaries (qemu-arm) can't be found in PATH")
|
||||
|
||||
if "libsdl-native" in assume_provided:
|
||||
if not check_app_exists("sdl-config", d):
|
||||
status.addresult("libsdl-native is set to be ASSUME_PROVIDED but sdl-config can't be found in PATH. Please either install it, or configure qemu not to require sdl.")
|
||||
|
||||
(result, message) = check_gcc_march(d)
|
||||
if result and message:
|
||||
status.addresult("Your gcc version is older than 4.5, please add the following param to local.conf\n \
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
UPDATERCPN ?= "${PN}"
|
||||
|
||||
DEPENDS_append = " update-rc.d-native"
|
||||
DEPENDS_append_class-target = " initscripts"
|
||||
UPDATERCD = "update-rc.d"
|
||||
UPDATERCD_class-cross = ""
|
||||
UPDATERCD_class-native = ""
|
||||
@@ -67,6 +68,7 @@ python __anonymous() {
|
||||
}
|
||||
|
||||
PACKAGESPLITFUNCS_prepend = "populate_packages_updatercd "
|
||||
PACKAGESPLITFUNCS_remove_class-nativesdk = "populate_packages_updatercd "
|
||||
|
||||
populate_packages_updatercd[vardeps] += "updatercd_prerm updatercd_postrm updatercd_preinst updatercd_postinst"
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ inherit useradd_base
|
||||
# target sysroot, and shadow -native and -sysroot provide the utilities
|
||||
# and support files needed to add and modify user and group accounts
|
||||
DEPENDS_append = "${USERADDDEPENDS}"
|
||||
USERADDDEPENDS = " base-passwd shadow-native shadow-sysroot shadow"
|
||||
USERADDDEPENDS = " base-files base-passwd shadow-native shadow-sysroot shadow"
|
||||
USERADDDEPENDS_class-cross = ""
|
||||
USERADDDEPENDS_class-native = ""
|
||||
USERADDDEPENDS_class-nativesdk = ""
|
||||
|
||||
@@ -18,6 +18,7 @@ CACHE = "${TMPDIR}/cache/${TCMODE}-${TCLIBC}${@['', '/' + str(d.getVar('MACHINE'
|
||||
|
||||
USER_CLASSES ?= ""
|
||||
PACKAGE_CLASSES ?= "package_ipk"
|
||||
INHERIT_BLACKLIST = "blacklist"
|
||||
INHERIT_DISTRO ?= "debian devshell sstate license"
|
||||
INHERIT += "${PACKAGE_CLASSES} ${USER_CLASSES} ${INHERIT_DISTRO}"
|
||||
INHERIT += "${PACKAGE_CLASSES} ${USER_CLASSES} ${INHERIT_DISTRO} ${INHERIT_BLACKLIST}"
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@ class ClassExtender(object):
|
||||
return name
|
||||
if name.startswith("rtld"):
|
||||
return name
|
||||
if name.endswith("-crosssdk"):
|
||||
return name
|
||||
if name.endswith("-" + self.extname):
|
||||
name = name.replace("-" + self.extname, "")
|
||||
if name.startswith("virtual/"):
|
||||
|
||||
@@ -6,6 +6,7 @@ import shutil
|
||||
import multiprocessing
|
||||
import re
|
||||
import bb
|
||||
import tempfile
|
||||
|
||||
|
||||
# this can be used by all PM backends to create the index files in parallel
|
||||
@@ -411,16 +412,22 @@ class DpkgPkgsList(PkgsList):
|
||||
output = tmp_output
|
||||
elif format == "deps":
|
||||
opkg_query_cmd = bb.utils.which(os.getenv('PATH'), "opkg-query-helper.py")
|
||||
file_out = tempfile.NamedTemporaryFile()
|
||||
file_out.write(output)
|
||||
file_out.flush()
|
||||
|
||||
try:
|
||||
output = subprocess.check_output("echo -e '%s' | %s" %
|
||||
(output, opkg_query_cmd),
|
||||
output = subprocess.check_output("cat %s | %s" %
|
||||
(file_out.name, opkg_query_cmd),
|
||||
stderr=subprocess.STDOUT,
|
||||
shell=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
file_out.close()
|
||||
bb.fatal("Cannot compute packages dependencies. Command '%s' "
|
||||
"returned %d:\n%s" % (e.cmd, e.returncode, e.output))
|
||||
|
||||
file_out.close()
|
||||
|
||||
return output
|
||||
|
||||
|
||||
@@ -1637,7 +1644,8 @@ class DpkgPM(PackageManager):
|
||||
|
||||
priority += 5
|
||||
|
||||
for pkg in self.d.getVar('PACKAGE_EXCLUDE', True).split():
|
||||
pkg_exclude = self.d.getVar('PACKAGE_EXCLUDE', True) or ""
|
||||
for pkg in pkg_exclude:
|
||||
prefs_file.write(
|
||||
"Package: %s\n"
|
||||
"Pin: release *\n"
|
||||
|
||||
@@ -130,11 +130,19 @@ class Rootfs(object):
|
||||
self._cleanup()
|
||||
|
||||
def _uninstall_uneeded(self):
|
||||
# Remove unneeded init script symlinks
|
||||
delayed_postinsts = self._get_delayed_postinsts()
|
||||
if delayed_postinsts is None:
|
||||
if os.path.exists(self.d.expand("${IMAGE_ROOTFS}${sysconfdir}/init.d/run-postinsts")):
|
||||
self._exec_shell_cmd(["update-rc.d", "-f", "-r",
|
||||
self.d.getVar('IMAGE_ROOTFS', True),
|
||||
"run-postinsts", "remove"])
|
||||
|
||||
# Remove unneeded package-management related components
|
||||
if base_contains("IMAGE_FEATURES", "package-management",
|
||||
True, False, self.d):
|
||||
return
|
||||
|
||||
delayed_postinsts = self._get_delayed_postinsts()
|
||||
if delayed_postinsts is None:
|
||||
installed_pkgs_dir = self.d.expand('${WORKDIR}/installed_pkgs.txt')
|
||||
pkgs_to_remove = list()
|
||||
@@ -154,10 +162,6 @@ class Rootfs(object):
|
||||
# Update installed_pkgs.txt
|
||||
open(installed_pkgs_dir, "w+").write('\n'.join(pkgs_installed))
|
||||
|
||||
if os.path.exists(self.d.expand("${IMAGE_ROOTFS}${sysconfdir}/init.d/run-postinsts")):
|
||||
self._exec_shell_cmd(["update-rc.d", "-f", "-r",
|
||||
self.d.getVar('IMAGE_ROOTFS', True),
|
||||
"run-postinsts", "remove"])
|
||||
else:
|
||||
self._save_postinsts()
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ class Sdk(object):
|
||||
# Link the ld.so.cache file into the hosts filesystem
|
||||
link_name = os.path.join(self.sdk_output, self.sdk_native_path,
|
||||
self.sysconfdir, "ld.so.cache")
|
||||
bb.utils.mkdirhier(os.path.dirname(link_name))
|
||||
os.symlink("/etc/ld.so.cache", link_name)
|
||||
|
||||
execute_pre_post_process(self.d, self.d.getVar('SDK_POSTPROCESS_COMMAND', True))
|
||||
|
||||
@@ -60,19 +60,9 @@ class Mate(XTerminal):
|
||||
priority = 2
|
||||
|
||||
class Xfce(XTerminal):
|
||||
command = 'Terminal -T "{title}" -e "{command}"'
|
||||
command = 'xfce4-terminal -T "{title}" -e "{command}"'
|
||||
priority = 2
|
||||
|
||||
def __init__(self, command, title=None, env=None, d=None):
|
||||
# Upstream binary name is Terminal but Debian/Ubuntu use
|
||||
# xfce4-terminal to avoid possible(?) conflicts
|
||||
distro = distro_name()
|
||||
if distro == 'ubuntu' or distro == 'debian':
|
||||
cmd = 'xfce4-terminal -T "{title}" -e "{command}"'
|
||||
else:
|
||||
cmd = command
|
||||
XTerminal.__init__(self, cmd, title, env, d)
|
||||
|
||||
class Konsole(XTerminal):
|
||||
command = 'konsole -T "{title}" -e {command}'
|
||||
priority = 2
|
||||
|
||||
@@ -70,12 +70,14 @@ do_install_class-native() {
|
||||
install -m 755 grub-mkimage ${D}${bindir}
|
||||
}
|
||||
|
||||
GRUB_BUILDIN ?= "boot linux ext2 fat serial part_msdos part_gpt normal efi_gop iso9660 search"
|
||||
|
||||
do_deploy() {
|
||||
# Search for the grub.cfg on the local boot media by using the
|
||||
# built in cfg file provided via this recipe
|
||||
grub-mkimage -c ../cfg -p /EFI/BOOT -d ./grub-core/ \
|
||||
-O ${GRUB_TARGET}-efi -o ./${GRUB_IMAGE} \
|
||||
boot linux ext2 fat serial part_msdos part_gpt normal efi_gop iso9660 search
|
||||
${GRUB_BUILDIN}
|
||||
install -m 644 ${B}/${GRUB_IMAGE} ${DEPLOYDIR}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
util/grub-gen-asciih.c: fix build warning->error
|
||||
|
||||
A potential problem is flagged by the compiler and generates a warning. This
|
||||
warning is promoted to an error via -Werror. This patch fixes the original
|
||||
issue, avoids the warning, and therefore avoids the build error.
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Index: git/util/grub-gen-asciih.c
|
||||
===================================================================
|
||||
--- git.orig/util/grub-gen-asciih.c
|
||||
+++ git/util/grub-gen-asciih.c
|
||||
@@ -131,6 +131,8 @@ write_font_ascii_bitmap (FILE *file, FT_
|
||||
struct grub_glyph_info glyph;
|
||||
int char_code;
|
||||
|
||||
+ memset (&glyph, 0, sizeof(glyph));
|
||||
+
|
||||
fprintf (file, "/* THIS CHUNK OF BYTES IS AUTOMATICALLY GENERATED */\n");
|
||||
fprintf (file, "unsigned char ascii_bitmaps[] =\n");
|
||||
fprintf (file, "{\n");
|
||||
@@ -144,6 +146,12 @@ write_font_ascii_bitmap (FILE *file, FT_
|
||||
return;
|
||||
add_glyph (glyph_idx, face, char_code, &glyph);
|
||||
|
||||
+ if (glyph.bitmap == 0)
|
||||
+ {
|
||||
+ fprintf (stderr, "grub-gen-asciih: add_glyph not successful");
|
||||
+ exit (1);
|
||||
+ }
|
||||
+
|
||||
if (glyph.width == 8 && glyph.height == 16
|
||||
&& glyph.x_ofs == 0 && glyph.y_ofs == 0)
|
||||
{
|
||||
@@ -22,6 +22,7 @@ SRC_URI = "git://git.savannah.gnu.org/grub.git \
|
||||
file://40_custom \
|
||||
file://autogen.sh-exclude-pc.patch \
|
||||
file://grub-2.00-add-oe-kernel.patch \
|
||||
file://asciih-fix-build-warning-error.patch \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
@@ -53,8 +54,12 @@ do_configure_prepend() {
|
||||
do_install_append () {
|
||||
install -d ${D}${sysconfdir}/grub.d
|
||||
install -m 0755 ${WORKDIR}/40_custom ${D}${sysconfdir}/grub.d/40_custom
|
||||
|
||||
}
|
||||
|
||||
# debugedit chokes on bare metal binaries
|
||||
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
|
||||
|
||||
RDEPENDS_${PN} = "diffutils freetype"
|
||||
FILES_${PN}-dbg += "${libdir}/${BPN}/*/.debug"
|
||||
|
||||
|
||||
21766
meta/recipes-bsp/v86d/v86d/Update-x86emu-from-X.org.patch
Normal file
21766
meta/recipes-bsp/v86d/v86d/Update-x86emu-from-X.org.patch
Normal file
File diff suppressed because it is too large
Load Diff
@@ -7,9 +7,10 @@ LIC_FILES_CHKSUM = "file://README;md5=94ac1971e4f2309dc322d598e7b1f7dd"
|
||||
|
||||
DEPENDS = "virtual/kernel"
|
||||
RRECOMMENDS_${PN} = "kernel-module-uvesafb"
|
||||
PR = "r1"
|
||||
PR = "r2"
|
||||
|
||||
SRC_URI = "http://distfiles.gentoo.org/distfiles/${BP}.tar.bz2 \
|
||||
file://Update-x86emu-from-X.org.patch \
|
||||
file://fbsetup \
|
||||
file://ar-from-env.patch"
|
||||
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
Subject: init.d: add support for read-only rootfs
|
||||
|
||||
Upstream-Status: Inappropriate [oe specific]
|
||||
|
||||
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
|
||||
---
|
||||
init.d | 40 ++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 40 insertions(+)
|
||||
|
||||
diff --git a/init.d b/init.d
|
||||
index 0111ed4..24677c8 100644
|
||||
--- a/init.d
|
||||
+++ b/init.d
|
||||
@@ -6,8 +6,48 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin
|
||||
# Don't modify this line, change or create /etc/default/bind9.
|
||||
OPTIONS=""
|
||||
|
||||
+test -f /etc/default/rcS && . /etc/default/rcS
|
||||
test -f /etc/default/bind9 && . /etc/default/bind9
|
||||
|
||||
+# This function is here because it's possible that /var and / are on different partitions.
|
||||
+is_on_read_only_partition () {
|
||||
+ DIRECTORY=$1
|
||||
+ dir=`readlink -f $DIRECTORY`
|
||||
+ while true; do
|
||||
+ if [ ! -d "$dir" ]; then
|
||||
+ echo "ERROR: $dir is not a directory"
|
||||
+ exit 1
|
||||
+ else
|
||||
+ for flag in `awk -v dir=$dir '{ if ($2 == dir) { print "FOUND"; split($4,FLAGS,",") } }; \
|
||||
+ END { for (f in FLAGS) print FLAGS[f] }' < /proc/mounts`; do
|
||||
+ [ "$flag" = "FOUND" ] && partition="read-write"
|
||||
+ [ "$flag" = "ro" ] && { partition="read-only"; break; }
|
||||
+ done
|
||||
+ if [ "$dir" = "/" -o -n "$partition" ]; then
|
||||
+ break
|
||||
+ else
|
||||
+ dir=`dirname $dir`
|
||||
+ fi
|
||||
+ fi
|
||||
+ done
|
||||
+ [ "$partition" = "read-only" ] && echo "yes" || echo "no"
|
||||
+}
|
||||
+
|
||||
+bind_mount () {
|
||||
+ olddir=$1
|
||||
+ newdir=$2
|
||||
+ mkdir -p $olddir
|
||||
+ cp -a $newdir/* $olddir
|
||||
+ mount --bind $olddir $newdir
|
||||
+}
|
||||
+
|
||||
+# Deal with read-only rootfs
|
||||
+if [ "$ROOTFS_READ_ONLY" = "yes" ]; then
|
||||
+ [ "$VERBOSE" != "no" ] && echo "WARN: start bind service in read-only rootfs"
|
||||
+ [ `is_on_read_only_partition /etc/bind` = "yes" ] && bind_mount /var/volatile/bind/etc /etc/bind
|
||||
+ [ `is_on_read_only_partition /var/named` = "yes" ] && bind_mount /var/volatile/bind/named /var/named
|
||||
+fi
|
||||
+
|
||||
test -x /usr/sbin/rndc || exit 0
|
||||
|
||||
case "$1" in
|
||||
--
|
||||
1.7.9.5
|
||||
|
||||
@@ -13,6 +13,7 @@ SRC_URI = "ftp://ftp.isc.org/isc/bind9/${PV}/${BPN}-${PV}.tar.gz \
|
||||
file://make-etc-initd-bind-stop-work.patch \
|
||||
file://mips1-not-support-opcode.diff \
|
||||
file://dont-test-on-host.patch \
|
||||
file://init.d-add-support-for-read-only-rootfs.patch \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "e676c65cad5234617ee22f48e328c24e"
|
||||
@@ -45,6 +46,7 @@ do_install_append() {
|
||||
rm "${D}${mandir}/man1/nslookup.1"
|
||||
rmdir "${D}${localstatedir}/run"
|
||||
rmdir --ignore-fail-on-non-empty "${D}${localstatedir}"
|
||||
install -d "${D}${localstatedir}/cache/bind"
|
||||
install -d "${D}${sysconfdir}/bind"
|
||||
install -d "${D}${sysconfdir}/init.d"
|
||||
install -m 644 ${S}/conf/* "${D}${sysconfdir}/bind/"
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
Upstream-Status: Backport
|
||||
|
||||
Fix for CVE-2014-2532
|
||||
|
||||
Backported from openssh-6.6p1.tar.gz
|
||||
|
||||
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
|
||||
---
|
||||
--- a/session.c
|
||||
+++ b/session.c
|
||||
@@ -955,6 +955,11 @@
|
||||
u_int envsize;
|
||||
u_int i, namelen;
|
||||
|
||||
+ if (strchr(name, '=') != NULL) {
|
||||
+ error("Invalid environment variable \"%.100s\"", name);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* If we're passed an uninitialized list, allocate a single null
|
||||
* entry before continuing.
|
||||
@@ -0,0 +1,114 @@
|
||||
Upstream-Status: Backport
|
||||
|
||||
This CVE could be removed if openssh is upgrade to 6.6 or higher.
|
||||
Below are some details.
|
||||
|
||||
Attempt SSHFP lookup even if server presents a certificate
|
||||
|
||||
Reference:
|
||||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=742513
|
||||
|
||||
If an ssh server presents a certificate to the client, then the client
|
||||
does not check the DNS for SSHFP records. This means that a malicious
|
||||
server can essentially disable DNS-host-key-checking, which means the
|
||||
client will fall back to asking the user (who will just say "yes" to
|
||||
the fingerprint, sadly).
|
||||
|
||||
This patch means that the ssh client will, if necessary, extract the
|
||||
server key from the proffered certificate, and attempt to verify it
|
||||
against the DNS. The patch was written by Mark Wooding
|
||||
<mdw@distorted.org.uk>. I modified it to add one debug2 call, reviewed
|
||||
it, and tested it.
|
||||
|
||||
Signed-off-by: Matthew Vernon <matthew@debian.org>
|
||||
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
|
||||
---
|
||||
--- a/sshconnect.c
|
||||
+++ b/sshconnect.c
|
||||
@@ -1210,36 +1210,63 @@ fail:
|
||||
return -1;
|
||||
}
|
||||
|
||||
+static int
|
||||
+check_host_key_sshfp(char *host, struct sockaddr *hostaddr, Key *host_key)
|
||||
+{
|
||||
+ int rc = -1;
|
||||
+ int flags = 0;
|
||||
+ Key *raw_key = NULL;
|
||||
+
|
||||
+ if (!options.verify_host_key_dns)
|
||||
+ goto done;
|
||||
+
|
||||
+ /* XXX certs are not yet supported for DNS; try looking the raw key
|
||||
+ * up in the DNS anyway.
|
||||
+ */
|
||||
+ if (key_is_cert(host_key)) {
|
||||
+ debug2("Extracting key from cert for SSHFP lookup");
|
||||
+ raw_key = key_from_private(host_key);
|
||||
+ if (key_drop_cert(raw_key))
|
||||
+ fatal("Couldn't drop certificate");
|
||||
+ host_key = raw_key;
|
||||
+ }
|
||||
+
|
||||
+ if (verify_host_key_dns(host, hostaddr, host_key, &flags))
|
||||
+ goto done;
|
||||
+
|
||||
+ if (flags & DNS_VERIFY_FOUND) {
|
||||
+
|
||||
+ if (options.verify_host_key_dns == 1 &&
|
||||
+ flags & DNS_VERIFY_MATCH &&
|
||||
+ flags & DNS_VERIFY_SECURE) {
|
||||
+ rc = 0;
|
||||
+ } else if (flags & DNS_VERIFY_MATCH) {
|
||||
+ matching_host_key_dns = 1;
|
||||
+ } else {
|
||||
+ warn_changed_key(host_key);
|
||||
+ error("Update the SSHFP RR in DNS with the new "
|
||||
+ "host key to get rid of this message.");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+done:
|
||||
+ if (raw_key)
|
||||
+ key_free(raw_key);
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
/* returns 0 if key verifies or -1 if key does NOT verify */
|
||||
int
|
||||
verify_host_key(char *host, struct sockaddr *hostaddr, Key *host_key)
|
||||
{
|
||||
- int flags = 0;
|
||||
char *fp;
|
||||
|
||||
fp = key_fingerprint(host_key, SSH_FP_MD5, SSH_FP_HEX);
|
||||
debug("Server host key: %s %s", key_type(host_key), fp);
|
||||
free(fp);
|
||||
|
||||
- /* XXX certs are not yet supported for DNS */
|
||||
- if (!key_is_cert(host_key) && options.verify_host_key_dns &&
|
||||
- verify_host_key_dns(host, hostaddr, host_key, &flags) == 0) {
|
||||
- if (flags & DNS_VERIFY_FOUND) {
|
||||
-
|
||||
- if (options.verify_host_key_dns == 1 &&
|
||||
- flags & DNS_VERIFY_MATCH &&
|
||||
- flags & DNS_VERIFY_SECURE)
|
||||
- return 0;
|
||||
-
|
||||
- if (flags & DNS_VERIFY_MATCH) {
|
||||
- matching_host_key_dns = 1;
|
||||
- } else {
|
||||
- warn_changed_key(host_key);
|
||||
- error("Update the SSHFP RR in DNS with the new "
|
||||
- "host key to get rid of this message.");
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
+ if (check_host_key_sshfp(host, hostaddr, host_key) == 0)
|
||||
+ return 0;
|
||||
|
||||
return check_host_key(host, hostaddr, options.port, host_key, RDRW,
|
||||
options.user_hostfiles, options.num_user_hostfiles,
|
||||
--
|
||||
1.7.9.5
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
d root root 0755 /var/run/sshd none
|
||||
f root root 0644 /var/log/lastlog none
|
||||
|
||||
@@ -7,7 +7,6 @@ SECTION = "console/network"
|
||||
LICENSE = "BSD"
|
||||
LIC_FILES_CHKSUM = "file://LICENCE;md5=e326045657e842541d3f35aada442507"
|
||||
|
||||
|
||||
DEPENDS = "zlib openssl"
|
||||
DEPENDS += "${@base_contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
|
||||
|
||||
@@ -28,7 +27,9 @@ SRC_URI = "ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${PV}.tar.
|
||||
file://sshd.socket \
|
||||
file://sshd@.service \
|
||||
file://sshdgenkeys.service \
|
||||
file://volatiles.99_sshd "
|
||||
file://volatiles.99_sshd \
|
||||
file://openssh-CVE-2014-2532.patch \
|
||||
file://openssh-CVE-2014-2653.patch"
|
||||
|
||||
PAM_SRC_URI = "file://sshd"
|
||||
|
||||
@@ -55,7 +56,9 @@ inherit autotools-brokensep
|
||||
CFLAGS += "-D__FILE_OFFSET_BITS=64"
|
||||
export LD = "${CC}"
|
||||
|
||||
EXTRA_OECONF = "${@base_contains('DISTRO_FEATURES', 'pam', '--with-pam', '--without-pam', d)} \
|
||||
# login path is hardcoded in sshd
|
||||
EXTRA_OECONF = "'LOGIN_PROGRAM=${base_bindir}/login' \
|
||||
${@base_contains('DISTRO_FEATURES', 'pam', '--with-pam', '--without-pam', d)} \
|
||||
--without-zlib-version-check \
|
||||
--with-privsep-path=/var/run/sshd \
|
||||
--sysconfdir=${sysconfdir}/ssh \
|
||||
@@ -64,9 +67,11 @@ EXTRA_OECONF = "${@base_contains('DISTRO_FEATURES', 'pam', '--with-pam', '--with
|
||||
# Since we do not depend on libbsd, we do not want configure to use it
|
||||
# just because it finds libutil.h. But, specifying --disable-libutil
|
||||
# causes compile errors, so...
|
||||
#
|
||||
CACHED_CONFIGUREVARS += "ac_cv_header_bsd_libutil_h=no ac_cv_header_libutil_h=no"
|
||||
|
||||
# passwd path is hardcoded in sshd
|
||||
CACHED_CONFIGUREVARS += "ac_cv_path_PATH_PASSWD_PROG=${bindir}/passwd"
|
||||
|
||||
# This is a workaround for uclibc because including stdio.h
|
||||
# pulls in pthreads.h and causes conflicts in function prototypes.
|
||||
# This results in compilation failure, so unless this is fixed,
|
||||
@@ -97,7 +102,7 @@ do_install_append () {
|
||||
install -d ${D}/${sysconfdir}/default/volatiles
|
||||
install -m 644 ${WORKDIR}/volatiles.99_sshd ${D}/${sysconfdir}/default/volatiles/99_sshd
|
||||
|
||||
# Create config files for read-only rootfs
|
||||
# Create config files for read-only rootfs
|
||||
install -d ${D}${sysconfdir}/ssh
|
||||
install -m 644 ${D}${sysconfdir}/ssh/sshd_config ${D}${sysconfdir}/ssh/sshd_config_readonly
|
||||
sed -i '/HostKey/d' ${D}${sysconfdir}/ssh/sshd_config_readonly
|
||||
@@ -130,7 +135,6 @@ FILES_${PN}-keygen = "${bindir}/ssh-keygen"
|
||||
RDEPENDS_${PN} += "${PN}-scp ${PN}-ssh ${PN}-sshd ${PN}-keygen"
|
||||
RDEPENDS_${PN}-sshd += "${PN}-keygen ${@base_contains('DISTRO_FEATURES', 'pam', 'pam-plugin-keyinit pam-plugin-loginuid', '', d)}"
|
||||
|
||||
|
||||
CONFFILES_${PN}-sshd = "${sysconfdir}/ssh/sshd_config"
|
||||
CONFFILES_${PN}-ssh = "${sysconfdir}/ssh/ssh_config"
|
||||
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
SUMMARY = "A /dev/crypto device driver"
|
||||
HOMEPAGE = "http://cryptodev-linux.org/"
|
||||
|
||||
LICENSE = "GPLv2"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
|
||||
|
||||
SRC_URI = "http://download.gna.org/cryptodev-linux/${BPN}-${PV}.tar.gz"
|
||||
|
||||
SRC_URI[md5sum] = "eade38998313c25fd7934719cdf8a2ea"
|
||||
SRC_URI[sha256sum] = "75f1425c8ea1f8cae523905a5a046a35092327a6152800b0b86efc4e56fb3e2f"
|
||||
|
||||
do_compile() {
|
||||
:
|
||||
}
|
||||
|
||||
# Just install cryptodev.h which is the only header file needed to be exported
|
||||
do_install() {
|
||||
install -D ${S}/crypto/cryptodev.h ${D}${includedir}/crypto/cryptodev.h
|
||||
}
|
||||
|
||||
ALLOW_EMPTY_${PN} = "1"
|
||||
BBCLASSEXTEND = "native nativesdk"
|
||||
@@ -0,0 +1,40 @@
|
||||
commit 208d54db20d58c9a5e45e856a0650caadd7d9612
|
||||
Author: Dr. Stephen Henson <steve@openssl.org>
|
||||
Date: Tue May 13 18:48:31 2014 +0100
|
||||
|
||||
Fix for CVE-2014-0195
|
||||
|
||||
A buffer overrun attack can be triggered by sending invalid DTLS fragments
|
||||
to an OpenSSL DTLS client or server. This is potentially exploitable to
|
||||
run arbitrary code on a vulnerable client or server.
|
||||
|
||||
Fixed by adding consistency check for DTLS fragments.
|
||||
|
||||
Thanks to Jüri Aedla for reporting this issue.
|
||||
|
||||
Patch borrowed from Fedora
|
||||
Upstream-Status: Backport
|
||||
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
|
||||
|
||||
diff --git a/ssl/d1_both.c b/ssl/d1_both.c
|
||||
index 2e8cf68..07f67f8 100644
|
||||
--- a/ssl/d1_both.c
|
||||
+++ b/ssl/d1_both.c
|
||||
@@ -627,7 +627,16 @@ dtls1_reassemble_fragment(SSL *s, struct hm_header_st* msg_hdr, int *ok)
|
||||
frag->msg_header.frag_off = 0;
|
||||
}
|
||||
else
|
||||
+ {
|
||||
frag = (hm_fragment*) item->data;
|
||||
+ if (frag->msg_header.msg_len != msg_hdr->msg_len)
|
||||
+ {
|
||||
+ item = NULL;
|
||||
+ frag = NULL;
|
||||
+ goto err;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
|
||||
/* If message is already reassembled, this must be a
|
||||
* retransmit and can be dropped.
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
From: Matt Caswell <matt@openssl.org>
|
||||
Date: Sun, 11 May 2014 23:38:37 +0000 (+0100)
|
||||
Subject: Fixed NULL pointer dereference. See PR#3321
|
||||
X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff_plain;h=b107586
|
||||
|
||||
Fixed NULL pointer dereference. See PR#3321
|
||||
|
||||
Patch borrowed from Fedora
|
||||
Upstream-Status: Backport
|
||||
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
|
||||
|
||||
---
|
||||
|
||||
diff --git a/ssl/s3_pkt.c b/ssl/s3_pkt.c
|
||||
index 40eb0dd..d961d12 100644
|
||||
--- a/ssl/s3_pkt.c
|
||||
+++ b/ssl/s3_pkt.c
|
||||
@@ -657,9 +657,6 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
|
||||
SSL3_BUFFER *wb=&(s->s3->wbuf);
|
||||
SSL_SESSION *sess;
|
||||
|
||||
- if (wb->buf == NULL)
|
||||
- if (!ssl3_setup_write_buffer(s))
|
||||
- return -1;
|
||||
|
||||
/* first check if there is a SSL3_BUFFER still being written
|
||||
* out. This will happen with non blocking IO */
|
||||
@@ -675,6 +672,10 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
|
||||
/* if it went, fall through and send more stuff */
|
||||
}
|
||||
|
||||
+ if (wb->buf == NULL)
|
||||
+ if (!ssl3_setup_write_buffer(s))
|
||||
+ return -1;
|
||||
+
|
||||
if (len == 0 && !create_empty_fragment)
|
||||
return 0;
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
commit d30e582446b027868cdabd0994681643682045a4
|
||||
Author: Dr. Stephen Henson <steve@openssl.org>
|
||||
Date: Fri May 16 13:00:45 2014 +0100
|
||||
|
||||
Fix CVE-2014-0221
|
||||
|
||||
Unnecessary recursion when receiving a DTLS hello request can be used to
|
||||
crash a DTLS client. Fixed by handling DTLS hello request without recursion.
|
||||
|
||||
Thanks to Imre Rad (Search-Lab Ltd.) for discovering this issue.
|
||||
|
||||
Patch borrowed from Fedora
|
||||
Upstream-Status: Backport
|
||||
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
|
||||
|
||||
diff --git a/ssl/d1_both.c b/ssl/d1_both.c
|
||||
index 07f67f8..4c2fd03 100644
|
||||
--- a/ssl/d1_both.c
|
||||
+++ b/ssl/d1_both.c
|
||||
@@ -793,6 +793,7 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok)
|
||||
int i,al;
|
||||
struct hm_header_st msg_hdr;
|
||||
|
||||
+ redo:
|
||||
/* see if we have the required fragment already */
|
||||
if ((frag_len = dtls1_retrieve_buffered_fragment(s,max,ok)) || *ok)
|
||||
{
|
||||
@@ -851,8 +852,7 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok)
|
||||
s->msg_callback_arg);
|
||||
|
||||
s->init_num = 0;
|
||||
- return dtls1_get_message_fragment(s, st1, stn,
|
||||
- max, ok);
|
||||
+ goto redo;
|
||||
}
|
||||
else /* Incorrectly formated Hello request */
|
||||
{
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
Fix for CVE-2014-0224
|
||||
|
||||
Only accept change cipher spec when it is expected instead of at any
|
||||
time. This prevents premature setting of session keys before the master
|
||||
secret is determined which an attacker could use as a MITM attack.
|
||||
|
||||
Thanks to KIKUCHI Masashi (Lepidum Co. Ltd.) for reporting this issue
|
||||
and providing the initial fix this patch is based on.
|
||||
|
||||
|
||||
Patch borrowed from Fedora
|
||||
Upstream-Status: Backport
|
||||
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
|
||||
|
||||
|
||||
diff -up openssl-1.0.1e/ssl/ssl3.h.keying-mitm openssl-1.0.1e/ssl/ssl3.h
|
||||
--- openssl-1.0.1e/ssl/ssl3.h.keying-mitm 2014-06-02 19:48:04.518100562 +0200
|
||||
+++ openssl-1.0.1e/ssl/ssl3.h 2014-06-02 19:48:04.642103429 +0200
|
||||
@@ -388,6 +388,7 @@ typedef struct ssl3_buffer_st
|
||||
#define TLS1_FLAGS_TLS_PADDING_BUG 0x0008
|
||||
#define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010
|
||||
#define TLS1_FLAGS_KEEP_HANDSHAKE 0x0020
|
||||
+#define SSL3_FLAGS_CCS_OK 0x0080
|
||||
|
||||
/* SSL3_FLAGS_SGC_RESTART_DONE is set when we
|
||||
* restart a handshake because of MS SGC and so prevents us
|
||||
diff -up openssl-1.0.1e/ssl/s3_clnt.c.keying-mitm openssl-1.0.1e/ssl/s3_clnt.c
|
||||
--- openssl-1.0.1e/ssl/s3_clnt.c.keying-mitm 2013-02-11 16:26:04.000000000 +0100
|
||||
+++ openssl-1.0.1e/ssl/s3_clnt.c 2014-06-02 19:49:57.042701985 +0200
|
||||
@@ -559,6 +559,7 @@ int ssl3_connect(SSL *s)
|
||||
case SSL3_ST_CR_FINISHED_A:
|
||||
case SSL3_ST_CR_FINISHED_B:
|
||||
|
||||
+ s->s3->flags |= SSL3_FLAGS_CCS_OK;
|
||||
ret=ssl3_get_finished(s,SSL3_ST_CR_FINISHED_A,
|
||||
SSL3_ST_CR_FINISHED_B);
|
||||
if (ret <= 0) goto end;
|
||||
@@ -916,6 +917,7 @@ int ssl3_get_server_hello(SSL *s)
|
||||
SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT);
|
||||
goto f_err;
|
||||
}
|
||||
+ s->s3->flags |= SSL3_FLAGS_CCS_OK;
|
||||
s->hit=1;
|
||||
}
|
||||
else /* a miss or crap from the other end */
|
||||
diff -up openssl-1.0.1e/ssl/s3_pkt.c.keying-mitm openssl-1.0.1e/ssl/s3_pkt.c
|
||||
--- openssl-1.0.1e/ssl/s3_pkt.c.keying-mitm 2014-06-02 19:48:04.640103383 +0200
|
||||
+++ openssl-1.0.1e/ssl/s3_pkt.c 2014-06-02 19:48:04.643103452 +0200
|
||||
@@ -1298,6 +1298,15 @@ start:
|
||||
goto f_err;
|
||||
}
|
||||
|
||||
+ if (!(s->s3->flags & SSL3_FLAGS_CCS_OK))
|
||||
+ {
|
||||
+ al=SSL_AD_UNEXPECTED_MESSAGE;
|
||||
+ SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_CCS_RECEIVED_EARLY);
|
||||
+ goto f_err;
|
||||
+ }
|
||||
+
|
||||
+ s->s3->flags &= ~SSL3_FLAGS_CCS_OK;
|
||||
+
|
||||
rr->length=0;
|
||||
|
||||
if (s->msg_callback)
|
||||
@@ -1432,7 +1441,7 @@ int ssl3_do_change_cipher_spec(SSL *s)
|
||||
|
||||
if (s->s3->tmp.key_block == NULL)
|
||||
{
|
||||
- if (s->session == NULL)
|
||||
+ if (s->session == NULL || s->session->master_key_length == 0)
|
||||
{
|
||||
/* might happen if dtls1_read_bytes() calls this */
|
||||
SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC,SSL_R_CCS_RECEIVED_EARLY);
|
||||
diff -up openssl-1.0.1e/ssl/s3_srvr.c.keying-mitm openssl-1.0.1e/ssl/s3_srvr.c
|
||||
--- openssl-1.0.1e/ssl/s3_srvr.c.keying-mitm 2014-06-02 19:48:04.630103151 +0200
|
||||
+++ openssl-1.0.1e/ssl/s3_srvr.c 2014-06-02 19:48:04.643103452 +0200
|
||||
@@ -673,6 +673,7 @@ int ssl3_accept(SSL *s)
|
||||
case SSL3_ST_SR_CERT_VRFY_A:
|
||||
case SSL3_ST_SR_CERT_VRFY_B:
|
||||
|
||||
+ s->s3->flags |= SSL3_FLAGS_CCS_OK;
|
||||
/* we should decide if we expected this one */
|
||||
ret=ssl3_get_cert_verify(s);
|
||||
if (ret <= 0) goto end;
|
||||
@@ -700,6 +701,7 @@ int ssl3_accept(SSL *s)
|
||||
|
||||
case SSL3_ST_SR_FINISHED_A:
|
||||
case SSL3_ST_SR_FINISHED_B:
|
||||
+ s->s3->flags |= SSL3_FLAGS_CCS_OK;
|
||||
ret=ssl3_get_finished(s,SSL3_ST_SR_FINISHED_A,
|
||||
SSL3_ST_SR_FINISHED_B);
|
||||
if (ret <= 0) goto end;
|
||||
@@ -770,7 +772,10 @@ int ssl3_accept(SSL *s)
|
||||
s->s3->tmp.next_state=SSL3_ST_SR_FINISHED_A;
|
||||
#else
|
||||
if (s->s3->next_proto_neg_seen)
|
||||
+ {
|
||||
+ s->s3->flags |= SSL3_FLAGS_CCS_OK;
|
||||
s->s3->tmp.next_state=SSL3_ST_SR_NEXT_PROTO_A;
|
||||
+ }
|
||||
else
|
||||
s->s3->tmp.next_state=SSL3_ST_SR_FINISHED_A;
|
||||
#endif
|
||||
@@ -0,0 +1,31 @@
|
||||
commit 4ad43d511f6cf064c66eb4bfd0fb0919b5dd8a86
|
||||
Author: Dr. Stephen Henson <steve@openssl.org>
|
||||
Date: Thu May 29 15:00:05 2014 +0100
|
||||
|
||||
Fix CVE-2014-3470
|
||||
|
||||
Check session_cert is not NULL before dereferencing it.
|
||||
|
||||
Patch borrowed from Fedora
|
||||
Upstream-Status: Backport
|
||||
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
|
||||
|
||||
|
||||
diff --git a/ssl/s3_clnt.c b/ssl/s3_clnt.c
|
||||
index d35376d..4324f8d 100644
|
||||
--- a/ssl/s3_clnt.c
|
||||
+++ b/ssl/s3_clnt.c
|
||||
@@ -2511,6 +2511,13 @@ int ssl3_send_client_key_exchange(SSL *s)
|
||||
int ecdh_clnt_cert = 0;
|
||||
int field_size = 0;
|
||||
|
||||
+ if (s->session->sess_cert == NULL)
|
||||
+ {
|
||||
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_UNEXPECTED_MESSAGE);
|
||||
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,SSL_R_UNEXPECTED_MESSAGE);
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
/* Did we send out the client's
|
||||
* ECDH share for use in premaster
|
||||
* computation as part of client certificate?
|
||||
@@ -0,0 +1,24 @@
|
||||
openssl fix for CVE-2010-5298
|
||||
|
||||
Upstream-Status: Backport
|
||||
|
||||
Race condition in the ssl3_read_bytes function in s3_pkt.c in OpenSSL
|
||||
through 1.0.1g, when SSL_MODE_RELEASE_BUFFERS is enabled, allows remote
|
||||
attackers to inject data across sessions or cause a denial of service
|
||||
(use-after-free and parsing error) via an SSL connection in a
|
||||
multithreaded environment.
|
||||
|
||||
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-5298
|
||||
|
||||
Signed-off-by: Yue Tao <Yue.Tao@windriver.com>
|
||||
--- a/ssl/s3_pkt.c
|
||||
+++ b/ssl/s3_pkt.c
|
||||
@@ -1013,7 +1013,7 @@ start:
|
||||
{
|
||||
s->rstate=SSL_ST_READ_HEADER;
|
||||
rr->off=0;
|
||||
- if (s->mode & SSL_MODE_RELEASE_BUFFERS)
|
||||
+ if (s->mode & SSL_MODE_RELEASE_BUFFERS && s->s3->rbuf.left == 0)
|
||||
ssl3_release_read_buffer(s);
|
||||
}
|
||||
}
|
||||
@@ -34,6 +34,12 @@ SRC_URI += "file://configure-targets.patch \
|
||||
file://initial-aarch64-bits.patch \
|
||||
file://find.pl \
|
||||
file://openssl-fix-des.pod-error.patch \
|
||||
file://openssl-1.0.1e-cve-2014-0195.patch \
|
||||
file://openssl-1.0.1e-cve-2014-0198.patch \
|
||||
file://openssl-1.0.1e-cve-2014-0221.patch \
|
||||
file://openssl-1.0.1e-cve-2014-0224.patch \
|
||||
file://openssl-1.0.1e-cve-2014-3470.patch \
|
||||
file://openssl-CVE-2010-5298.patch \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "de62b43dfcd858e66a74bee1c834e959"
|
||||
|
||||
@@ -6,7 +6,7 @@ LICENSE = "BSD"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=ab87f20cd7e8c0d0a6539b34d3791d0e \
|
||||
file://README;beginline=1;endline=56;md5=a07250b28e857455336bb59fc31cb845 \
|
||||
file://wpa_supplicant/wpa_supplicant.c;beginline=1;endline=12;md5=e8e021e30f3a6ab7c341b66b86626a5a"
|
||||
DEPENDS = "gnutls dbus libnl openssl"
|
||||
DEPENDS = "gnutls dbus libnl openssl libgcrypt"
|
||||
RRECOMMENDS_${PN} = "wpa-supplicant-passphrase wpa-supplicant-cli"
|
||||
|
||||
inherit systemd
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
No reason to link with libfl since 'loadkeys' implements
|
||||
its own yywrap()/yylex() functions.
|
||||
|
||||
Upstream-Status: Pending
|
||||
Signed-off-by: Jacob Kroon <jacob.kroon@mikrodidakt.se>
|
||||
|
||||
Index: console-tools-0.3.2/kbdtools/Makefile.am
|
||||
===================================================================
|
||||
--- console-tools-0.3.2.orig/kbdtools/Makefile.am
|
||||
+++ console-tools-0.3.2/kbdtools/Makefile.am
|
||||
@@ -19,8 +19,6 @@ LDADD = ../lib/ctlocal/libctlocal.a ../l
|
||||
../lib/cfont/libcfont.la \
|
||||
../lib/console/libconsole.la ../lib/generic/libctgeneric.la
|
||||
|
||||
-loadkeys_LDADD = $(LDADD) @LEXLIB@
|
||||
-
|
||||
bin_SCRIPTS = mk_modmap
|
||||
|
||||
noinst_HEADERS = loadkeys.h
|
||||
@@ -13,6 +13,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/lct/console-tools-${PV}.tar.gz \
|
||||
file://uclibc-fileno.patch \
|
||||
file://nodocs.patch \
|
||||
file://fix-libconsole-linking.patch \
|
||||
file://no-dep-on-libfl.patch \
|
||||
file://lcmessage.m4 \
|
||||
file://Makevars"
|
||||
|
||||
|
||||
@@ -6,9 +6,11 @@ LICENSE = "AFL-2 | GPLv2+"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=10dded3b58148f3f1fd804b26354af3e \
|
||||
file://dbus/dbus.h;beginline=6;endline=20;md5=7755c9d7abccd5dbd25a6a974538bb3c"
|
||||
DEPENDS = "expat virtual/libintl"
|
||||
RDEPENDS_dbus = "${@base_contains('DISTRO_FEATURES', 'ptest', 'dbus-ptest-ptest', '', d)}"
|
||||
RDEPENDS_dbus_class-native = ""
|
||||
RDEPENDS_dbus_class-nativesdk = ""
|
||||
PACKAGES += "${@bb.utils.contains('PTEST_ENABLED', '1', 'dbus-ptest', '', d)}"
|
||||
ALLOW_EMPTY_dbus-ptest = "1"
|
||||
RDEPENDS_dbus-ptest_class-target = "dbus-test-ptest"
|
||||
|
||||
SRC_URI = "http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \
|
||||
file://tmpdir.patch \
|
||||
|
||||
34
meta/recipes-core/eglibc/eglibc-2.19/grok_gold.patch
Normal file
34
meta/recipes-core/eglibc/eglibc-2.19/grok_gold.patch
Normal file
@@ -0,0 +1,34 @@
|
||||
Make ld --version output matching grok gold's output
|
||||
|
||||
adapted from from upstream branch roland/gold-vs-libc
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
Upstream-Status: Backport
|
||||
|
||||
|
||||
Index: libc/configure
|
||||
===================================================================
|
||||
--- libc.orig/configure
|
||||
+++ libc/configure
|
||||
@@ -4654,7 +4654,7 @@ else
|
||||
# Found it, now check the version.
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking version of $LD" >&5
|
||||
$as_echo_n "checking version of $LD... " >&6; }
|
||||
- ac_prog_version=`$LD --version 2>&1 | sed -n 's/^.*GNU ld.* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'`
|
||||
+ ac_prog_version=`$LD --version 2>&1 | sed -n 's/^.*GNU [Bbinutilsd][^.]* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'`
|
||||
case $ac_prog_version in
|
||||
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
|
||||
2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*)
|
||||
Index: libc/configure.ac
|
||||
===================================================================
|
||||
--- libc.orig/configure.ac
|
||||
+++ libc/configure.ac
|
||||
@@ -990,7 +990,7 @@ AC_CHECK_PROG_VER(AS, $AS, --version,
|
||||
[GNU assembler.* \([0-9]*\.[0-9.]*\)],
|
||||
[2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], AS=: critic_missing="$critic_missing as")
|
||||
AC_CHECK_PROG_VER(LD, $LD, --version,
|
||||
- [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
|
||||
+ [GNU [Bbinutilsd][^.]* \([0-9][0-9]*\.[0-9.]*\)],
|
||||
[2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], LD=: critic_missing="$critic_missing ld")
|
||||
|
||||
# These programs are version sensitive.
|
||||
@@ -24,7 +24,8 @@ SRC_URI = "http://downloads.yoctoproject.org/releases/eglibc/eglibc-${PV}-svnr25
|
||||
file://0001-R_ARM_TLS_DTPOFF32.patch \
|
||||
file://0001-eglibc-run-libm-err-tab.pl-with-specific-dirs-in-S.patch \
|
||||
file://fix-tibetian-locales.patch \
|
||||
file://ppce6500-32b_slow_ieee754_sqrt.patch \
|
||||
file://ppce6500-32b_slow_ieee754_sqrt.patch \
|
||||
file://grok_gold.patch \
|
||||
"
|
||||
SRC_URI[md5sum] = "197836c2ba42fb146e971222647198dd"
|
||||
SRC_URI[sha256sum] = "baaa030531fc308f7820c46acdf8e1b2f8e3c1f40bcd28b6e440d1c95d170d4c"
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
Upstream-Status: Inappropriate [embedded specific]
|
||||
|
||||
make ldconfig default to both /lib+/usr/lib, /lib32+/usr/lib32 and
|
||||
/lib64+/usr/lib64 on bi-ABI architectures.
|
||||
|
||||
---
|
||||
ldconfig.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff -urpN a/ldconfig.c b/ldconfig.c
|
||||
--- a/ldconfig.c
|
||||
+++ b/ldconfig.c
|
||||
@@ -52,7 +52,11 @@
|
||||
|
||||
#define SYSCONFDIR "/etc"
|
||||
#define LIBDIR "/usr/lib"
|
||||
+#define LIBDIR32 "/usr/lib32"
|
||||
+#define LIBDIR64 "/usr/lib64"
|
||||
#define SLIBDIR "/lib"
|
||||
+#define SLIBDIR32 "/lib32"
|
||||
+#define SLIBDIR64 "/lib64"
|
||||
# define N_(msgid) msgid
|
||||
#define _(msg) msg
|
||||
|
||||
@@ -1373,6 +1377,12 @@ main (int argc, char **argv)
|
||||
add_system_dir (SLIBDIR);
|
||||
if (strcmp (SLIBDIR, LIBDIR))
|
||||
add_system_dir (LIBDIR);
|
||||
+ add_system_dir (SLIBDIR32);
|
||||
+ if (strcmp (SLIBDIR32, LIBDIR32))
|
||||
+ add_system_dir (LIBDIR32);
|
||||
+ add_system_dir (SLIBDIR64);
|
||||
+ if (strcmp (SLIBDIR64, LIBDIR64))
|
||||
+ add_system_dir (LIBDIR64);
|
||||
}
|
||||
|
||||
const char *aux_cache_file = _PATH_LDCONFIG_AUX_CACHE;
|
||||
@@ -10,7 +10,9 @@ SRC_URI = "file://ldconfig-native-2.12.1.tar.bz2 \
|
||||
file://32and64bit.patch \
|
||||
file://endian-ness_handling.patch \
|
||||
file://flag_fix.patch \
|
||||
file://endianess-header.patch"
|
||||
file://endianess-header.patch \
|
||||
file://ldconfig-default-to-all-multilib-dirs.patch \
|
||||
"
|
||||
|
||||
PR = "r2"
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ S = "${WORKDIR}/glib-${PV}"
|
||||
|
||||
CORECONF = "--disable-dtrace --disable-fam --disable-libelf --disable-systemtap --disable-man"
|
||||
|
||||
PTEST_CONF = "${@base_contains('DISTRO_FEATURES', 'ptest', '--enable-installed-tests', '--disable-installed-tests', d)}"
|
||||
PTEST_CONF = "${@bb.utils.contains('PTEST_ENABLED', '1', '--enable-installed-tests', '--disable-installed-tests', d)}"
|
||||
EXTRA_OECONF = "--enable-included-printf=no ${CORECONF} ${PTEST_CONF}"
|
||||
EXTRA_OECONF_class-native = "${CORECONF} --disable-selinux"
|
||||
EXTRA_OECONF_append_libc-uclibc = " --with-libiconv=gnu"
|
||||
|
||||
@@ -21,7 +21,7 @@ IMAGE_FSTYPES = "vmdk"
|
||||
|
||||
inherit core-image
|
||||
|
||||
SRCREV ?= "84d524c9386065d06e6b9c2368b93fc07dc1816f"
|
||||
SRCREV ?= "810dd79720d607f1a31e73ff5f0862928fe06eb2"
|
||||
SRC_URI = "git://git.yoctoproject.org/poky;branch=daisy \
|
||||
file://Yocto_Build_Appliance.vmx \
|
||||
file://Yocto_Build_Appliance.vmxf \
|
||||
|
||||
@@ -3,7 +3,7 @@ DESCRIPTION = "Initscripts provide the basic system startup initialization scrip
|
||||
SECTION = "base"
|
||||
LICENSE = "GPLv2"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
|
||||
PR = "r154"
|
||||
PR = "r155"
|
||||
|
||||
INHIBIT_DEFAULT_DEPS = "1"
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ SRC_URI = "ftp://xmlsoft.org/libxml2/libxml2-${PV}.tar.gz;name=libtar \
|
||||
file://ansidecl.patch \
|
||||
file://runtest.patch \
|
||||
file://run-ptest \
|
||||
file://libxml2-CVE-2014-0191-fix.patch \
|
||||
"
|
||||
|
||||
inherit autotools pkgconfig binconfig pythonnative ptest
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
From: Daniel Veillard <veillard@redhat.com>
|
||||
Date: Tue, 22 Apr 2014 15:30:56 +0800
|
||||
Subject: Do not fetch external parameter entities
|
||||
|
||||
Unless explicitely asked for when validating or replacing entities
|
||||
with their value. Problem pointed out by Daniel Berrange <berrange@redhat.com>
|
||||
|
||||
Upstream-Status: Backport
|
||||
Reference: https://access.redhat.com/security/cve/CVE-2014-0191
|
||||
|
||||
Signed-off-by: Daniel Veillard <veillard@redhat.com>
|
||||
Signed-off-by: Maxin B. John <maxin.john@enea.com>
|
||||
---
|
||||
diff -Naur libxml2-2.9.1-orig/parser.c libxml2-2.9.1/parser.c
|
||||
--- libxml2-2.9.1-orig/parser.c 2013-04-16 15:39:18.000000000 +0200
|
||||
+++ libxml2-2.9.1/parser.c 2014-05-07 13:35:46.883687946 +0200
|
||||
@@ -2595,6 +2595,20 @@
|
||||
xmlCharEncoding enc;
|
||||
|
||||
/*
|
||||
+ * Note: external parsed entities will not be loaded, it is
|
||||
+ * not required for a non-validating parser, unless the
|
||||
+ * option of validating, or substituting entities were
|
||||
+ * given. Doing so is far more secure as the parser will
|
||||
+ * only process data coming from the document entity by
|
||||
+ * default.
|
||||
+ */
|
||||
+ if ((entity->etype == XML_EXTERNAL_PARAMETER_ENTITY) &&
|
||||
+ ((ctxt->options & XML_PARSE_NOENT) == 0) &&
|
||||
+ ((ctxt->options & XML_PARSE_DTDVALID) == 0) &&
|
||||
+ (ctxt->validate == 0))
|
||||
+ return;
|
||||
+
|
||||
+ /*
|
||||
* handle the extra spaces added before and after
|
||||
* c.f. http://www.w3.org/TR/REC-xml#as-PE
|
||||
* this is done independently.
|
||||
@@ -20,7 +20,8 @@ Before=getty.target
|
||||
IgnoreOnIsolate=yes
|
||||
|
||||
[Service]
|
||||
ExecStart=-/sbin/agetty --keep-baud %I @BAUDRATE@ $TERM
|
||||
Environment="TERM=xterm"
|
||||
ExecStart=-/sbin/agetty -8 --keep-baud %I @BAUDRATE@ $TERM
|
||||
Type=idle
|
||||
Restart=always
|
||||
RestartSec=0
|
||||
|
||||
@@ -1,10 +1,19 @@
|
||||
Upstream-Status: Denied [no desire for uclibc support]
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
|
||||
Index: systemd-209/src/journal/journal-file.c
|
||||
===================================================================
|
||||
--- systemd-209.orig/src/journal/journal-file.c 2014-02-12 18:42:33.000000000 -0800
|
||||
+++ systemd-209/src/journal/journal-file.c 2014-02-19 23:23:19.464631643 -0800
|
||||
This patch is uclibc specific, thus not suitable for upstream.
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
|
||||
|
||||
---
|
||||
src/journal/journal-file.c | 16 +++++++++++++++-
|
||||
src/journal/journald-kmsg.c | 16 ++++++++++++++--
|
||||
2 files changed, 29 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
|
||||
index 0e1fc7f..e364298 100644
|
||||
--- a/src/journal/journal-file.c
|
||||
+++ b/src/journal/journal-file.c
|
||||
@@ -38,6 +38,8 @@
|
||||
#include "compress.h"
|
||||
#include "fsprg.h"
|
||||
@@ -14,7 +23,7 @@ Index: systemd-209/src/journal/journal-file.c
|
||||
#define DEFAULT_DATA_HASH_TABLE_SIZE (2047ULL*sizeof(HashItem))
|
||||
#define DEFAULT_FIELD_HASH_TABLE_SIZE (333ULL*sizeof(HashItem))
|
||||
|
||||
@@ -316,7 +318,7 @@
|
||||
@@ -316,7 +318,7 @@ static int journal_file_verify_header(JournalFile *f) {
|
||||
|
||||
static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) {
|
||||
uint64_t old_size, new_size;
|
||||
@@ -23,36 +32,33 @@ Index: systemd-209/src/journal/journal-file.c
|
||||
|
||||
assert(f);
|
||||
|
||||
@@ -364,9 +366,24 @@
|
||||
@@ -364,9 +366,21 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size)
|
||||
/* Note that the glibc fallocate() fallback is very
|
||||
inefficient, hence we try to minimize the allocation area
|
||||
as we can. */
|
||||
+#ifdef HAVE_POSIX_ALLOCATE
|
||||
+#ifdef HAVE_POSIX_FALLOCATE
|
||||
r = posix_fallocate(f->fd, old_size, new_size - old_size);
|
||||
if (r != 0)
|
||||
return -r;
|
||||
+#else
|
||||
+ /* Use good old method to write zeros into the journal file
|
||||
+ perhaps very inefficient yet working. */
|
||||
+ if(new_size > old_size) {
|
||||
+ char *buf = alloca(new_size - old_size);
|
||||
+ off_t oldpos = lseek(f->fd, 0, SEEK_CUR);
|
||||
+ bzero(buf, new_size - old_size);
|
||||
+ lseek(f->fd, old_size, SEEK_SET);
|
||||
+ r = write(f->fd, buf, new_size - old_size);
|
||||
+ lseek(f->fd, oldpos, SEEK_SET);
|
||||
+ }
|
||||
+ if (r < 0)
|
||||
+ return -errno;
|
||||
+ /* Write something every 512 bytes to make sure the block is allocated */
|
||||
+ uint64_t len = new_size - old_size;
|
||||
+ uint64_t offset = old_size;
|
||||
+ for (offset += (len-1) % 512; len > 0; offset += 512) {
|
||||
+ len -= 512;
|
||||
+ if (pwrite(f->fd, "", 1, offset) != 1)
|
||||
+ return -errno;
|
||||
+ }
|
||||
+
|
||||
+#endif /* HAVE_POSIX_FALLOCATE */
|
||||
|
||||
if (fstat(f->fd, &f->last_stat) < 0)
|
||||
return -errno;
|
||||
Index: systemd-209/src/journal/journald-kmsg.c
|
||||
===================================================================
|
||||
--- systemd-209.orig/src/journal/journald-kmsg.c 2014-02-19 15:03:09.000000000 -0800
|
||||
+++ systemd-209/src/journal/journald-kmsg.c 2014-02-19 23:22:14.396630422 -0800
|
||||
@@ -441,6 +441,7 @@
|
||||
diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c
|
||||
index 05b128f..320a52e 100644
|
||||
--- a/src/journal/journald-kmsg.c
|
||||
+++ b/src/journal/journald-kmsg.c
|
||||
@@ -441,6 +441,7 @@ fail:
|
||||
|
||||
int server_open_kernel_seqnum(Server *s) {
|
||||
int fd;
|
||||
@@ -60,13 +66,13 @@ Index: systemd-209/src/journal/journald-kmsg.c
|
||||
uint64_t *p;
|
||||
|
||||
assert(s);
|
||||
@@ -454,8 +455,19 @@
|
||||
@@ -454,8 +455,19 @@ int server_open_kernel_seqnum(Server *s) {
|
||||
log_error("Failed to open /run/systemd/journal/kernel-seqnum, ignoring: %m");
|
||||
return 0;
|
||||
}
|
||||
-
|
||||
- if (posix_fallocate(fd, 0, sizeof(uint64_t)) < 0) {
|
||||
+#ifdef HAVE_POSIX_ALLOCATE
|
||||
+#ifdef HAVE_POSIX_FALLOCATE
|
||||
+ r = posix_fallocate(fd, 0, sizeof(uint64_t));
|
||||
+#else
|
||||
+ /* Use good old method to write zeros into the journal file
|
||||
@@ -82,3 +88,6 @@ Index: systemd-209/src/journal/journald-kmsg.c
|
||||
log_error("Failed to allocate sequential number file, ignoring: %m");
|
||||
close_nointr_nofail(fd);
|
||||
return 0;
|
||||
--
|
||||
1.7.9.5
|
||||
|
||||
|
||||
@@ -123,6 +123,7 @@ UCLIBC_HAS_GNU_GLOB=y
|
||||
SHARED_LIB_LOADER_PREFIX="/lib"
|
||||
RUNTIME_PREFIX="/"
|
||||
DEVEL_PREFIX="//usr"
|
||||
MULTILIB_DIR="lib"
|
||||
|
||||
#
|
||||
# Security options
|
||||
|
||||
@@ -81,6 +81,7 @@ configmangle = '/^KERNEL_HEADERS/d; \
|
||||
s,^DOSTRIP.*,# DOSTRIP is not set,g; \
|
||||
/_[EO]*ABI/d; \
|
||||
/HAS_FPU/d; \
|
||||
${@["","s,.*MULTILIB_DIR.*,MULTILIB_DIR=\"${baselib}\",;"][d.getVar("baselib", True) != "lib"]} \
|
||||
'
|
||||
OE_FEATURES := "${@features_to_uclibc_conf(d)}"
|
||||
OE_DEL := "${@features_to_uclibc_del(d)}"
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
Upstream-Status: Pending
|
||||
|
||||
Fix to handle priority numbers correctly.
|
||||
Previously, if the priority number is '08' or '09', for example,
|
||||
the script cannot handle them correctly as these numbers are treated
|
||||
as octal numbers.
|
||||
|
||||
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
|
||||
---
|
||||
update-rc.d | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/update-rc.d b/update-rc.d
|
||||
index ec50d15..c70b859 100644
|
||||
--- a/update-rc.d
|
||||
+++ b/update-rc.d
|
||||
@@ -205,7 +205,7 @@ case $1 in
|
||||
exit 1
|
||||
fi
|
||||
shift
|
||||
- NN=`printf %02d $1`
|
||||
+ NN=`printf %02d $(expr $1 + 0)`
|
||||
shift
|
||||
while [ "x$1" != "x." ]; do
|
||||
if [ $# -eq 0 ]; then
|
||||
--
|
||||
1.7.9.5
|
||||
|
||||
@@ -13,6 +13,7 @@ SRCREV = "eca680ddf28d024954895f59a241a622dd575c11"
|
||||
SRC_URI = "git://github.com/philb/update-rc.d.git \
|
||||
file://add-verbose.patch \
|
||||
file://check-if-symlinks-are-valid.patch \
|
||||
file://fix-to-handle-priority-numbers-correctly.patch \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
@@ -132,7 +132,7 @@ do_install () {
|
||||
mkdir -p ${D}${base_bindir}
|
||||
|
||||
sbinprogs="agetty ctrlaltdel cfdisk vipw vigr"
|
||||
sbinprogs_a="pivot_root hwclock mkswap mkfs.minix fsck.minix losetup swapon swapoff fdisk readprofile fsck blkid blockdev fstrim"
|
||||
sbinprogs_a="pivot_root hwclock mkswap mkfs.minix fsck.minix losetup swapon swapoff fdisk readprofile fsck blkid blockdev fstrim sulogin"
|
||||
usrbinprogs_a="chfn chsh hexdump last logger mesg newgrp renice utmpdump wall setsid chrt flock getopt"
|
||||
binprogs_a="dmesg kill more umount mount login reset su"
|
||||
|
||||
@@ -166,7 +166,7 @@ ALTERNATIVE_PRIORITY = "100"
|
||||
|
||||
ALTERNATIVE_${PN} = "dmesg kill more mkswap blockdev pivot_root"
|
||||
ALTERNATIVE_${PN} += "mkfs.minix hexdump last logger mesg renice wall"
|
||||
ALTERNATIVE_${PN} += "setsid chrt flock hwclock utmpdump eject getopt"
|
||||
ALTERNATIVE_${PN} += "setsid chrt flock hwclock utmpdump eject getopt sulogin"
|
||||
|
||||
ALTERNATIVE_LINK_NAME[dmesg] = "${base_bindir}/dmesg"
|
||||
ALTERNATIVE_LINK_NAME[kill] = "${base_bindir}/kill"
|
||||
@@ -177,6 +177,7 @@ ALTERNATIVE_LINK_NAME[pivot_root] = "${base_sbindir}/pivot_root"
|
||||
ALTERNATIVE_LINK_NAME[mkfs.minix] = "${base_sbindir}/mkfs.minix"
|
||||
ALTERNATIVE_LINK_NAME[eject] = "${bindir}/eject"
|
||||
ALTERNATIVE_LINK_NAME[getopt] = "${base_bindir}/getopt"
|
||||
ALTERNATIVE_LINK_NAME[sulogin] = "${base_sbindir}/sulogin"
|
||||
ALTERNATIVE_TARGET[getopt] = "${bindir}/getopt"
|
||||
|
||||
ALTERNATIVE_${PN}-doc = "mountpoint.1 last.1 mesg.1 wall.1 sulogin.8 utmpdump.1 reset.1"
|
||||
|
||||
@@ -30,6 +30,8 @@ SRC_URI = "\
|
||||
file://fix-pr16476.patch \
|
||||
file://fix-pr16428a.patch \
|
||||
file://fix-pr16428b.patch \
|
||||
file://replace_macros_with_static_inline.patch \
|
||||
file://0001-Fix-MMIX-build-breakage-from-bfd_set_section_vma-cha.patch \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "e0f71a7b2ddab0f8612336ac81d9636b"
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
Upstream-Status: Backport
|
||||
|
||||
From 0a09fb4a09e80c36fa3ef763ae276fd13d272a36 Mon Sep 17 00:00:00 2001
|
||||
From: Hans-Peter Nilsson <hp@bitrange.com>
|
||||
Date: Sat, 1 Feb 2014 01:11:28 +0100
|
||||
Subject: [PATCH] Fix MMIX build breakage from bfd_set_section_vma change.
|
||||
|
||||
* emultempl/mmix-elfnmmo.em (mmix_after_allocation): Fix typo in
|
||||
call to bfd_set_section_vma exposed by recent bfd_set_section_vma
|
||||
change.
|
||||
---
|
||||
ld/ChangeLog | 6 ++++++
|
||||
ld/emultempl/mmix-elfnmmo.em | 2 +-
|
||||
2 files changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/ld/emultempl/mmix-elfnmmo.em b/ld/emultempl/mmix-elfnmmo.em
|
||||
index 0059792..5e9781a 100644
|
||||
--- a/ld/emultempl/mmix-elfnmmo.em
|
||||
+++ b/ld/emultempl/mmix-elfnmmo.em
|
||||
@@ -102,7 +102,7 @@ mmix_after_allocation (void)
|
||||
This section is only present when there are register symbols. */
|
||||
sec = bfd_get_section_by_name (link_info.output_bfd, MMIX_REG_SECTION_NAME);
|
||||
if (sec != NULL)
|
||||
- bfd_set_section_vma (abfd, sec, 0);
|
||||
+ bfd_set_section_vma (sec->owner, sec, 0);
|
||||
|
||||
if (!_bfd_mmix_after_linker_allocation (link_info.output_bfd, &link_info))
|
||||
{
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,188 @@
|
||||
Upstream-Status: Backport
|
||||
|
||||
From 27b829ee701e29804216b3803fbaeb629be27491 Mon Sep 17 00:00:00 2001
|
||||
From: Nick Clifton <nickc@redhat.com>
|
||||
Date: Wed, 29 Jan 2014 13:46:39 +0000
|
||||
Subject: [PATCH 1/1] Following up on Tom's suggestion I am checking in a patch to replace the various
|
||||
bfd_xxx_set macros with static inline functions, so that we can avoid compile time
|
||||
warnings about comma expressions with unused values.
|
||||
|
||||
* bfd-in.h (bfd_set_section_vma): Delete.
|
||||
(bfd_set_section_alignment): Delete.
|
||||
(bfd_set_section_userdata): Delete.
|
||||
(bfd_set_cacheable): Delete.
|
||||
* bfd.c (bfd_set_cacheable): New static inline function.
|
||||
* section.c (bfd_set_section_userdata): Likewise.
|
||||
(bfd_set_section_vma): Likewise.
|
||||
(bfd_set_section_alignment): Likewise.
|
||||
* bfd-in2.h: Regenerate.
|
||||
---
|
||||
bfd/ChangeLog | 12 ++++++++++++
|
||||
bfd/bfd-in.h | 5 -----
|
||||
bfd/bfd-in2.h | 41 +++++++++++++++++++++++++++++++++++------
|
||||
bfd/bfd.c | 8 ++++++++
|
||||
bfd/section.c | 26 ++++++++++++++++++++++++++
|
||||
5 files changed, 81 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h
|
||||
index 3afd71b..c7c5a7d 100644
|
||||
--- a/bfd/bfd-in.h
|
||||
+++ b/bfd/bfd-in.h
|
||||
@@ -292,9 +292,6 @@ typedef struct bfd_section *sec_ptr;
|
||||
|
||||
#define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0)
|
||||
|
||||
-#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma = (val)), ((ptr)->user_set_vma = TRUE), TRUE)
|
||||
-#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),TRUE)
|
||||
-#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),TRUE)
|
||||
/* Find the address one past the end of SEC. */
|
||||
#define bfd_get_section_limit(bfd, sec) \
|
||||
(((bfd)->direction != write_direction && (sec)->rawsize != 0 \
|
||||
@@ -517,8 +514,6 @@ extern void warn_deprecated (const char *, const char *, int, const char *);
|
||||
|
||||
#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
|
||||
|
||||
-#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = bool), TRUE)
|
||||
-
|
||||
extern bfd_boolean bfd_cache_close
|
||||
(bfd *abfd);
|
||||
/* NB: This declaration should match the autogenerated one in libbfd.h. */
|
||||
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
|
||||
index 71996db..b5aeb40 100644
|
||||
--- a/bfd/bfd-in2.h
|
||||
+++ b/bfd/bfd-in2.h
|
||||
@@ -299,9 +299,6 @@ typedef struct bfd_section *sec_ptr;
|
||||
|
||||
#define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0)
|
||||
|
||||
-#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma = (val)), ((ptr)->user_set_vma = TRUE), TRUE)
|
||||
-#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),TRUE)
|
||||
-#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),TRUE)
|
||||
/* Find the address one past the end of SEC. */
|
||||
#define bfd_get_section_limit(bfd, sec) \
|
||||
(((bfd)->direction != write_direction && (sec)->rawsize != 0 \
|
||||
@@ -524,8 +521,6 @@ extern void warn_deprecated (const char *, const char *, int, const char *);
|
||||
|
||||
#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
|
||||
|
||||
-#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = bool), TRUE)
|
||||
-
|
||||
extern bfd_boolean bfd_cache_close
|
||||
(bfd *abfd);
|
||||
/* NB: This declaration should match the autogenerated one in libbfd.h. */
|
||||
@@ -1029,7 +1024,7 @@ bfd *bfd_openr (const char *filename, const char *target);
|
||||
|
||||
bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
|
||||
|
||||
-bfd *bfd_openstreamr (const char *, const char *, void *);
|
||||
+bfd *bfd_openstreamr (const char * filename, const char * target, void * stream);
|
||||
|
||||
bfd *bfd_openr_iovec (const char *filename, const char *target,
|
||||
void *(*open_func) (struct bfd *nbfd,
|
||||
@@ -1596,6 +1591,32 @@ struct relax_table {
|
||||
int size;
|
||||
};
|
||||
|
||||
+/* Note: the following are provided as inline functions rather than macros
|
||||
+ because not all callers use the return value. A macro implementation
|
||||
+ would use a comma expression, eg: "((ptr)->foo = val, TRUE)" and some
|
||||
+ compilers will complain about comma expressions that have no effect. */
|
||||
+static inline bfd_boolean
|
||||
+bfd_set_section_userdata (bfd * abfd ATTRIBUTE_UNUSED, asection * ptr, void * val)
|
||||
+{
|
||||
+ ptr->userdata = val;
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+static inline bfd_boolean
|
||||
+bfd_set_section_vma (bfd * abfd ATTRIBUTE_UNUSED, asection * ptr, bfd_vma val)
|
||||
+{
|
||||
+ ptr->vma = ptr->lma = val;
|
||||
+ ptr->user_set_vma = TRUE;
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+static inline bfd_boolean
|
||||
+bfd_set_section_alignment (bfd * abfd ATTRIBUTE_UNUSED, asection * ptr, unsigned int val)
|
||||
+{
|
||||
+ ptr->alignment_power = val;
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
/* These sections are global, and are managed by BFD. The application
|
||||
and target back end are not permitted to change the values in
|
||||
these sections. */
|
||||
@@ -6415,6 +6436,14 @@ struct bfd
|
||||
unsigned int selective_search : 1;
|
||||
};
|
||||
|
||||
+/* See note beside bfd_set_section_userdata. */
|
||||
+static inline bfd_boolean
|
||||
+bfd_set_cacheable (bfd * abfd, bfd_boolean val)
|
||||
+{
|
||||
+ abfd->cacheable = val;
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
typedef enum bfd_error
|
||||
{
|
||||
bfd_error_no_error = 0,
|
||||
diff --git a/bfd/bfd.c b/bfd/bfd.c
|
||||
index 8d0580c..2d174f3 100644
|
||||
--- a/bfd/bfd.c
|
||||
+++ b/bfd/bfd.c
|
||||
@@ -311,6 +311,14 @@ CODE_FRAGMENT
|
||||
. unsigned int selective_search : 1;
|
||||
.};
|
||||
.
|
||||
+.{* See note beside bfd_set_section_userdata. *}
|
||||
+.static inline bfd_boolean
|
||||
+.bfd_set_cacheable (bfd * abfd, bfd_boolean val)
|
||||
+.{
|
||||
+. abfd->cacheable = val;
|
||||
+. return TRUE;
|
||||
+.}
|
||||
+.
|
||||
*/
|
||||
|
||||
#include "sysdep.h"
|
||||
diff --git a/bfd/section.c b/bfd/section.c
|
||||
index fb19d8c..a661228 100644
|
||||
--- a/bfd/section.c
|
||||
+++ b/bfd/section.c
|
||||
@@ -542,6 +542,32 @@ CODE_FRAGMENT
|
||||
. int size;
|
||||
.};
|
||||
.
|
||||
+.{* Note: the following are provided as inline functions rather than macros
|
||||
+. because not all callers use the return value. A macro implementation
|
||||
+. would use a comma expression, eg: "((ptr)->foo = val, TRUE)" and some
|
||||
+. compilers will complain about comma expressions that have no effect. *}
|
||||
+.static inline bfd_boolean
|
||||
+.bfd_set_section_userdata (bfd * abfd ATTRIBUTE_UNUSED, asection * ptr, void * val)
|
||||
+.{
|
||||
+. ptr->userdata = val;
|
||||
+. return TRUE;
|
||||
+.}
|
||||
+.
|
||||
+.static inline bfd_boolean
|
||||
+.bfd_set_section_vma (bfd * abfd ATTRIBUTE_UNUSED, asection * ptr, bfd_vma val)
|
||||
+.{
|
||||
+. ptr->vma = ptr->lma = val;
|
||||
+. ptr->user_set_vma = TRUE;
|
||||
+. return TRUE;
|
||||
+.}
|
||||
+.
|
||||
+.static inline bfd_boolean
|
||||
+.bfd_set_section_alignment (bfd * abfd ATTRIBUTE_UNUSED, asection * ptr, unsigned int val)
|
||||
+.{
|
||||
+. ptr->alignment_power = val;
|
||||
+. return TRUE;
|
||||
+.}
|
||||
+.
|
||||
.{* These sections are global, and are managed by BFD. The application
|
||||
. and target back end are not permitted to change the values in
|
||||
. these sections. *}
|
||||
--
|
||||
1.7.1
|
||||
|
||||
@@ -121,21 +121,4 @@ EXTRA_OECONF_PATHS = " \
|
||||
--with-sysroot=${STAGING_DIR_TARGET} \
|
||||
--with-build-sysroot=${STAGING_DIR_TARGET}"
|
||||
|
||||
do_configure_prepend () {
|
||||
# teach gcc to find correct target includedir when checking libc ssp support
|
||||
mkdir -p ${B}/gcc
|
||||
echo "NATIVE_SYSTEM_HEADER_DIR = ${SYSTEMHEADERS}" > ${B}/gcc/t-oe
|
||||
cat ${S}/gcc/defaults.h | grep -v "\#endif.*GCC_DEFAULTS_H" > ${B}/gcc/defaults.h.new
|
||||
cat >>${B}/gcc/defaults.h.new <<_EOF
|
||||
#ifndef STANDARD_STARTFILE_PREFIX_1
|
||||
#define STANDARD_STARTFILE_PREFIX_1 "${SYSTEMLIBS}"
|
||||
#endif
|
||||
#ifndef STANDARD_STARTFILE_PREFIX_2
|
||||
#define STANDARD_STARTFILE_PREFIX_2 "${SYSTEMLIBS1}"
|
||||
#endif
|
||||
#define SYSTEMLIBS_DIR "${SYSTEMLIBS}"
|
||||
#endif /* ! GCC_DEFAULTS_H */
|
||||
_EOF
|
||||
mv ${B}/gcc/defaults.h.new ${B}/gcc/defaults.h
|
||||
}
|
||||
|
||||
|
||||
@@ -29,11 +29,11 @@ Upstream-Status: Inappropriate [OE configuration]
|
||||
gcc/config/sparc/linux64.h | 4 ++--
|
||||
11 files changed, 22 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/alpha/linux-elf.h b/gcc/config/alpha/linux-elf.h
|
||||
index 84e0596..3a59d71 100644
|
||||
--- a/gcc/config/alpha/linux-elf.h
|
||||
+++ b/gcc/config/alpha/linux-elf.h
|
||||
@@ -23,8 +23,8 @@ along with GCC; see the file COPYING3. If not see
|
||||
Index: gcc-4.8.2/gcc/config/alpha/linux-elf.h
|
||||
===================================================================
|
||||
--- gcc-4.8.2.orig/gcc/config/alpha/linux-elf.h 2014-05-06 10:34:51.081657377 +0000
|
||||
+++ gcc-4.8.2/gcc/config/alpha/linux-elf.h 2014-05-06 10:34:51.073657377 +0000
|
||||
@@ -23,8 +23,8 @@
|
||||
#define EXTRA_SPECS \
|
||||
{ "elf_dynamic_linker", ELF_DYNAMIC_LINKER },
|
||||
|
||||
@@ -44,10 +44,10 @@ index 84e0596..3a59d71 100644
|
||||
#if DEFAULT_LIBC == LIBC_UCLIBC
|
||||
#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
|
||||
#elif DEFAULT_LIBC == LIBC_GLIBC
|
||||
diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
|
||||
index 4a425c8..80f454d 100644
|
||||
--- a/gcc/config/arm/linux-eabi.h
|
||||
+++ b/gcc/config/arm/linux-eabi.h
|
||||
Index: gcc-4.8.2/gcc/config/arm/linux-eabi.h
|
||||
===================================================================
|
||||
--- gcc-4.8.2.orig/gcc/config/arm/linux-eabi.h 2014-05-06 10:34:51.081657377 +0000
|
||||
+++ gcc-4.8.2/gcc/config/arm/linux-eabi.h 2014-05-06 10:34:51.077657377 +0000
|
||||
@@ -68,8 +68,8 @@
|
||||
GLIBC_DYNAMIC_LINKER_DEFAULT and TARGET_DEFAULT_FLOAT_ABI. */
|
||||
|
||||
@@ -59,10 +59,10 @@ index 4a425c8..80f454d 100644
|
||||
#define GLIBC_DYNAMIC_LINKER_DEFAULT GLIBC_DYNAMIC_LINKER_SOFT_FLOAT
|
||||
|
||||
#define GLIBC_DYNAMIC_LINKER \
|
||||
diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h
|
||||
index 753dc3a..d593967 100644
|
||||
--- a/gcc/config/arm/linux-elf.h
|
||||
+++ b/gcc/config/arm/linux-elf.h
|
||||
Index: gcc-4.8.2/gcc/config/arm/linux-elf.h
|
||||
===================================================================
|
||||
--- gcc-4.8.2.orig/gcc/config/arm/linux-elf.h 2014-05-06 10:34:51.081657377 +0000
|
||||
+++ gcc-4.8.2/gcc/config/arm/linux-elf.h 2014-05-06 10:34:51.077657377 +0000
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
#define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
|
||||
@@ -72,21 +72,21 @@ index 753dc3a..d593967 100644
|
||||
|
||||
#define LINUX_TARGET_LINK_SPEC "%{h*} \
|
||||
%{static:-Bstatic} \
|
||||
diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h
|
||||
index 3c95ee0..33b8acd 100644
|
||||
--- a/gcc/config/i386/linux.h
|
||||
+++ b/gcc/config/i386/linux.h
|
||||
@@ -20,4 +20,4 @@ along with GCC; see the file COPYING3. If not see
|
||||
Index: gcc-4.8.2/gcc/config/i386/linux.h
|
||||
===================================================================
|
||||
--- gcc-4.8.2.orig/gcc/config/i386/linux.h 2014-05-06 10:34:51.081657377 +0000
|
||||
+++ gcc-4.8.2/gcc/config/i386/linux.h 2014-05-06 10:34:51.077657377 +0000
|
||||
@@ -20,4 +20,4 @@
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#define GNU_USER_LINK_EMULATION "elf_i386"
|
||||
-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
|
||||
+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
|
||||
diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h
|
||||
index b793e08..da788b8 100644
|
||||
--- a/gcc/config/i386/linux64.h
|
||||
+++ b/gcc/config/i386/linux64.h
|
||||
@@ -27,6 +27,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
Index: gcc-4.8.2/gcc/config/i386/linux64.h
|
||||
===================================================================
|
||||
--- gcc-4.8.2.orig/gcc/config/i386/linux64.h 2014-05-06 10:34:51.081657377 +0000
|
||||
+++ gcc-4.8.2/gcc/config/i386/linux64.h 2014-05-06 10:34:51.077657377 +0000
|
||||
@@ -27,6 +27,6 @@
|
||||
#define GNU_USER_LINK_EMULATION64 "elf_x86_64"
|
||||
#define GNU_USER_LINK_EMULATIONX32 "elf32_x86_64"
|
||||
|
||||
@@ -96,21 +96,21 @@ index b793e08..da788b8 100644
|
||||
+#define GLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-linux.so.2"
|
||||
+#define GLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld-linux-x86-64.so.2"
|
||||
+#define GLIBC_DYNAMIC_LINKERX32 SYSTEMLIBS_DIR "ld-linux-x32.so.2"
|
||||
diff --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
|
||||
index 9b4c68d..7ee5ba8 100644
|
||||
--- a/gcc/config/mips/linux.h
|
||||
+++ b/gcc/config/mips/linux.h
|
||||
@@ -17,4 +17,4 @@ You should have received a copy of the GNU General Public License
|
||||
Index: gcc-4.8.2/gcc/config/mips/linux.h
|
||||
===================================================================
|
||||
--- gcc-4.8.2.orig/gcc/config/mips/linux.h 2014-05-06 10:34:51.081657377 +0000
|
||||
+++ gcc-4.8.2/gcc/config/mips/linux.h 2014-05-06 10:34:51.077657377 +0000
|
||||
@@ -17,4 +17,4 @@
|
||||
along with GCC; see the file COPYING3. If not see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
-#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
|
||||
+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld.so.1"
|
||||
diff --git a/gcc/config/mips/linux64.h b/gcc/config/mips/linux64.h
|
||||
index dbba47a..c7ed573 100644
|
||||
--- a/gcc/config/mips/linux64.h
|
||||
+++ b/gcc/config/mips/linux64.h
|
||||
@@ -22,10 +22,10 @@ along with GCC; see the file COPYING3. If not see
|
||||
Index: gcc-4.8.2/gcc/config/mips/linux64.h
|
||||
===================================================================
|
||||
--- gcc-4.8.2.orig/gcc/config/mips/linux64.h 2014-05-06 10:34:51.081657377 +0000
|
||||
+++ gcc-4.8.2/gcc/config/mips/linux64.h 2014-05-06 10:34:51.077657377 +0000
|
||||
@@ -22,10 +22,10 @@
|
||||
#define GNU_USER_LINK_EMULATION64 "elf64%{EB:b}%{EL:l}tsmip"
|
||||
#define GNU_USER_LINK_EMULATIONN32 "elf32%{EB:b}%{EL:l}tsmipn32"
|
||||
|
||||
@@ -125,11 +125,11 @@ index dbba47a..c7ed573 100644
|
||||
#define BIONIC_DYNAMIC_LINKERN32 "/system/bin/linker32"
|
||||
#define GNU_USER_DYNAMIC_LINKERN32 \
|
||||
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32, \
|
||||
diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
|
||||
index dc6f67f..bc60769 100644
|
||||
--- a/gcc/config/rs6000/linux64.h
|
||||
+++ b/gcc/config/rs6000/linux64.h
|
||||
@@ -360,10 +360,10 @@ extern int dot_symbols;
|
||||
Index: gcc-4.8.2/gcc/config/rs6000/linux64.h
|
||||
===================================================================
|
||||
--- gcc-4.8.2.orig/gcc/config/rs6000/linux64.h 2014-05-06 10:34:51.081657377 +0000
|
||||
+++ gcc-4.8.2/gcc/config/rs6000/linux64.h 2014-05-06 10:34:51.077657377 +0000
|
||||
@@ -350,10 +350,10 @@
|
||||
#undef LINK_OS_DEFAULT_SPEC
|
||||
#define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
|
||||
|
||||
@@ -144,11 +144,11 @@ index dc6f67f..bc60769 100644
|
||||
#if DEFAULT_LIBC == LIBC_UCLIBC
|
||||
#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
|
||||
#elif DEFAULT_LIBC == LIBC_GLIBC
|
||||
diff --git a/gcc/config/sh/linux.h b/gcc/config/sh/linux.h
|
||||
index 9e8f32d..86bf81e 100644
|
||||
--- a/gcc/config/sh/linux.h
|
||||
+++ b/gcc/config/sh/linux.h
|
||||
@@ -43,7 +43,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
Index: gcc-4.8.2/gcc/config/sh/linux.h
|
||||
===================================================================
|
||||
--- gcc-4.8.2.orig/gcc/config/sh/linux.h 2014-05-06 10:34:51.081657377 +0000
|
||||
+++ gcc-4.8.2/gcc/config/sh/linux.h 2014-05-06 10:34:51.077657377 +0000
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
|
||||
|
||||
@@ -157,11 +157,11 @@ index 9e8f32d..86bf81e 100644
|
||||
|
||||
#undef SUBTARGET_LINK_EMUL_SUFFIX
|
||||
#define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
|
||||
diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h
|
||||
index 49283d3..6f0b03a 100644
|
||||
--- a/gcc/config/sparc/linux.h
|
||||
+++ b/gcc/config/sparc/linux.h
|
||||
@@ -83,7 +83,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
|
||||
Index: gcc-4.8.2/gcc/config/sparc/linux.h
|
||||
===================================================================
|
||||
--- gcc-4.8.2.orig/gcc/config/sparc/linux.h 2014-05-06 10:34:51.081657377 +0000
|
||||
+++ gcc-4.8.2/gcc/config/sparc/linux.h 2014-05-06 10:34:51.077657377 +0000
|
||||
@@ -83,7 +83,7 @@
|
||||
When the -shared link option is used a final link is not being
|
||||
done. */
|
||||
|
||||
@@ -170,11 +170,11 @@ index 49283d3..6f0b03a 100644
|
||||
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC "-m elf32_sparc %{shared:-shared} \
|
||||
diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h
|
||||
index 7d48e96..b01993f 100644
|
||||
--- a/gcc/config/sparc/linux64.h
|
||||
+++ b/gcc/config/sparc/linux64.h
|
||||
@@ -92,8 +92,8 @@ along with GCC; see the file COPYING3. If not see
|
||||
Index: gcc-4.8.2/gcc/config/sparc/linux64.h
|
||||
===================================================================
|
||||
--- gcc-4.8.2.orig/gcc/config/sparc/linux64.h 2014-05-06 10:34:51.081657377 +0000
|
||||
+++ gcc-4.8.2/gcc/config/sparc/linux64.h 2014-05-06 10:34:51.077657377 +0000
|
||||
@@ -92,8 +92,8 @@
|
||||
When the -shared link option is used a final link is not being
|
||||
done. */
|
||||
|
||||
@@ -185,6 +185,22 @@ index 7d48e96..b01993f 100644
|
||||
|
||||
#ifdef SPARC_BI_ARCH
|
||||
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
Index: gcc-4.8.2/gcc/config/linux.h
|
||||
===================================================================
|
||||
--- gcc-4.8.2.orig/gcc/config/linux.h 2013-01-10 20:38:27.000000000 +0000
|
||||
+++ gcc-4.8.2/gcc/config/linux.h 2014-05-06 10:36:26.549656893 +0000
|
||||
@@ -73,10 +73,10 @@
|
||||
GLIBC_DYNAMIC_LINKER must be defined for each target using them, or
|
||||
GLIBC_DYNAMIC_LINKER32 and GLIBC_DYNAMIC_LINKER64 for targets
|
||||
supporting both 32-bit and 64-bit compilation. */
|
||||
-#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
|
||||
-#define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
|
||||
-#define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
|
||||
-#define UCLIBC_DYNAMIC_LINKERX32 "/lib/ldx32-uClibc.so.0"
|
||||
+#define UCLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-uClibc.so.0"
|
||||
+#define UCLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-uClibc.so.0"
|
||||
+#define UCLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld64-uClibc.so.0"
|
||||
+#define UCLIBC_DYNAMIC_LINKERX32 SYSTEMLIBS_DIR "ldx32-uClibc.so.0"
|
||||
#define BIONIC_DYNAMIC_LINKER "/system/bin/linker"
|
||||
#define BIONIC_DYNAMIC_LINKER32 "/system/bin/linker"
|
||||
#define BIONIC_DYNAMIC_LINKER64 "/system/bin/linker64"
|
||||
|
||||
@@ -83,15 +83,9 @@ do_configure_prepend () {
|
||||
echo "NATIVE_SYSTEM_HEADER_DIR = ${SYSTEMHEADERS}" > ${B}/gcc/t-oe
|
||||
cat ${S}/gcc/defaults.h | grep -v "\#endif.*GCC_DEFAULTS_H" > ${B}/gcc/defaults.h.new
|
||||
cat >>${B}/gcc/defaults.h.new <<_EOF
|
||||
#ifndef STANDARD_INCLUDE_DIR
|
||||
#define STANDARD_INCLUDE_DIR "${SYSTEMHEADERS}"
|
||||
#endif
|
||||
#ifndef STANDARD_STARTFILE_PREFIX_1
|
||||
#define NATIVE_SYSTEM_HEADER_DIR "${SYSTEMHEADERS}"
|
||||
#define STANDARD_STARTFILE_PREFIX_1 "${SYSTEMLIBS}"
|
||||
#endif
|
||||
#ifndef STANDARD_STARTFILE_PREFIX_2
|
||||
#define STANDARD_STARTFILE_PREFIX_2 "${SYSTEMLIBS1}"
|
||||
#endif
|
||||
#define SYSTEMLIBS_DIR "${SYSTEMLIBS}"
|
||||
#endif /* ! GCC_DEFAULTS_H */
|
||||
_EOF
|
||||
|
||||
@@ -26,7 +26,8 @@ python gcc_multilib_setup() {
|
||||
|
||||
bb.utils.remove(build_conf_dir, True)
|
||||
ml_globs = ('%s/*/t-linux64' % src_conf_dir,
|
||||
'%s/*/linux64.h' % src_conf_dir)
|
||||
'%s/*/linux64.h' % src_conf_dir,
|
||||
'%s/linux.h' % src_conf_dir)
|
||||
|
||||
# copy the target multilib config files to ${B}
|
||||
for ml_glob in ml_globs:
|
||||
@@ -93,6 +94,14 @@ python gcc_multilib_setup() {
|
||||
r'\1' + wrap_libdir(libdirx32) + r'\3'),
|
||||
(r'^(#define\s*GLIBC_DYNAMIC_LINKERN32\s*)(\S+)(\s*\".*\")$',
|
||||
r'\1' + wrap_libdir(libdirn32) + r'\3'),
|
||||
(r'^(#define\s*UCLIBC_DYNAMIC_LINKER32\s*)(\S+)(\s*\".*\")$',
|
||||
r'\1' + wrap_libdir(libdir32) + r'\3'),
|
||||
(r'^(#define\s*UCLIBC_DYNAMIC_LINKER64\s*)(\S+)(\s*\".*\")$',
|
||||
r'\1' + wrap_libdir(libdir64) + r'\3'),
|
||||
(r'^(#define\s*UCLIBC_DYNAMIC_LINKERN32\s*)(\S+)(\s*\".*\")$',
|
||||
r'\1' + wrap_libdir(libdirn32) + r'\3'),
|
||||
(r'^(#define\s*UCLIBC_DYNAMIC_LINKER\s*)(\S+)(\s*\".*\")$',
|
||||
r'\1' + wrap_libdir(libdir32) + r'\3'),
|
||||
]
|
||||
|
||||
for (i, line) in enumerate(filelines):
|
||||
|
||||
@@ -5,6 +5,7 @@ inherit python-dir
|
||||
|
||||
PACKAGECONFIG ??= ""
|
||||
PACKAGECONFIG[python] = "--with-python=${WORKDIR}/python,--without-python,python"
|
||||
PACKAGECONFIG[babeltrace] = "--with-babeltrace,--without-babeltrace,babeltrace"
|
||||
|
||||
do_configure_prepend() {
|
||||
if [ -n "${@base_contains('PACKAGECONFIG', 'python', 'python', '', d)}" ]; then
|
||||
|
||||
@@ -15,7 +15,8 @@ EXTRA_OECONF = "--with-perl=${STAGING_BINDIR_NATIVE}/perl-native/perl \
|
||||
|
||||
inherit autotools-brokensep perlnative
|
||||
|
||||
EXTRA_OEMAKE = "NO_PYTHON=1 RUNTIME_PREFIX=1"
|
||||
EXTRA_OEMAKE = "NO_PYTHON=1 RUNTIME_PREFIX=1 CFLAGS='${CFLAGS}' LDFLAGS='${LDFLAGS}'"
|
||||
EXTRA_OEMAKE_append_class-native = " NO_CROSS_DIRECTORY_HARDLINKS=1"
|
||||
|
||||
do_compile_prepend () {
|
||||
# Remove perl/perl.mak to fix the out-of-date perl.mak error
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user