Gerekli olmadığına inandığımız *.a dosyalarını paketlerin içine almayıp otomatik yaratılan ayrı bir pakete koyalım dedik..

--create-static diye bir parametre ekledim. Şimdilik özellikle istenmediği sürece *-static paketleri oluşturulmuyor. Fakat depo'daki eksikleri düzelttikten sonra bunu öntanımlı seçenek haline getirip getirmemeyi tartışabiliriz.


-------------------------------------------------------------------------
meren@wunjo bzip2 $ sudo pisi build pspec.xml
(...)
* Paket bzip2 inşa ediliyor

meren@wunjo bzip2 $ ls -l *.pisi
-rw-r--r-- 1 root root 434256 Mar 22 13:51 bzip2-1.0.3-3-1.pisi

meren@wunjo bzip2 $ rm -rf *.pisi
meren@wunjo bzip2 $ sudo pisi build pspec.xml --create-static
PİSİ kaynak paketi bzip2 inşa ediliyor
(...)
* Paket bzip2 inşa ediliyor
* Paket bzip2-static inşa ediliyor

meren@wunjo bzip2 $ ls -l *.pisi
-rw-r--r-- 1 root root 406859 Mar 22 13:51 bzip2-1.0.3-3-1.pisi
-rw-r--r-- 1 root root  28280 Mar 22 13:51 bzip2-static-1.0.3-3-1.pisi
--------------------------------------------------------------------------
This commit is contained in:
A. Murat Eren
2006-03-22 12:20:21 +00:00
parent 718cc39205
commit 418e8c1d69
4 changed files with 51 additions and 3 deletions
+39
View File
@@ -17,6 +17,7 @@
import os
import sys
import glob
from copy import deepcopy
from os.path import basename, dirname
import gettext
@@ -74,6 +75,10 @@ def check_path_collision(package, pkgList):
# collide. Exp:
# pinfo.path: /usr/share
# path.path: /usr/share/doc
if path.path.endswith(ctx.const.ar_file_suffix) and ctx.get_option('create_static'):
# don't throw collision error for ar files.
# we'll handle this in gen_files_xml..
continue
if util.subpath(pinfo.path, path.path):
collisions.append(path.path)
ctx.ui.error(_('Path %s belongs in multiple packages') %
@@ -461,6 +466,28 @@ class Builder:
ctx.ui.action(_("* Applying patch: %s") % patch.filename)
util.do_patch(self.srcDir, patchFile, level=patch.level, target=patch.target)
def generate_static_package_object(self):
ar_files = []
for root, dirs, files in os.walk(self.pkg_install_dir()):
for f in files:
if f.endswith(ctx.const.ar_file_suffix) and util.is_ar_file(util.join_path(root, f)):
ar_files.append(util.join_path(root, f))
if not len(ar_files):
return None
static_package_obj = pisi.specfile.Package()
static_package_obj.name = self.spec.source.name + ctx.const.static_name_suffix
# FIXME: find a better way to deal with the summary and description constants.
static_package_obj.summary['en'] = u'Ar files for %s' % (self.spec.source.name)
static_package_obj.description['en'] = u'Ar files for %s' % (self.spec.source.name)
static_package_obj.partOf = 'library:static'
for f in ar_files:
static_package_obj.files.append(pisi.specfile.Path(path = f[len(self.pkg_install_dir()):], fileType = "library"))
static_package_obj.packageDependencies.append(pisi.dependency.Dependency(package = self.spec.source.name))
return static_package_obj
def strip_install_dir(self):
"""strip install directory"""
ctx.ui.action(_("Stripping files.."))
@@ -529,6 +556,13 @@ class Builder:
def add_path(path):
# add the files under material path
for fpath, fhash in util.get_file_hashes(path, collisions, install_dir):
if ctx.get_option('create_static') \
and fpath.endswith(ctx.const.ar_file_suffix) \
and not package.name.endswith(ctx.const.static_name_suffix) \
and util.is_ar_file(fpath):
# if this is an ar file, and this package is not a -static package,
# don't include this file into the package.
continue
frpath = util.removepathprefix(install_dir, fpath) # relative path
ftype, permanent = get_file_type(frpath, package.files, install_dir)
fsize = util.dir_size(fpath)
@@ -641,6 +675,11 @@ class Builder:
# Strip install directory before building .pisi packages.
self.strip_install_dir()
if ctx.get_option('create_static'):
obj = self.generate_static_package_object()
if obj:
self.spec.packages.append(obj)
package_names = []
old_package_names = []
+2
View File
@@ -352,6 +352,8 @@ to be downloaded from a repository containing sources.
help=_("bypass errors from ActionsAPI"))
self.parser.add_option("-B", "--ignore-comar", action="store_true",
default=False, help=_("bypass comar configuration agent"))
self.parser.add_option("-S", "--create-static", action="store_true",
default=False, help=_("automatically create a *-static package with ar files"))
def run(self):
+5 -1
View File
@@ -45,10 +45,14 @@ class Constants:
__c = _constant()
def __init__(self):
# prefix for package names
# suffix for package names
self.__c.package_suffix = ".pisi"
self.__c.xdelta_suffix = ".xdelta"
# suffix for auto generated ar packages
self.__c.static_name_suffix = "-static"
self.__c.ar_file_suffix = ".a"
# directory suffixes for build
self.__c.work_dir_suffix = "/work"
self.__c.install_dir_suffix = "/install"
+5 -2
View File
@@ -312,11 +312,14 @@ def copy_file(src,dest):
check_dir(os.path.dirname(dest))
shutil.copyfile(src, dest)
def is_ar_file(file_path):
return open(file_path).readline().strip() == '!<arch>'
def clean_ar_timestamps(ar_file):
"""clean the timestamps of the ar files"""
content = open(ar_file).readlines()
if not content[0].strip() == '!<arch>':
if not is_ar_file(ar_file):
return
content = open(ar_file).readlines()
fp = open(ar_file, 'w')
for line in content:
pos = line.rfind(chr(32) + chr(96))