diff options
| author | aozima <[email protected]> | 2013-02-21 17:37:30 +0800 |
|---|---|---|
| committer | aozima <[email protected]> | 2013-02-21 17:37:30 +0800 |
| commit | 7bec8a242b87d7881b3c28d638db68c553d6d111 (patch) | |
| tree | 6adea942e9a9473e14f31100a6290a03a086198e /tools/codeblocks.py | |
| parent | d80888a194ee2af7f00982ee9d6409566b7ab5a3 (diff) | |
update scons: support C::B
Diffstat (limited to 'tools/codeblocks.py')
| -rw-r--r-- | tools/codeblocks.py | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/tools/codeblocks.py b/tools/codeblocks.py new file mode 100644 index 0000000000..f46f0f1f93 --- /dev/null +++ b/tools/codeblocks.py @@ -0,0 +1,108 @@ +import os +import sys +import string +import building + +import xml.etree.ElementTree as etree +from xml.etree.ElementTree import SubElement +from utils import _make_path_relative +from utils import xml_indent +fs_encoding = sys.getfilesystemencoding() + +def CB_AddHeadFiles(program, elem, project_path): + building.source_ext = [] + building.source_ext = ["h"] + for item in program: + building.walk_children(item) + building.source_list.sort() + # print building.source_list + + for f in building.source_list: + path = _make_path_relative(project_path, f) + Unit = SubElement(elem, 'Unit') + Unit.set('filename', path.decode(fs_encoding)) + +def CB_AddCFiles(ProjectFiles, parent, gname, files, project_path): + for f in files: + fn = f.rfile() + name = fn.name + path = os.path.dirname(fn.abspath) + + path = _make_path_relative(project_path, path) + path = os.path.join(path, name) + + Unit = SubElement(parent, 'Unit') + Unit.set('filename', path.decode(fs_encoding)) + Option = SubElement(Unit, 'Option') + Option.set('compilerVar', "CC") + +def CBProject(target, script, program): + project_path = os.path.dirname(os.path.abspath(target)) + + tree = etree.parse('template.cbp') + root = tree.getroot() + + out = file(target, 'wb') + out.write('<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>\n') + + ProjectFiles = [] + + # SECTION 1. add "*.c|*.h" files group + for elem in tree.iter(tag='Project'): + # print elem.tag, elem.attrib + break + # add c files + for group in script: + group_xml = CB_AddCFiles(ProjectFiles, elem, group['name'], group['src'], project_path) + # add h files + CB_AddHeadFiles(program, elem, project_path) + + # SECTION 2. + # write head include path + if building.Env.has_key('CPPPATH'): + cpp_path = building.Env['CPPPATH'] + paths = set() + for path in cpp_path: + inc = _make_path_relative(project_path, os.path.normpath(path)) + paths.add(inc) #.replace('\\', '/') + + paths = [i for i in paths] + paths.sort() + # write include path, definitions + for elem in tree.iter(tag='Compiler'): + break + for path in paths: + Add = SubElement(elem, 'Add') + Add.set('directory', path) + + for macro in building.Env['CPPDEFINES']: + Add = SubElement(elem, 'Add') + Add.set('option', "-D"+macro) + + # write link flags + ''' + # write lib dependence + if building.Env.has_key('LIBS'): + for elem in tree.iter(tag='Tool'): + if elem.attrib['Name'] == 'VCLinkerTool': + break + libs_with_extention = [i+'.lib' for i in building.Env['LIBS']] + libs = ' '.join(libs_with_extention) + elem.set('AdditionalDependencies', libs) + + # write lib include path + if building.Env.has_key('LIBPATH'): + lib_path = building.Env['LIBPATH'] + paths = set() + for path in lib_path: + inc = _make_path_relative(project_path, os.path.normpath(path)) + paths.add(inc) #.replace('\\', '/') + + paths = [i for i in paths] + paths.sort() + lib_paths = ';'.join(paths) + elem.set('AdditionalLibraryDirectories', lib_paths) + ''' + xml_indent(root) + out.write(etree.tostring(root, encoding='utf-8')) + out.close() |
