Talimat Sistemi
===================================

.. toctree::
   :maxdepth: 2


talimat dosyaları mps'in paketleri kurması için gerekli bilgileri içeren bir .ini dosyasıdır.


Talimat dizini
-----------------
Talimat dizinleri paket ile ilişkili talimat dosyasını ve kurulum aşamasında gerekebilecek
bir çok ayrı dosyayı barındırır.

::

    gcc#9.1.0-1/
    ├── derle.sh
    ├── kurkos.sh
    ├── pakur.sh
    └── talimat


\*.sh dosyaları
~~~~~~~~~~~~~~~~~~~~~
Talimat işlemleri için ayrı script dosyları hazırlanıp bunlar talimat dosyası içinden
'dosya' anahtar kelimesi ile çağırılabilir. 

::

    [derle]
    dosya = derle.sh
    
    [pakur]
    dosya = pakur.sh

Bu dosyların 'derle' ve 'pakur' altında kullanılması halinde önerilen isimlendirme 'derle' için
'derle.sh', 'pakur' için ise 'pakur.sh' şeklindedir.

Koşuk betikleri
~~~~~~~~~~~~~~~~~~~~~
Koşuk betikleri talimat dizininde saklanabilir. Bunlar mps tarafından otomatik olarak algılanır ve
kullanılır.

| **kurkos.sh**
|   Paket kurulduktan sonra çalışacak betik.
| **koskur.sh**
|   Paket kurulmadan önce çalışacak betik.
| **silkos.sh**
|   Paket silindikten sonra çalışacak betik.
| **kossil.sh**
|   Paket silinmeden önce çalışacak betik.


Yama dosyaları
~~~~~~~~~~~~~~~~~~~~~
Yama dosyaları talimat dizininde saklanabilir. Bu durumda yapılması gereken 'dosya' anahtarı ile
dosyayı talimat'taki kaynak bölümüne eklemek ve 'yama' anahtarı ile ilişkili yamayı belirtmektir.
Daha fazla bilgi için dosya formatını inceleyin.

::

    lua#5.3.5-1/
    ├── derle.sh
    ├── liblua.so.patch
    ├── lua.pc
    ├── pakur.sh
    └── talimat

::

    [kaynak]
    gz      = https://www.lua.org/ftp
    dosya   = liblua.so.patch
    dosya   = lua.pc
    
    [derle]
    yama    = 2
    ...

Eklenen dosya için aşağıdaki komut çalıştırılıcaktır:

.. code:: bash

    patch -Np1 -i $SRC/dosya_ismi


libgerekler ve pktlibler
~~~~~~~~~~~~~~~~~~~~~~~~~~
libgerekler dosyası, paketin hangi kütüphanelere ihtiyacı olduğunu belirtir.

Örneğin aşağıda python paketinin 3.7.3'üncü sürümü için gereken kütüphaneler listelenmiştir.
Bunlar libgerekler dosyasında saklanır.

::

    libdl.so.2
    libpython3.7m.so.1.0
    libpthread.so.0
    libc.so.6
    libuuid.so.1
    libm.so.6
    libexpat.so.1
    liblzma.so.5
    libbz2.so.1.0
    libz.so.1
    libpanelw.so.6
    libncursesw.so.6
    libgdbm.so.6
    libgdbm_compat.so.4
    libsqlite3.so.0
    libssl.so.1.1
    libcrypto.so.1.1
    libcrypt.so.1
    libreadline.so.8
    libutil.so.1


pktlibler ise paketin sisteme sunduguğu kütüphaneleri belirtir.

Aşağıda ise aynı paketinin sisteme sunduğu kütüphanler listelenmiştir.
Bunlar da pktlibler dosyasında saklanır.

::

    libpython3.so 
    libpython3.7m.so.1.0
    libpython3.7m.so





Dosya formatı
-----------------
 Talimat dosyası, paketin kullanılabilmesi ve işlenebilmesi için gerekli bilgileri
 içeren bölümlerden oluşur. Bunlardan dördü; paket, kaynak, derle ve pakur bu dosyada
 bulunmak zorundadır. Bunlara ek olarak bir çok bölüm belirli amaçları karşılamak 
 amacıyla kullanılabilir.

[paket]
~~~~~~~~~~~~~~~~~
| **tanim**
|   Paketin açıklaması.
| **paketci**
|   Paketçilerin isimleri.
| **grup**
|   Paketin grubu. 
|   Gruplarlar belirlenirken sistemde önceden tanımlanan gruplar 
    kullanılmalıdır, bunlar 'mps gruplar' komutu ile öğrenilebilir.
| **url**
|   Paketin web sayfası

[gerek]
~~~~~~~~~~~~~~~~~
| **derleme**
|   Paketin derlenmesi için gerekenler
| **calisma**
|   Paketin çalışması için gerekenler

