def cmd_new(ref, header=False, pure_c=False, test=False, exports_sources=False, bare=False, visual_versions=None, linux_gcc_versions=None, linux_clang_versions=None, osx_clang_versions=None, shared=None, upload_url=None, gitignore=None, gitlab_gcc_versions=None, gitlab_clang_versions=None): try: tokens = ref.split("@") name, version = tokens[0].split("/") if len(tokens) == 2: user, channel = tokens[1].split("/") else: user, channel = "user", "channel" pattern = re.compile('[\W_]+') package_name = pattern.sub('', name).capitalize() except ValueError: raise ConanException("Bad parameter, please use full package name," "e.g: MyLib/1.2.3@user/testing") # Validate it is a valid reference ConanFileReference(name, version, user, channel) if header and exports_sources: raise ConanException("'header' and 'sources' are incompatible options") if pure_c and (header or exports_sources): raise ConanException("'pure_c' is incompatible with 'header' and 'sources'") if bare and (header or exports_sources): raise ConanException("'bare' is incompatible with 'header' and 'sources'") if header: files = {"conanfile.py": conanfile_header.format(name=name, version=version, package_name=package_name)} elif exports_sources: files = {"conanfile.py": conanfile_sources.format(name=name, version=version, package_name=package_name), "src/hello.cpp": hello_cpp, "src/hello.h": hello_h, "src/CMakeLists.txt": cmake} elif bare: files = {"conanfile.py": conanfile_bare.format(name=name, version=version, package_name=package_name)} else: files = {"conanfile.py": conanfile.format(name=name, version=version, package_name=package_name)} if pure_c: config = " def configure(self):\n del self.settings.compiler.libcxx\n" files["conanfile.py"] = files["conanfile.py"] + config if test: files["test_package/conanfile.py"] = test_conanfile.format(name=name, version=version, user=user, channel=channel, package_name=package_name) files["test_package/CMakeLists.txt"] = test_cmake files["test_package/example.cpp"] = test_main if gitignore: files[".gitignore"] = gitignore_template files.update(ci_get_files(name, version, user, channel, visual_versions, linux_gcc_versions, linux_clang_versions, osx_clang_versions, shared, upload_url, gitlab_gcc_versions, gitlab_clang_versions)) return files
def cmd_new(ref, header=False, pure_c=False, test=False, exports_sources=False, bare=False, visual_versions=None, linux_gcc_versions=None, linux_clang_versions=None, osx_clang_versions=None, shared=None, upload_url=None, gitignore=None, gitlab_gcc_versions=None, gitlab_clang_versions=None, circleci_gcc_versions=None, circleci_clang_versions=None, circleci_osx_versions=None): try: tokens = ref.split("@") name, version = tokens[0].split("/") if len(tokens) == 2: user, channel = tokens[1].split("/") else: user, channel = "user", "channel" pattern = re.compile('[\W_]+') package_name = pattern.sub('', name).capitalize() except ValueError: raise ConanException("Bad parameter, please use full package name," "e.g: MyLib/1.2.3@user/testing") # Validate it is a valid reference ConanFileReference(name, version, user, channel) if header and exports_sources: raise ConanException("'header' and 'sources' are incompatible options") if pure_c and (header or exports_sources): raise ConanException("'pure_c' is incompatible with 'header' and 'sources'") if bare and (header or exports_sources): raise ConanException("'bare' is incompatible with 'header' and 'sources'") if header: files = {"conanfile.py": conanfile_header.format(name=name, version=version, package_name=package_name)} elif exports_sources: files = {"conanfile.py": conanfile_sources.format(name=name, version=version, package_name=package_name), "src/hello.cpp": hello_cpp, "src/hello.h": hello_h, "src/CMakeLists.txt": cmake} elif bare: files = {"conanfile.py": conanfile_bare.format(name=name, version=version, package_name=package_name)} else: files = {"conanfile.py": conanfile.format(name=name, version=version, package_name=package_name)} if pure_c: config = " def configure(self):\n del self.settings.compiler.libcxx\n" files["conanfile.py"] = files["conanfile.py"] + config if test: files["test_package/conanfile.py"] = test_conanfile.format(name=name, version=version, user=user, channel=channel, package_name=package_name) files["test_package/CMakeLists.txt"] = test_cmake files["test_package/example.cpp"] = test_main if gitignore: files[".gitignore"] = gitignore_template files.update(ci_get_files(name, version, user, channel, visual_versions, linux_gcc_versions, linux_clang_versions, osx_clang_versions, shared, upload_url, gitlab_gcc_versions, gitlab_clang_versions, circleci_gcc_versions, circleci_clang_versions, circleci_osx_versions)) return files
def cmd_new(ref, header=False, pure_c=False, test=False, exports_sources=False, bare=False, visual_versions=None, linux_gcc_versions=None, linux_clang_versions=None, osx_clang_versions=None, shared=None, upload_url=None, gitignore=None, gitlab_gcc_versions=None, gitlab_clang_versions=None, circleci_gcc_versions=None, circleci_clang_versions=None, circleci_osx_versions=None, template=None, cache=None, defines=None): try: tokens = ref.split("@") name, version = tokens[0].split("/") if len(tokens) == 2: user, channel = tokens[1].split("/") else: user, channel = "user", "channel" package_name = re.sub(r"(?:^|[\W_])(\w)", lambda x: x.group(1).upper(), name) except ValueError: raise ConanException("Bad parameter, please use full package name," "e.g.: MyLib/1.2.3@user/testing") # Validate it is a valid reference ConanFileReference(name, version, user, channel) if header and exports_sources: raise ConanException("'header' and 'sources' are incompatible options") if pure_c and header: raise ConanException("'pure_c' is incompatible with 'header'") if pure_c and not exports_sources: raise ConanException("'pure_c' requires the use of --source") if bare and (header or exports_sources): raise ConanException( "'bare' is incompatible with 'header' and 'sources'") if template and (header or exports_sources or bare or pure_c): raise ConanException("'template' is incompatible with 'header', " "'sources', 'pure-c' and 'bare'") defines = defines or dict() if header: files = { "conanfile.py": conanfile_header.format(name=name, version=version, package_name=package_name) } elif exports_sources: if not pure_c: files = { "conanfile.py": conanfile_sources.format(name=name, version=version, package_name=package_name, configure=""), "src/{}.cpp".format(name): hello_cpp.format(name=name, version=version), "src/{}.h".format(name): hello_h.format(name=name, version=version), "src/CMakeLists.txt": cmake.format(name=name, version=version) } else: config = ("\n def configure(self):\n" " del self.settings.compiler.libcxx\n" " del self.settings.compiler.cppstd\n") files = { "conanfile.py": conanfile_sources.format(name=name, version=version, package_name=package_name, configure=config), "src/{}.c".format(name): hello_c.format(name=name, version=version), "src/{}.h".format(name): hello_h.format(name=name, version=version), "src/CMakeLists.txt": cmake_pure_c.format(name=name, version=version) } elif bare: files = { "conanfile.py": conanfile_bare.format(name=name, version=version, package_name=package_name) } elif template: is_file_template = os.path.basename(template).endswith('.py') if is_file_template: if not os.path.isabs(template): # FIXME: Conan 2.0. The old path should be removed old_path = os.path.join(cache.cache_folder, "templates", template) new_path = os.path.join(cache.cache_folder, "templates", "command/new", template) template = new_path if os.path.isfile(new_path) else old_path if not os.path.isfile(template): raise ConanException("Template doesn't exist: %s" % template) replaced = _render_template(load(template), name=name, version=version, package_name=package_name, defines=defines) files = {"conanfile.py": replaced} elif template == "v2_cmake": from conans.assets.templates.new_v2_cmake import get_files files = get_files(name, version, user, channel, package_name) else: if not os.path.isabs(template): template = os.path.join(cache.cache_folder, "templates", "command/new", template) if not os.path.isdir(template): raise ConanException( "Template doesn't exist: {}".format(template)) template = os.path.normpath(template) files = _get_files_from_template_dir(template_dir=template, name=name, version=version, package_name=package_name, defines=defines) else: files = { "conanfile.py": conanfile.format(name=name, version=version, package_name=package_name) } if test: files["test_package/conanfile.py"] = test_conanfile.format( name=name, version=version, user=user, channel=channel, package_name=package_name) if pure_c: files["test_package/example.c"] = test_main.format(name=name) files["test_package/CMakeLists.txt"] = test_cmake_pure_c else: include_name = name if exports_sources else "hello" files["test_package/example.cpp"] = test_main.format( name=include_name) files["test_package/CMakeLists.txt"] = test_cmake if gitignore: files[".gitignore"] = gitignore_template files.update( ci_get_files(name, version, user, channel, visual_versions, linux_gcc_versions, linux_clang_versions, osx_clang_versions, shared, upload_url, gitlab_gcc_versions, gitlab_clang_versions, circleci_gcc_versions, circleci_clang_versions, circleci_osx_versions)) return files
def cmd_new(ref, header=False, pure_c=False, test=False, exports_sources=False, bare=False, visual_versions=None, linux_gcc_versions=None, linux_clang_versions=None, osx_clang_versions=None, shared=None, upload_url=None, gitignore=None, gitlab_gcc_versions=None, gitlab_clang_versions=None, circleci_gcc_versions=None, circleci_clang_versions=None, circleci_osx_versions=None, template=None, cache=None): try: tokens = ref.split("@") name, version = tokens[0].split("/") if len(tokens) == 2: user, channel = tokens[1].split("/") else: user, channel = "user", "channel" package_name = re.sub(r"(?:^|[\W_])(\w)", lambda x: x.group(1).upper(), name) except ValueError: raise ConanException("Bad parameter, please use full package name," "e.g.: MyLib/1.2.3@user/testing") # Validate it is a valid reference ConanFileReference(name, version, user, channel) if header and exports_sources: raise ConanException("'header' and 'sources' are incompatible options") if pure_c and (header or exports_sources): raise ConanException("'pure_c' is incompatible with 'header' and 'sources'") if bare and (header or exports_sources): raise ConanException("'bare' is incompatible with 'header' and 'sources'") if template and (header or exports_sources or bare): raise ConanException("'template' argument incompatible with 'header', " "'sources', and 'bare'") if header: files = {"conanfile.py": conanfile_header.format(name=name, version=version, package_name=package_name)} elif exports_sources: files = {"conanfile.py": conanfile_sources.format(name=name, version=version, package_name=package_name), "src/hello.cpp": hello_cpp, "src/hello.h": hello_h, "src/CMakeLists.txt": cmake} elif bare: files = {"conanfile.py": conanfile_bare.format(name=name, version=version, package_name=package_name)} elif template: if not os.path.isabs(template): template = os.path.join(cache.cache_folder, "templates", template) if not os.path.isfile(template): raise ConanException("Template doesn't exist: %s" % template) conanfile_template = load(template) t = Template(conanfile_template) replaced = t.render(name=name, version=version, package_name=package_name) files = {"conanfile.py": replaced} else: files = {"conanfile.py": conanfile.format(name=name, version=version, package_name=package_name)} if pure_c: config = " def configure(self):\n del self.settings.compiler.libcxx\n" files["conanfile.py"] = files["conanfile.py"] + config if test: files["test_package/conanfile.py"] = test_conanfile.format(name=name, version=version, user=user, channel=channel, package_name=package_name) files["test_package/CMakeLists.txt"] = test_cmake files["test_package/example.cpp"] = test_main if gitignore: files[".gitignore"] = gitignore_template files.update(ci_get_files(name, version, user, channel, visual_versions, linux_gcc_versions, linux_clang_versions, osx_clang_versions, shared, upload_url, gitlab_gcc_versions, gitlab_clang_versions, circleci_gcc_versions, circleci_clang_versions, circleci_osx_versions)) return files