예제 #1
0
			def __call__(self, sched_ctx):
				self.result = 1
				
				from wonderbuild.script import ScriptLoaderTask, default_script_file
				script = self.project.top_src_dir / default_script_file
				if script.exists:
					script_loader_task = ScriptLoaderTask.shared(self.project, script)
					for x in sched_ctx.parallel_wait(script_loader_task): yield x
					if 'help' not in options:
						option_collector.consolidate_known_options()
						usage_error = not validate_options(options, option_collector.known_options)
					else: usage_error = False
				else:
					usage_error = 'help' not in options
					if usage_error:
						print >> sys.stderr, 'wonderbuild: error: no ' + script.path + ' found'
					option_collector.consolidate_known_options()
				
				if usage_error or 'help' in options:
					option_collector.help['help'] = (None, 'show this help and exit')
					option_collector.help['version'] = (None, 'show the version of this tool and exit')
					option_collector.consolidate_help()
					print_help(option_collector.help, out, cols)
					self.result = usage_error and 1 or 0
					return

				self.project.task_aliases['default'] = script_loader_task.script_task.default_tasks
				for x in sched_ctx.parallel_wait(self.project): yield x
				
				self.result = 0
예제 #2
0
		def __call__(self, sched_ctx):
			tasks = [
				ScriptLoaderTask.shared(self.project, self.src_dir.parent.parent / dir) \
				for dir in ( # Note that there's no need to list dependencies (e.g. psycle-core, psycle-helpers etc) since those are pulled automatically
					'psycle-player',
					'psycle-plugins'
				)
			]
			for x in sched_ctx.parallel_wait(*tasks): yield x
			for t in tasks: self.default_tasks += t.script_task.default_tasks
예제 #3
0
 def __call__(self, sched_ctx):
     tasks = [
      ScriptLoaderTask.shared(self.project, self.src_dir.parent.parent / dir) \
      for dir in ( # Note that there's no need to list dependencies (e.g. psycle-core, psycle-helpers etc) since those are pulled automatically
       'psycle-player',
       'psycle-plugins'
      )
     ]
     for x in sched_ctx.parallel_wait(*tasks):
         yield x
     for t in tasks:
         self.default_tasks += t.script_task.default_tasks
	def __call__(self, sched_ctx):
		tasks = [
			ScriptLoaderTask.shared(self.project, self.src_dir / dir) \
			for dir in (
				'static-shared',
				'pre-compiled',
				'parallel',
				'task-decorator'
			)
		]
		for x in sched_ctx.parallel_wait(*tasks): yield x
		for t in tasks: self.default_tasks += t.script_task.default_tasks
예제 #5
0
    def __call__(self, sched_ctx):
        project = self.project
        top_src_dir = self.src_dir.parent
        src_dir = self.src_dir / 'src'

        common = ScriptLoaderTask.shared(
            project, top_src_dir / 'build-systems' / 'wonderbuild' /
            'wonderbuild_script_common')
        for x in sched_ctx.parallel_wait(common):
            yield x
        self._common = common = common.script_task
        cfg = common.cfg.clone()

        from wonderbuild.cxx_tool_chain import ModTask
        from wonderbuild.install import InstallTask

        class DiversalisMod(ModTask):
            def __init__(self):
                name = 'diversalis'
                ModTask.__init__(self,
                                 name,
                                 ModTask.Kinds.HEADERS,
                                 cfg,
                                 cxx_phase=self.__class__.InstallHeaders(
                                     project, name + '-headers'))

            class InstallHeaders(InstallTask):
                @property
                def trim_prefix(self):
                    return src_dir

                @property
                def dest_dir(self):
                    return self.fhs.include

                @property
                def sources(self):
                    try:
                        return self._sources
                    except AttributeError:
                        self._sources = [self.trim_prefix / 'diversalis.hpp'] + \
                         list((self.trim_prefix / 'diversalis').find_iter(
                          in_pats = ('*.hpp',), ex_pats = ('*.private.hpp',), prune_pats = ('todo',)))
                        return self._sources

            def apply_cxx_to(self, cfg):
                if not self.cxx_phase.dest_dir in cfg.include_paths:
                    cfg.include_paths.append(self.cxx_phase.dest_dir)

        self._mod_dep_phases = mod_dep_phases = DiversalisMod()
        common.pch.private_deps.append(mod_dep_phases)
        self.default_tasks = [mod_dep_phases.cxx_phase]
예제 #6
0
    def __call__(self, sched_ctx):
        top_src_dir = self.src_dir.parent
        src_dir = self.src_dir / 'src'

        core = ScriptLoaderTask.shared(self.project,
                                       top_src_dir / 'psycle-core')
        for x in sched_ctx.parallel_wait(core):
            yield x
        core = core.script_task
        self._common = common = core.common
        core = core.mod_dep_phases
        pch = common.pch
        cfg = common.cfg.clone()

        from wonderbuild.cxx_tool_chain import PkgConfigCheckTask, ModTask
        from wonderbuild.install import InstallTask

        check_cfg = cfg.clone()
        xml = PkgConfigCheckTask.shared(check_cfg, ['libxml++-2.6'])

        class PlayerMod(ModTask):
            def __init__(self):
                ModTask.__init__(self, 'psycle-player', ModTask.Kinds.PROG,
                                 cfg)

            def do_set_deps(self, sched_ctx):
                self.private_deps = [pch.prog_task, core]
                req = self.all_deps
                opt = [xml]
                for x in sched_ctx.parallel_wait(*(req + opt)):
                    yield x
                self.private_deps += [o for o in opt if o]

            def do_mod_phase(self):
                self.cfg.defines[
                    'UNIVERSALIS__META__MODULE__NAME'] = '"' + self.name + '"'
                self.cfg.defines['UNIVERSALIS__META__MODULE__VERSION'] = 0
                if xml: self.cfg.defines['PSYCLE__LIBXMLPP_AVAILABLE'] = None
                self.cfg.include_paths.appendleft(src_dir)
                for s in (src_dir / 'psycle' / 'player').find_iter(
                        in_pats=('*.cpp', ), prune_pats=('todo', )):
                    self.sources.append(s)

        player = PlayerMod()
        self.default_tasks.append(player.mod_phase)
예제 #7
0
    def __call__(self, sched_ctx):
        top_src_dir = self.src_dir.parent
        src_dir = self.src_dir / "src"

        core = ScriptLoaderTask.shared(self.project, top_src_dir / "psycle-core")
        for x in sched_ctx.parallel_wait(core):
            yield x
        core = core.script_task
        self._common = common = core.common
        core = core.mod_dep_phases
        pch = common.pch
        cfg = common.cfg.clone()

        from wonderbuild.cxx_tool_chain import PkgConfigCheckTask, ModTask
        from wonderbuild.install import InstallTask

        check_cfg = cfg.clone()
        xml = PkgConfigCheckTask.shared(check_cfg, ["libxml++-2.6"])

        class PlayerMod(ModTask):
            def __init__(self):
                ModTask.__init__(self, "psycle-player", ModTask.Kinds.PROG, cfg)

            def do_set_deps(self, sched_ctx):
                self.private_deps = [pch.prog_task, core]
                req = self.all_deps
                opt = [xml]
                for x in sched_ctx.parallel_wait(*(req + opt)):
                    yield x
                self.private_deps += [o for o in opt if o]

            def do_mod_phase(self):
                self.cfg.defines["UNIVERSALIS__META__MODULE__NAME"] = '"' + self.name + '"'
                self.cfg.defines["UNIVERSALIS__META__MODULE__VERSION"] = 0
                if xml:
                    self.cfg.defines["PSYCLE__LIBXMLPP_AVAILABLE"] = None
                self.cfg.include_paths.appendleft(src_dir)
                for s in (src_dir / "psycle" / "player").find_iter(in_pats=("*.cpp",), prune_pats=("todo",)):
                    self.sources.append(s)

        player = PlayerMod()
        self.default_tasks.append(player.mod_phase)
예제 #8
0
	def __call__(self, sched_ctx):
		project = self.project
		top_src_dir = self.src_dir.parent
		src_dir = self.src_dir / 'src'

		common = ScriptLoaderTask.shared(project, top_src_dir / 'build-systems' / 'wonderbuild' / 'wonderbuild_script_common')
		for x in sched_ctx.parallel_wait(common): yield x
		self._common = common = common.script_task
		cfg = common.cfg.clone()

		from wonderbuild.cxx_tool_chain import ModTask
		from wonderbuild.install import InstallTask

		class DiversalisMod(ModTask):
			def __init__(self):
				name = 'diversalis'
				ModTask.__init__(self, name, ModTask.Kinds.HEADERS, cfg,
					cxx_phase=self.__class__.InstallHeaders(project, name + '-headers'))
				
			class InstallHeaders(InstallTask):
				@property
				def trim_prefix(self): return src_dir

				@property
				def dest_dir(self): return self.fhs.include

				@property
				def sources(self):
					try: return self._sources
					except AttributeError:
						self._sources = [self.trim_prefix / 'diversalis.hpp'] + \
							list((self.trim_prefix / 'diversalis').find_iter(
								in_pats = ('*.hpp',), ex_pats = ('*.private.hpp',), prune_pats = ('todo',)))
						return self._sources
		
			def apply_cxx_to(self, cfg):
				if not self.cxx_phase.dest_dir in cfg.include_paths: cfg.include_paths.append(self.cxx_phase.dest_dir)

		self._mod_dep_phases = mod_dep_phases = DiversalisMod()
		common.pch.private_deps.append(mod_dep_phases)
		self.default_tasks = [mod_dep_phases.cxx_phase]
