123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- #!/usr/bin/env lua5.3
- -- talimat ayrıştırıcı
- --kütüphane eklemeleri
- local mps_path=os.getenv("MPS_PATH")
- if not mps_path then mps_path="/sources/mps2" end
- package.cpath = package.cpath .. ";"..mps_path.."/lua/ext/?.so"
- package.path = package.path .. ";"..mps_path.."/lua/ext/?.lua"
- package.cpath = package.cpath .. ";"..mps_path.."/lua/?.so"
- package.path = package.path .. ";"..mps_path.."/lua/?.lua"
- local lip= require("LIP")
- local lfs = require("lfs")
- local util=require ("mps_helper")
- local yaz=util.yaz
- local _assert=util._assert
- local has_value=util.has_value
- local path_exists=util.path_exists
- local shell=util.shell
- local get_abspath=util.get_abspath
- local get_basename=util.get_basename
- local get_content=util.get_content
- local t={}
- -- local mesajlar sonra import edilip, dil entegre sağlanacak
- local messages={}
- messages.operation_file_is_created=" yürürlük dosyası oluşturuldu."
- messages.talimatdir_param_need=" talimat dizin parametresi yok"
- messages.talimatdir_is_not_exist=" talimat dizini yok"
- messages.talimat_is_not_exist=" talimat dosyası yok"
- messages.talimatdir_format_error="talimat dizin formatı isim-surum-devir şeklinde olmalı!"
- messages.hash_not_match="shasum uyumsuz kaynak arşiv dosyası!!!"
- -- local değişkenler
- local talimatdizin = ""
- local talimatyol = ""
- local isim = ""
- local surum = ""
- local devir = 0
- local isd = ""
- local isd_ayrac = "-"
- local yururluk_dir = '/tmp'
- local install_command = 'mps kur'
- local config_dir = mps_path.."/conf/"
- local global_variables = config_dir..'mpsd.conf'
- local helper_functions = config_dir..'mpsd-helper.sh'
- local renkyaz = true -- öntanımlı olarak renkli çıktı yazılır.
- local talimatd_format_pattern="([%a%d-+]+)#([%d%a.]+)-([%d]+)"
- -- talimat processing
- local tproc={}
- -- talimat kaynakların analizi
- tproc.kaynak={}
- function tproc.kaynak.github(value)
- return "https://github.com/"..value.."/archive/v${surum}.tar.gz::$isim-$surum.tar.gz"
- end
- function tproc.kaynak.bz2(value) return value .. "/$isim-$surum.tar.bz2" end
- function tproc.kaynak.gz(value) return value .. "/$isim-$surum.tar.gz" end
- function tproc.kaynak.xz(value) return value .. "/$isim-$surum.tar.xz" end
- -- talimat gereklerin analizi
- tproc.gerek={}
- -- derleme gerekleri
- function tproc.gerek.derleme(value)
- local deps=""
- for dep in value:gmatch('([^%s]+)') do
- table.insert(deps,dep)
- end
- return deps
- end
- -- calışma gerekleri
- function tproc.gerek.calisma(value)
- local deps=""
- for dep in value:gmatch('([^%s]+)') do
- table.insert(deps,dep)
- end
- return deps
- end
- -- talimat derle kısmının analizi
- tproc.derle={}
- tproc.derle.tipler={
- gnu = "./configure $confopt && make",
- cmake = "cmake ./ && make"
- }
- function tproc.derle.yama(value)
- if tproc.kaynaklar[tonumber(value)] then
- return "patch -Np1 -i $SRC/" .. tproc.kaynaklar[tonumber(value)]
- else
- return "patch -Np1 -i $SRC/" .. value
- end
- end
- function tproc.derle.betik(value) return value .. "\n" end
- function tproc.derle.tip(value) return tproc.derle.tipler[value]end
- function tproc.derle.dosya(value) return get_content(talimatdizin .."/"..value) end
- -- talimat pakur kısmının analizi
- tproc.pakur={}
- tproc.pakur.tipler={
- gnu = "make DESTDIR=$PKG install"
- }
- function tproc.pakur.betik(value) return value end
- function tproc.pakur.tip(value) return tproc.pakur.tipler[value] end
- function tproc.pakur.dosya(value) return get_content(talimatdizin .."/"..value) end
- -- elf dosyaların strip iptali için
- -- (mpsd.conf a müdahale için export ile kullanılacak)
- function tproc.pakur.strip(value)
- if has_value({"no","yok","0"},value) then
- --return "set_var \"STRIP\" \"-\""
- return "touch $PKG/.nostrip"
- else
- return "touch $PKG/.nostrip"
- end
- end
- -- strip karaliste belirtilmiş ise
- function tproc.pakur.skliste(value)
- return "set_var STRIP_KARALISTE=\""..value.."\""
- end
- -- isim, devir, sürüm değişken analiz işlevi
- function get_isd(talimatdizin)
- isd = get_basename(talimatdizin)
- isim,surum,devir=isd:match(talimatd_format_pattern)
- if not (isim and surum and devir) then
- messages.talimatdir_format_error:yaz(0)
- end
- talimatdizin=get_abspath(talimatdizin)
- talimatyol=get_abspath(talimatdizin .. '/talimat')
- end
- -- split a string
- function string:split(delimiter)
- local result = { }
- local from = 1
- local delim_from, delim_to = string.find( self, delimiter, from )
- while delim_from do
- table.insert( result, string.sub( self, from , delim_from-1 ) )
- from = delim_to + 1
- delim_from, delim_to = string.find( self, delimiter, from )
- end
- table.insert( result, string.sub( self, from ) )
- return result
- end
- -- bir dosya urlsinin inen isminin alınması
- function get_urlfsn(url)
- local purl,dname=table.unpack(url:split("::"))
- if dname == nil then
- local list=url:split("/")
- dname=list[#list]
- end
- return purl,dname
- end
- -- kaynakların analizi
- tproc.kaynaklar={}
- tproc.adkaynaklar={}
- tproc.inkomutlar={}
- function t.get_kaynaklar(talimat)
- local kaynaklar=""
- tproc.kaynaklar={}
- for key,c_value in ipairs(talimat.kaynak) do
- local key,value=c_value:match("(.*)@(.*)")
- -- kaynak değerinin düzenlemesi
- if tproc.kaynak[key] then
- value=tproc.kaynak[key](value)
- end
- table.insert(tproc.kaynaklar,value)
- kaynaklar=kaynaklar .. value .. "\n"
- -- kaynakların kayıt adlarının alınması
- local url,dname=get_urlfsn(value)
- table.insert(tproc.adkaynaklar,dname)
- -- kaynakların indirme veya kopyalama surumlarının belirlenmesi
- if key == "git" then
- table.insert(tproc.inkomutlar,"indir_git "..url.." "..dname)
- elseif key == "dosya" then
- table.insert(tproc.inkomutlar,("cp -f ${TALIMAT_DIZIN}/%s ${KAYNAKLAR_DEPO}/"):format(dname))
- else
- table.insert(tproc.inkomutlar,"indir_wget "..url.." "..dname)
- end
- end
- return kaynaklar
- end
- -- derle işlevi hazırlanması
- function get_derle(talimat)
- local betik=""
- for key,c_value in ipairs(talimat.derle) do
- -- key e göre derle analiz
- local key,value=c_value:match("(.*)@(.*)")
- -- ilgili anahtar işleve göre betik düzenlenecek.
- if tproc.derle[key] == nil then
- ("derle kısmında tanımsız anahtar:" .. key):yaz(0)
- else
- betik=betik .. tproc.derle[key](value) .."\n"
- end
- end
- return betik
- end
- -- pakur işlev hazırlanması
- function get_pakur(talimat)
- local betik=""
- for key,c_value in ipairs(talimat.pakur) do
- -- key e göre derle analiz
- local key,value=c_value:match("(.*)@(.*)")
- -- ilgili anahtar işleve göre betik düzenlenecek.
- if tproc.pakur[key] == nil then
- ("pakur kısmında tanımsız anahtar:" .. key):yaz(0)
- else
- betik=betik .. tproc.pakur[key](value) .. "\n"
- end
- end
- return betik
- end
- -- kaynakların indirme veya kopyalanma işlevinin hazırlanması
- function get_download()
- local betik=""
- for _,inkomut in ipairs(tproc.inkomutlar) do
- betik=betik..inkomut.."\n"
- end
- return betik
- end
- -- indirilen kaynakların dışarı çıkarılması
- function get_extract()
- local betik=""
- for _,kaynak in ipairs(tproc.adkaynaklar) do
- betik=betik.."echo \""..kaynak.."\" >> $SRC/arsiv.list\n"
- end
- if betik ~= "" then
- betik=betik.."kaynak_cikar\n"
- end
- return betik
- end
- function t.get(talimatd)
- get_isd(talimatd)
- local talimat = lip.load(talimatyol,{"derle","pakur","kaynak"})
- talimat.isim=isim
- talimat.surum=surum
- talimat.devir=devir
- return talimat
- end
- function t.kaynaklar(talimat)
- t.get_kaynaklar(talimat)
- return tproc.kaynaklar
- end
- return t
|