def _handle_ipdl_sources(self, ipdl_dir, sorted_ipdl_sources, unified_ipdl_cppsrcs_mapping): # Preferably we wouldn't have to import ipdl, but we need to parse the # ast in order to determine the namespaces since they are used in the # header output paths. sys.path.append(mozpath.join(self.environment.topsrcdir, 'ipc', 'ipdl')) import ipdl backend_file = self._get_backend_file('ipc/ipdl') outheaderdir = '_ipdlheaders' cmd = [ '$(PYTHON_PATH)', '$(PLY_INCLUDE)', '%s/ipdl.py' % backend_file.srcdir, '--sync-msg-list=%s/sync-messages.ini' % backend_file.srcdir, '--msg-metadata=%s/message-metadata.ini' % backend_file.srcdir, '--outheaders-dir=%s' % outheaderdir, '--outcpp-dir=.', ] ipdldirs = sorted(set(mozpath.dirname(p) for p in sorted_ipdl_sources)) cmd.extend(['-I%s' % d for d in ipdldirs]) cmd.extend(sorted_ipdl_sources) outputs = [ 'IPCMessageTypeName.cpp', mozpath.join(outheaderdir, 'IPCMessageStart.h'), 'ipdl_lextab.py', 'ipdl_yacctab.py' ] for filename in sorted_ipdl_sources: filepath, ext = os.path.splitext(filename) dirname, basename = os.path.split(filepath) dirname = mozpath.relpath(dirname, self.environment.topsrcdir) extensions = [''] if ext == '.ipdl': extensions.extend(['Child', 'Parent']) with open(filename) as f: ast = ipdl.parse(f.read(), filename, includedirs=ipdldirs) self.backend_input_files.add(filename) headerdir = os.path.join(outheaderdir, *([ns.name for ns in ast.namespaces])) for extension in extensions: outputs.append("%s%s.cpp" % (basename, extension)) outputs.append( mozpath.join(headerdir, '%s%s.h' % (basename, extension))) backend_file.rule( display='IPDL code generation', cmd=cmd, outputs=outputs, extra_outputs=[self._installed_files], check_unchanged=True, )
def _handle_ipdl_sources(self, ipdl_dir, sorted_ipdl_sources, sorted_nonstatic_ipdl_sources, sorted_static_ipdl_sources, unified_ipdl_cppsrcs_mapping): # Preferably we wouldn't have to import ipdl, but we need to parse the # ast in order to determine the namespaces since they are used in the # header output paths. sys.path.append(mozpath.join(self.environment.topsrcdir, 'ipc', 'ipdl')) import ipdl backend_file = self._get_backend_file('ipc/ipdl') outheaderdir = '_ipdlheaders' srcdir = mozpath.join(self.environment.topsrcdir, 'ipc/ipdl') cmd = [ '$(PYTHON_PATH)', '$(PLY_INCLUDE)', '%s/ipdl.py' % srcdir, '--sync-msg-list=%s/sync-messages.ini' % srcdir, '--msg-metadata=%s/message-metadata.ini' % srcdir, '--outheaders-dir=%s' % outheaderdir, '--outcpp-dir=.', ] ipdldirs = sorted(set(mozpath.dirname(p) for p in sorted_ipdl_sources)) cmd.extend(['-I%s' % d for d in ipdldirs]) cmd.extend(sorted_ipdl_sources) outputs = ['IPCMessageTypeName.cpp', mozpath.join(outheaderdir, 'IPCMessageStart.h'), 'ipdl_lextab.py', 'ipdl_yacctab.py'] for filename in sorted_ipdl_sources: filepath, ext = os.path.splitext(filename) dirname, basename = os.path.split(filepath) dirname = mozpath.relpath(dirname, self.environment.topsrcdir) extensions = [''] if ext == '.ipdl': extensions.extend(['Child', 'Parent']) with open(filename) as f: ast = ipdl.parse(f.read(), filename, includedirs=ipdldirs) self.backend_input_files.add(filename) headerdir = os.path.join(outheaderdir, *([ns.name for ns in ast.namespaces])) for extension in extensions: outputs.append("%s%s.cpp" % (basename, extension)) outputs.append(mozpath.join(headerdir, '%s%s.h' % (basename, extension))) backend_file.rule( display='IPDL code generation', cmd=cmd, outputs=outputs, extra_outputs=[self._installed_files], check_unchanged=True, ) backend_file.sources['.cpp'].extend(u[0] for u in unified_ipdl_cppsrcs_mapping)
capacity = msgMetadataConfig.get(msgName, 'segment_capacity') segmentCapacityDict[msgName] = capacity # First pass: parse and type-check all protocols for f in files: log(2, os.path.basename(f)) filename = normalizedFilename(f) if f == '-': fd = sys.stdin else: fd = open(f) specstring = fd.read() fd.close() ast = ipdl.parse(specstring, filename, includedirs=includedirs) if ast is None: print('Specification could not be parsed.', file=sys.stderr) sys.exit(1) log(2, 'checking types') if not ipdl.typecheck(ast): print('Specification is not well typed.', file=sys.stderr) sys.exit(1) if not ipdl.checkSyncMessage(ast, syncMsgList): print('Error: New sync IPC messages must be reviewed by an IPC peer and recorded in %s' % options.syncMsgList, file=sys.stderr) # NOQA: E501 sys.exit(1) if not ipdl.checkFixedSyncMessages(parser): # Errors have alraedy been printed to stderr, just exit
parser.readfp(open(options.syncMsgList)) syncMsgList = parser.sections() # First pass: parse and type-check all protocols for f in files: log(2, os.path.basename(f)) filename = normalizedFilename(f) if f == '-': fd = sys.stdin else: fd = open(f) specstring = fd.read() fd.close() ast = ipdl.parse(specstring, filename, includedirs=includedirs) if ast is None: print >>sys.stderr, 'Specification could not be parsed.' sys.exit(1) log(2, 'checking types') if not ipdl.typecheck(ast): print >>sys.stderr, 'Specification is not well typed.' sys.exit(1) if not ipdl.checkSyncMessage(ast, syncMsgList): print >>sys.stderr, 'Error: New sync IPC messages must be reviewed by an IPC peer and recorded in %s' % options.syncMsgList sys.exit(1) if _verbosity > 2: log(3, ' pretty printed code:')