예제 #9
0
	def __call__(self, sched_ctx):
		top_src_dir = self.src_dir.parent
		src_dir = self.src_dir / 'src'
		default_tasks = self.default_tasks

		helpers = ScriptLoaderTask.shared(self.project, top_src_dir / 'psycle-helpers')
		for x in sched_ctx.parallel_wait(helpers): yield x
		helpers = helpers.script_task
		self._common = common = helpers.common
		helpers = helpers.mod_dep_phases
		pch = common.pch
		cfg = common.cfg.clone()

		from wonderbuild.cxx_tool_chain import PkgConfigCheckTask, ModTask
		from wonderbuild.std_checks.winmm import WinMMCheckTask
		from wonderbuild.std_checks.dsound import DSoundCheckTask
		from wonderbuild.install import InstallTask

		check_cfg = cfg.clone()
		gstreamer = PkgConfigCheckTask.shared(check_cfg, ['gstreamer-0.10'])
		jack = PkgConfigCheckTask.shared(check_cfg, ['jack >= 0.101.1'])
		alsa = PkgConfigCheckTask.shared(check_cfg, ['alsa >= 1.0'])
		esound = PkgConfigCheckTask.shared(check_cfg, ['esound'])
		dsound = DSoundCheckTask.shared(check_cfg)
		winmm = WinMMCheckTask.shared(check_cfg)

		for x in sched_ctx.parallel_wait(gstreamer, jack, alsa, esound, dsound, winmm): yield x

		class UniformMod(ModTask):
			def __init__(self, name, path, deps=None, kind=ModTask.Kinds.LOADABLE):
				ModTask.__init__(self, name, kind, cfg)
				self.path = path
				if deps is not None: self.public_deps += deps
				if kind in (ModTask.Kinds.PROG, ModTask.Kinds.LOADABLE): default_tasks.append(self.mod_phase)
				self.cxx_phase = self.__class__.InstallHeaders(self) # note: set in __ini__ because called directly in AudioDriversMod.__call__

			def do_set_deps(self, sched_ctx):
				if False: yield
				if self.kind == ModTask.Kinds.PROG: self.private_deps = [pch.prog_task]
				else: self.private_deps = [pch.lib_task]
				self.public_deps += [helpers]
		
			class InstallHeaders(InstallTask):
				def __init__(self, outer):
					InstallTask.__init__(self, outer.base_cfg.project, outer.name + '-headers')
					self.outer = outer
				
				@property
				def trim_prefix(self): return src_dir

				@property
				def dest_dir(self): return self.fhs.include

				@property
				def sources(self):
					try: return self._sources
					except AttributeError:
						self._sources = []
						if self.outer.path.exists:
							for s in self.outer.path.find_iter(
									in_pats=('*.hpp', '*.h'), ex_pats=('*.private.hpp',), prune_pats=('todo',)
								): self._sources.append(s)
						for h in ('.hpp', '.h'):
							f = self.outer.path.parent / (self.outer.path.name + h)
							if f.exists:
								self._sources.append(f)
								break
						return self._sources

			def apply_cxx_to(self, cfg):
				if not self.cxx_phase.dest_dir in cfg.include_paths: cfg.include_paths.append(self.cxx_phase.dest_dir)

			def do_mod_phase(self):
				self.cfg.include_paths.appendleft(src_dir)
				self.cfg.defines['UNIVERSALIS__META__MODULE__NAME'] = '"' + self.name +'"'
				self.cfg.defines['UNIVERSALIS__META__MODULE__VERSION'] = 0
				if self.path.exists:
					for s in self.path.find_iter(in_pats = ('*.cpp',), prune_pats = ('todo',)): self.sources.append(s)
				else: self.sources.append(self.path.parent / (self.path.name + '.cpp'))

		class AudioDriverMod(UniformMod):
			def __init__(self, name, path, deps=None, define_name=None):
				UniformMod.__init__(self,
					'psycle-audiodriver-' + name,
					src_dir / 'psycle' / 'audiodrivers' / path,
					deps
				)
				self._define_name = define_name is not None and define_name or name.replace('-', '_').upper()
			
			def _apply_defines_to(self, cfg): cfg.defines['PSYCLE__' + self._define_name + '_AVAILABLE'] = None

			def apply_cxx_to(self, cfg): self._apply_defines_to(cfg)

			def do_mod_phase(self):
				self._apply_defines_to(self.cfg)
				UniformMod.do_mod_phase(self)

		if gstreamer: gst_driver = AudioDriverMod('gstreamer', 'gstreamerout', deps=(gstreamer,))
		if alsa: alsa_driver = AudioDriverMod('alsa', 'alsaout', deps=(alsa,))
		if esound: esound_driver = AudioDriverMod('esound', 'esoundout', deps=(esound,))
		if dsound: dsound_driver = AudioDriverMod('microsoft-direct-sound', 'microsoftdirectsoundout', deps=(dsound,))
		file_driver = AudioDriverMod('wave-file', 'wavefileout')
		if False: # these drivers need testing
			if jack: jack_driver = AudioDriverMod('jack', 'jackout', deps=(jack,))
			if winmm: winmm_driver = AudioDriverMod('microsoft-mme', 'microsoftmmewaveout', deps=(winmm,))
			# netaudio
			# asio

		# TODO this all-in-one lib should be removed in favor of separate loadable modules, one per driver
		class AudioDriversMod(ModTask):
			def __init__(self): ModTask.__init__(self, 'psycle-audiodrivers', ModTask.Kinds.LIB, cfg)

			def do_set_deps(self, sched_ctx):
				self.private_deps = [pch.lib_task]
				self.public_deps = [helpers]
				req = self.public_deps + self.private_deps
				opt = [alsa, jack, esound, dsound, winmm, gstreamer] # netaudio, asio
				for x in sched_ctx.parallel_wait(*(req + opt)): yield x
				self.public_deps += [o for o in opt if o]
				self.cxx_phase = self.__class__.InstallHeaders(self.base_cfg.project, self.name + '-headers')

				# brings the headers
				h = []
				if gstreamer: h.append(gst_driver)
				if alsa: h.append(alsa_driver)
				if esound: h.append(esound_driver)
				if dsound: h.append(dsound_driver)
				h.append(file_driver)
				if False: # these drivers need testing
					if jack: h.append(jack_driver)
					if winmm: h.append(winmm_driver)
					# netaudio
					# asio
				for x in sched_ctx.parallel_wait(*(h.cxx_phase for h in h)): yield x

			class InstallHeaders(InstallTask):
				@property
				def trim_prefix(self): return src_dir

				@property
				def dest_dir(self): return self.fhs.include

				@property
				def sources(self):
					try: return self._sources
					except AttributeError:
						self._sources = s = []
						dir = src_dir / 'psycle' / 'audiodrivers'
						s.append(dir / 'audiodriver.h')
						if False: # now done in individual driver tasks
							s.append(dir / 'wavefileout.h')
							if gstreamer: s.append(dir / 'gstreamerout.h')
							if alsa:      s.append(dir / 'alsaout.h')
							if esound:    s.append(dir / 'esoundout.h')
							if dsound:    s.append(dir / 'microsoftdirectsoundout.h')
							if False: # these drivers need testing
								if jack:      s.append(dir / 'jackout.h')
								if netaudio:  s.append(dir / 'netaudioout.h')
								if asio:      s.append(dir / 'asioout.h')
								if winmm:     s.append(dir / 'microsoftmmewaveout.h')
						return s

			def _apply_defines_to(self, cfg):
				if gstreamer: cfg.defines['PSYCLE__GSTREAMER_AVAILABLE'] = None
				if alsa:      cfg.defines['PSYCLE__ALSA_AVAILABLE'] = None
				if esound:    cfg.defines['PSYCLE__ESOUND_AVAILABLE'] = None
				if dsound:    cfg.defines['PSYCLE__MICROSOFT_DIRECT_SOUND_AVAILABLE'] = None
				if False: # these drivers need testing
					if jack:      cfg.defines['PSYCLE__JACK_AVAILABLE'] = None
					if netaudio:  cfg.defines['PSYCLE__NET_AUDIO_AVAILABLE'] = None
					if asio:      cfg.defines['PSYCLE__STEINBERG_ASIO_AVAILABLE'] = None
					if winmm:     cfg.defines['PSYCLE__MICROSOFT_MME_AVAILABLE'] = None
			
			def apply_cxx_to(self, cfg):
				self._apply_defines_to(cfg)
				if not self.cxx_phase.dest_dir in cfg.include_paths: cfg.include_paths.append(self.cxx_phase.dest_dir)

			def do_mod_phase(self):
				self._apply_defines_to(self.cfg)
				self.cfg.include_paths.appendleft(src_dir)
				self.cfg.defines['UNIVERSALIS__META__MODULE__NAME'] = '"' + self.name +'"'
				self.cfg.defines['UNIVERSALIS__META__MODULE__VERSION'] = 0
				s = self.sources
				dir = src_dir / 'psycle' / 'audiodrivers'
				s.append(dir / 'audiodriver.cpp')
				s.append(dir / 'wavefileout.cpp')
				if gstreamer: s.append(dir / 'gstreamerout.cpp')
				if alsa:      s.append(dir / 'alsaout.cpp')
				if esound:    s.append(dir / 'esoundout.cpp')
				if dsound:    s.append(dir / 'microsoftdirectsoundout.cpp')
				if False: # these drivers need testing
					if jack:      s.append(dir / 'jackout.cpp')
					if netaudio:  s.append(dir / 'netaudioout.cpp')
					if asio:      s.append(dir / 'asiointerface.cpp')
					if winmm:     s.append(dir / 'microsoftmmewaveout.cpp')

		self._mod_dep_phases = mod_dep_phases = AudioDriversMod()
		self.default_tasks.append(mod_dep_phases.mod_phase)
