/usr/lib/node_modules/pnpm/dist/node_modules/node-gyp/gyp/pylib/gyp
NameSizeModeActions
generator/-0755rm
common.py245920644editdlrm
common_test.py57140644editdlrm
easy_xml.py54250644editdlrm
easy_xml_test.py39500644editdlrm
flock_tool.py18860644editdlrm
input.py1265040644editdlrm
input_test.py34250644editdlrm
mac_tool.py302600644editdlrm
MSVSNew.py130290644editdlrm
MSVSProject.py67390644editdlrm
MSVSSettings.py454520644editdlrm
MSVSSettings_test.py742970644editdlrm
MSVSToolFile.py17890644editdlrm
MSVSUserFile.py53330644editdlrm
MSVSUtil.py102310644editdlrm
MSVSVersion.py197440644editdlrm
msvs_emulation.py541020644editdlrm
ninja_syntax.py56400644editdlrm
simple_copy.py12930644editdlrm
win_tool.py151310644editdlrm
xcodeproj_file.py1356710644editdlrm
xcode_emulation.py820860644editdlrm
xcode_emulation_test.py14880644editdlrm
xcode_ninja.py121240644editdlrm
xml_fix.py22450644editdlrm
__init__.py246250644editdlrm
Edit: /usr/lib/node_modules/pnpm/dist/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py (5333B)
# Copyright (c) 2012 Google Inc. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Visual Studio user preferences file writer.""" import os import re import socket # for gethostname import gyp.easy_xml as easy_xml # ------------------------------------------------------------------------------ def _FindCommandInPath(command): """If there are no slashes in the command given, this function searches the PATH env to find the given command, and converts it to an absolute path. We have to do this because MSVS is looking for an actual file to launch a debugger on, not just a command line. Note that this happens at GYP time, so anything needing to be built needs to have a full path.""" if "/" in command or "\\" in command: # If the command already has path elements (either relative or # absolute), then assume it is constructed properly. return command else: # Search through the path list and find an existing file that # we can access. paths = os.environ.get("PATH", "").split(os.pathsep) for path in paths: item = os.path.join(path, command) if os.path.isfile(item) and os.access(item, os.X_OK): return item return command def _QuoteWin32CommandLineArgs(args): new_args = [] for arg in args: # Replace all double-quotes with double-double-quotes to escape # them for cmd shell, and then quote the whole thing if there # are any. if arg.find('"') != -1: arg = '""'.join(arg.split('"')) arg = '"%s"' % arg # Otherwise, if there are any spaces, quote the whole arg. elif re.search(r"[ \t\n]", arg): arg = '"%s"' % arg new_args.append(arg) return new_args class Writer: """Visual Studio XML user user file writer.""" def __init__(self, user_file_path, version, name): """Initializes the user file. Args: user_file_path: Path to the user file. version: Version info. name: Name of the user file. """ self.user_file_path = user_file_path self.version = version self.name = name self.configurations = {} def AddConfig(self, name): """Adds a configuration to the project. Args: name: Configuration name. """ self.configurations[name] = ["Configuration", {"Name": name}] def AddDebugSettings( self, config_name, command, environment={}, working_directory="" ): """Adds a DebugSettings node to the user file for a particular config. Args: command: command line to run. First element in the list is the executable. All elements of the command will be quoted if necessary. working_directory: other files which may trigger the rule. (optional) """ command = _QuoteWin32CommandLineArgs(command) abs_command = _FindCommandInPath(command[0]) if environment and isinstance(environment, dict): env_list = [f'{key}="{val}"' for (key, val) in environment.items()] environment = " ".join(env_list) else: environment = "" n_cmd = [ "DebugSettings", { "Command": abs_command, "WorkingDirectory": working_directory, "CommandArguments": " ".join(command[1:]), "RemoteMachine": socket.gethostname(), "Environment": environment, "EnvironmentMerge": "true", # Currently these are all "dummy" values that we're just setting # in the default manner that MSVS does it. We could use some of # these to add additional capabilities, I suppose, but they might # not have parity with other platforms then. "Attach": "false", "DebuggerType": "3", # 'auto' debugger "Remote": "1", "RemoteCommand": "", "HttpUrl": "", "PDBPath": "", "SQLDebugging": "", "DebuggerFlavor": "0", "MPIRunCommand": "", "MPIRunArguments": "", "MPIRunWorkingDirectory": "", "ApplicationCommand": "", "ApplicationArguments": "", "ShimCommand": "", "MPIAcceptMode": "", "MPIAcceptFilter": "", }, ] # Find the config, and add it if it doesn't exist. if config_name not in self.configurations: self.AddConfig(config_name) # Add the DebugSettings onto the appropriate config. self.configurations[config_name].append(n_cmd) def WriteIfChanged(self): """Writes the user file.""" configs = ["Configurations"] for config, spec in sorted(self.configurations.items()): configs.append(spec) content = [ "VisualStudioUserFile", {"Version": self.version.ProjectVersion(), "Name": self.name}, configs, ] easy_xml.WriteXmlIfChanged( content, self.user_file_path, encoding="Windows-1252" )