Merhabalar,

Bildiğiniz gibi şimdiye kadar PARM çalışmalarını yerelimdeki bilgisayarımda 
yürüttüm. 2010'un sonlarına kadarki çalışmalarımı pardus oyun alanıma 
commit'ledim. Sonrasında PARM bir olgunluğa eriştikten sonra geliştiricilerin 2 
ayrı kaynak depo ile uğraşmak zorunda kalcağını görüp bir tek kaynak depodan 
hem doğal hem de çapraz derleme yapmanın daha uygun olduğunu düşündüm ve 
Kurumsal 2 devel deposunun kaynak paketlerini tekrar düzenledim. pisi xml 
politikasını kontrol eden ismail.py betiği yaptığım commitleri kabul 
etmediğinden son çalışmalarımı commitleyemedim :)

Kurumsal 2 PARM için yapılacak az bir iş kaldığından artık pisi üzerinde 
gerekli değişiklikleri yapmamız gerektiğini düşünüyorum. Şimdiye kadarki pisi 
değişikliklerimi uludağ svn ambarındaki oyun alanıma commitledim [1]. Bu 
değişiklikler sık sık geri aldığım veya değiştirdiğim değişiklikler olduğundan 
orijinal pisi üzerine merge etmedim.

Şmdi pisi üzerinde yapılması gereken kısımlardan bahsetmek istiyorum.

* ExcludeArch
~~~~~~~~~~~~~
Kimi paketlerimiz (örneğin memtest86, libx86) yalnızca 8086 mimarisinde 
çalışmaktadır. Bu sebepten ötürü paketin pspec.xml dosyasına 
<ExcludeArch>arm.*</ExcludeArch> eklenmesi gerekmektedir. Şu anda 
desteklediğimiz ARM çekirdeğinin versiyonu 7, little endian (aka. armv7l).

Eski pisi-spec kurallarında i686 ve x86_64 değerleri kabul edilmekte. Benim 
yaptığım düzenlemede ise bu değerler kurallı ifadeler (regex) ile alınmakta. 
Böylece arm.* değeri verildiğinde birdek çok ARM çekirdeklerini exclude 
edebiliriz zira daha ileri bir zamanda farklı bir ARM çekirdeği versiyonunu 
destekleyip desteklemeyeceğimizi bilmiyoruz.

ExcludeArch eski hali:
    <!-- ExcludeArch -->
    <define name="ExcludeArch">
        <element name="ExcludeArch">
            <choice>
                <value>i686</value>
                <value>x86_64</value>
            </choice>
        </element>
    </define>

ExcludeArch düzenlenmiş hali:
    <!-- ExcludeArch -->
    <define name="ExcludeArch">
        <element name="ExcludeArch">
            <choice>
                <value>i?86</value>
                <value>x86_64</value>
                <value>arm.*</value>
            </choice>
        </element>
    </define>

Bu değerleri i586, i686, x86_64, armv7l, armv5te ... şeklinde ayrı ayrı da 
yazabiliriz tabi. Bence regex daha uygun (ekteki patch 0001).

* pisi.conf değişikliği
~~~~~~~~~~~~~~~~~~~~~~~~
pisi.conf dosyası üzerinde çalışmakta olduğunuz sisteminiz için bilgiler 
içerir. Örneğin "destinationdirectory = /" , "host = x86_64-pc-linux-gnu". 
Çapraz derleme yaparken bu değerleri değiştirmemiz gerekiyor. İlk başlarda pisi 
üzerinde çapraz derleme yaparken bu değişiklikleri elle yapıyordum, sonradan 
bunun için şu şekilde bir workaround yaptım: "pisi" komutu çalıştırıldığında 
pisi.conf, pisi-armv7l komutu çalıştırıldığında pisi-armv7l.conf dosyası config 
dosyası olarak kullanılıyor. Eğer pisi-{ARCH} komutu çalıştırıldığında 
pisi-{ARCH}.conf yoksa fallback pisi.conf dosyası parse ediliyor. (ekteki patch 
0002)

Bu pis bir çözüm biliyorum :). Alternatif olarak, önerebileceğim çözümler 
şunlar:

* "--config-file=" parametresi eklemek: pisi config dosyasının varsayılan 
değeri /etc/pisi/pisi.conf olur, pisi'ye bu parametrenin verilmesi halinde 
farklı bir config dosyası parse edilir.
* "--arch=" parametresi eklemek: bu parametre verildiğinde 
/etc/pisi/arch/pisi-< arch parametresi değeri >.conf dosyası parse edilir.

Öneriler? Alternatif fikirler?

İkinci olarak pisi config dosyasına ek değerler koymam gerekmekte. Bunlar:
* crosscompiling : True veya False, bu değere göre actionsapi'de ek 
parametreler vermek gerekebiliyor.
* cppflags : inşa sırasında CPPFLAGS export etmem gerekebiliyor. Native build 
yapıldığında CPPFLAGS export edilmiyor.
* build : autotools.py'de bu değerleri kullanmam gerekebiliyor.
* target : autotools.py'de bu değerleri kullanmam gerekebiliyor.

Bu değerleri config dosyasına eklememde sakınca var mıdır?