예제 #10
0
	def __call__(self, sched_ctx):
		top_src_dir = self.src_dir.parent
		src_dir = self.src_dir / 'src'
		default_tasks = self.default_tasks

		universalis = ScriptLoaderTask.shared(self.project, top_src_dir / 'universalis')
		helpers = ScriptLoaderTask.shared(self.project, top_src_dir / 'psycle-helpers')
		for x in sched_ctx.parallel_wait(universalis, helpers): yield x
		universalis = universalis.script_task
		helpers = helpers.script_task
		self._common = common = universalis.common
		universalis = universalis.mod_dep_phases
		helpers_math = helpers.math_mod_dep_phases
		helpers = helpers.mod_dep_phases
		pch = common.pch
		cfg = common.cfg.clone()

		from wonderbuild.cxx_tool_chain import ModTask, BuildCheckTask
		from wonderbuild.install import InstallTask

		check_cfg = cfg.clone()

		class StkCheckTask(BuildCheckTask):
			@staticmethod
			def shared_uid(*args, **kw): return 'stk'

			def apply_mod_to(self, cfg): cfg.libs.extend(['stk'])#, 'asound', 'jack']) # stk uses alsa and jack!

			@property
			def source_text(self): return '#include <stk/Stk.h>'
		stk = StkCheckTask.shared(check_cfg)

		class InterfaceMod(ModTask):
			def __init__(self):
				name = 'psycle-plugin-interface'
				ModTask.__init__(self, name, ModTask.Kinds.HEADERS, cfg,
					cxx_phase=self.__class__.InstallHeaders(cfg.project, name + '-headers'))
				
			class InstallHeaders(InstallTask):
				@property
				def trim_prefix(self): return src_dir

				@property
				def dest_dir(self): return self.fhs.include

				@property
				def sources(self):
					try: return self._sources
					except AttributeError:
						self._sources = [self.trim_prefix / 'psycle' / 'plugin_interface.hpp']
						return self._sources
		
			def apply_cxx_to(self, cfg):
				if not self.cxx_phase.dest_dir in cfg.include_paths: cfg.include_paths.append(self.cxx_phase.dest_dir)
		interface = InterfaceMod()
		
		n = 'psycle-plugin-'
		p = src_dir / 'psycle' / 'plugins'

		class UniformMod(ModTask):
			def __init__(self, name, path, deps=None, kind=ModTask.Kinds.LOADABLE):
				ModTask.__init__(self, name, kind, cfg)
				self.path = path
				if deps is not None: self.public_deps += deps
				if kind in (ModTask.Kinds.PROG, ModTask.Kinds.LOADABLE): default_tasks.append(self.mod_phase)

			def do_set_deps(self, sched_ctx):
				if False: yield
				if self.kind == ModTask.Kinds.PROG: self.private_deps = [pch.prog_task]
				else: self.private_deps = [pch.lib_task]
				self.public_deps += [universalis, helpers_math, helpers]
				if self.name.startswith(n): self.public_deps.append(interface)
				if self.kind == ModTask.Kinds.LIB: self.cxx_phase = self.__class__.InstallHeaders(self)
			
			class InstallHeaders(InstallTask):
				def __init__(self, outer):
					InstallTask.__init__(self, outer.base_cfg.project, outer.name + '-headers')
					self.outer = outer
					
				@property
				def trim_prefix(self): return src_dir

				@property
				def dest_dir(self): return self.fhs.include

				@property
				def sources(self):
					try: return self._sources
					except AttributeError:
						self._sources = []
						if self.outer.path.exists:
							for s in self.outer.path.find_iter(in_pats = ('*.hpp', '*.h'),
								ex_pats = ('*.private.hpp',), prune_pats = ('todo',)): self._sources.append(s)
						for h in ('.hpp', '.h'):
							f = self.outer.path.parent / (self.outer.path.name + h)
							if f.exists:
								self._sources.append(f)
								break
						return self._sources
						
			def apply_cxx_to(self, cfg):
				if self.cxx_phase is not None and not self.cxx_phase.dest_dir in cfg.include_paths:
					cfg.include_paths.append(self.cxx_phase.dest_dir)

			def do_mod_phase(self):
				self.cfg.include_paths.appendleft(src_dir)
				self.cfg.defines['UNIVERSALIS__META__MODULE__NAME'] = '"' + self.name +'"'
				self.cfg.defines['UNIVERSALIS__META__MODULE__VERSION'] = 0
				if self.path.exists:
					for s in self.path.find_iter(in_pats = ('*.cpp',), prune_pats = ('todo',)): self.sources.append(s)
				else: self.sources.append(self.path.parent / (self.path.name + '.cpp'))

		alk_muter = UniformMod(n + 'alk-muter', p / 'alk_muter')
		arguru_cross_delay = UniformMod(n + 'arguru-xfilter', p / 'arguru_xfilter')
		arguru_distortion = UniformMod(n + 'arguru-distortion', p / 'arguru_distortion')
		arguru_goaslicer = UniformMod(n + 'arguru-goaslicer', p / 'arguru_goaslicer')
		arguru_reverb = UniformMod(n + 'arguru-reverb', p / 'arguru_reverb')
		arguru_synth = UniformMod(n + 'arguru-synth-2f', p / 'arguru_synth_2_final')
		arguru_yezar_freeverb = UniformMod(n + 'arguru-freeverb', p / 'yezar_freeverb')
		arguru_compressor = UniformMod(n + 'arguru-compressor', p / 'arguru_compressor')
		audacity_compressor = UniformMod(n + 'audacity-compressor', p / 'audacity' / 'compressor')
		audacity_phaser = UniformMod(n + 'audacity-phaser', p / 'audacity' / 'phaser')
		audacity_wahwah = UniformMod(n + 'wahwah', p / 'audacity' / 'wahwah')
		ayeternal_2_pole_filter = UniformMod(n + 'filter-2-poles', p / 'filter_2_poles')
		ayeternal_delay = UniformMod(n + 'delay', p / 'delay')
		ayeternal_distortion = UniformMod(n + 'distortion', p / 'distortion')
		ayeternal_flanger = UniformMod(n + 'flanger', p / 'flanger')
		ayeternal_gainer = UniformMod(n + 'gainer', p / 'gainer')
		ayeternal_ring_modulator = UniformMod(n + 'ring-modulator', p / 'ring_modulator')
		bdzld_negative = UniformMod(n + 'negative', p / 'negative')
		docbexter_phaser = UniformMod(n + 'bexphase', p / 'bexphase')
		crasher = UniformMod(n + 'crasher', p / 'crasher')
		dw_granulizer = UniformMod(n + 'dw-granulizer', p / 'dw' / 'granulizer')
		dw_iopan = UniformMod(n + 'dw-iopan', p / 'dw' / 'iopan')
		dw_tremolo = UniformMod(n + 'dw-tremolo', p / 'dw' / 'tremolo')
		gzero_synth = UniformMod(n + 'gzero-synth', p / 'gzero_synth')
		haas = UniformMod(n + 'haas', p / 'haas')
		jme_blitz = UniformMod(n + 'blitz12', p / 'jme' / 'blitz12')
		jme_gamefx = UniformMod(n + 'gamefx13', p / 'jme' / 'gamefx13')
		jme_blitzn = UniformMod(n + 'blitzn', p / 'jme' / 'blitzn')
		jme_gamefxn = UniformMod(n + 'gamefxn', p / 'jme' / 'gamefxn')
		josepma_drums = UniformMod(n + 'jmdrum', p / 'jm_drums')
		karlkox_surround = UniformMod(n + 'karlkox-surround', p / 'surround')
		ladspa_gverb = UniformMod(n + 'ladspa-gverb', p / 'gverb')
		legasynth_303 = UniformMod(n + 'legasynth-303', p / 'legasynth')
		m3 = UniformMod(n + 'm3', p / 'm3')
		moreamp_eq = UniformMod(n + 'maeq', p / 'moreamp_eq')
		nrs_7900_fractal = UniformMod(n + 'nrs-7900-fractal', p / 'ninereeds_7900')
		pooplog_autopan = UniformMod(n + 'pooplog-autopan', p / 'pooplog_autopan')
		pooplog_delay = UniformMod(n + 'pooplog-delay', p / 'pooplog_delay')
		pooplog_delay_light = UniformMod(n + 'pooplog-delay-light', p / 'pooplog_delay_light')
		pooplog_filter = UniformMod(n + 'pooplog-filter', p / 'pooplog_filter')
		pooplog_fm_laboratory = UniformMod(n + 'pooplog-fm-laboratory', p / 'pooplog_synth')
		pooplog_fm_light = UniformMod(n + 'pooplog-fm-light', p / 'pooplog_synth_light')
		pooplog_fm_ultralight = UniformMod(n + 'pooplog-fm-ultralight', p / 'pooplog_synth_ultralight')
		pooplog_lofi_processor = UniformMod(n + 'pooplog-lofi-processor', p / 'pooplog_lofi')
		pooplog_scratch_master = UniformMod(n + 'pooplog-scratch-master', p / 'pooplog_scratch')
		pooplog_scratch_master_2 = UniformMod(n + 'pooplog-scratch-master-2', p / 'pooplog_scratch_2')
		satorius_chorus = UniformMod(n + 'schorus', p / 'SChorus')
		thunderpalace_softsat = UniformMod(n + 'thunderpalace-softsat', p / 'graue' / 'softsat')
		vincenzo_demasi_all_pass = UniformMod(n + 'vdallpass', p / 'vincenzo_demasi' / 'vdAllPass')
		vincenzo_demasi_echo = UniformMod(n + 'vdecho', p / 'vincenzo_demasi' / 'vdEcho')
		vincenzo_demasi_fastverb = UniformMod(n + 'vsfastverb', p / 'vincenzo_demasi' / 'vsFastVerb')
		vincenzo_demasi_noise_gate = UniformMod(n + 'vdnoisegate', p / 'vincenzo_demasi' / 'vdNoiseGate')
		zephod_super_fm = UniformMod(n + 'zephod-superfm', p / 'zephod_super_fm')
		
		dw_filter = UniformMod('psycle-dw-filter', p / 'dw' / 'dw_filter', kind=ModTask.Kinds.LIB)
		dw_eq = UniformMod(n + 'dw-eq', p / 'dw' / 'eq', deps=(dw_filter,))
		
		druttis_dsp = UniformMod('psycle-druttis-dsp', p / 'druttis' / 'dsp', kind=ModTask.Kinds.LIB)
		druttis_band_limited_wave_tables = UniformMod('psycle-druttis-band-limited-wave-tables', p / 'druttis' / 'blwtbl', deps=(druttis_dsp,))
		druttis_plucked_string = UniformMod(n + 'pluckedstring', p / 'druttis' / 'PluckedString', deps=(druttis_dsp,))
		druttis_sublime = UniformMod(n + 'sublime', p / 'druttis' / 'sublime', deps=(druttis_dsp, druttis_band_limited_wave_tables))
		druttis_slicit = UniformMod(n + 'slicit', p / 'druttis' / 'slicit', deps=(druttis_dsp,))
		druttis_eq3 = UniformMod(n + 'eq3', p / 'druttis' / 'eq3', deps=(druttis_dsp,))
		druttis_koruz = UniformMod(n + 'koruz', p / 'druttis' / 'Koruz', deps=(druttis_dsp,))
		druttis_phantom = UniformMod(n + 'phantom', p / 'druttis' / 'Phantom', deps=(druttis_dsp,))
		druttis_feed_me = UniformMod(n + 'feedme', p / 'druttis' / 'FeedMe', deps=(druttis_dsp,))

		if False: # it uses ms's winapi!
			yannis_brown_midi = UniformMod(n + 'ymidi', p / 'y_midi')

		if False: # [bohan] i haven't found this one listed in the closed-source dir, but i can't find its sources either!
			guido_volume = UniformMod(n + 'guido-volume', p / '?????!!!!!!!!')
		
		for x in sched_ctx.parallel_wait(stk): yield x
		if stk:
			stk_plucked = UniformMod(n + 'stk-plucked', p / 'stk' / 'stk.plucked', deps=(stk,))
			stk_rev = UniformMod(n + 'stk-rev', p / 'stk' / 'stk.reverbs', deps=(stk,))
			stk_shakers = UniformMod(n + 'stk-shakers', p / 'stk' / 'stk.shakers', deps=(stk,))
