Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
Pull non-critical part of kbuild from Michal Marek: - New semantic patches, make coccicheck M= fix - make gtags speedup - make tags/TAGS always removes struct forward declarations - make deb-pkg fixes (some patches are still pending, I know) - scripts/patch-kernel fix from the last user of this script ;) * 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: scripts/patch-kernel: digest kernel.org hosted .xz patches scripts/coccinelle/api/ptr_ret.cocci: semantic patch for ptr_err scripts: refactor remove structure forward declarations kbuild: incremental tags update for GNU Global coccinelle: semantic patch for bool issues coccinelle: semantic patch to check for PTR_ERR after reassignment coccinelle: semantic patch converting 0 test to null test coccinelle: semantic patch for missing iounmap coccinelle: semantic patch for missing clk_put kbuild: Fix out-of-tree build for 'make deb-pkg' kbuild: Only build linux-image package for UML kbuild: Fix link to headers in 'make deb-pkg' coccicheck: change handling of C={1,2} when M= is set
This commit is contained in:
Коммит
a7697b945e
|
@ -0,0 +1,70 @@
|
|||
///
|
||||
/// Use PTR_RET rather than if(IS_ERR(...)) + PTR_ERR
|
||||
///
|
||||
// Confidence: High
|
||||
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Options: -no_includes -include_headers
|
||||
//
|
||||
// Keywords: ERR_PTR, PTR_ERR, PTR_RET
|
||||
// Version min: 2.6.39
|
||||
//
|
||||
|
||||
virtual context
|
||||
virtual patch
|
||||
virtual org
|
||||
virtual report
|
||||
|
||||
@depends on patch@
|
||||
expression ptr;
|
||||
@@
|
||||
|
||||
- if (IS_ERR(ptr)) return PTR_ERR(ptr); else return 0;
|
||||
+ return PTR_RET(ptr);
|
||||
|
||||
@depends on patch@
|
||||
expression ptr;
|
||||
@@
|
||||
|
||||
- if (IS_ERR(ptr)) return PTR_ERR(ptr); return 0;
|
||||
+ return PTR_RET(ptr);
|
||||
|
||||
@r1 depends on !patch@
|
||||
expression ptr;
|
||||
position p1;
|
||||
@@
|
||||
|
||||
* if@p1 (IS_ERR(ptr)) return PTR_ERR(ptr); else return 0;
|
||||
|
||||
@r2 depends on !patch@
|
||||
expression ptr;
|
||||
position p2;
|
||||
@@
|
||||
|
||||
* if@p2 (IS_ERR(ptr)) return PTR_ERR(ptr); return 0;
|
||||
|
||||
@script:python depends on org@
|
||||
p << r1.p1;
|
||||
@@
|
||||
|
||||
coccilib.org.print_todo(p[0], "WARNING: PTR_RET can be used")
|
||||
|
||||
|
||||
@script:python depends on org@
|
||||
p << r2.p2;
|
||||
@@
|
||||
|
||||
coccilib.org.print_todo(p[0], "WARNING: PTR_RET can be used")
|
||||
|
||||
@script:python depends on report@
|
||||
p << r1.p1;
|
||||
@@
|
||||
|
||||
coccilib.report.print_report(p[0], "WARNING: PTR_RET can be used")
|
||||
|
||||
@script:python depends on report@
|
||||
p << r2.p2;
|
||||
@@
|
||||
|
||||
coccilib.report.print_report(p[0], "WARNING: PTR_RET can be used")
|
|
@ -0,0 +1,67 @@
|
|||
/// Find missing clk_puts.
|
||||
///
|
||||
//# This only signals a missing clk_put when there is a clk_put later
|
||||
//# in the same function.
|
||||
//# False positives can be due to loops.
|
||||
//
|
||||
// Confidence: Moderate
|
||||
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Comments:
|
||||
// Options:
|
||||
|
||||
virtual context
|
||||
virtual org
|
||||
virtual report
|
||||
|
||||
@clk@
|
||||
expression e;
|
||||
statement S,S1;
|
||||
int ret;
|
||||
position p1,p2,p3;
|
||||
@@
|
||||
|
||||
e = clk_get@p1(...)
|
||||
... when != clk_put(e)
|
||||
if (<+...e...+>) S
|
||||
... when any
|
||||
when != clk_put(e)
|
||||
when != if (...) { ... clk_put(e); ... }
|
||||
(
|
||||
if (ret == 0) S1
|
||||
|
|
||||
if (...)
|
||||
{ ...
|
||||
return 0; }
|
||||
|
|
||||
if (...)
|
||||
{ ...
|
||||
return <+...e...+>; }
|
||||
|
|
||||
*if@p2 (...)
|
||||
{ ... when != clk_put(e)
|
||||
when forall
|
||||
return@p3 ...; }
|
||||
)
|
||||
... when any
|
||||
clk_put(e);
|
||||
|
||||
@script:python depends on org@
|
||||
p1 << clk.p1;
|
||||
p2 << clk.p2;
|
||||
p3 << clk.p3;
|
||||
@@
|
||||
|
||||
cocci.print_main("clk_get",p1)
|
||||
cocci.print_secs("if",p2)
|
||||
cocci.print_secs("needed clk_put",p3)
|
||||
|
||||
@script:python depends on report@
|
||||
p1 << clk.p1;
|
||||
p2 << clk.p2;
|
||||
p3 << clk.p3;
|
||||
@@
|
||||
|
||||
msg = "ERROR: missing clk_put; clk_get on line %s and execution via conditional on line %s" % (p1[0].line,p2[0].line)
|
||||
coccilib.report.print_report(p3[0],msg)
|
|
@ -0,0 +1,67 @@
|
|||
/// Find missing iounmaps.
|
||||
///
|
||||
//# This only signals a missing iounmap when there is an iounmap later
|
||||
//# in the same function.
|
||||
//# False positives can be due to loops.
|
||||
//
|
||||
// Confidence: Moderate
|
||||
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Comments:
|
||||
// Options:
|
||||
|
||||
virtual context
|
||||
virtual org
|
||||
virtual report
|
||||
|
||||
@iom@
|
||||
expression e;
|
||||
statement S,S1;
|
||||
int ret;
|
||||
position p1,p2,p3;
|
||||
@@
|
||||
|
||||
e = \(ioremap@p1\|ioremap_nocache@p1\)(...)
|
||||
... when != iounmap(e)
|
||||
if (<+...e...+>) S
|
||||
... when any
|
||||
when != iounmap(e)
|
||||
when != if (...) { ... iounmap(e); ... }
|
||||
(
|
||||
if (ret == 0) S1
|
||||
|
|
||||
if (...)
|
||||
{ ...
|
||||
return 0; }
|
||||
|
|
||||
if (...)
|
||||
{ ...
|
||||
return <+...e...+>; }
|
||||
|
|
||||
*if@p2 (...)
|
||||
{ ... when != iounmap(e)
|
||||
when forall
|
||||
return@p3 ...; }
|
||||
)
|
||||
... when any
|
||||
iounmap(e);
|
||||
|
||||
@script:python depends on org@
|
||||
p1 << iom.p1;
|
||||
p2 << iom.p2;
|
||||
p3 << iom.p3;
|
||||
@@
|
||||
|
||||
cocci.print_main("ioremap",p1)
|
||||
cocci.print_secs("if",p2)
|
||||
cocci.print_secs("needed iounmap",p3)
|
||||
|
||||
@script:python depends on report@
|
||||
p1 << iom.p1;
|
||||
p2 << iom.p2;
|
||||
p3 << iom.p3;
|
||||
@@
|
||||
|
||||
msg = "ERROR: missing iounmap; ioremap on line %s and execution via conditional on line %s" % (p1[0].line,p2[0].line)
|
||||
coccilib.report.print_report(p3[0],msg)
|
|
@ -0,0 +1,178 @@
|
|||
/// Bool initializations should use true and false. Bool tests don't need
|
||||
/// comparisons. Based on contributions from Joe Perches, Rusty Russell
|
||||
/// and Bruce W Allan.
|
||||
///
|
||||
// Confidence: High
|
||||
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Options: -include_headers
|
||||
|
||||
virtual patch
|
||||
virtual context
|
||||
virtual org
|
||||
virtual report
|
||||
|
||||
@depends on patch@
|
||||
bool t;
|
||||
symbol true;
|
||||
symbol false;
|
||||
@@
|
||||
|
||||
(
|
||||
- t == true
|
||||
+ t
|
||||
|
|
||||
- true == t
|
||||
+ t
|
||||
|
|
||||
- t != true
|
||||
+ !t
|
||||
|
|
||||
- true != t
|
||||
+ !t
|
||||
|
|
||||
- t == false
|
||||
+ !t
|
||||
|
|
||||
- false == t
|
||||
+ !t
|
||||
|
|
||||
- t != false
|
||||
+ t
|
||||
|
|
||||
- false != t
|
||||
+ t
|
||||
)
|
||||
|
||||
@depends on patch disable is_zero, isnt_zero@
|
||||
bool t;
|
||||
@@
|
||||
|
||||
(
|
||||
- t == 1
|
||||
+ t
|
||||
|
|
||||
- t != 1
|
||||
+ !t
|
||||
|
|
||||
- t == 0
|
||||
+ !t
|
||||
|
|
||||
- t != 0
|
||||
+ t
|
||||
)
|
||||
|
||||
@depends on patch@
|
||||
bool b;
|
||||
@@
|
||||
(
|
||||
b =
|
||||
- 0
|
||||
+ false
|
||||
|
|
||||
b =
|
||||
- 1
|
||||
+ true
|
||||
)
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
@r1 depends on !patch@
|
||||
bool t;
|
||||
position p;
|
||||
@@
|
||||
|
||||
(
|
||||
* t@p == true
|
||||
|
|
||||
* true == t@p
|
||||
|
|
||||
* t@p != true
|
||||
|
|
||||
* true != t@p
|
||||
|
|
||||
* t@p == false
|
||||
|
|
||||
* false == t@p
|
||||
|
|
||||
* t@p != false
|
||||
|
|
||||
* false != t@p
|
||||
)
|
||||
|
||||
@r2 depends on !patch disable is_zero, isnt_zero@
|
||||
bool t;
|
||||
position p;
|
||||
@@
|
||||
|
||||
(
|
||||
* t@p == 1
|
||||
|
|
||||
* t@p != 1
|
||||
|
|
||||
* t@p == 0
|
||||
|
|
||||
* t@p != 0
|
||||
)
|
||||
|
||||
@r3 depends on !patch@
|
||||
bool b;
|
||||
position p1,p2;
|
||||
constant c;
|
||||
@@
|
||||
(
|
||||
*b@p1 = 0
|
||||
|
|
||||
*b@p1 = 1
|
||||
|
|
||||
*b@p2 = c
|
||||
)
|
||||
|
||||
@script:python depends on org@
|
||||
p << r1.p;
|
||||
@@
|
||||
|
||||
cocci.print_main("WARNING: Comparison to bool",p)
|
||||
|
||||
@script:python depends on org@
|
||||
p << r2.p;
|
||||
@@
|
||||
|
||||
cocci.print_main("WARNING: Comparison of bool to 0/1",p)
|
||||
|
||||
@script:python depends on org@
|
||||
p1 << r3.p1;
|
||||
@@
|
||||
|
||||
cocci.print_main("WARNING: Assignment of bool to 0/1",p1)
|
||||
|
||||
@script:python depends on org@
|
||||
p2 << r3.p2;
|
||||
@@
|
||||
|
||||
cocci.print_main("ERROR: Assignment of bool to non-0/1 constant",p2)
|
||||
|
||||
@script:python depends on report@
|
||||
p << r1.p;
|
||||
@@
|
||||
|
||||
coccilib.report.print_report(p[0],"WARNING: Comparison to bool")
|
||||
|
||||
@script:python depends on report@
|
||||
p << r2.p;
|
||||
@@
|
||||
|
||||
coccilib.report.print_report(p[0],"WARNING: Comparison of bool to 0/1")
|
||||
|
||||
@script:python depends on report@
|
||||
p1 << r3.p1;
|
||||
@@
|
||||
|
||||
coccilib.report.print_report(p1[0],"WARNING: Assignment of bool to 0/1")
|
||||
|
||||
@script:python depends on report@
|
||||
p2 << r3.p2;
|
||||
@@
|
||||
|
||||
coccilib.report.print_report(p2[0],"ERROR: Assignment of bool to non-0/1 constant")
|
|
@ -0,0 +1,41 @@
|
|||
/// PTR_ERR should be applied before its argument is reassigned, typically
|
||||
/// to NULL
|
||||
///
|
||||
// Confidence: High
|
||||
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Comments:
|
||||
// Options: -no_includes -include_headers
|
||||
|
||||
virtual org
|
||||
virtual report
|
||||
virtual context
|
||||
|
||||
@r exists@
|
||||
expression e,e1;
|
||||
constant c;
|
||||
position p1,p2;
|
||||
@@
|
||||
|
||||
*e@p1 = c
|
||||
... when != e = e1
|
||||
when != &e
|
||||
when != true IS_ERR(e)
|
||||
*PTR_ERR@p2(e)
|
||||
|
||||
@script:python depends on org@
|
||||
p1 << r.p1;
|
||||
p2 << r.p2;
|
||||
@@
|
||||
|
||||
cocci.print_main("PTR_ERR",p2)
|
||||
cocci.print_secs("assignment",p1)
|
||||
|
||||
@script:python depends on report@
|
||||
p1 << r.p1;
|
||||
p2 << r.p2;
|
||||
@@
|
||||
|
||||
msg = "ERROR: PTR_ERR applied after initialization to constant on line %s" % (p1[0].line)
|
||||
coccilib.report.print_report(p2[0],msg)
|
|
@ -0,0 +1,237 @@
|
|||
/// Compare pointer-typed values to NULL rather than 0
|
||||
///
|
||||
//# This makes an effort to choose between !x and x == NULL. !x is used
|
||||
//# if it has previously been used with the function used to initialize x.
|
||||
//# This relies on type information. More type information can be obtained
|
||||
//# using the option -all_includes and the option -I to specify an
|
||||
//# include path.
|
||||
//
|
||||
// Confidence: High
|
||||
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Comments:
|
||||
// Options:
|
||||
|
||||
virtual patch
|
||||
virtual context
|
||||
virtual org
|
||||
virtual report
|
||||
|
||||
@initialize:ocaml@
|
||||
let negtable = Hashtbl.create 101
|
||||
|
||||
@depends on patch@
|
||||
expression *E;
|
||||
identifier f;
|
||||
@@
|
||||
|
||||
(
|
||||
(E = f(...)) ==
|
||||
- 0
|
||||
+ NULL
|
||||
|
|
||||
(E = f(...)) !=
|
||||
- 0
|
||||
+ NULL
|
||||
|
|
||||
- 0
|
||||
+ NULL
|
||||
== (E = f(...))
|
||||
|
|
||||
- 0
|
||||
+ NULL
|
||||
!= (E = f(...))
|
||||
)
|
||||
|
||||
|
||||
@t1 depends on !patch@
|
||||
expression *E;
|
||||
identifier f;
|
||||
position p;
|
||||
@@
|
||||
|
||||
(
|
||||
(E = f(...)) ==
|
||||
* 0@p
|
||||
|
|
||||
(E = f(...)) !=
|
||||
* 0@p
|
||||
|
|
||||
* 0@p
|
||||
== (E = f(...))
|
||||
|
|
||||
* 0@p
|
||||
!= (E = f(...))
|
||||
)
|
||||
|
||||
@script:python depends on org@
|
||||
p << t1.p;
|
||||
@@
|
||||
|
||||
coccilib.org.print_todo(p[0], "WARNING comparing pointer to 0")
|
||||
|
||||
@script:python depends on report@
|
||||
p << t1.p;
|
||||
@@
|
||||
|
||||
coccilib.report.print_report(p[0], "WARNING comparing pointer to 0")
|
||||
|
||||
// Tests of returned values
|
||||
|
||||
@s@
|
||||
identifier f;
|
||||
expression E,E1;
|
||||
@@
|
||||
|
||||
E = f(...)
|
||||
... when != E = E1
|
||||
!E
|
||||
|
||||
@script:ocaml depends on s@
|
||||
f << s.f;
|
||||
@@
|
||||
|
||||
try let _ = Hashtbl.find negtable f in ()
|
||||
with Not_found -> Hashtbl.add negtable f ()
|
||||
|
||||
@ r disable is_zero,isnt_zero exists @
|
||||
expression *E;
|
||||
identifier f;
|
||||
@@
|
||||
|
||||
E = f(...)
|
||||
...
|
||||
(E == 0
|
||||
|E != 0
|
||||
|0 == E
|
||||
|0 != E
|
||||
)
|
||||
|
||||
@script:ocaml@
|
||||
f << r.f;
|
||||
@@
|
||||
|
||||
try let _ = Hashtbl.find negtable f in ()
|
||||
with Not_found -> include_match false
|
||||
|
||||
// This rule may lead to inconsistent path problems, if E is defined in two
|
||||
// places
|
||||
@ depends on patch disable is_zero,isnt_zero @
|
||||
expression *E;
|
||||
expression E1;
|
||||
identifier r.f;
|
||||
@@
|
||||
|
||||
E = f(...)
|
||||
<...
|
||||
(
|
||||
- E == 0
|
||||
+ !E
|
||||
|
|
||||
- E != 0
|
||||
+ E
|
||||
|
|
||||
- 0 == E
|
||||
+ !E
|
||||
|
|
||||
- 0 != E
|
||||
+ E
|
||||
)
|
||||
...>
|
||||
?E = E1
|
||||
|
||||
@t2 depends on !patch disable is_zero,isnt_zero @
|
||||
expression *E;
|
||||
expression E1;
|
||||
identifier r.f;
|
||||
position p1;
|
||||
position p2;
|
||||
@@
|
||||
|
||||
E = f(...)
|
||||
<...
|
||||
(
|
||||
* E == 0@p1
|
||||
|
|
||||
* E != 0@p2
|
||||
|
|
||||
* 0@p1 == E
|
||||
|
|
||||
* 0@p1 != E
|
||||
)
|
||||
...>
|
||||
?E = E1
|
||||
|
||||
@script:python depends on org@
|
||||
p << t2.p1;
|
||||
@@
|
||||
|
||||
coccilib.org.print_todo(p[0], "WARNING comparing pointer to 0, suggest !E")
|
||||
|
||||
@script:python depends on org@
|
||||
p << t2.p2;
|
||||
@@
|
||||
|
||||
coccilib.org.print_todo(p[0], "WARNING comparing pointer to 0")
|
||||
|
||||
@script:python depends on report@
|
||||
p << t2.p1;
|
||||
@@
|
||||
|
||||
coccilib.report.print_report(p[0], "WARNING comparing pointer to 0, suggest !E")
|
||||
|
||||
@script:python depends on report@
|
||||
p << t2.p2;
|
||||
@@
|
||||
|
||||
coccilib.report.print_report(p[0], "WARNING comparing pointer to 0")
|
||||
|
||||
@ depends on patch disable is_zero,isnt_zero @
|
||||
expression *E;
|
||||
@@
|
||||
|
||||
(
|
||||
E ==
|
||||
- 0
|
||||
+ NULL
|
||||
|
|
||||
E !=
|
||||
- 0
|
||||
+ NULL
|
||||
|
|
||||
- 0
|
||||
+ NULL
|
||||
== E
|
||||
|
|
||||
- 0
|
||||
+ NULL
|
||||
!= E
|
||||
)
|
||||
|
||||
@ t3 depends on !patch disable is_zero,isnt_zero @
|
||||
expression *E;
|
||||
position p;
|
||||
@@
|
||||
|
||||
(
|
||||
* E == 0@p
|
||||
|
|
||||
* E != 0@p
|
||||
|
|
||||
* 0@p == E
|
||||
|
|
||||
* 0@p != E
|
||||
)
|
||||
|
||||
@script:python depends on org@
|
||||
p << t3.p;
|
||||
@@
|
||||
|
||||
coccilib.org.print_todo(p[0], "WARNING comparing pointer to 0")
|
||||
|
||||
@script:python depends on report@
|
||||
p << t3.p;
|
||||
@@
|
||||
|
||||
coccilib.report.print_report(p[0], "WARNING comparing pointer to 0")
|
|
@ -97,6 +97,7 @@ mkdir -m 755 -p "$libc_headers_dir/DEBIAN"
|
|||
mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
|
||||
mkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
|
||||
mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
|
||||
mkdir -p "$kernel_headers_dir/lib/modules/$version/"
|
||||
if [ "$ARCH" = "um" ] ; then
|
||||
mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
|
||||
fi
|
||||
|
@ -120,15 +121,19 @@ else
|
|||
fi
|
||||
|
||||
if grep -q '^CONFIG_MODULES=y' .config ; then
|
||||
INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install
|
||||
INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install
|
||||
rm -f "$tmpdir/lib/modules/$version/build"
|
||||
rm -f "$tmpdir/lib/modules/$version/source"
|
||||
if [ "$ARCH" = "um" ] ; then
|
||||
mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
|
||||
rmdir "$tmpdir/lib/modules/$version"
|
||||
fi
|
||||
fi
|
||||
|
||||
make headers_check
|
||||
make headers_install INSTALL_HDR_PATH="$libc_headers_dir/usr"
|
||||
if [ "$ARCH" != "um" ]; then
|
||||
$MAKE headers_check KBUILD_SRC=
|
||||
$MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr"
|
||||
fi
|
||||
|
||||
# Install the maintainer scripts
|
||||
# Note: hook scripts under /etc/kernel are also executed by official Debian
|
||||
|
@ -245,6 +250,7 @@ destdir=$kernel_headers_dir/usr/src/linux-headers-$version
|
|||
mkdir -p "$destdir"
|
||||
(cd $srctree; tar -c -f - -T "$objtree/debian/hdrsrcfiles") | (cd $destdir; tar -xf -)
|
||||
(cd $objtree; tar -c -f - -T "$objtree/debian/hdrobjfiles") | (cd $destdir; tar -xf -)
|
||||
ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
|
||||
rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
|
||||
arch=$(dpkg --print-architecture)
|
||||
|
||||
|
@ -259,8 +265,6 @@ Description: Linux kernel headers for $KERNELRELEASE on $arch
|
|||
This is useful for people who need to build external modules
|
||||
EOF
|
||||
|
||||
create_package "$kernel_headers_packagename" "$kernel_headers_dir"
|
||||
|
||||
# Do we have firmware? Move it out of the way and build it into a package.
|
||||
if [ -e "$tmpdir/lib/firmware" ]; then
|
||||
mv "$tmpdir/lib/firmware" "$fwdir/lib/"
|
||||
|
@ -287,7 +291,11 @@ Description: Linux support headers for userspace development
|
|||
are used by the installed headers for GNU glibc and other system libraries.
|
||||
EOF
|
||||
|
||||
create_package "$libc_headers_packagename" "$libc_headers_dir"
|
||||
if [ "$ARCH" != "um" ]; then
|
||||
create_package "$kernel_headers_packagename" "$kernel_headers_dir"
|
||||
create_package "$libc_headers_packagename" "$libc_headers_dir"
|
||||
fi
|
||||
|
||||
create_package "$packagename" "$tmpdir"
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -116,6 +116,10 @@ findFile () {
|
|||
ext=".bz2"
|
||||
name="bzip2"
|
||||
uncomp="bunzip2 -dc"
|
||||
elif [ -r ${filebase}.xz ]; then
|
||||
ext=".xz"
|
||||
name="xz"
|
||||
uncomp="xz -dc"
|
||||
elif [ -r ${filebase}.zip ]; then
|
||||
ext=".zip"
|
||||
name="zip"
|
||||
|
|
|
@ -116,7 +116,7 @@ docscope()
|
|||
|
||||
dogtags()
|
||||
{
|
||||
all_sources | gtags -f -
|
||||
all_sources | gtags -i -f -
|
||||
}
|
||||
|
||||
exuberant()
|
||||
|
@ -166,9 +166,6 @@ exuberant()
|
|||
all_defconfigs | xargs -r $1 -a \
|
||||
--langdef=dotconfig --language-force=dotconfig \
|
||||
--regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'
|
||||
|
||||
# Remove structure forward declarations.
|
||||
LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' tags
|
||||
}
|
||||
|
||||
emacs()
|
||||
|
@ -233,6 +230,7 @@ if [ "${ARCH}" = "um" ]; then
|
|||
fi
|
||||
fi
|
||||
|
||||
remove_structs=
|
||||
case "$1" in
|
||||
"cscope")
|
||||
docscope
|
||||
|
@ -245,10 +243,17 @@ case "$1" in
|
|||
"tags")
|
||||
rm -f tags
|
||||
xtags ctags
|
||||
remove_structs=y
|
||||
;;
|
||||
|
||||
"TAGS")
|
||||
rm -f TAGS
|
||||
xtags etags
|
||||
remove_structs=y
|
||||
;;
|
||||
esac
|
||||
|
||||
# Remove structure forward declarations.
|
||||
if [ -n $remove_structs ]; then
|
||||
LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' $1
|
||||
fi
|
||||
|
|
Загрузка…
Ссылка в новой задаче