ActionsApi için yaptığım değişiklikleri elden geçirmeden size sunmayayım dedim, 
biraz kirli :). Eklenen kısımlar için oyun alanımdaki pisiye bakabilirsiniz 
[2]. Kodları temizlediğimde patch leri review'ınıza sunarım (herkes ARM 
sürecine dahil olduğunda gerekli olacak kısım olduğundan aciliyeti yok).

Şu anda PARM için oluşturmuş olduğum son kaynak depoyu eklemek için acil 
ihtiyacım yalnızca ExcludeArch desteği (ekteki patch 0001). Bu patch i 
uygulamamda sakınca gören var mıdır?

PARM'ı denemek isteyenler için de bir QEMU imajı hazırlayacağım, şu anda PARM 
farmının oluşturmuş olduğu 1600-1700 ARM paketimiz hazır [3]. PARM ile ilgili 
geliştirici belgesinin **resmi olmayan** eski ve bitirmediğim hali şurada [4], 
belgeyi güncellediğimde buradan haber vereceğim ( Semen her gün sorar oldu, 
yakında bitiririm :) ).

[1] http://svn.pardus.org.tr/uludag/trunk/playground/memre/pisi
[2] http://svn.pardus.org.tr/uludag/trunk/playground/memre/pisi/pisi/actionsapi/
[3] 
http://cekirdek.pardus.org.tr/~memre/pardus-arm/armv7l/PardusCorporate2/repo/
[4] http://cekirdek.pardus.org.tr/~memre/obsolete/howto-draft.html

-- 
~ @memre <Mehmet Emre Atasever>
__EOM
>From 0938fe4f4fffaf7629d10dd6660128e6e734159b Mon Sep 17 00:00:00 2001
From: Mehmet Emre Atasever <me...@pardus.org.tr>
Date: Thu, 21 Apr 2011 15:24:00 +0300
Subject: [PATCH 1/2] pisi ExcludeArch regex support

---
 pisi-spec.rng            |    3 ++-
 pisi/operations/build.py |   12 ++++++++----
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/pisi-spec.rng b/pisi-spec.rng
index a4db427..33c174c 100644
--- a/pisi-spec.rng
+++ b/pisi-spec.rng
@@ -175,8 +175,9 @@
     <define name="ExcludeArch">
         <element name="ExcludeArch">
             <choice>
-                <value>i686</value>
+                <value>i?86</value>
                 <value>x86_64</value>
+                <value>arm.*</value>
             </choice>
         </element>
     </define>
diff --git a/pisi/operations/build.py b/pisi/operations/build.py
index 94530bb..faa12d6 100644
--- a/pisi/operations/build.py
+++ b/pisi/operations/build.py
@@ -311,11 +311,15 @@ class Builder:
     def build(self):
         """Build the package in one shot."""
 
+        # excludeArch should accept regex.
+        # eg. <exludeArch>arm*</exludeArch> armv7l, armv5te matches
+        #     <exludeArch>i?86</exludeArch> i586, i686 matches
         architecture = ctx.config.values.general.architecture
-        if architecture in self.spec.source.excludeArch:
-            raise ExcludedArchitectureException(
-                    _("pspec.xml avoids this package from building for '%s'")
-                    % architecture)
+        for arch in self.spec.source.excludeArch:
+            if re.match(arch, architecture):
+                raise ExcludedArchitectureException(
+                        _("pspec.xml avoids this package from building for '%s'")
+                        % architecture)
 
         ctx.ui.status(_("Building source package: %s")
                       % self.spec.source.name)
-- 
1.7.3.4

>From b10e107e44cc6a98094c957b0146d8f459eb41fa Mon Sep 17 00:00:00 2001
From: Mehmet Emre Atasever <me...@pardus.org.tr>
Date: Thu, 21 Apr 2011 16:05:22 +0300
Subject: [PATCH 2/2] get config file from tail of argv0

---
 pisi/config.py |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/pisi/config.py b/pisi/config.py
index 97502fc..a56123a 100644
--- a/pisi/config.py
+++ b/pisi/config.py
@@ -16,6 +16,7 @@ regular PiSi configurations.
 """
 
 import os
+import sys
 import copy
 
 import gettext
@@ -46,8 +47,18 @@ class Config(object):
     __metaclass__ = pisi.util.Singleton
 
     def __init__(self, options = Options()):
+        # Dirty workaround to support multiple configuration files
+        # FIXME: remove me and find another way
+        prog_name = sys.argv[0]
+        arch = prog_name.split('-')[-1]
+
+        # if program name is pisi-armv7l, then config file is pisi-armv7l.conf
+        cf_name = "/etc/pisi/pisi-%s.conf" % arch
+        if not os.access(cf_name, os.R_OK):
+            cf_name = "/etc/pisi/pisi.conf"
+
         self.set_options(options)
-        self.values = pisi.configfile.ConfigurationFile("/etc/pisi/pisi.conf")
+        self.values = pisi.configfile.ConfigurationFile(cf_name)
 
         # get the initial environment variables. this is needed for
         # build process.
-- 
1.7.3.4

Attachment: pgpZMxBVcR3KI.pgp
Description: PGP signature

_______________________________________________
Gelistirici mailing list
Gelistirici@pardus.org.tr
http://liste.pardus.org.tr/mailman/listinfo/gelistirici

Cevap