예제 #11
0
	def __call__(self, sched_ctx):
		top_src_dir = self.src_dir.parent
		src_dir = self.src_dir / 'src'

		universalis = ScriptLoaderTask.shared(self.project, top_src_dir / 'universalis')
		for x in sched_ctx.parallel_wait(universalis): yield x
		universalis = universalis.script_task
		self._common = common = universalis.common
		universalis = universalis.mod_dep_phases
		pch = common.pch
		cfg = common.cfg.clone()

		from wonderbuild.cxx_tool_chain import UserBuildCfgTask, ModTask, PkgConfigCheckTask
		from wonderbuild.std_checks.std_math import StdMathCheckTask
		from wonderbuild.std_checks.boost import BoostCheckTask
		from wonderbuild.install import InstallTask

		check_cfg = cfg.clone()
		std_math = StdMathCheckTask.shared(check_cfg)
		soxr = PkgConfigCheckTask.shared(check_cfg, ['soxr >= 0.1.1'])
		boost_test = BoostCheckTask.shared(check_cfg, (1, 40, 0), ('unit_test_framework',))

		class HelpersMathMod(ModTask):
			def __init__(self):
				name = 'psycle-helpers-math'
				ModTask.__init__(self, name, ModTask.Kinds.HEADERS, cfg,
					cxx_phase = self.__class__.InstallHeaders(cfg.project, name + '-headers'))
				
			def do_set_deps(self, sched_ctx):
				if False: yield
				self.private_deps = [pch.lib_task]
				self.public_deps = [universalis, std_math]

			class InstallHeaders(InstallTask):
				@property
				def trim_prefix(self): return src_dir

				@property
				def dest_dir(self): return self.fhs.include

				@property
				def sources(self):
					try: return self._sources
					except AttributeError:
						self._sources = [self.trim_prefix / 'psycle' / 'helpers' / 'math.hpp'] + \
							list((self.trim_prefix / 'psycle' / 'helpers' / 'math').find_iter(
								in_pats = ('*.hpp',), ex_pats = ('*.private.hpp',), prune_pats = ('todo',)))
						return self._sources
						
			def apply_cxx_to(self, cfg):
				if not self.cxx_phase.dest_dir in cfg.include_paths: cfg.include_paths.append(self.cxx_phase.dest_dir)

		self._math_mod_dep_phases = helpers_math = HelpersMathMod()
		self.default_tasks.append(helpers_math.cxx_phase)

		class HelpersMod(ModTask):
			def __init__(self): ModTask.__init__(self, 'psycle-helpers', ModTask.Kinds.LIB, cfg)

			def do_set_deps(self, sched_ctx):
				if False: yield
				self.private_deps = [pch.lib_task]
				self.public_deps = [universalis, helpers_math, soxr]
				self.cxx_phase = HelpersMod.InstallHeaders(self.base_cfg.project, self.name + '-headers')

			class InstallHeaders(InstallTask):
				@property
				def trim_prefix(self): return src_dir

				@property
				def dest_dir(self): return self.fhs.include

				@property
				def sources(self):
					try: return self._sources
					except AttributeError:
						self._sources = []
						for s in (self.trim_prefix / 'psycle' / 'helpers').find_iter(
							in_pats = ('*.hpp',), ex_pats = ('*.private.hpp', 'math.hpp'), prune_pats = ('todo', 'math')): self._sources.append(s)
						return self._sources

			def apply_cxx_to(self, cfg):
				if not self.cxx_phase.dest_dir in cfg.include_paths: cfg.include_paths.append(self.cxx_phase.dest_dir)

			def do_mod_phase(self):
				self.cfg.include_paths.appendleft(src_dir)
				self.cfg.defines['UNIVERSALIS__META__MODULE__NAME'] = '"' + self.name +'"'
				self.cfg.defines['UNIVERSALIS__META__MODULE__VERSION'] = 0
				for s in (src_dir / 'psycle' / 'helpers').find_iter(in_pats = ('*.cpp',), prune_pats = ('todo', 'math')): self.sources.append(s)

		self._mod_dep_phases = helpers = HelpersMod()
		self.default_tasks.append(helpers.mod_phase)
						
		for x in sched_ctx.parallel_wait(boost_test): yield x
		if boost_test:
			class UnitTestMod(ModTask):
				def __init__(self): ModTask.__init__(self, 'psycle-helpers-unit-tests', ModTask.Kinds.PROG, cfg)

				def do_set_deps(self, sched_ctx):
					if False: yield
					self.private_deps = [pch.prog_task, helpers, boost_test]

				def do_mod_phase(self):
					self.cfg.include_paths.appendleft(src_dir)
					self.cfg.defines['UNIVERSALIS__META__MODULE__NAME'] = '"' + self.name +'"'
					self.cfg.defines['UNIVERSALIS__META__MODULE__VERSION'] = 0
					self.sources.append(src_dir / 'unit_tests.cpp')
				
			unit_tests = UnitTestMod()
			self.default_tasks.append(unit_tests.mod_phase)
