def project(*descs, root_file=None):
load.ROOT_FILE = root_file<EOL>desc = merge.merge(merge.DEFAULT_PROJECT, *descs)<EOL>path = desc.get('<STR_LIT:path>', '<STR_LIT>')<EOL>if root_file:<EOL><INDENT>project_path = os.path.dirname(root_file)<EOL>if path:<EOL><INDENT>path += '<STR_LIT::>' + project_path<EOL><DEDENT>else:<EOL><INDENT>path = project_path<EOL><DEDENT><DEDENT>with load.extender(path):<EOL><INDENT>desc = recurse.recurse(desc)<EOL><DEDENT>project = construct.construct(**desc)<EOL>project.desc = desc<EOL>return project<EOL>
Make a new project, using recursion and alias resolution.

Use this function in preference to calling Project() directly.