File indexing completed on 2024-06-01 07:07:44
0001 import os
0002
0003 from escrun.cmake import CmakeBuildManager
0004
0005
0006 class PluginCmakeBuildManager(CmakeBuildManager):
0007 def __init__(self, plugin_path, **kwargs):
0008
0009 if not plugin_path:
0010 raise RuntimeError("plugin_path is not provided")
0011 if not os.path.isdir(plugin_path):
0012 raise RuntimeError("plugin_path is not a directory (or the permission is denied)")
0013
0014 kwargs['plugin_path'] = plugin_path
0015
0016
0017 if 'name' not in kwargs:
0018 kwargs['name'] = os.path.basename(os.path.abspath(plugin_path))
0019
0020 default_build_prefix = os.path.join(plugin_path, 'cmake-build')
0021 kwargs['build_prefix'] = kwargs.get('build_prefix', default_build_prefix)
0022 kwargs['install_prefix'] = kwargs.get('install_prefix', plugin_path)
0023 kwargs['build_target'] = kwargs.get('build_target', kwargs['name']+'_plugin')
0024
0025
0026 kwargs['auto_create_build_dir'] = kwargs.get('auto_create_build_dir', True)
0027
0028 super().__init__(**kwargs)
0029
0030
0031 class Plugin(object):
0032 def __init__(self, name, **kwargs):
0033
0034 if not name:
0035 raise ValueError("Plugin name is emtpy or None. Plugin name is required")
0036 self._name = name
0037
0038 self.args = {}
0039 self.args.update(kwargs)
0040
0041 @property
0042 def name(self):
0043 return self._name
0044
0045 @property
0046 def search_path(self):
0047 return None
0048
0049
0050 class PluginFromSource(Plugin):
0051 """Jana plugin from """
0052 def __init__(self, plugin_path, **kwargs):
0053 self.builder = PluginCmakeBuildManager(plugin_path, **kwargs)
0054 self.builder.config['build_target'] = 'install'
0055 self.builder.config['cxx_standard'] = '17'
0056 self.args = {}
0057 super().__init__(self.builder.config['name'])
0058
0059 @property
0060 def name(self):
0061 return self.builder.config['name']
0062
0063 @property
0064 def search_path(self):
0065 return self.builder.config['install_prefix']
0066
0067
0068