예제 #12
0
    def __call__(self, sched_ctx):
        top_src_dir = self.src_dir.parent
        src_dir = self.src_dir / 'src'
        default_tasks = self.default_tasks

        helpers = ScriptLoaderTask.shared(self.project,
                                          top_src_dir / 'psycle-helpers')
        for x in sched_ctx.parallel_wait(helpers):
            yield x
        helpers = helpers.script_task
        self._common = common = helpers.common
        helpers = helpers.mod_dep_phases
        pch = common.pch
        cfg = common.cfg.clone()

        from wonderbuild.cxx_tool_chain import PkgConfigCheckTask, ModTask
        from wonderbuild.std_checks.winmm import WinMMCheckTask
        from wonderbuild.std_checks.dsound import DSoundCheckTask
        from wonderbuild.install import InstallTask

        check_cfg = cfg.clone()
        gstreamer = PkgConfigCheckTask.shared(check_cfg, ['gstreamer-0.10'])
        jack = PkgConfigCheckTask.shared(check_cfg, ['jack >= 0.101.1'])
        alsa = PkgConfigCheckTask.shared(check_cfg, ['alsa >= 1.0'])
        esound = PkgConfigCheckTask.shared(check_cfg, ['esound'])
        dsound = DSoundCheckTask.shared(check_cfg)
        winmm = WinMMCheckTask.shared(check_cfg)

        for x in sched_ctx.parallel_wait(gstreamer, jack, alsa, esound, dsound,
                                         winmm):
            yield x

        class UniformMod(ModTask):
            def __init__(self,
                         name,
                         path,
                         deps=None,
                         kind=ModTask.Kinds.LOADABLE):
                ModTask.__init__(self, name, kind, cfg)
                self.path = path
                if deps is not None: self.public_deps += deps
                if kind in (ModTask.Kinds.PROG, ModTask.Kinds.LOADABLE):
                    default_tasks.append(self.mod_phase)
                self.cxx_phase = self.__class__.InstallHeaders(
                    self
                )  # note: set in __ini__ because called directly in AudioDriversMod.__call__

            def do_set_deps(self, sched_ctx):
                if False: yield
                if self.kind == ModTask.Kinds.PROG:
                    self.private_deps = [pch.prog_task]
                else:
                    self.private_deps = [pch.lib_task]
                self.public_deps += [helpers]

            class InstallHeaders(InstallTask):
                def __init__(self, outer):
                    InstallTask.__init__(self, outer.base_cfg.project,
                                         outer.name + '-headers')
                    self.outer = outer

                @property
                def trim_prefix(self):
                    return src_dir

                @property
                def dest_dir(self):
                    return self.fhs.include

                @property
                def sources(self):
                    try:
                        return self._sources
                    except AttributeError:
                        self._sources = []
                        if self.outer.path.exists:
                            for s in self.outer.path.find_iter(
                                    in_pats=('*.hpp', '*.h'),
                                    ex_pats=('*.private.hpp', ),
                                    prune_pats=('todo', )):
                                self._sources.append(s)
                        for h in ('.hpp', '.h'):
                            f = self.outer.path.parent / (
                                self.outer.path.name + h)
                            if f.exists:
                                self._sources.append(f)
                                break
                        return self._sources

            def apply_cxx_to(self, cfg):
                if not self.cxx_phase.dest_dir in cfg.include_paths:
                    cfg.include_paths.append(self.cxx_phase.dest_dir)

            def do_mod_phase(self):
                self.cfg.include_paths.appendleft(src_dir)
                self.cfg.defines[
                    'UNIVERSALIS__META__MODULE__NAME'] = '"' + self.name + '"'
                self.cfg.defines['UNIVERSALIS__META__MODULE__VERSION'] = 0
                if self.path.exists:
                    for s in self.path.find_iter(in_pats=('*.cpp', ),
                                                 prune_pats=('todo', )):
                        self.sources.append(s)
                else:
                    self.sources.append(self.path.parent /
                                        (self.path.name + '.cpp'))

        class AudioDriverMod(UniformMod):
            def __init__(self, name, path, deps=None, define_name=None):
                UniformMod.__init__(self, 'psycle-audiodriver-' + name,
                                    src_dir / 'psycle' / 'audiodrivers' / path,
                                    deps)
                self._define_name = define_name is not None and define_name or name.replace(
                    '-', '_').upper()

            def _apply_defines_to(self, cfg):
                cfg.defines['PSYCLE__' + self._define_name +
                            '_AVAILABLE'] = None

            def apply_cxx_to(self, cfg):
                self._apply_defines_to(cfg)

            def do_mod_phase(self):
                self._apply_defines_to(self.cfg)
                UniformMod.do_mod_phase(self)

        if gstreamer:
            gst_driver = AudioDriverMod('gstreamer',
                                        'gstreamerout',
                                        deps=(gstreamer, ))
        if alsa: alsa_driver = AudioDriverMod('alsa', 'alsaout', deps=(alsa, ))
        if esound:
            esound_driver = AudioDriverMod('esound',
                                           'esoundout',
                                           deps=(esound, ))
        if dsound:
            dsound_driver = AudioDriverMod('microsoft-direct-sound',
                                           'microsoftdirectsoundout',
                                           deps=(dsound, ))
        file_driver = AudioDriverMod('wave-file', 'wavefileout')
        if False:  # these drivers need testing
            if jack:
                jack_driver = AudioDriverMod('jack', 'jackout', deps=(jack, ))
            if winmm:
                winmm_driver = AudioDriverMod('microsoft-mme',
                                              'microsoftmmewaveout',
                                              deps=(winmm, ))
            # netaudio
            # asio

        # TODO this all-in-one lib should be removed in favor of separate loadable modules, one per driver
        class AudioDriversMod(ModTask):
            def __init__(self):
                ModTask.__init__(self, 'psycle-audiodrivers',
                                 ModTask.Kinds.LIB, cfg)

            def do_set_deps(self, sched_ctx):
                self.private_deps = [pch.lib_task]
                self.public_deps = [helpers]
                req = self.public_deps + self.private_deps
                opt = [alsa, jack, esound, dsound, winmm,
                       gstreamer]  # netaudio, asio
                for x in sched_ctx.parallel_wait(*(req + opt)):
                    yield x
                self.public_deps += [o for o in opt if o]
                self.cxx_phase = self.__class__.InstallHeaders(
                    self.base_cfg.project, self.name + '-headers')

                # brings the headers
                h = []
                if gstreamer: h.append(gst_driver)
                if alsa: h.append(alsa_driver)
                if esound: h.append(esound_driver)
                if dsound: h.append(dsound_driver)
                h.append(file_driver)
                if False:  # these drivers need testing
                    if jack: h.append(jack_driver)
                    if winmm: h.append(winmm_driver)
                    # netaudio
                    # asio
                for x in sched_ctx.parallel_wait(*(h.cxx_phase for h in h)):
                    yield x

            class InstallHeaders(InstallTask):
                @property
                def trim_prefix(self):
                    return src_dir

                @property
                def dest_dir(self):
                    return self.fhs.include

                @property
                def sources(self):
                    try:
                        return self._sources
                    except AttributeError:
                        self._sources = s = []
                        dir = src_dir / 'psycle' / 'audiodrivers'
                        s.append(dir / 'audiodriver.h')
                        if False:  # now done in individual driver tasks
                            s.append(dir / 'wavefileout.h')
                            if gstreamer: s.append(dir / 'gstreamerout.h')
                            if alsa: s.append(dir / 'alsaout.h')
                            if esound: s.append(dir / 'esoundout.h')
                            if dsound:
                                s.append(dir / 'microsoftdirectsoundout.h')
                            if False:  # these drivers need testing
                                if jack: s.append(dir / 'jackout.h')
                                if netaudio: s.append(dir / 'netaudioout.h')
                                if asio: s.append(dir / 'asioout.h')
                                if winmm:
                                    s.append(dir / 'microsoftmmewaveout.h')
                        return s

            def _apply_defines_to(self, cfg):
                if gstreamer: cfg.defines['PSYCLE__GSTREAMER_AVAILABLE'] = None
                if alsa: cfg.defines['PSYCLE__ALSA_AVAILABLE'] = None
                if esound: cfg.defines['PSYCLE__ESOUND_AVAILABLE'] = None
                if dsound:
                    cfg.defines[
                        'PSYCLE__MICROSOFT_DIRECT_SOUND_AVAILABLE'] = None
                if False:  # these drivers need testing
                    if jack: cfg.defines['PSYCLE__JACK_AVAILABLE'] = None
                    if netaudio:
                        cfg.defines['PSYCLE__NET_AUDIO_AVAILABLE'] = None
                    if asio:
                        cfg.defines['PSYCLE__STEINBERG_ASIO_AVAILABLE'] = None
                    if winmm:
                        cfg.defines['PSYCLE__MICROSOFT_MME_AVAILABLE'] = None

            def apply_cxx_to(self, cfg):
                self._apply_defines_to(cfg)
                if not self.cxx_phase.dest_dir in cfg.include_paths:
                    cfg.include_paths.append(self.cxx_phase.dest_dir)

            def do_mod_phase(self):
                self._apply_defines_to(self.cfg)
                self.cfg.include_paths.appendleft(src_dir)
                self.cfg.defines[
                    'UNIVERSALIS__META__MODULE__NAME'] = '"' + self.name + '"'
                self.cfg.defines['UNIVERSALIS__META__MODULE__VERSION'] = 0
                s = self.sources
                dir = src_dir / 'psycle' / 'audiodrivers'
                s.append(dir / 'audiodriver.cpp')
                s.append(dir / 'wavefileout.cpp')
                if gstreamer: s.append(dir / 'gstreamerout.cpp')
                if alsa: s.append(dir / 'alsaout.cpp')
                if esound: s.append(dir / 'esoundout.cpp')
                if dsound: s.append(dir / 'microsoftdirectsoundout.cpp')
                if False:  # these drivers need testing
                    if jack: s.append(dir / 'jackout.cpp')
                    if netaudio: s.append(dir / 'netaudioout.cpp')
                    if asio: s.append(dir / 'asiointerface.cpp')
                    if winmm: s.append(dir / 'microsoftmmewaveout.cpp')

        self._mod_dep_phases = mod_dep_phases = AudioDriversMod()
        self.default_tasks.append(mod_dep_phases.mod_phase)
