def factory_factory(cls, source_path, suppress_stdout=False):
        """Factory factory for constructing protocols that know the source path for this CMake package."""
        def factory(label, job_id, stage_label, event_queue, log_path):
            # factory is called by catkin_tools executor
            def init_proxy(*args, **kwargs):
                # init_proxy is called by asyncio
                return cls(label, job_id, stage_label, event_queue, log_path, source_path, suppress_stdout, *args,
                           **kwargs)
            return init_proxy
        return factory