class MigratorPackage(Package): """Add the NuoDB migrator client.""" __PKGNAME = 'migrator' __USER = '******' __REPO = 'migration-tools' __ZIP = 'nuodb-migrator.zip' def __init__(self): super(MigratorPackage, self).__init__(self.__PKGNAME) self._zip = None self.staged = [ Stage('migrator', title='NuoDB Migrator', requirements='Java 8 or 11') ] self.stage = self.staged[0] def download(self): repo = GitHubMetadata(self.__USER, self.__REPO) self.stage.version = repo.version self._zip = Artifact(self.name, self.__ZIP, repo.pkgurl) self._zip.update() def unpack(self): rmdir(self.pkgroot) mkdir(self.pkgroot) unpack_file(self._zip.path, self.pkgroot) def install(self): self.stage.stage('jar', ['jar/']) self.stage.stage('conf', ['conf/']) ext = '' if Globals.target == 'lin64' else '.bat' self.stage.stagefiles('bin', 'bin', ['nuodb-migrator' + ext])
def download(self): versions = Artifact(self.name, self.__VERSIONS, '{}/{}'.format(self.__CE_URL, self.__VERSIONS)) versions.get() version = loadfile(versions.path).split()[-1] self.setversion(version) if Globals.target == 'lin64': self._dirname = self.__TARFORMAT.format(version) pkgname = self._dirname + self.__TAREXT else: self._dirname = self.__ZIPFORMAT.format(version) pkgname = self._dirname + self.__ZIPEXT self._pkg = Artifact(self.name, pkgname, '{}/{}'.format(self.__CE_URL, pkgname)) self._pkg.update()
class PyNuoadminPackage(Package): """Add the NuoDB pynuoadmin client.""" __PKGNAME = 'pynuoadmin' def __init__(self): super(PyNuoadminPackage, self).__init__(self.__PKGNAME) self._file = None self._ac_file = None self._ac_version = None self.ac_basedir = None self.staged = [ Stage(self.__PKGNAME, title='NuoAdmin Driver', requirements='Python 2') ] self.stage = self.staged[0] def prereqs(self): # We need nuodb to get nuokeymanager.jar return ['nuodb'] def download(self): # Find the latest release pypi = PyPIMetadata('pynuoadmin') self.setversion(pypi.version) self._file = Artifact(self.name, 'pynuoadmin.tar.gz', pypi.pkgurl, chksum=pypi.pkgchksum) self._file.update() # Grab the latest version of argcomplete acpypi = PyPIMetadata('argcomplete') self._ac_version = acpypi.version self._ac_file = Artifact('argcomplete', 'argcomplete-{}.tar.gz'.format( self._ac_version), acpypi.pkgurl, chksum=acpypi.pkgchksum) self._ac_file.update() def unpack(self): rmdir(self.pkgroot) mkdir(self.pkgroot) unpack_file(self._file.path, self.pkgroot) self.stage.basedir = os.path.join( self.pkgroot, 'pynuoadmin-{}'.format(self.stage.version)) unpack_file(self._ac_file.path, self.pkgroot) self.ac_basedir = os.path.join( self.pkgroot, 'argcomplete-{}'.format(self._ac_version)) def install(self): pdir = os.path.join('python', 'pynuoadmin') self.stage.stage(pdir, ['nuodb_cli.py', 'nuodb_mgmt.py']) self.stage.stage('doc', ['README.rst']) acdir = os.path.join('python', 'argcomplete') if not self.ac_basedir: acpypi = PyPIMetadata('argcomplete') self._ac_version = acpypi.version self.ac_basedir = os.path.join( self.pkgroot, 'argcomplete-{}'.format(self._ac_version)) self.stage.stage(acdir, [os.path.join(self.ac_basedir, 'argcomplete/')]) self.stage.stage(acdir, [os.path.join(self.ac_basedir, 'LICENSE.rst')]) if Globals.target == 'lin64': self.stage.stage('bin', [os.path.join(Globals.bindir, 'nuocmd')]) self.stage.stagefiles('etc', Globals.etcdir, ['run-java-app.sh', 'nuokeymgr']) else: self.stage.stage('bin', [os.path.join(Globals.bindir, 'nuocmd.bat')]) self.stage.stagefiles('etc', Globals.etcdir, ['nuokeymgr.bat']) nuodb = self.get_package('nuodb') self.stage.stage('jar', [ os.path.join(nuodb.staged[0].basedir, 'jar', 'nuokeymanager.jar') ]) self.stage.stage(pdir, [ os.path.join(nuodb.staged[0].basedir, 'drivers', 'pynuoadmin', 'nuocmd-complete') ])
def download(self): repo = GitHubMetadata(self.__USER, self.__REPO) self.stage.version = repo.version self._zip = Artifact(self.name, self.__ZIP, repo.pkgurl) self._zip.update()
class HibernatePackage(Package): """Add the NuoDB Hibernate (3 and 5) clients.""" __PKGNAME = 'hibernate' __PATH = 'com/nuodb/hibernate/nuodb-hibernate' __JAR = 'nuodb-hibernate-{}.jar' def __init__(self): super(HibernatePackage, self).__init__(self.__PKGNAME) self._hib3 = None self._hib5 = None self.staged = [ Stage(name='hibernate3', title='Hibernate3 Driver', requirements='Java 8 or 11'), Stage(name='hibernate5', title='Hibernate5 Driver', requirements='Java 8 or 11') ] self.stage3 = self.staged[0] self.stage5 = self.staged[1] def download(self): # Hibernate is complicated because both versions 3 and 5 are released # in the same Maven repository. mvn = MavenMetadata(self.__PATH) # Find the newest hib3 and hib5 versions for ver in mvn.metadata.find('versioning/versions'): if ver.text.endswith('hib3'): self.stage3.version = ver.text elif ver.text.endswith('hib5'): self.stage5.version = ver.text self._hib3 = Artifact( self.name, 'nuodb-hibernate-hib3.jar', '{}/{}/{}'.format(mvn.baseurl, self.stage3.version, self.__JAR.format(self.stage3.version))) self._hib5 = Artifact( self.name, 'nuodb-hibernate-hib5.jar', '{}/{}/{}'.format(mvn.baseurl, self.stage5.version, self.__JAR.format(self.stage5.version))) # We only download the actual jar files self._hib3.update() self._hib5.update() def unpack(self): rmdir(self.pkgroot) mkdir(self.pkgroot) copy(self._hib3.path, os.path.join(self.pkgroot, 'nuodb-hibernate-hib3.jar')) copy(self._hib5.path, os.path.join(self.pkgroot, 'nuodb-hibernate-hib5.jar')) savefile(os.path.join(self.pkgroot, 'LICENSE.txt'), self.getlicense('3BSD')) def install(self): self.stage3.stage('jar', ['nuodb-hibernate-hib3.jar']) self.stage3.stage('doc', ['LICENSE.txt']) self.stage5.stage('jar', ['nuodb-hibernate-hib5.jar']) self.stage5.stage('doc', ['LICENSE.txt'])
class NuoDBPackage(Package): """Extract NuoDB clients from the database package.""" __PKGNAME = 'nuodb' __CE_URL = 'https://ce-downloads.nuohub.org' __VERSIONS = 'supportedversions.txt' __TARFORMAT = 'nuodb-ce-{}.linux.x86_64' __TAREXT = '.tar.gz' __ZIPFORMAT = 'nuodb-ce-{}.win64' __ZIPEXT = '.zip' def __init__(self): super(NuoDBPackage, self).__init__(self.__PKGNAME) self._pkg = None self._dirname = None self.stgs = { 'nuosql': Stage('nuosql', title='nuosql', requirements='GNU/Linux or Windows'), 'nuoloader': Stage('nuoloader', title='nuoloader', requirements='GNU/Linux or Windows'), 'nuodbmgr': Stage('nuodbmgr', title='nuodbmgr', requirements='Java 8 or 11'), 'nuoodbc': Stage('nuoodbc', title='NuoODBC Driver', requirements='GNU/Linux with UnixODBC 2.3 or Windows'), 'nuoremote': Stage('nuoremote', title='C++ Driver', requirements='GNU/Linux or Windows'), 'nuoclient': Stage('nuoclient', title='C Driver', requirements='GNU/Linux or Windows') } self.staged = self.stgs.values() def download(self): versions = Artifact(self.name, self.__VERSIONS, '{}/{}'.format(self.__CE_URL, self.__VERSIONS)) versions.get() version = loadfile(versions.path).split()[-1] self.setversion(version) if Globals.target == 'lin64': self._dirname = self.__TARFORMAT.format(version) pkgname = self._dirname + self.__TAREXT else: self._dirname = self.__ZIPFORMAT.format(version) pkgname = self._dirname + self.__ZIPEXT self._pkg = Artifact(self.name, pkgname, '{}/{}'.format(self.__CE_URL, pkgname)) self._pkg.update() def unpack(self): rmdir(self.pkgroot) mkdir(self.pkgroot) unpack_file(self._pkg.path, self.pkgroot) udir = os.path.join(self.pkgroot, self._dirname) for stg in self.staged: stg.basedir = udir def _install_linux(self): self.stgs['nuosql'].stagefiles('bin', 'bin', ['nuosql']) self.stgs['nuoloader'].stagefiles('bin', 'bin', ['nuoloader']) self.stgs['nuoodbc'].stagefiles('lib64', 'lib64', ['libNuoODBC.so']) self.stgs['nuoremote'].stagefiles('lib64', 'lib64', ['libNuoRemote.so']) self.stgs['nuoclient'].stagefiles('lib64', 'lib64', ['libnuoclient.so']) # Add in shared libraries for packages that need it soglobs = ['libicu*.so.*', 'libmpir.so.*'] for stg in [ 'nuosql', 'nuoloader', 'nuoodbc', 'nuoremote', 'nuoclient' ]: self.stgs[stg].stagefiles('lib64', 'lib64', soglobs) self.stgs['nuodbmgr'].stagefiles('jar', 'jar', ['nuodbmanager.jar']) # Get the client-specific version of these scripts self.stgs['nuodbmgr'].stage('bin', [os.path.join(Globals.bindir, 'nuodbmgr')]) self.stgs['nuodbmgr'].stage( 'etc', [os.path.join(Globals.etcdir, 'run-java-app.sh')]) def _install_windows(self): self.stgs['nuosql'].stagefiles('bin', 'bin', ['nuosql.exe']) self.stgs['nuoloader'].stagefiles('bin', 'bin', ['nuoloader.exe']) self.stgs['nuoodbc'].stagefiles('bin', 'bin', ['NuoODBC.dll', 'NuoODBC.pdb']) self.stgs['nuoremote'].stagefiles('bin', 'bin', ['NuoRemote.dll', 'NuoRemote.pdb']) self.stgs['nuoremote'].stagefiles('lib', 'lib', ['NuoRemote.lib']) self.stgs['nuoclient'].stagefiles('bin', 'bin', ['nuoclient.dll', 'nuoclient.pdb']) self.stgs['nuoclient'].stagefiles('lib', 'lib', ['nuoclient.lib']) # Add in shared libraries for packages that need it soglobs = ['icu*.dll', 'mpir*.dll', 'msvcp140.dll', 'vcruntime140.dll'] for stg in [ 'nuosql', 'nuoloader', 'nuoodbc', 'nuoremote', 'nuoclient' ]: self.stgs[stg].stagefiles('bin', 'bin', soglobs) self.stgs['nuodbmgr'].stagefiles('jar', 'jar', ['nuodbmanager.jar']) # Get the client-specific versions self.stgs['nuodbmgr'].stage( 'bin', [os.path.join(Globals.bindir, 'nuodbmgr.bat')]) def install(self): if Globals.target == 'lin64': self._install_linux() else: self._install_windows() # Install header and sample files for C/C++ drivers self.stgs['nuoremote'].stagefiles('include', 'include', [ 'NuoDB.h', 'SQLException.h', 'SQLExceptionConstants.h', 'NuoRemote' ]) self.stgs['nuoremote'].stage('samples', [os.path.join('samples', 'doc', 'cpp')]) self.stgs['nuoclient'].stagefiles('include', 'include', ['nuodb']) self.stgs['nuoclient'].stage('samples', [os.path.join('samples', 'doc', 'c')]) for stg in self.staged: stg.stage('doc', ['README.txt', 'ce_license.txt'])