def get_properties(preprocessorHeader): cpp = shellutil.split(buildconfig.substs['CPP']) cpp += shellutil.split(buildconfig.substs['ACDEFINES']) cpp.append(preprocessorHeader) preprocessed = subprocess.check_output(cpp) properties = [{"name":p[0], "prop":p[1], "id":p[2], "flags":p[3], "pref":p[4], "proptype":p[5]} for (i, p) in enumerate(eval(preprocessed))] # Sort the list so that longhand and logical properties are intermingled # first, shorthand properties follow, then aliases appear last. This matches # the order of the nsCSSProperty enum. def property_compare(x, y): property_order = {"longhand": 0, "logical": 0, "shorthand": 1, "alias": 2} return property_order[x["proptype"]] - property_order[y["proptype"]] properties = sorted(properties, cmp=property_compare) for i, p in enumerate(properties): p["index"] = i # Record each property's IDL name. for p in properties: if "CSS_PROPERTY_INTERNAL" in p["flags"]: p["idlname"] = None else: idl_name = p["prop"] if not idl_name.startswith("Moz"): idl_name = idl_name[0].lower() + idl_name[1:] p["idlname"] = idl_name return properties
def get_preferences(self): """Get all of the preferences associated with enabling and disabling a property.""" # Build the command to run the preprocessor on PythonCSSProps.h headerPath = resolve_path(self.topsrcdir, 'layout/style/PythonCSSProps.h') cpp = self.substs['CPP'] if not cpp: print("Unable to find the cpp program. Please do a full, nonartifact") print("build and try this again.") sys.exit(1) if type(cpp) is list: cmd = cpp else: cmd = shellutil.split(cpp) cmd += shellutil.split(self.substs['ACDEFINES']) cmd.append(headerPath) # The preprocessed list takes the following form: # [ (name, prop, id, flags, pref, proptype), ... ] preprocessed = eval(subprocess.check_output(cmd)) # Map this list # (name, prop, id, flags, pref, proptype) => (name, pref) preferences = [ (name, pref) for name, prop, id, flags, pref, proptype in preprocessed if 'CSS_PROPERTY_INTERNAL' not in flags and pref] return preferences
def generate(output, idlFilename, preprocessorHeader): cpp = shellutil.split(buildconfig.substs['CPP']) cpp += shellutil.split(buildconfig.substs['ACDEFINES']) cpp.append(preprocessorHeader) preprocessed = subprocess.check_output(cpp) propList = eval(preprocessed) props = "" for [name, prop, id, flags, pref, proptype] in propList: if "CSS_PROPERTY_INTERNAL" in flags: continue # Unfortunately, even some of the getters here are fallible # (e.g. on nsComputedDOMStyle). extendedAttrs = ["Throws", "TreatNullAs=EmptyString"] if pref is not "": extendedAttrs.append('Pref="%s"' % pref) # webkit properties get a capitalized "WebkitFoo" accessor (added here) # as well as a camelcase "webkitFoo" accessor (added next). if (prop.startswith("Webkit")): props += generateLine(prop, extendedAttrs) # Generate a line with camelCase spelling of property-name (or capitalized, # for Moz-prefixed properties): if not prop.startswith("Moz"): prop = prop[0].lower() + prop[1:] props += generateLine(prop, extendedAttrs) # Per spec, what's actually supposed to happen here is that we're supposed # to have properties for: # # 1) Each supported CSS property name, camelCased. # 2) Each supported name that contains dashes but doesn't start with a # dash, without any changes to the name. # 3) cssFloat # # Note that "float" will cause a property called "float" to exist due to (1) # in that list. # # In practice, cssFloat is the only case in which "name" doesn't contain # "-" but also doesn't match "prop". So the above generatePropLine() call # covered (3) and all of (1) except "float". If we now output attributes # for all the cases where "name" doesn't match "prop" and "name" doesn't # start with "-", that will cover "float" and (2). if prop != name and name[0] != "-": extendedAttrs.append('BinaryName="%s"' % prop) # Throw in a '_' before the attribute name, because some of these # property names collide with IDL reserved words. props += generateLine("_" + name, extendedAttrs) idlFile = open(idlFilename, "r") idlTemplate = idlFile.read() idlFile.close() output.write("/* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT */\n\n" + string.Template(idlTemplate).substitute({"props": props}) + '\n')
def get_flags(topobjdir, make_dir, build_vars, name): flags = ['-isystem', '-I', '-include', '-MF'] new_args = [] path = os.path.join(topobjdir, make_dir) # Take case to handle things such as the following correctly: # * -DMOZ_APP_VERSION='"40.0a1"' # * -DR_PLATFORM_INT_TYPES='<stdint.h>' # * -DAPP_ID='{ec8030f7-c20a-464f-9b0e-13a3a9e97384} # * -D__UNUSED__='__attribute__((unused))' args = shellutil.split(build_vars[name]) for arg in list(args): if new_args and new_args[-1] in flags: arg = os.path.normpath(os.path.join(path, arg)) else: flag = [(f, arg[len(f):]) for f in flags + ['--sysroot='] if arg.startswith(f)] if flag: flag, val = flag[0] if val: arg = flag + os.path.normpath(os.path.join(path, val)) new_args.append(arg) return new_args
def run(self, binary, params, debug, debugger, debugger_args): try: binpath = self.get_binary_path("geckodriver") except Exception as e: print( "It looks like geckodriver isn't built. " "Add ac_add_options --enable-geckodrver to your mozconfig ", "and run |mach build| to build it.") print(e) return 1 args = [binpath] if params: args.extend(params) if binary is None: binary = self.get_binary_path("app") args.extend(["--binary", binary]) if debug or debugger or debugger_args: if "INSIDE_EMACS" in os.environ: self.log_manager.terminal_handler.setLevel(logging.WARNING) import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name( mozdebug.DebuggerSearch.KeepLooking) if debugger: self.debuggerInfo = mozdebug.get_debugger_info( debugger, debugger_args) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 # Parameters come from the CLI. We need to convert them before # their use. if debugger_args: from mozbuild import shellutil try: debugger_args = shellutil.split(debugger_args) except shellutil.MetaCharacterException as e: print( "The --debugger-args you passed require a real shell to parse them." ) print("(We can't handle the %r character.)" % e.char) return 1 # Prepend the debugger args. args = [self.debuggerInfo.path] + self.debuggerInfo.args + args return self.run_process(args=args, ensure_exit_code=False, pass_thru=True)
def run(self, binary, params, debug, debugger, debugger_args): try: binpath = self.get_binary_path("geckodriver") except Exception as e: print("It looks like geckodriver isn't built. " "Add ac_add_options --enable-geckodrver to your mozconfig ", "and run |mach build| to build it.") print(e) return 1 args = [binpath] if params: args.extend(params) if binary is None: binary = self.get_binary_path("app") args.extend(["--binary", binary]) if debug or debugger or debugger_args: if "INSIDE_EMACS" in os.environ: self.log_manager.terminal_handler.setLevel(logging.WARNING) import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name(mozdebug.DebuggerSearch.KeepLooking) if debugger: self.debuggerInfo = mozdebug.get_debugger_info(debugger, debugger_args) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 # Parameters come from the CLI. We need to convert them before # their use. if debugger_args: from mozbuild import shellutil try: debugger_args = shellutil.split(debugger_args) except shellutil.MetaCharacterException as e: print("The --debugger-args you passed require a real shell to parse them.") print("(We can't handle the %r character.)" % e.char) return 1 # Prepend the debugger args. args = [self.debuggerInfo.path] + self.debuggerInfo.args + args return self.run_process(args=args, ensure_exit_code=False, pass_thru=True)
def extra_environment_variables(self): '''Some extra environment variables are stored in .mozconfig.mk. This functions extracts and returns them.''' from mozbuild import shellutil mozconfig_mk = os.path.join(self.topobjdir, '.mozconfig.mk') env = {} with open(mozconfig_mk) as fh: for line in fh: if line.startswith('export '): exports = shellutil.split(line)[1:] for e in exports: if '=' in e: key, value = e.split('=') env[key] = value return env
$NetBSD: patch-mozilla_layout_style_GenerateCSSPropsGenerated.py,v 1.1 2017/08/18 23:55:07 ryoon Exp $ --- mozilla/layout/style/GenerateCSSPropsGenerated.py.orig 2017-07-07 05:28:56.000000000 +0000 +++ mozilla/layout/style/GenerateCSSPropsGenerated.py @@ -10,7 +10,7 @@ import buildconfig from mozbuild import shellutil def get_properties(preprocessorHeader): - cpp = list(buildconfig.substs['CPP']) + cpp = shellutil.split(buildconfig.substs['CPP']) cpp += shellutil.split(buildconfig.substs['ACDEFINES']) cpp.append(preprocessorHeader) preprocessed = subprocess.check_output(cpp)