3 # Import a quilt tree into a kernel-linus package
6 # - Better spec parsing
7 # - Add directory contents sanity checks
9 # Luiz Fernando N. Capitulino
10 # <lcapitulino@mandriva.com.br>
13 from shutil
import copy
14 from tempfile
import NamedTemporaryFile
18 for line
in self
.patches
:
21 def consistence(self
):
22 for file in self
.patches
:
23 file = self
.series_dir
+ file
24 if os
.access(file, os
.R_OK
) is False:
29 series
= open(self
.series_file
)
30 contents
= series
.readlines()
35 if len(line
) == 0 or line
[0] == '#':
37 line
= line
.rstrip('# \n')
38 self
.patches
.append(line
)
40 def __init__(self
, dir_path
):
41 self
.series_dir
= dir_path
42 self
.series_file
= dir_path
+ 'series'
46 def __list_patches(self
, file, patches
):
47 file.write('\n# Patch listing created by klinus-series\n')
50 file.write('Patch%d: %s\n' % (count
, line
))
53 def __apply_patches(self
, file, first
, last
):
54 file.write('\n# Apply patches by klinus-series\n')
55 for i
in range(first
, last
):
56 file.write('%%patch%d -p1\n' % i
)
58 def copy_patches(self
, patches_dir
, patches
):
60 src
= patches_dir
+ '/' + file
61 copy(src
, self
.sources_dir
)
63 def spec_add_patches(self
, patches
):
64 spec
= open(self
.spec_file
)
65 contents
= spec
.readlines()
68 new_spec
= NamedTemporaryFile('w')
71 done_list
= done_apply
= False
73 if line
== '%endif\n':
78 if not done_list
and endif
== self
.list_mark
:
79 self
.__list
_patches
(new_spec
, patches
)
82 if not done_apply
and endif
== self
.apply_mark
:
83 last
= self
.icount
+ len(patches
)
84 self
.__apply
_patches
(new_spec
, self
.icount
, last
)
88 copy(new_spec
.name
, self
.spec_file
)
91 def __get_configs(self
):
93 for file in os
.listdir(self
.sources_dir
):
94 if file.find('.config') != -1:
95 configs
.append(os
.path
.basename(file))
98 def __get_arch(self
, name
):
99 index
= name
.find('-')
101 index
= name
.find('.')
104 def update_configs(self
):
105 configs
= self
.__get
_configs
()
107 cur_dir
= os
.getcwd()
108 os
.chdir(self
.rpm_dir
)
109 ret
= os
.system('bm -lp')
111 print 'ERROR: bm failed'
114 os
.chdir('BUILD/kernel-linus-i386/linux-2.6.24')
116 base
= '../../../SOURCES/'
117 arch
= self
.__get
_arch
(file)
118 copy(base
+ file, '.config')
119 ret
= os
.system('make -j16 oldconfig ARCH=' + arch
)
121 print 'ERROR: failed oldconfig for ' + file
123 copy('.config', base
+ file)
127 def __init__(self
, dir_path
):
128 self
.rpm_dir
= dir_path
129 self
.spec_file
= dir_path
+ '/SPECS/kernel-linus.spec'
130 self
.sources_dir
= dir_path
+ '/SOURCES/'
136 print 'usage: klinus-series < series-dir > < rpm-dir >'
139 if len(sys
.argv
) != 3:
143 if sys
.argv
[1] == '-h' or sys
.argv
[1] == '--help':
147 series_dir
= sys
.argv
[1]
148 rpm_dir
= sys
.argv
[2]
150 series
= SeriesFile(series_dir
)
152 if series
.consistence() is False:
153 print 'ERROR: series file is not consistent'
156 kernel
= KernelRpm(rpm_dir
)
157 kernel
.spec_add_patches(series
.patches
)
158 kernel
.copy_patches(series_dir
, series
.patches
)
159 kernel
.update_configs()
161 if __name__
== "__main__":