[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