yocto-bsp: add replace_file()

Add a function that can be used to replace a template file by a
user-specified file.  The initial use of this capability is to allow
users-specified defconfigs.

(From meta-yocto rev: b52a22d40d4701a9515490bdd31c8d0341fb12bc)

Signed-off-by: Tom Zanussi <tom.zanussi@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Tom Zanussi 2012-12-12 22:56:35 -06:00 committed by Richard Purdie
parent 205872b7b8
commit 125eb6f390
3 changed files with 17 additions and 4 deletions

View File

@ -38,6 +38,7 @@ from tags import *
import shlex
import json
import subprocess
import shutil
class Line():
"""
@ -83,7 +84,7 @@ class NormalLine(Line):
def gen(self, context = None):
if self.is_filename:
line = "of = open(\"" + os.path.join(self.out_filebase, self.escape(self.line)) + "\", \"w\")"
line = "current_file = \"" + os.path.join(self.out_filebase, self.escape(self.line)) + "\"; of = open(current_file, \"w\")"
elif self.is_dirname:
dirname = os.path.join(self.out_filebase, self.escape(self.line))
line = "if not os.path.exists(\"" + dirname + "\"): os.mkdir(\"" + dirname + "\")"
@ -134,7 +135,7 @@ class AssignmentLine(NormalLine):
idx = line.find(ASSIGN_TAG)
line = line[:idx] + replacement + line[idx + assignment.end - assignment.start:]
if self.is_filename:
return "of = open(\"" + os.path.join(self.out_filebase, line) + "\", \"w\")"
return "current_file = \"" + os.path.join(self.out_filebase, line) + "\"; of = open(current_file, \"w\")"
elif self.is_dirname:
dirname = os.path.join(self.out_filebase, line)
return "if not os.path.exists(\"" + dirname + "\"): os.mkdir(\"" + dirname + "\")"
@ -564,6 +565,17 @@ def get_verified_file(input_str, name, filename_can_be_null):
filename = default(raw_input(msg), name)
def replace_file(replace_this, with_this):
"""
Replace the given file with the contents of filename, retaining
the original filename.
"""
try:
shutil.copy(with_this, replace_this)
except IOError:
pass
def boolean(input_str, name):
"""
Return lowercase version of first char in string, or value in name.
@ -1197,7 +1209,7 @@ def gen_program_header_lines(program_lines):
"""
Generate any imports we need.
"""
pass
program_lines.append("current_file = \"\"")
def gen_supplied_property_vals(properties, program_lines):

View File

@ -2,3 +2,4 @@
# Placeholder for custom default kernel configuration. yocto-bsp will
# replace this file with a user-specified defconfig.
#
{{ if custom_kernel_defconfig: replace_file(current_file, custom_kernel_defconfig) }}

View File

@ -35,7 +35,7 @@ INDENT_STR = " "
BLANKLINE_STR = "of.write(\"\\n\")"
NORMAL_START = "of.write"
OPEN_START = "of = open"
OPEN_START = "current_file ="
INPUT_TYPE_PROPERTY = "type"