[Gelistirici] İnşa tipleri

Fatih Aşıcı fatih at pardus.org.tr
17 Şub 2011 Per 20:56:46 EET


 Selamlar,

 Çeşitli nedenlerle depoda aynı kaynağı kullanan birden fazla
 kaynak paket tutmak zorunda kalabiliyoruz. Bu durumlara
 örnek olarak şunları verebiliriz:

  - Bootstrap taklaları,
  - İnşa sırasında birden fazla derleme işlemi gerektiren
    durumlar:
    - x86_64 üzerinde 32-bit paketleri
    - python3, gtk3 ve pae için yeniden derlenmesi gereken
      modüller

 Bootstrap için bu yöntemi kullanmaktan vazgeçmiş görünüyoruz.
 Bir şekilde bootstrap zamanı hallediyoruz :)

 Diğer örneklerde tek kaynak paket kullan(a)mamızın bir nedeni
 mimariye özgü bağımlılık atayamamamız. x86_64 üzerinde 32-bit
 paketler için gerekli inşa bağımlılıklarını yazamıyoruz. Diğer
 bir neden ise actions.py içinde tekrar tekrar inşa yaptırmanın
 kodu oldukça karmaşık bir hale getirmesi.

 Yukarıdaki sorunları çözmek için önereceğim ilk özellik, Package
 tagları arasında belirtilecek bir inşa tipi ile actions.py'nin
 Pisi tarafından tekrar işletilmesi.

   <Package>
     <Name>libfoo</Name>
     ...
     <Files>
       <Path fileType="library">/usr/lib</Path>
     <Files>
   </Package>

   <Package>
     <Name>libfoo-32bit</Name>
     <BuildType>32bit</BuildType>
     ...
     <Files>
       <Path fileType="library">/usr/lib32</Path>
     <Files>
   </Package>

 Yukarıdaki örnekte Pisi, inşa tipi ile karşılaştığı için normal
 inşaya ek olarak actions.py'deki aşamaları farklı bir çalışma
 dizininde tekrar çağıracak. actions.py içinde ise

   if get.buildTYPE() == "32bit":
      # LDFLAGS'a -m32 ekle
      ...

 şeklinde inşa tipinin ne olduğu öğrenilebilir. pisi.conf içinde

   ignore_build_types = 32bit,python3

 şeklinde derlenmesi istenmeyen inşa tipleri de belirtilebilir. Bu
 şekilde 32 bit farmda bu paketleri atlatabiliriz.

 Önereceğim diğer bir özellik ise Package tagları arasında da
 BuildDependencies kullanabilmek. Bu şekilde, sadece libfoo-32bit
 paketi için gerekli olan libbar-32bit paketini ayrı bir yere
 inşa bağımlılığı olarak yazabiliriz.


   <Source>
     ...
     <BuildDependencies>
       <Dependency>libbar-devel</Dependency>
     </BuildDependencies>
   </Source>

   <Package>
     <Name>libfoo</Name>
     ...
     <Files>
       <Path fileType="library">/usr/lib</Path>
     <Files>
   </Package>

   <Package>
     <Name>libfoo-32bit</Name>
     <BuildDependencies>
       <Dependency>libbar-32bit</Dependency>
     </BuildDependencies>
     <BuildType>32bit</BuildType>
     ...
     <Files>
       <Path fileType="library">/usr/lib32</Path>
     <Files>
   </Package>

 Yukarıdaki örnekte i686 farmında inşa için sadece libbar-devel
 gerekli iken x86_64 farmında libbar-32bit de gerekli olacaktır.

 Tam emin olmamakla beraber paket bazında ExcludeArch
 kullanabilme ihtiyacı da duyabiliriz. Bunu da düşünüyorum;
 fakat ihtiyaç duyana kadar bekleyeceğim :)

 Eğer bir itiraz gelmezse ve zamanım da olursa bu özellikleri
 hafta sonu eklemek istiyorum.

 Yorumlar?



Gelistirici mesaj listesiyle ilgili daha fazla bilgi