[kaynak]
~~~~~~~~~~~~~~~~~
| **github**
|   Verilen kaynak GitHub için 'kullanıcıadı/repoismi' olmalıdır.
    Bu durumda mps'nin kullandığı tam url ise 'github.com/kullanıcıadı/repoismi' olacaktır.
| **gz,xz,bz2**
|   Verilen kaynağın sonuna paket ismini belirli bir formata çevirerek ekler ve kullanır.
|   Kullanılan tam format, girdi 'url' ise '$url/$isim-$surum.tar.[gz|xz|bz2]' olacaktır.
| **tgz**
|   Verilen kaynağın sonuna paket ismini belirli bir formata çevirerek ekler ve kullanır.
|   Kullanılan tam format, girdi 'url' ise '$url/$isim-$surum.tgz' olacaktır.
| **dosya**
|   Paketin talimat dizinindeki bir betik dosyası.

| Bunların dışında normal http indirmelerine anahtar olarak herhangi bir alfanumerik kelime 
   kullanılabilir. Ancak önerilen kullanım herhangi bir pozitif sayı veya 'url' anahtar
   kelimesidir.

Dosya isimlendirme
^^^^^^^^^^^^^^^^^^^
İndirilen dosya için kaynak belirtirken '::' postfixi ile yeni bir isim belirtilebilir. Yeni
isimde değişkenler de kullanılabilir.

::
    
    1       = https://github.com/pallets/markupsafe/archive/$surum.tar.gz::$isim-$surum.tar.gz


[sha256] ve [sha512]
~~~~~~~~~~~~~~~~~~~~~~
| **1,2,3,4...**
|   Kaynak dosyaları için sha anahtarlarını belirtir.
|   Numara, kaynağın [kaynak] altındaki sırasını belirtir.


[derle]
~~~~~~~~~~~~~~~~~
| **dosya**
|   Paketin talimat dizinindeki bir betik dosyası.
| **tip**
|   Paketin derlenme tipi.
| **betik**
|   Çalıştırılacak betik komutu.
| **yama**
|   Yama dosyasının [kaynak] altındaki sırası veya ismi.


[pakur]
~~~~~~~~~~~~~~~~~
| **dosya**
|   Paketin talimat dizinindeki bir betik dosyası.
| **tip**
|   Paketin kurulma tipi.
| **betik**
|   Çalıştırılacak betik komutu.
| **yama**
|   Yama dosyasının [kaynak] altındaki sırası veya ismi.
| **servis**
|   Paketin içine kurulacak servis.
|   Bu dosya /usr/milis/ayarlar altında bulunmak zorundadır.

.. note::
    [derle] ve [pakur] altında hazırlanan anahtarlar yukarıdan aşağıya doğru olacak
    şekilde kullanılır/çalıştırılır.


Değişkenler
-----------------
| Talimat dizininde paketler belirli bir formata göre isimlendirilir, bu format
| 'isim#sürüm-devir'
| şeklindedir ve buradaki değerler değişkenler olarak kullanılabilir.

| **$isim**
|   Paketin ismi.
| **$surum**
|   Paketin sürümü.
| **$devir**
|   Paketin devri.

[paket] bloğunun altındaki her anahtar değişken olarak kullanılabilir.

Tipler
-----------------
Tipler, betik yazmak yerine daha sade bir talimat için kullanılabilir.

Ek konfigürasyon yapmak için 'tip' anahtarından önce 'ekconf' anahtarı kullanılabilir.
Anahtarın değeri gerekli komutlar çağrılımadan önce $extopt değerine atanacaktır.

Derleme tipleri
~~~~~~~~~~~~~~~~~
Derleme tipleri, derleme anında çalıstırılacak hazır komutlar içerir.

gnu
^^^^^^^^^^^^^^^^

.. code::  bash
    
    ./configure $confopt $extopt && make


cmake
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    cmake ./ && make


py3 ve py2
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    python3 setup.py build

.. code:: bash

    python2 setup.py build

meson
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    cd $SRC && milis-meson $isim-$surum build $extopt

ninja
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    mkdir -p build && ninja -C build


Paket kurma tipleri
~~~~~~~~~~~~~~~~~~~~
Paket kurma tipleri, kurulum sırasında çalıstırılacak hazır komutlar içerir.

gnu
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    make DESTDIR=$PKG install

py3 ve py2
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    python3 setup.py install --root=${PKG} --optimize=1 --skip-build

.. code:: bash 
    
    python2 setup.py install --root=${PKG} --optimize=1 --skip-build


ninja
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    DESTDIR=$PKG ninja -C build install

meson
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    cd $SRC && DESTDIR=$PKG ninja -C build install