예제 #13
0
    def __call__(self, sched_ctx):
        top_src_dir = self.src_dir.parent
        src_dir = self.src_dir / 'src'
        default_tasks = self.default_tasks

        universalis = ScriptLoaderTask.shared(self.project,
                                              top_src_dir / 'universalis')
        helpers = ScriptLoaderTask.shared(self.project,
                                          top_src_dir / 'psycle-helpers')
        for x in sched_ctx.parallel_wait(universalis, helpers):
            yield x
        universalis = universalis.script_task
        helpers = helpers.script_task
        self._common = common = universalis.common
        universalis = universalis.mod_dep_phases
        helpers_math = helpers.math_mod_dep_phases
        helpers = helpers.mod_dep_phases
        pch = common.pch
        cfg = common.cfg.clone()

        from wonderbuild.cxx_tool_chain import ModTask, BuildCheckTask
        from wonderbuild.install import InstallTask

        check_cfg = cfg.clone()

        class StkCheckTask(BuildCheckTask):
            @staticmethod
            def shared_uid(*args, **kw):
                return 'stk'

            def apply_mod_to(self, cfg):
                cfg.libs.extend(
                    ['stk'])  #, 'asound', 'jack']) # stk uses alsa and jack!

            @property
            def source_text(self):
                return '#include <stk/Stk.h>'

        stk = StkCheckTask.shared(check_cfg)

        class InterfaceMod(ModTask):
            def __init__(self):
                name = 'psycle-plugin-interface'
                ModTask.__init__(self,
                                 name,
                                 ModTask.Kinds.HEADERS,
                                 cfg,
                                 cxx_phase=self.__class__.InstallHeaders(
                                     cfg.project, name + '-headers'))

            class InstallHeaders(InstallTask):
                @property
                def trim_prefix(self):
                    return src_dir

                @property
                def dest_dir(self):
                    return self.fhs.include

                @property
                def sources(self):
                    try:
                        return self._sources
                    except AttributeError:
                        self._sources = [
                            self.trim_prefix / 'psycle' /
                            'plugin_interface.hpp'
                        ]
                        return self._sources

            def apply_cxx_to(self, cfg):
                if not self.cxx_phase.dest_dir in cfg.include_paths:
                    cfg.include_paths.append(self.cxx_phase.dest_dir)

        interface = InterfaceMod()

        n = 'psycle-plugin-'
        p = src_dir / 'psycle' / 'plugins'

        class UniformMod(ModTask):
            def __init__(self,
                         name,
                         path,
                         deps=None,
                         kind=ModTask.Kinds.LOADABLE):
                ModTask.__init__(self, name, kind, cfg)
                self.path = path
                if deps is not None: self.public_deps += deps
                if kind in (ModTask.Kinds.PROG, ModTask.Kinds.LOADABLE):
                    default_tasks.append(self.mod_phase)

            def do_set_deps(self, sched_ctx):
                if False: yield
                if self.kind == ModTask.Kinds.PROG:
                    self.private_deps = [pch.prog_task]
                else:
                    self.private_deps = [pch.lib_task]
                self.public_deps += [universalis, helpers_math, helpers]
                if self.name.startswith(n): self.public_deps.append(interface)
                if self.kind == ModTask.Kinds.LIB:
                    self.cxx_phase = self.__class__.InstallHeaders(self)

            class InstallHeaders(InstallTask):
                def __init__(self, outer):
                    InstallTask.__init__(self, outer.base_cfg.project,
                                         outer.name + '-headers')
                    self.outer = outer

                @property
                def trim_prefix(self):
                    return src_dir

                @property
                def dest_dir(self):
                    return self.fhs.include

                @property
                def sources(self):
                    try:
                        return self._sources
                    except AttributeError:
                        self._sources = []
                        if self.outer.path.exists:
                            for s in self.outer.path.find_iter(
                                    in_pats=('*.hpp', '*.h'),
                                    ex_pats=('*.private.hpp', ),
                                    prune_pats=('todo', )):
                                self._sources.append(s)
                        for h in ('.hpp', '.h'):
                            f = self.outer.path.parent / (
                                self.outer.path.name + h)
                            if f.exists:
                                self._sources.append(f)
                                break
                        return self._sources

            def apply_cxx_to(self, cfg):
                if self.cxx_phase is not None and not self.cxx_phase.dest_dir in cfg.include_paths:
                    cfg.include_paths.append(self.cxx_phase.dest_dir)

            def do_mod_phase(self):
                self.cfg.include_paths.appendleft(src_dir)
                self.cfg.defines[
                    'UNIVERSALIS__META__MODULE__NAME'] = '"' + self.name + '"'
                self.cfg.defines['UNIVERSALIS__META__MODULE__VERSION'] = 0
                if self.path.exists:
                    for s in self.path.find_iter(in_pats=('*.cpp', ),
                                                 prune_pats=('todo', )):
                        self.sources.append(s)
                else:
                    self.sources.append(self.path.parent /
                                        (self.path.name + '.cpp'))

        alk_muter = UniformMod(n + 'alk-muter', p / 'alk_muter')
        arguru_cross_delay = UniformMod(n + 'arguru-xfilter',
                                        p / 'arguru_xfilter')
        arguru_distortion = UniformMod(n + 'arguru-distortion',
                                       p / 'arguru_distortion')
        arguru_goaslicer = UniformMod(n + 'arguru-goaslicer',
                                      p / 'arguru_goaslicer')
        arguru_reverb = UniformMod(n + 'arguru-reverb', p / 'arguru_reverb')
        arguru_synth = UniformMod(n + 'arguru-synth-2f',
                                  p / 'arguru_synth_2_final')
        arguru_yezar_freeverb = UniformMod(n + 'arguru-freeverb',
                                           p / 'yezar_freeverb')
        arguru_compressor = UniformMod(n + 'arguru-compressor',
                                       p / 'arguru_compressor')
        audacity_compressor = UniformMod(n + 'audacity-compressor',
                                         p / 'audacity' / 'compressor')
        audacity_phaser = UniformMod(n + 'audacity-phaser',
                                     p / 'audacity' / 'phaser')
        audacity_wahwah = UniformMod(n + 'wahwah', p / 'audacity' / 'wahwah')
        ayeternal_2_pole_filter = UniformMod(n + 'filter-2-poles',
                                             p / 'filter_2_poles')
        ayeternal_delay = UniformMod(n + 'delay', p / 'delay')
        ayeternal_distortion = UniformMod(n + 'distortion', p / 'distortion')
        ayeternal_flanger = UniformMod(n + 'flanger', p / 'flanger')
        ayeternal_gainer = UniformMod(n + 'gainer', p / 'gainer')
        ayeternal_ring_modulator = UniformMod(n + 'ring-modulator',
                                              p / 'ring_modulator')
        bdzld_negative = UniformMod(n + 'negative', p / 'negative')
        docbexter_phaser = UniformMod(n + 'bexphase', p / 'bexphase')
        crasher = UniformMod(n + 'crasher', p / 'crasher')
        dw_granulizer = UniformMod(n + 'dw-granulizer',
                                   p / 'dw' / 'granulizer')
        dw_iopan = UniformMod(n + 'dw-iopan', p / 'dw' / 'iopan')
        dw_tremolo = UniformMod(n + 'dw-tremolo', p / 'dw' / 'tremolo')
        gzero_synth = UniformMod(n + 'gzero-synth', p / 'gzero_synth')
        haas = UniformMod(n + 'haas', p / 'haas')
        jme_blitz = UniformMod(n + 'blitz12', p / 'jme' / 'blitz12')
        jme_gamefx = UniformMod(n + 'gamefx13', p / 'jme' / 'gamefx13')
        jme_blitzn = UniformMod(n + 'blitzn', p / 'jme' / 'blitzn')
        jme_gamefxn = UniformMod(n + 'gamefxn', p / 'jme' / 'gamefxn')
        josepma_drums = UniformMod(n + 'jmdrum', p / 'jm_drums')
        karlkox_surround = UniformMod(n + 'karlkox-surround', p / 'surround')
        ladspa_gverb = UniformMod(n + 'ladspa-gverb', p / 'gverb')
        legasynth_303 = UniformMod(n + 'legasynth-303', p / 'legasynth')
        m3 = UniformMod(n + 'm3', p / 'm3')
        moreamp_eq = UniformMod(n + 'maeq', p / 'moreamp_eq')
        nrs_7900_fractal = UniformMod(n + 'nrs-7900-fractal',
                                      p / 'ninereeds_7900')
        pooplog_autopan = UniformMod(n + 'pooplog-autopan',
                                     p / 'pooplog_autopan')
        pooplog_delay = UniformMod(n + 'pooplog-delay', p / 'pooplog_delay')
        pooplog_delay_light = UniformMod(n + 'pooplog-delay-light',
                                         p / 'pooplog_delay_light')
        pooplog_filter = UniformMod(n + 'pooplog-filter', p / 'pooplog_filter')
        pooplog_fm_laboratory = UniformMod(n + 'pooplog-fm-laboratory',
                                           p / 'pooplog_synth')
        pooplog_fm_light = UniformMod(n + 'pooplog-fm-light',
                                      p / 'pooplog_synth_light')
        pooplog_fm_ultralight = UniformMod(n + 'pooplog-fm-ultralight',
                                           p / 'pooplog_synth_ultralight')
        pooplog_lofi_processor = UniformMod(n + 'pooplog-lofi-processor',
                                            p / 'pooplog_lofi')
        pooplog_scratch_master = UniformMod(n + 'pooplog-scratch-master',
                                            p / 'pooplog_scratch')
        pooplog_scratch_master_2 = UniformMod(n + 'pooplog-scratch-master-2',
                                              p / 'pooplog_scratch_2')
        satorius_chorus = UniformMod(n + 'schorus', p / 'SChorus')
        thunderpalace_softsat = UniformMod(n + 'thunderpalace-softsat',
                                           p / 'graue' / 'softsat')
        vincenzo_demasi_all_pass = UniformMod(
            n + 'vdallpass', p / 'vincenzo_demasi' / 'vdAllPass')
        vincenzo_demasi_echo = UniformMod(n + 'vdecho',
                                          p / 'vincenzo_demasi' / 'vdEcho')
        vincenzo_demasi_fastverb = UniformMod(
            n + 'vsfastverb', p / 'vincenzo_demasi' / 'vsFastVerb')
        vincenzo_demasi_noise_gate = UniformMod(
            n + 'vdnoisegate', p / 'vincenzo_demasi' / 'vdNoiseGate')
        zephod_super_fm = UniformMod(n + 'zephod-superfm',
                                     p / 'zephod_super_fm')

        dw_filter = UniformMod('psycle-dw-filter',
                               p / 'dw' / 'dw_filter',
                               kind=ModTask.Kinds.LIB)
        dw_eq = UniformMod(n + 'dw-eq', p / 'dw' / 'eq', deps=(dw_filter, ))

        druttis_dsp = UniformMod('psycle-druttis-dsp',
                                 p / 'druttis' / 'dsp',
                                 kind=ModTask.Kinds.LIB)
        druttis_band_limited_wave_tables = UniformMod(
            'psycle-druttis-band-limited-wave-tables',
            p / 'druttis' / 'blwtbl',
            deps=(druttis_dsp, ))
        druttis_plucked_string = UniformMod(n + 'pluckedstring',
                                            p / 'druttis' / 'PluckedString',
                                            deps=(druttis_dsp, ))
        druttis_sublime = UniformMod(n + 'sublime',
                                     p / 'druttis' / 'sublime',
                                     deps=(druttis_dsp,
                                           druttis_band_limited_wave_tables))
        druttis_slicit = UniformMod(n + 'slicit',
                                    p / 'druttis' / 'slicit',
                                    deps=(druttis_dsp, ))
        druttis_eq3 = UniformMod(n + 'eq3',
                                 p / 'druttis' / 'eq3',
                                 deps=(druttis_dsp, ))
        druttis_koruz = UniformMod(n + 'koruz',
                                   p / 'druttis' / 'Koruz',
                                   deps=(druttis_dsp, ))
        druttis_phantom = UniformMod(n + 'phantom',
                                     p / 'druttis' / 'Phantom',
                                     deps=(druttis_dsp, ))
        druttis_feed_me = UniformMod(n + 'feedme',
                                     p / 'druttis' / 'FeedMe',
                                     deps=(druttis_dsp, ))

        if False:  # it uses ms's winapi!
            yannis_brown_midi = UniformMod(n + 'ymidi', p / 'y_midi')

        if False:  # [bohan] i haven't found this one listed in the closed-source dir, but i can't find its sources either!
            guido_volume = UniformMod(n + 'guido-volume', p / '?????!!!!!!!!')

        for x in sched_ctx.parallel_wait(stk):
            yield x
        if stk:
            stk_plucked = UniformMod(n + 'stk-plucked',
                                     p / 'stk' / 'stk.plucked',
                                     deps=(stk, ))
            stk_rev = UniformMod(n + 'stk-rev',
                                 p / 'stk' / 'stk.reverbs',
                                 deps=(stk, ))
            stk_shakers = UniformMod(n + 'stk-shakers',
                                     p / 'stk' / 'stk.shakers',
                                     deps=(stk, ))
