def install(parameters = '', argument = 'install'): '''install source into install directory with given parameters''' args = 'make prefix=%(prefix)s/%(defaultprefix)s \ datadir=%(prefix)s/%(data)s \ infodir=%(prefix)s/%(info)s \ localstatedir=%(prefix)s/%(localstate)s \ mandir=%(prefix)s/%(man)s \ sysconfdir=%(prefix)s/%(conf)s \ %(parameters)s \ %(argument)s' % { 'prefix': get.installDIR(), 'defaultprefix': get.defaultprefixDIR(), 'man': get.manDIR(), 'info': get.infoDIR(), 'localstate': get.localstateDIR(), 'conf': get.confDIR(), 'data': get.dataDIR(), 'parameters': parameters, 'argument':argument, } if system(args): raise InstallError(_('Install failed.')) else: fixInfoDir() if get.buildTYPE() == "emul32": fixpc() if isDirectory("%s/emul32" % get.installDIR()): removeDir("/emul32")
def install(): suffix = __getSuffix() # Dump kernel version under /etc/kernel dumpVersion() # Install kernel image pisilinuxtools.insinto("/boot/", "arch/x86/boot/bzImage", "kernel-%s" % suffix) # Install the modules # mod-fw= avoids firmwares from installing # Override DEPMOD= to not call depmod as it will be called # during module-init-tools' package handler autotools.rawInstall("INSTALL_MOD_PATH=%s/" % get.installDIR(), "DEPMOD=/bin/true modules_install mod-fw=") # Remove symlinks first pisilinuxtools.remove("/lib/modules/%s/source" % suffix) pisilinuxtools.remove("/lib/modules/%s/build" % suffix) # Install Module.symvers and System.map here too shutil.copy("Module.symvers", "%s/lib/modules/%s/" % (get.installDIR(), suffix)) shutil.copy("System.map", "%s/lib/modules/%s/" % (get.installDIR(), suffix)) # Create extra/ and updates/ subdirectories for _dir in ("extra", "updates"): pisilinuxtools.dodir("/lib/modules/%s/%s" % (suffix, _dir))
def domo(sourceFile, locale, destinationFile, localeDirPrefix = '/usr/share/locale'): '''inserts the mo files in the list of files into /usr/share/locale/LOCALE/LC_MESSAGES''' '''example call: pisilinuxtools.domo("po/tr.po", "tr", "pam_login.mo")''' system('msgfmt %s' % sourceFile) makedirs('%s%s/%s/LC_MESSAGES/' % (get.installDIR(), localeDirPrefix, locale)) move('messages.mo', '%s%s/%s/LC_MESSAGES/%s' % (get.installDIR(), localeDirPrefix, locale, destinationFile))
def install(parameters = 'install'): if can_access_file('Makefile'): args = 'make DESTDIR=%s destdir=%s %s' % (get.installDIR(), get.installDIR(), parameters) if system(args): raise InstallError(_('Install failed.')) else: raise InstallError(_('No Makefile found.'))
def dosym(sourceFile, destinationFile): '''creates soft link between sourceFile and destinationFile''' ''' example call: pisilinuxtools.dosym("/usr/bin/bash", "/bin/bash")''' makedirs(join_path(get.installDIR(), os.path.dirname(destinationFile))) try: os.symlink(sourceFile, join_path(get.installDIR() ,destinationFile)) except OSError: error(_('ActionsAPI [dosym]: File already exists: %s') % (destinationFile))
def rename(sourceFile, destinationFile): ''' renames sourceFile as destinationFile''' ''' example call: pisilinuxtools.rename("/usr/bin/bash", "bash.old") ''' ''' the result of the previous example would be "/usr/bin/bash.old" ''' baseDir = os.path.dirname(sourceFile) try: os.rename(join_path(get.installDIR(), sourceFile), join_path(get.installDIR(), baseDir, destinationFile)) except OSError as e: error(_('ActionsAPI [rename]: %s: %s') % (e, sourceFile))
def insinto(destinationDirectory, sourceFile, destinationFile = '', sym = True): '''insert a sourceFile into destinationDirectory as a destinationFile with same uid/guid/permissions''' makedirs(join_path(get.installDIR(), destinationDirectory)) if not destinationFile: sourceFileGlob = glob.glob(sourceFile) if len(sourceFileGlob) == 0: raise FileError(_("No file matched pattern \"%s\".") % sourceFile) for filePath in sourceFileGlob: if can_access_file(filePath): copy(filePath, join_path(get.installDIR(), join_path(destinationDirectory, os.path.basename(filePath))), sym) else: copy(sourceFile, join_path(get.installDIR(), join_path(destinationDirectory, destinationFile)), sym)
def domove(sourceFile, destination, destinationFile = ''): '''moves sourceFile/Directory into destinationFile/Directory''' ''' example call: pisilinuxtools.domove("/usr/bin/bash", "/bin/bash")''' ''' example call: pisilinuxtools.domove("/usr/bin/", "/usr/sbin")''' makedirs(join_path(get.installDIR(), destination)) sourceFileGlob = glob.glob(join_path(get.installDIR(), sourceFile)) if len(sourceFileGlob) == 0: raise FileError(_("No file matched pattern \"%s\". 'domove' operation failed.") % sourceFile) for filePath in sourceFileGlob: if not destinationFile: move(filePath, join_path(get.installDIR(), join_path(destination, os.path.basename(filePath)))) else: move(filePath, join_path(get.installDIR(), join_path(destination, destinationFile)))
def doman(*sourceFiles): '''inserts the man pages in the list of files into /usr/share/man/''' '''example call: pisilinuxtools.doman("man.1", "pardus.*")''' manDIR = join_path(get.installDIR(), get.manDIR()) if not can_access_directory(manDIR): makedirs(manDIR) for sourceFile in sourceFiles: sourceFileGlob = glob.glob(sourceFile) if len(sourceFileGlob) == 0: raise FileError(_("No file matched pattern \"%s\"") % sourceFile) for source in sourceFileGlob: compressed = source.endswith("gz") and source if compressed: source = source[:-3] try: pageName, pageDirectory = source[:source.rindex('.')], \ source[source.rindex('.')+1:] except ValueError: error(_('ActionsAPI [doman]: Wrong man page file: %s') % (source)) manPDIR = join_path(manDIR, '/man%s' % pageDirectory) makedirs(manPDIR) if not compressed: system('install -m0644 %s %s' % (source, manPDIR)) else: uncompress(compressed, targetDir=manPDIR)
def fixCompiledPy(lookInto = '/usr/lib/%s/' % get.curPYTHON()): ''' cleans *.py[co] from packages ''' for root, dirs, files in os.walk('%s/%s' % (get.installDIR(),lookInto)): for compiledFile in files: if compiledFile.endswith('.pyc') or compiledFile.endswith('.pyo'): if can_access_file('%s/%s' % (root,compiledFile)): unlink('%s/%s' % (root,compiledFile))
def dumpVersion(): # Writes the specific kernel version into /etc/kernel destination = os.path.join(get.installDIR(), "etc/kernel/") if not os.path.exists(destination): os.makedirs(destination) open(os.path.join(destination, get.srcNAME()), "w").write(__getSuffix())
def dohtml(*sourceFiles, **kw): '''inserts the files in the list of files into /usr/share/doc/PACKAGE/html''' ''' example call: pisilinuxtools.dohtml("doc/doxygen/html/*")''' destDir = kw.get("destDir", get.srcNAME()) destionationDirectory = join_path(get.installDIR(), get.docDIR(), destDir, 'html') if not can_access_directory(destionationDirectory): makedirs(destionationDirectory) allowed_extensions = ['.png', '.gif', '.html', '.htm', '.jpg', '.css', '.js'] disallowed_directories = ['CVS', '.git', '.svn', '.hg'] for sourceFile in sourceFiles: sourceFileGlob = glob.glob(sourceFile) if len(sourceFileGlob) == 0: raise FileError(_("No file matched pattern \"%s\"") % sourceFile) for source in sourceFileGlob: if os.path.isfile(source) and os.path.splitext(source)[1] in allowed_extensions: system('install -m0644 "%s" %s' % (source, destionationDirectory)) if os.path.isdir(source) and os.path.basename(source) not in disallowed_directories: eraser = os.path.split(source)[0] for root, dirs, files in os.walk(source): newRoot = remove_prefix(eraser, root) for sourcename in files: if os.path.splitext(sourcename)[1] in allowed_extensions: makedirs(join_path(destionationDirectory, newRoot)) system('install -m0644 %s %s' % (join_path(root, sourcename), join_path(destionationDirectory, newRoot, sourcename)))
def dolib_a(sourceFile, destinationDirectory = '/usr/lib'): '''insert the static library into /usr/lib with permission 0644''' '''example call: pisilinuxtools.dolib_a("staticlib/libvga.a")''' sourceFile = join_path(os.getcwd(), sourceFile) destinationDirectory = join_path(get.installDIR(), destinationDirectory) lib_insinto(sourceFile, destinationDirectory, 0o644)
def removeDir(destinationDirectory): '''removes destinationDirectory and its subtrees''' destdirGlob = glob.glob(join_path(get.installDIR(), destinationDirectory)) if len(destdirGlob) == 0: raise FileError(_("No directory matched pattern \"%s\". Remove directory operation failed.") % destinationDirectory) for directory in destdirGlob: unlinkDir(directory)
def remove(sourceFile): '''removes sourceFile''' sourceFileGlob = glob.glob(join_path(get.installDIR(), sourceFile)) if len(sourceFileGlob) == 0: raise FileError(_("No file matched pattern \"%s\". Remove operation failed.") % sourceFile) for filePath in sourceFileGlob: unlink(filePath)
def newdoc(sourceFile, destinationFile): '''inserts a sourceFile into /usr/share/doc/PACKAGE/ directory as a destinationFile''' destinationDirectory = '' #490 destinationDirectory = os.path.dirname(destinationFile) destinationFile = os.path.basename(destinationFile) # Use copy instead of move or let build-install scream like file not found! copy(sourceFile, destinationFile) readable_insinto(join_path(get.installDIR(), 'usr/share/doc', get.srcNAME(), destinationDirectory), destinationFile)
def dolib_so(sourceFile, destinationDirectory = '/usr/lib'): '''insert the dynamic library into /usr/lib with permission 0755''' '''example call: pisilinuxtools.dolib_so("pppd/plugins/minconn.so")''' sourceFile = join_path(os.getcwd(), sourceFile) destinationDirectory = join_path(get.installDIR(), destinationDirectory) lib_insinto(sourceFile, destinationDirectory, 0o755)
def installLibcHeaders(excludes=None): headers_tmp = os.path.join(get.installDIR(), 'tmp-headers') headers_dir = os.path.join(get.installDIR(), 'usr/include') make_cmd = "O=%s INSTALL_HDR_PATH=%s/install" % (headers_tmp, headers_tmp) # Cleanup temporary header directory shelltools.system("rm -rf %s" % headers_tmp) # Create directories shelltools.makedirs(headers_tmp) shelltools.makedirs(headers_dir) ###################Workaround begins here ... #Workaround information -- http://patches.openembedded.org/patch/33433/ cpy_src="%s/linux-*/arch/x86/include/generated" % (get.workDIR()) cpy_tgt="%s/arch/x86/include" % (headers_tmp) shelltools.makedirs(cpy_tgt) copy_cmd ="cp -Rv %s %s " % (cpy_src, cpy_tgt) shelltools.system(copy_cmd) #######################Workaround ends here ... # make defconfig and install the headers autotools.make("%s defconfig" % make_cmd) autotools.rawInstall(make_cmd, "headers_install") oldwd = os.getcwd() shelltools.cd(os.path.join(headers_tmp, "install", "include")) shelltools.system("find . -name '.' -o -name '.*' -prune -o -print | \ cpio -pVd --preserve-modification-time %s" % headers_dir) # Remove sound/ directory which is installed by alsa-headers shelltools.system("rm -rf %s/sound" % headers_dir) # Remove possible excludes given by actions.py if excludes: shelltools.system("rm -rf %s" % " ".join(["%s/%s" % (headers_dir, exc.strip("/")) for exc in excludes])) shelltools.cd(oldwd) # Remove tmp directory shelltools.system("rm -rf %s" % headers_tmp)
def installHeaders(extraHeaders=None): """ Install the files needed to build out-of-tree kernel modules. """ extras = ["drivers/media/dvb-core", "drivers/media/dvb-frontends", "drivers/media/tuners", "drivers/media/platform"] if extraHeaders: extras.extend(extraHeaders) pruned = ["include", "scripts", "Documentation"] wanted = ["Makefile*", "Kconfig*", "Kbuild*", "*.sh", "*.pl", "*.lds"] suffix = __getSuffix() headersDirectoryName = "usr/src/linux-headers-%s" % suffix # Get the destination directory for header installation destination = os.path.join(get.installDIR(), headersDirectoryName) shelltools.makedirs(destination) # First create the skel find_cmd = "find . -path %s -prune -o -type f \( -name %s \) -print" % \ ( " -prune -o -path ".join(["'./%s/*'" % l for l in pruned]), " -o -name ".join(["'%s'" % k for k in wanted]) ) + " | cpio -pVd --preserve-modification-time %s" % destination shelltools.system(find_cmd) # Install additional headers for headers in extras: shelltools.system("cp -a %s/*.h %s/%s" % (headers, destination, headers)) # Install remaining headers shelltools.system("cp -a %s %s" % (" ".join(pruned), destination)) # Cleanup directories shelltools.system("rm -rf %s/scripts/*.o" % destination) shelltools.system("rm -rf %s/scripts/*/*.o" % destination) shelltools.system("rm -rf %s/Documentation/DocBook" % destination) # Finally copy the include directories found in arch/ shelltools.system("(find arch -name include -type d -print | \ xargs -n1 -i: find : -type f) | \ cpio -pd --preserve-modification-time %s" % destination) # Copy Modules.symvers and System.map shutil.copy("Module.symvers", "%s/" % destination) shutil.copy("System.map", "%s/" % destination) # Copy .config file which will be needed by some external modules shutil.copy(".config", "%s/" % destination) # Settle the correct build symlink to this headers pisilinuxtools.dosym("/%s" % headersDirectoryName, "/lib/modules/%s/build" % suffix) pisilinuxtools.dosym("build", "/lib/modules/%s/source" % suffix)
def removePodfiles(path = 'usr/lib/perl5/'): ''' cleans *.pod files from perl packages ''' full_path = '%s/%s' % (get.installDIR(), path) for root, dirs, files in os.walk(full_path): for packFile in files: if packFile.endswith(".pod"): if can_access_file('%s/%s' % (root, packFile)): unlink('%s/%s' % (root, packFile)) removeEmptydirs(root)
def removePacklist(path = 'usr/lib/perl5/'): ''' cleans .packlist file from perl packages ''' full_path = '%s/%s' % (get.installDIR(), path) for root, dirs, files in os.walk(full_path): for packFile in files: if packFile == ".packlist": if can_access_file('%s/%s' % (root, packFile)): unlink('%s/%s' % (root, packFile)) removeEmptydirs(root)
def dolib(sourceFile, destinationDirectory = '/usr/lib'): '''insert the library into /usr/lib''' '''example call: pisilinuxtools.dolib("libz.a")''' '''example call: pisilinuxtools.dolib("libz.so")''' sourceFile = join_path(os.getcwd(), sourceFile) destinationDirectory = join_path(get.installDIR(), destinationDirectory) lib_insinto(sourceFile, destinationDirectory, 0o755)
def configure(parameters = ''): '''configure source with given parameters.''' export('PERL_MM_USE_DEFAULT', '1') if can_access_file('Build.PL'): if system('perl Build.PL installdirs=vendor destdir=%s' % get.installDIR()): raise ConfigureError(_('Configure failed.')) else: if system('perl Makefile.PL %s PREFIX=/usr INSTALLDIRS=vendor DESTDIR=%s' % (parameters, get.installDIR())): raise ConfigureError(_('Configure failed.'))
def gen_usr_ldscript(dynamicLib): makedirs('%s/usr/lib' % get.installDIR()) destinationFile = open('%s/usr/lib/%s' % (get.installDIR(), dynamicLib), 'w') content = ''' /* GNU ld script Since Pardus has critical dynamic libraries in /lib, and the static versions in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we run into linking problems. */ GROUP ( /lib/%s ) ''' % dynamicLib destinationFile.write(content) destinationFile.close() chmod('%s/usr/lib/%s' % (get.installDIR(), dynamicLib))
def rawInstall(parameters = '', argument = 'install'): '''install source into install directory with given parameters = PREFIX=%s % get.installDIR()''' if system('make %s %s' % (parameters, argument)): raise InstallError(_('Install failed.')) else: fixInfoDir() if get.buildTYPE() == "emul32": fixpc() if isDirectory("%s/emul32" % get.installDIR()): removeDir("/emul32")
def install(parameters = '', pyVer = ''): '''does python setup.py install''' if system('python%s setup.py install --root=%s --no-compile -O0 %s' % (pyVer, get.installDIR(), parameters)): raise InstallError(_('Install failed.')) docFiles = ('AUTHORS', 'CHANGELOG', 'CONTRIBUTORS', 'COPYING*', 'COPYRIGHT', 'Change*', 'KNOWN_BUGS', 'LICENSE', 'MAINTAINERS', 'NEWS', 'README*', 'PKG-INFO') for docGlob in docFiles: for doc in glob.glob(docGlob): if not isEmpty(doc): dodoc(doc)
def preplib(sourceDirectory = '/usr/lib'): sourceDirectory = join_path(get.installDIR(), sourceDirectory) if can_access_directory(sourceDirectory): if system('/sbin/ldconfig -n -N %s' % sourceDirectory): raise RunTimeError(_('Running ldconfig failed.'))
def install(parameters=''): '''does ruby setup.rb install''' if system('ruby -w setup.rb --prefix=/%s --destdir=%s %s' % (get.defaultprefixDIR(), get.installDIR(), parameters)): raise InstallError(_('Install failed.')) auto_dodoc()
def get_gemhome(): (rubylibdir, ruby_version) = os.path.split(get_rubylibdir()) return os.path.join(get.installDIR(), rubylibdir.lstrip('/'), 'gems', ruby_version)
def run(parameters=''): '''executes parameters with ruby''' export('DESTDIR', get.installDIR()) if system('ruby %s' % parameters): raise RuntimeError(_("Running 'ruby %s' failed.") % parameters)