talimat.lua 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. #!/usr/bin/env lua5.3
  2. -- talimat ayrıştırıcı
  3. --kütüphane eklemeleri
  4. local mps_path=os.getenv("MPS_PATH")
  5. if not mps_path then mps_path="/sources/mps2" end
  6. package.cpath = package.cpath .. ";"..mps_path.."/lua/ext/?.so"
  7. package.path = package.path .. ";"..mps_path.."/lua/ext/?.lua"
  8. package.cpath = package.cpath .. ";"..mps_path.."/lua/?.so"
  9. package.path = package.path .. ";"..mps_path.."/lua/?.lua"
  10. local lip= require("LIP")
  11. local lfs = require("lfs")
  12. local util=require ("mps_helper")
  13. local yaz=util.yaz
  14. local _assert=util._assert
  15. local has_value=util.has_value
  16. local path_exists=util.path_exists
  17. local shell=util.shell
  18. local get_abspath=util.get_abspath
  19. local get_basename=util.get_basename
  20. local get_content=util.get_content
  21. local t={}
  22. -- local mesajlar sonra import edilip, dil entegre sağlanacak
  23. local messages={}
  24. messages.operation_file_is_created=" yürürlük dosyası oluşturuldu."
  25. messages.talimatdir_param_need=" talimat dizin parametresi yok"
  26. messages.talimatdir_is_not_exist=" talimat dizini yok"
  27. messages.talimat_is_not_exist=" talimat dosyası yok"
  28. messages.talimatdir_format_error="talimat dizin formatı isim-surum-devir şeklinde olmalı!"
  29. messages.hash_not_match="shasum uyumsuz kaynak arşiv dosyası!!!"
  30. -- local değişkenler
  31. local talimatdizin = ""
  32. local talimatyol = ""
  33. local isim = ""
  34. local surum = ""
  35. local devir = 0
  36. local isd = ""
  37. local isd_ayrac = "-"
  38. local yururluk_dir = '/tmp'
  39. local install_command = 'mps kur'
  40. local config_dir = mps_path.."/conf/"
  41. local global_variables = config_dir..'mpsd.conf'
  42. local helper_functions = config_dir..'mpsd-helper.sh'
  43. local renkyaz = true -- öntanımlı olarak renkli çıktı yazılır.
  44. local talimatd_format_pattern="([%a%d-+]+)#([%d%a.]+)-([%d]+)"
  45. -- talimat processing
  46. local tproc={}
  47. -- talimat kaynakların analizi
  48. tproc.kaynak={}
  49. function tproc.kaynak.github(value)
  50. return "https://github.com/"..value.."/archive/v${surum}.tar.gz::$isim-$surum.tar.gz"
  51. end
  52. function tproc.kaynak.bz2(value) return value .. "/$isim-$surum.tar.bz2" end
  53. function tproc.kaynak.gz(value) return value .. "/$isim-$surum.tar.gz" end
  54. function tproc.kaynak.xz(value) return value .. "/$isim-$surum.tar.xz" end
  55. -- talimat gereklerin analizi
  56. tproc.gerek={}
  57. -- derleme gerekleri
  58. function tproc.gerek.derleme(value)
  59. local deps=""
  60. for dep in value:gmatch('([^%s]+)') do
  61. table.insert(deps,dep)
  62. end
  63. return deps
  64. end
  65. -- calışma gerekleri
  66. function tproc.gerek.calisma(value)
  67. local deps=""
  68. for dep in value:gmatch('([^%s]+)') do
  69. table.insert(deps,dep)
  70. end
  71. return deps
  72. end
  73. -- talimat derle kısmının analizi
  74. tproc.derle={}
  75. tproc.derle.tipler={
  76. gnu = "./configure $confopt && make",
  77. cmake = "cmake ./ && make"
  78. }
  79. function tproc.derle.yama(value)
  80. if tproc.kaynaklar[tonumber(value)] then
  81. return "patch -Np1 -i $SRC/" .. tproc.kaynaklar[tonumber(value)]
  82. else
  83. return "patch -Np1 -i $SRC/" .. value
  84. end
  85. end
  86. function tproc.derle.betik(value) return value .. "\n" end
  87. function tproc.derle.tip(value) return tproc.derle.tipler[value]end
  88. function tproc.derle.dosya(value) return get_content(talimatdizin .."/"..value) end
  89. -- talimat pakur kısmının analizi
  90. tproc.pakur={}
  91. tproc.pakur.tipler={
  92. gnu = "make DESTDIR=$PKG install"
  93. }
  94. function tproc.pakur.betik(value) return value end
  95. function tproc.pakur.tip(value) return tproc.pakur.tipler[value] end
  96. function tproc.pakur.dosya(value) return get_content(talimatdizin .."/"..value) end
  97. -- elf dosyaların strip iptali için
  98. -- (mpsd.conf a müdahale için export ile kullanılacak)
  99. function tproc.pakur.strip(value)
  100. if has_value({"no","yok","0"},value) then
  101. --return "set_var \"STRIP\" \"-\""
  102. return "touch $PKG/.nostrip"
  103. else
  104. return "touch $PKG/.nostrip"
  105. end
  106. end
  107. -- strip karaliste belirtilmiş ise
  108. function tproc.pakur.skliste(value)
  109. return "set_var STRIP_KARALISTE=\""..value.."\""
  110. end
  111. -- isim, devir, sürüm değişken analiz işlevi
  112. function get_isd(talimatdizin)
  113. isd = get_basename(talimatdizin)
  114. isim,surum,devir=isd:match(talimatd_format_pattern)
  115. if not (isim and surum and devir) then
  116. messages.talimatdir_format_error:yaz(0)
  117. end
  118. talimatdizin=get_abspath(talimatdizin)
  119. talimatyol=get_abspath(talimatdizin .. '/talimat')
  120. end
  121. -- split a string
  122. function string:split(delimiter)
  123. local result = { }
  124. local from = 1
  125. local delim_from, delim_to = string.find( self, delimiter, from )
  126. while delim_from do
  127. table.insert( result, string.sub( self, from , delim_from-1 ) )
  128. from = delim_to + 1
  129. delim_from, delim_to = string.find( self, delimiter, from )
  130. end
  131. table.insert( result, string.sub( self, from ) )
  132. return result
  133. end
  134. -- bir dosya urlsinin inen isminin alınması
  135. function get_urlfsn(url)
  136. local purl,dname=table.unpack(url:split("::"))
  137. if dname == nil then
  138. local list=url:split("/")
  139. dname=list[#list]
  140. end
  141. return purl,dname
  142. end
  143. -- kaynakların analizi
  144. tproc.kaynaklar={}
  145. tproc.adkaynaklar={}
  146. tproc.inkomutlar={}
  147. function t.get_kaynaklar(talimat)
  148. local kaynaklar=""
  149. tproc.kaynaklar={}
  150. for key,c_value in ipairs(talimat.kaynak) do
  151. local key,value=c_value:match("(.*)@(.*)")
  152. -- kaynak değerinin düzenlemesi
  153. if tproc.kaynak[key] then
  154. value=tproc.kaynak[key](value)
  155. end
  156. table.insert(tproc.kaynaklar,value)
  157. kaynaklar=kaynaklar .. value .. "\n"
  158. -- kaynakların kayıt adlarının alınması
  159. local url,dname=get_urlfsn(value)
  160. table.insert(tproc.adkaynaklar,dname)
  161. -- kaynakların indirme veya kopyalama surumlarının belirlenmesi
  162. if key == "git" then
  163. table.insert(tproc.inkomutlar,"indir_git "..url.." "..dname)
  164. elseif key == "dosya" then
  165. table.insert(tproc.inkomutlar,("cp -f ${TALIMAT_DIZIN}/%s ${KAYNAKLAR_DEPO}/"):format(dname))
  166. else
  167. table.insert(tproc.inkomutlar,"indir_wget "..url.." "..dname)
  168. end
  169. end
  170. return kaynaklar
  171. end
  172. -- derle işlevi hazırlanması
  173. function get_derle(talimat)
  174. local betik=""
  175. for key,c_value in ipairs(talimat.derle) do
  176. -- key e göre derle analiz
  177. local key,value=c_value:match("(.*)@(.*)")
  178. -- ilgili anahtar işleve göre betik düzenlenecek.
  179. if tproc.derle[key] == nil then
  180. ("derle kısmında tanımsız anahtar:" .. key):yaz(0)
  181. else
  182. betik=betik .. tproc.derle[key](value) .."\n"
  183. end
  184. end
  185. return betik
  186. end
  187. -- pakur işlev hazırlanması
  188. function get_pakur(talimat)
  189. local betik=""
  190. for key,c_value in ipairs(talimat.pakur) do
  191. -- key e göre derle analiz
  192. local key,value=c_value:match("(.*)@(.*)")
  193. -- ilgili anahtar işleve göre betik düzenlenecek.
  194. if tproc.pakur[key] == nil then
  195. ("pakur kısmında tanımsız anahtar:" .. key):yaz(0)
  196. else
  197. betik=betik .. tproc.pakur[key](value) .. "\n"
  198. end
  199. end
  200. return betik
  201. end
  202. -- kaynakların indirme veya kopyalanma işlevinin hazırlanması
  203. function get_download()
  204. local betik=""
  205. for _,inkomut in ipairs(tproc.inkomutlar) do
  206. betik=betik..inkomut.."\n"
  207. end
  208. return betik
  209. end
  210. -- indirilen kaynakların dışarı çıkarılması
  211. function get_extract()
  212. local betik=""
  213. for _,kaynak in ipairs(tproc.adkaynaklar) do
  214. betik=betik.."echo \""..kaynak.."\" >> $SRC/arsiv.list\n"
  215. end
  216. if betik ~= "" then
  217. betik=betik.."kaynak_cikar\n"
  218. end
  219. return betik
  220. end
  221. function t.get(talimatd)
  222. get_isd(talimatd)
  223. local talimat = lip.load(talimatyol,{"derle","pakur","kaynak"})
  224. talimat.isim=isim
  225. talimat.surum=surum
  226. talimat.devir=devir
  227. return talimat
  228. end
  229. function t.kaynaklar(talimat)
  230. t.get_kaynaklar(talimat)
  231. return tproc.kaynaklar
  232. end
  233. return t