예제 #14
0
	def __call__(self, sched_ctx):
		top_src_dir = self.src_dir.parent
		src_dir = self.src_dir / 'src'
		
		diversalis = ScriptLoaderTask.shared(self.project, top_src_dir / 'diversalis')
		for x in sched_ctx.parallel_wait(diversalis): yield x
		diversalis = diversalis.script_task
		self._common = common = diversalis.common
		diversalis = diversalis.mod_dep_phases
		pch = common.pch
		cfg = common.cfg.clone()

		from wonderbuild.cxx_tool_chain import PkgConfigCheckTask, ModTask
		from wonderbuild.std_checks.std_math import StdMathCheckTask
		from wonderbuild.std_checks.std_cxx11 import StdCxx11CheckTask
		from wonderbuild.std_checks.boost import BoostCheckTask
		from wonderbuild.std_checks.multithreading_support import MultithreadingSupportCheckTask
		from wonderbuild.std_checks.openmp import OpenMPCheckTask
		from wonderbuild.std_checks.dynamic_loading_support import DynamicLoadingSupportCheckTask
		from wonderbuild.std_checks.winmm import WinMMCheckTask

		check_cfg = cfg.clone()
		std_math = StdMathCheckTask.shared(check_cfg)
		std_cxx11 = StdCxx11CheckTask.shared(check_cfg)
		boost = BoostCheckTask.shared(check_cfg, (1, 40, 0), ('system', 'thread', 'filesystem', 'date_time'))
		boost_test = BoostCheckTask.shared(check_cfg, (1, 40, 0), ('unit_test_framework',))
		mt = MultithreadingSupportCheckTask.shared(check_cfg)
		openmp = OpenMPCheckTask.shared(check_cfg)
		dl = DynamicLoadingSupportCheckTask.shared(check_cfg)
		glibmm = PkgConfigCheckTask.shared(check_cfg, ['glibmm-2.4', 'gmodule-2.0', 'gthread-2.0'])
		winmm = WinMMCheckTask.shared(check_cfg)
		
		from wonderbuild.install import InstallTask

		class UniversalisMod(ModTask):
			def __init__(self): ModTask.__init__(self, 'universalis', ModTask.Kinds.LIB, cfg)
				
			def do_set_deps(self, sched_ctx):
				self.public_deps = [diversalis, std_math, boost, mt, dl]
				if self.cfg.dest_platform.os == 'win': self.public_deps.append(winmm)
				req = self.all_deps
				opt = [std_cxx11, openmp, glibmm]
				for x in sched_ctx.parallel_wait(*(req + opt)): yield x
				self.public_deps += [o for o in opt if o]
				self.cxx_phase = self.__class__.InstallHeaders(self.base_cfg.project, self.name + '-headers')

			class InstallHeaders(InstallTask):
				@property
				def trim_prefix(self): return src_dir

				@property
				def dest_dir(self): return self.fhs.include

				@property
				def sources(self):
					try: return self._sources
					except AttributeError:
						self._sources = [self.trim_prefix / 'universalis.hpp'] + \
							list((self.trim_prefix / 'universalis').find_iter(
								in_pats = ('*.hpp',), ex_pats = ('*.private.hpp',), prune_pats = ('todo',)))
						return self._sources

			def apply_cxx_to(self, cfg):
				if self.cxx_phase.dest_dir not in cfg.include_paths: cfg.include_paths.append(self.cxx_phase.dest_dir)
				if not self.cfg.shared: cfg.defines['UNIVERSALIS__SOURCE'] = '-1'

			def do_mod_phase(self):
				if self.cfg.shared: self.cfg.defines['UNIVERSALIS__SHARED'] = None
				self.cfg.defines['UNIVERSALIS__META__MODULE__NAME'] = '"' + self.name +'"'
				self.cfg.defines['UNIVERSALIS__META__MODULE__VERSION'] = 0
				self.cfg.include_paths.appendleft(src_dir)
				for s in (src_dir / 'universalis').find_iter(in_pats = ('*.cpp',), prune_pats = ('todo',)): self.sources.append(s)
			
		self._mod_dep_phases = mod_dep_phases = universalis = UniversalisMod()
		common.pch.private_deps.append(mod_dep_phases)
		self.default_tasks.append(mod_dep_phases.mod_phase)

		for x in sched_ctx.parallel_wait(boost_test): yield x
		if boost_test:
			class UnitTestMod(ModTask):
				def __init__(self): ModTask.__init__(self, 'universalis-unit-tests', ModTask.Kinds.PROG, cfg)

				def do_set_deps(self, sched_ctx):
					if False: yield
					self.private_deps = [pch.prog_task, universalis, boost_test]

				def do_mod_phase(self):
					self.cfg.include_paths.appendleft(src_dir)
					self.cfg.defines['UNIVERSALIS__META__MODULE__NAME'] = '"' + self.name +'"'
					self.cfg.defines['UNIVERSALIS__META__MODULE__VERSION'] = 0
					self.sources.append(src_dir / 'unit_tests.cpp')
				
			unit_tests = UnitTestMod()
			self.default_tasks.append(unit_tests.mod_phase)
