Author: pawelz Date: Sun Feb 14 19:22:49 2010 GMT Module: packages Tag: HEAD ---- Log message: - initial, based on kernel-vanilla.s...@auto-th-kernel-vanilla-2_6_31_5-2 - it builds on x86_64 - NOT TESTED
---- Files affected: packages/kernel-xen0: kernel-config-update.py (NONE -> 1.1) (NEW), kernel-config.py (NONE -> 1.1) (NEW), kernel-multiarch.make (NONE -> 1.1) (NEW), kernel-xen0-config.h (NONE -> 1.1) (NEW), kernel-xen0-module-build.pl (NONE -> 1.1) (NEW), kernel-xen0-no-preempt-nort.config (NONE -> 1.1) (NEW), kernel-xen0-preempt-nort.config (NONE -> 1.1) (NEW), kernel-xen0.spec (NONE -> 1.1) (NEW) ---- Diffs: ================================================================ Index: packages/kernel-xen0/kernel-config-update.py diff -u /dev/null packages/kernel-xen0/kernel-config-update.py:1.1 --- /dev/null Sun Feb 14 20:22:49 2010 +++ packages/kernel-xen0/kernel-config-update.py Sun Feb 14 20:22:43 2010 @@ -0,0 +1,214 @@ +#!/usr/bin/python + +# Update kernel.conf based on kernel .config file +# [email protected] +# [email protected] + +import sys +import re +from UserDict import UserDict + +if len(sys.argv) != 4: + print "Usage: %s target_arch kernel.conf .config" % sys.argv[0] + sys.exit(1) + +arch = sys.argv[1] +kernelconf = sys.argv[2] +dotconfig = sys.argv[3] + +# odict (Ordered Dict) from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747 +class odict(UserDict): + def __init__(self, dict = None): + self._keys = [] + UserDict.__init__(self, dict) + + def __delitem__(self, key): + UserDict.__delitem__(self, key) + self._keys.remove(key) + + def __setitem__(self, key, item): + UserDict.__setitem__(self, key, item) + if key not in self._keys: self._keys.append(key) + + def clear(self): + UserDict.clear(self) + self._keys = [] + + def copy(self): + dict = UserDict.copy(self) + dict._keys = self._keys[:] + return dict + + def items(self): + return zip(self._keys, self.values()) + + def keys(self): + return self._keys + + def popitem(self): + try: + key = self._keys[-1] + except IndexError: + raise KeyError('dictionary is empty') + + val = self[key] + del self[key] + + return (key, val) + + def setdefault(self, key, failobj = None): + UserDict.setdefault(self, key, failobj) + if key not in self._keys: self._keys.append(key) + + def update(self, dict): + UserDict.update(self, dict) + for key in dict.keys(): + if key not in self._keys: self._keys.append(key) + + def values(self): + return map(self.get, self._keys) + +dict = odict() + +rc = 0 +f = open(kernelconf, 'r') +i = 0; +allarch = {} +for l in f: + if l[:6] == 'CONFIG_': + sys.stderr.write("Omit CONFIG_ when specifing symbol name: %s\n" % l) + rc = 1 + continue + + if re.match('^#', l) or re.match('^\s*$', l): + dict[i] = l.strip() + i = i + 1 + continue + + if not re.match('^[0-9A-Z]+', l): + sys.stderr.write("Unknown line: %s\n" % l) + rc = 1 + continue + + c = l.strip().split() + symbol = c[0] + + # inline symbol: for current arch, may override config one + if symbol.find('=') > 0: + (symbol, value) = symbol.split('=') + + if not dict.has_key(symbol): + dict[symbol] = odict() + + dict[symbol][arch] = value + continue + + if dict.has_key(symbol): + sys.stderr.write("Duplicate symbol: %s\n" % symbol) + rc = 1 + continue + + dict[symbol] = odict() + for item in c[1:]: + (key, value) = item.split('=') + if not allarch.has_key(key): + allarch[key] = 1 + dict[symbol][key] = value + +# sys.stderr.write("Add symbol: %s=%s\n" % (symbol, dict[symbol])) + +f.close() + +# not really an arch :) +if allarch.has_key('all'): + del allarch['all'] + +if not rc == 0: + sys.exit(1) + +# read keys from .config +f = open(dotconfig, 'r') +dotdict = {} +for l in f: + # 'y'es, 'm'odule and string, numeric values + m = re.match("^CONFIG_(.*)=(.*)$", l) + if not m == None: + symbol = m.group(1) + value = m.group(2) + else: + # no values + m = re.match("^# CONFIG_(.*) is not set$", l) + if not m == None: + symbol = m.group(1) + value = "n" + # other irrelevant data + if m == None: + continue + + dotdict[symbol] = value +# sys.stderr.write("Add .config symbol: %s=%s\n" % (symbol, dotdict[symbol])) + +f.close() + +dict[i] = "" +i += 1 +dict[i] = "#" +i += 1 +dict[i] = "# New symbols" +i += 1 +dict[i] = "#" +i += 1 + +# compare kernel.conf and .config +# add new items to kernel.conf +for symbol in dotdict.keys(): + value = dotdict[symbol] + if dict.has_key(symbol): + c = dict[symbol] + + # if we have arch key, we use regardless there's 'all' present + if c.has_key(arch): + c[arch] = value + elif c.has_key('all') and c['all'] != value: + # new value from this arch + c[arch] = value + elif not c.has_key('all'): + # symbol present in config.conf, but without our arch, add our value + c[arch] = value + + dict[symbol] = c + else: + # new symbol gets by default assigned to 'all' + c = {} + c['all'] = value + dict[symbol] = c +f.close() + +# printout time +for symbol in dict.keys(): + c = dict[symbol] +# sys.stderr.write("s=%s, c=%s\n" % (type(symbol), type(c))) + if type(symbol) == int: + # comments + print c + continue + + # go over symbols which no longer present in .config + # and remove from our arch. + if not dotdict.has_key(symbol): + c = dict[symbol] + if c.has_key('all') or c.has_key(arch): + c[arch] = '' + + # blacklist + # TODO: use some list here instead + if symbol == "LOCALVERSION": + # .specs updates this + continue + + # join arch=value back into string + s = '' + for k in c.keys(): + s += ' %s=%s' % (k, c[k]) + + print "%s %s" % (symbol, s.strip()) ================================================================ Index: packages/kernel-xen0/kernel-config.py diff -u /dev/null packages/kernel-xen0/kernel-config.py:1.1 --- /dev/null Sun Feb 14 20:22:49 2010 +++ packages/kernel-xen0/kernel-config.py Sun Feb 14 20:22:43 2010 @@ -0,0 +1,182 @@ +#!/usr/bin/python + +# Generate kernel .config file based on special kernel.conf rules file. +# [email protected] +# [email protected] + +import sys +import re + +argc = len(sys.argv) +if argc < 4 or argc > 5: + print "Usage: %s target_arch kernel.conf input-config [output-config]" % sys.argv[0] + sys.exit(1) + +arch = sys.argv[1] +kernelconfig = sys.argv[2] +inconfig = sys.argv[3] +if argc == 5: + outconfig = sys.argv[4] +else: + outconfig = inconfig + +from UserDict import UserDict + +# odict from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747 +class odict(UserDict): + def __init__(self, dict = None): + self._keys = [] + UserDict.__init__(self, dict) + + def __delitem__(self, key): + UserDict.__delitem__(self, key) + self._keys.remove(key) + + def __setitem__(self, key, item): + UserDict.__setitem__(self, key, item) + if key not in self._keys: self._keys.append(key) + + def clear(self): + UserDict.clear(self) + self._keys = [] + + def copy(self): + dict = UserDict.copy(self) + dict._keys = self._keys[:] + return dict + + def items(self): + return zip(self._keys, self.values()) + + def keys(self): + return self._keys + + def popitem(self): + try: + key = self._keys[-1] + except IndexError: + raise KeyError('dictionary is empty') + + val = self[key] + del self[key] + + return (key, val) + + def setdefault(self, key, failobj = None): + UserDict.setdefault(self, key, failobj) + if key not in self._keys: self._keys.append(key) + + def update(self, dict): + UserDict.update(self, dict) + for key in dict.keys(): + if key not in self._keys: self._keys.append(key) + + def values(self): + return map(self.get, self._keys) + +dict = odict() + +rc = 0 +f = open(kernelconfig, 'r') +for l in f: + if l[:6] == 'CONFIG_': + print "Omit CONFIG_ when specifing symbol name: %s" % l + rc = 1 + continue + + if re.match('^#', l) or re.match('^\s*$', l): + continue + + if not re.match('^[0-9A-Z]+', l): + print "Unknown line: %s" % l + rc = 1 + continue + + c = l.strip().split() + symbol = c[0] + if dict.has_key(symbol): + print "Duplicate symbol: %s" % symbol + rc = 1 + continue + + # inline symbols: for current arch, duplicates allowed + if symbol.find('=') > 0: + (symbol, value) = symbol.split('=') + # empty value means delete the symbol + if value == "": + if dict.has_key(symbol): + del dict[symbol] + else: + dict[symbol] = value + continue + + hash = {} + for item in c[1:]: + try: + try: + (key, value) = item.split('=') + hash[key] = value + except ValueError: + print "Invalid line: %s" % l.strip() + err = 1 + continue + except IndexError: + print "Invalid line: %s" % l.strip() + err = 1 + continue + + if len(hash) == 0: + print "Bad line: %s" % l + rc = 1 + + # take arch line, otherwise fallback to 'all' + if hash.has_key(arch): + # allow empty value to skip symbol on this arch + if not hash[arch] == "": + dict[symbol] = hash[arch] + else: + if hash.has_key('all'): + dict[symbol] = hash['all'] + +f.close() + +if not rc == 0: + sys.exit(1) + +f = open(inconfig, 'r') +cfg = f.read() +f.close() + +rc = 0 +cfg += '\n# PLD configs\n' +for symbol in dict.items(): + (key, val) = symbol + + # strip contents + rp = re.compile("^CONFIG_%s=.*$" % key, re.MULTILINE) + cfg = rp.sub("", cfg) + rp = re.compile("^# CONFIG_%s is not set$" % key, re.MULTILINE) + cfg = rp.sub("", cfg) + + if val == "y": + cfg += "CONFIG_%s=y\n" % key + elif val == "m": + cfg += "CONFIG_%s=m\n" % key + elif val == "n": + cfg += "# CONFIG_%s is not set\n" % key + elif re.compile('^"[^"]*"$').match(val): + cfg += "CONFIG_%s=%s\n" % (key, val) + elif re.compile('^-?[0-9]+$').match(val): + cfg += "CONFIG_%s=%s\n" % (key, val) + elif re.compile('^0x[0-9A-Fa-f]+$').match(val): + cfg += "CONFIG_%s=%s\n" % (key, val) + else: + print "Unknown value [%s] for key: %s" % (val, key) + rc = 1 + +if not rc == 0: + sys.exit(rc) + +f = open(outconfig, 'w') +f.write(cfg) +f.close() ================================================================ Index: packages/kernel-xen0/kernel-multiarch.make diff -u /dev/null packages/kernel-xen0/kernel-multiarch.make:1.1 --- /dev/null Sun Feb 14 20:22:49 2010 +++ packages/kernel-xen0/kernel-multiarch.make Sun Feb 14 20:22:43 2010 @@ -0,0 +1,46 @@ +CONFIGS := +CONFIG_NODEP := +MAKE_OPTS := +PYTHON := python +SCRIPTSDIR := . + +include $(TARGETOBJ).mk + +DEFCONFIG := $(KERNELOUTPUT)/pld_defconfig +KCONFIG := $(KERNELOUTPUT)/.config + +kernel-config := $(SCRIPTSDIR)/kernel-config.py +kernel-config-update := $(SCRIPTSDIR)/kernel-config-update.py + +all := $(filter-out all Makefile,$(MAKECMDGOALS)) + +all: + $(MAKE) -C $(KERNELSRC) O=$(KERNELOUTPUT) $(MAKE_OPTS) $(all) + +$(KCONFIG): $(DEFCONFIG) + +pykconfig: $(KERNELOUTPUT)/kernel.conf + @echo ' $@ is up to date' + +$(KERNELOUTPUT)/kernel.conf: $(KCONFIG) $(kernel-config-update) + @echo ' kernel-config-update.py $(ARCH) $(KERNELOUTPUT)/.kernel.conf $< > $@' + $(Q)$(PYTHON) $(kernel-config-update) $(ARCH) $(KERNELOUTPUT)/.kernel.conf $< > .kernel.conf.tmp + $(Q)mv .kernel.conf.tmp $@ + +$(DEFCONFIG): $(KERNELOUTPUT)/.kernel.conf $(kernel-config) + @echo ' kernel-config.py $(ARCH) $< $@' + $(Q)> .defconfig.tmp + $(Q)$(PYTHON) $(kernel-config) $(ARCH) $< .defconfig.tmp + $(Q)mv .defconfig.tmp $@ + $(Q)ln -sf $@ $(KCONFIG) + +$(KERNELOUTPUT)/.kernel.conf: $(CONFIGS) $(KERNELOUTPUT)/.kernel-nodep.conf + $(Q)cat $^ > $@ + +$(KERNELOUTPUT)/.kernel-nodep.conf: $(CONFIG_NODEP) + $(Q)if [ ! -f $@ ] || ! cmp -s $< $@; then \ + echo ' cat $< > $@'; \ + cat $< > $@; \ + fi + +# vim:ft=make ================================================================ Index: packages/kernel-xen0/kernel-xen0-config.h diff -u /dev/null packages/kernel-xen0/kernel-xen0-config.h:1.1 --- /dev/null Sun Feb 14 20:22:49 2010 +++ packages/kernel-xen0/kernel-xen0-config.h Sun Feb 14 20:22:43 2010 @@ -0,0 +1,6 @@ +#ifndef _LINUX_CONFIG_H +#define _LINUX_CONFIG_H + +#include <linux/autoconf.h> + +#endif ================================================================ Index: packages/kernel-xen0/kernel-xen0-module-build.pl diff -u /dev/null packages/kernel-xen0/kernel-xen0-module-build.pl:1.1 --- /dev/null Sun Feb 14 20:22:49 2010 +++ packages/kernel-xen0/kernel-xen0-module-build.pl Sun Feb 14 20:22:43 2010 @@ -0,0 +1,38 @@ +#!/usr/bin/perl +# +use strict; +use warnings; +use File::Find qw(find); + +my $rpmdir = shift @ARGV or die; +my $fileoutdir = shift @ARGV or die; +my @tosort; + +find(\&wanted, "."); + +sub wanted { + return unless -f; + return unless /^Kconfig/ or /^Makefile/; + #return if /\.orig$/; + return if $File::Find::name =~ /(Documentation|scripts)/; + (my $file = $File::Find::name) =~ s#^\./##; + $file =~ m#^(.*)/#; + my $dir = $1 || ""; + my $subdir = ""; + foreach my $sub ( split( '/', $dir )) { + $subdir .= "/" . $sub; + push @tosort, "\%dir $rpmdir$subdir\n"; + } + push @tosort, "$rpmdir/$file\n"; +} + +my $last = ""; +my @toprint = grep {if ($_ ne $last) { $last = $_; 1} else {0}} sort @tosort; + +open F_OUT, "> $fileoutdir/aux_files" or die "Can't create aux_files: $!\n"; +print F_OUT @toprint; +close F_OUT and print "aux_files created\n"; + +open F_OUT, "> $fileoutdir/aux_files_exc" or die "Can't create aux_files_exc: $!\n"; +print F_OUT map {"\%exclude $_"} @toprint; +close F_OUT and print "aux_files_exc created\n"; ================================================================ Index: packages/kernel-xen0/kernel-xen0-no-preempt-nort.config diff -u /dev/null packages/kernel-xen0/kernel-xen0-no-preempt-nort.config:1.1 --- /dev/null Sun Feb 14 20:22:49 2010 +++ packages/kernel-xen0/kernel-xen0-no-preempt-nort.config Sun Feb 14 20:22:43 2010 @@ -0,0 +1,5 @@ +PREEMPT_NONE all=y alpha= sparc= +PREEMPT_VOLUNTARY all=n alpha= sparc= +PREEMPT all=n +PREEMPT_BKL all=n alpha= sparc= +DEBUG_MUTEXES all=n ================================================================ Index: packages/kernel-xen0/kernel-xen0-preempt-nort.config diff -u /dev/null packages/kernel-xen0/kernel-xen0-preempt-nort.config:1.1 --- /dev/null Sun Feb 14 20:22:49 2010 +++ packages/kernel-xen0/kernel-xen0-preempt-nort.config Sun Feb 14 20:22:43 2010 @@ -0,0 +1,6 @@ +PREEMPT_NONE all=n +PREEMPT_VOLUNTARY all=n +PREEMPT all=y +PREEMPT_BKL all=y ppc= +DEBUG_PREEMPT all=n +DEBUG_MUTEXES all=n ================================================================ Index: packages/kernel-xen0/kernel-xen0.spec diff -u /dev/null packages/kernel-xen0/kernel-xen0.spec:1.1 --- /dev/null Sun Feb 14 20:22:49 2010 +++ packages/kernel-xen0/kernel-xen0.spec Sun Feb 14 20:22:43 2010 @@ -0,0 +1,1011 @@ +# $Revision$, $Date$ +# +# TODO: +# - test it +# +# 2.6.30 status: +# - builds x86_64 +# +# Conditional build: +%bcond_without source # don't build kernel-source package +%bcond_with noarch # build noarch packages +%bcond_with verbose # verbose build (V=1) +%bcond_with pae # build PAE (HIGHMEM64G) support on uniprocessor +%bcond_with preempt-nort # build preemptable no realtime kernel + +%{?debug:%define with_verbose 1} + +%ifnarch %{ix86} +%undefine with_pae +%endif + +%if "%{_arch}" == "noarch" +%define with_noarch 1 +%endif + +%define have_isa 1 +%define have_oss 1 +%define have_pcmcia 1 +%define have_sound 1 +%define have_drm 1 + +%ifnarch %{ix86} alpha ppc +%define have_isa 0 +%endif +%ifarch sparc sparc64 +%define have_drm 0 +%define have_oss 0 +%define have_pcmcia 0 +%endif + +%define alt_kernel xen0 + +# kernel release (used in filesystem and eventually in uname -r) +# modules will be looked from /lib/modules/%{kernel_release} +# localversion is just that without version for "> localversion" +%define localversion %{rel} +%define kernel_release %{version}_%{alt_kernel}-%{localversion} +%define _kernelsrcdir /usr/src/linux-%{version}_%{alt_kernel} + +%define basever 2.6.30 +%define postver %{nil} +%define rel 0.1 <<Diff was trimmed, longer than 597 lines>> _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
