# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # This modules provides functionality for dealing with code completion. from mach.decorators import Command, CommandArgument from mozbuild.shellutil import quote as shell_quote from mozbuild.shellutil import split as shell_split # Instropection commands. @Command( "compileflags", category="devenv", description="Display the compilation flags for a given source file", ) @CommandArgument( "what", default=None, help="Source file to display compilation flags for" ) def compileflags(command_context, what): from mozbuild.compilation import util from mozbuild.util import resolve_target_to_make if not util.check_top_objdir(command_context.topobjdir): return 1 path_arg = command_context._wrap_path_argument(what) make_dir, make_target = resolve_target_to_make( command_context.topobjdir, path_arg.relpath() ) if make_dir is None and make_target is None: return 1 build_vars = util.get_build_vars(make_dir, command_context) if what.endswith(".c"): cc = "CC" name = "COMPILE_CFLAGS" else: cc = "CXX" name = "COMPILE_CXXFLAGS" if name not in build_vars: return # Drop the first flag since that is the pathname of the compiler. flags = (shell_split(build_vars[cc]) + shell_split(build_vars[name]))[1:] print(" ".join(shell_quote(arg) for arg in util.sanitize_cflags(flags)))