예제 #15
0
	def __call__(self, sched_ctx):
		top_src_dir = self.src_dir.parent
		src_dir = self.src_dir / 'src'

		audiodrivers = ScriptLoaderTask.shared(self.project, top_src_dir / 'psycle-audiodrivers')
		for x in sched_ctx.parallel_wait(audiodrivers): yield x
		audiodrivers = audiodrivers.script_task
		self._common = common = audiodrivers.common
		audiodrivers = audiodrivers.mod_dep_phases
		pch = common.pch
		cfg = common.cfg.clone()

		from wonderbuild.cxx_tool_chain import PkgConfigCheckTask, ModTask
		from wonderbuild.std_checks.zlib import ZLibCheckTask
		from wonderbuild.install import InstallTask

		check_cfg = cfg.clone()
		xml = PkgConfigCheckTask.shared(check_cfg, ['libxml++-2.6'])
		zlib = ZLibCheckTask.shared(check_cfg)

		class CoreMod(ModTask):
			def __init__(self): ModTask.__init__(self, 'psycle-core', ModTask.Kinds.LIB, cfg)

			def do_set_deps(self, sched_ctx):
				self.private_deps = [pch.lib_task]
				self.public_deps = [audiodrivers, zlib]
				req = self.public_deps + self.private_deps
				opt = [xml]
				for x in sched_ctx.parallel_wait(*(req + opt)): yield x
				self.public_deps += [o for o in opt if o]
				self.cxx_phase = CoreMod.InstallHeaders(self.base_cfg.project, self.name + '-headers')
			
			class InstallHeaders(InstallTask):
				@property
				def trim_prefix(self): return src_dir

				@property
				def dest_dir(self): return self.fhs.include

				@property
				def sources(self):
					try: return self._sources
					except AttributeError:
						self._sources = []
						for s in (self.trim_prefix / 'psycle' / 'core').find_iter(
							in_pats = ('*.hpp', '*.h'), ex_pats = ('*.private.hpp', '*.private.h'), prune_pats = ('todo',)): self._sources.append(s)
						return self._sources

			def _apply_defines_to(self, cfg):
				if xml: cfg.defines['PSYCLE__CORE__CONFIG__LIBXMLPP_AVAILABLE'] = None

			def apply_cxx_to(self, cfg):
				self._apply_defines_to(cfg)
				if not self.cxx_phase.dest_dir in cfg.include_paths: cfg.include_paths.append(self.cxx_phase.dest_dir)

			def do_mod_phase(self):
				self._apply_defines_to(self.cfg)
				self.cfg.defines['UNIVERSALIS__META__MODULE__NAME'] = '"' + self.name +'"'
				self.cfg.defines['UNIVERSALIS__META__MODULE__VERSION'] = 0
				self.cfg.include_paths.appendleft(src_dir)
				self.cfg.include_paths.appendleft(top_src_dir / 'psycle-plugins' / 'src')
				self.cfg.include_paths.appendleft(top_src_dir / 'external-packages' / 'vst-2.4')
				for s in (src_dir / 'psycle' / 'core').find_iter(in_pats = ('*.cpp',), prune_pats = ('todo',)): self.sources.append(s)
				for s in (src_dir / 'seib' / 'vst').find_iter(in_pats = ('*,coo',), prune_pats = ('todo',)): self.sources.append(s);

		self._mod_dep_phases = mod_dep_phases = CoreMod()
		self.default_tasks.append(mod_dep_phases.mod_phase)
예제 #16
0
    def __call__(self, sched_ctx):
        top_src_dir = self.src_dir.parent
        src_dir = self.src_dir / 'src'

        audiodrivers = ScriptLoaderTask.shared(
            self.project, top_src_dir / 'psycle-audiodrivers')
        for x in sched_ctx.parallel_wait(audiodrivers):
            yield x
        audiodrivers = audiodrivers.script_task
        self._common = common = audiodrivers.common
        audiodrivers = audiodrivers.mod_dep_phases
        pch = common.pch
        cfg = common.cfg.clone()

        from wonderbuild.cxx_tool_chain import PkgConfigCheckTask, ModTask
        from wonderbuild.std_checks.zlib import ZLibCheckTask
        from wonderbuild.install import InstallTask

        check_cfg = cfg.clone()
        xml = PkgConfigCheckTask.shared(check_cfg, ['libxml++-2.6'])
        zlib = ZLibCheckTask.shared(check_cfg)

        class CoreMod(ModTask):
            def __init__(self):
                ModTask.__init__(self, 'psycle-core', ModTask.Kinds.LIB, cfg)

            def do_set_deps(self, sched_ctx):
                self.private_deps = [pch.lib_task]
                self.public_deps = [audiodrivers, zlib]
                req = self.public_deps + self.private_deps
                opt = [xml]
                for x in sched_ctx.parallel_wait(*(req + opt)):
                    yield x
                self.public_deps += [o for o in opt if o]
                self.cxx_phase = CoreMod.InstallHeaders(
                    self.base_cfg.project, self.name + '-headers')

            class InstallHeaders(InstallTask):
                @property
                def trim_prefix(self):
                    return src_dir

                @property
                def dest_dir(self):
                    return self.fhs.include

                @property
                def sources(self):
                    try:
                        return self._sources
                    except AttributeError:
                        self._sources = []
                        for s in (self.trim_prefix / 'psycle' /
                                  'core').find_iter(in_pats=('*.hpp', '*.h'),
                                                    ex_pats=('*.private.hpp',
                                                             '*.private.h'),
                                                    prune_pats=('todo', )):
                            self._sources.append(s)
                        return self._sources

            def _apply_defines_to(self, cfg):
                if xml:
                    cfg.defines[
                        'PSYCLE__CORE__CONFIG__LIBXMLPP_AVAILABLE'] = None

            def apply_cxx_to(self, cfg):
                self._apply_defines_to(cfg)
                if not self.cxx_phase.dest_dir in cfg.include_paths:
                    cfg.include_paths.append(self.cxx_phase.dest_dir)

            def do_mod_phase(self):
                self._apply_defines_to(self.cfg)
                self.cfg.defines[
                    'UNIVERSALIS__META__MODULE__NAME'] = '"' + self.name + '"'
                self.cfg.defines['UNIVERSALIS__META__MODULE__VERSION'] = 0
                self.cfg.include_paths.appendleft(src_dir)
                self.cfg.include_paths.appendleft(top_src_dir /
                                                  'psycle-plugins' / 'src')
                self.cfg.include_paths.appendleft(
                    top_src_dir / 'external-packages' / 'vst-2.4')
                for s in (src_dir / 'psycle' / 'core').find_iter(
                        in_pats=('*.cpp', ), prune_pats=('todo', )):
                    self.sources.append(s)
                for s in (src_dir / 'seib' / 'vst').find_iter(
                        in_pats=('*,coo', ), prune_pats=('todo', )):
                    self.sources.append(s)

        self._mod_dep_phases = mod_dep_phases = CoreMod()
        self.default_tasks.append(mod_dep_phases.mod_phase)