Red Hat'i töötaja esitles kogumisse suvandit Goals. GNU Make 4.2 vÀljaanne

Richard WM Jones, autor libguestfs, töötades ettevĂ”ttes Red Hat, esitles uus kokkupanekuteenus Goals, mille eesmĂ€rgiks on likvideerida puudusi ja probleeme make utiliidis, sĂ€ilitades samas skriptide ĂŒldise lihtsuse ja arusaadavuse. Make utiliit projekteeriti 1976. aastal ja sellel on mitmeid kontseptuaalseid puudujÀÀke, Goalsis plaanitakse need puudujÀÀgid kĂ”rvaldada, muutes samas ĂŒldist kontseptsiooni.
Goalsi lĂ€htekood GNU Üldine Avaliku litsentsi alusel. on litsentseeritud GPLv2+ all.

Haldatavad probleemid:

  • Ainult ĂŒhe sĂ”ltuvuste lahendamise taktika toetamine — «kokkupanekujuhise kĂ€ivitamine, kui sihtfail puudub vĂ”i on vanem kui ĂŒkski sĂ”ltuvus». Goalsis plaanitakse rakendada ka muid taktikaid, nĂ€iteks URL-i olemasolu kontrollimine, muudetud aja vĂ”rdlemine mistahes failiga, paketi koostamise hindamine Koji, kontrollsummade vĂ”rdlemine, testide kĂ€ivitamine valikulise testide vahelejĂ€tmisega.
  • Kogumis eesmĂ€rkide töötlemisel ei eralda utiliit make faile ja reeglite nimesid, mis tĂ€hendab, et puudub kontroll selle ĂŒle, kas reegli kĂ€ivitamisel luuakse kindlasti fail, mille loomist on deklareeritud. NĂ€iteks juhul, kui reegel nimega "test", mis kĂ€ivitab testiskripte, loob juhuslikult faili nimega "test", ei kutsuta teste enam esile, kuna make arvab, et eesmĂ€rk on tĂ€idetud ja ei nĂ”ua edasiste toimingute tegemist (probleemi vĂ€ltimiseks vĂ”ib make'is mÀÀrata direktiivi ".PHONY: test"). Goals eristab selgelt faile ja reeglite nimesid.

    Red Hat'i töötaja esitles kogumisse suvandit Goals. GNU Make 4.2 vÀljaanne
  • Probleem, mis seisneb ainult ĂŒhe parameetri esitamisel koostamisjuhistes.

    Red Hat'i töötaja esitles kogumisse suvandit Goals. GNU Make 4.2 vÀljaanne

    Goals soovitab kasutada suvalist arvu nimetatud parameetreid. NĂ€iteks saab eraldi eristada nime kaudu silumisfaili tunnust:

    Red Hat'i töötaja esitles kogumisse suvandit Goals. GNU Make 4.2 vÀljaanne
  • Probleemid interaktsioonis shell-tĂ”lgiga. NĂ€iteks vajadus kontrollida tĂŒhikute ekraanimist failide ja kaustade nimedes, ressursside raiskamine iga kĂ€su tĂ€itmisel eraldi shell-tĂ”lgi kĂ€ivitamiseks, kahemĂ”ttelisus sĂŒmboli "$" tĂ”lgendamisel (kasutatakse nii shellis kui ka make'is), ja sisendite arvestamine.

    Antud probleemid lahendatakse Goals'is sĂŒmboli "%" kasutamisega, mitte "$" kogumispetturite jaoks ("$" jÀÀb ainult shell'i jaoks), kasutades parsi. LALR(1), mis nĂ”uab teede ja failide nimede ĂŒmbritsemist jutumĂ€rkidega ja koodiblokkide eraldamist sĂŒmbolitega. Kogu bloki kĂ€sk kĂ€ivitatakse ĂŒhes shelli eksemplaris, samas kui bloki sees lubatakse suvalist koodi vormindamist, madala juurdepÀÀsu spetsiaalsetele ruumidele.

    Oli:
    target: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Muudetud:
    "target": "foo.o", "bar.o" {
    LAGS < -o %@
    }

Goalsi muud omadused:

  • Valikuline tugi suvaliste nimede ja parameetrite mÀÀramiseks:

    goal all = : "target"

    goal link =
    "target" : "foo.o", "bar.o" { 
 }

    goal compile (name) =
    «%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ }

  • Kaks kĂ€ivitamisreĆŸiimi: make-reĆŸiim, et sobitada kogumispetturid failinimedele (nt fail "foo.o" vastab kogule "%name.o"), ja otsekompileerimise reĆŸiim:

    goal all = : link

    goal link =
    "target" : "foo.o", compile ("bar") { 
 }

    goal compile (name) =
    «%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ }

  • Kogude koostamise taktika mÀÀratakse spetsiaalsete reeglite kaudu, mille abil saab mÀÀrata koostamise eesmĂ€rgi uuesti koostamise vajaduse. Kui on seotud faili olemasolu kontrollimine, siis mÀÀratakse see selgelt vastava tunnuse kaudu («target» reegli nime jaoks ja *file(«target») faili kontrollimiseks).

    "target" : "foo.o", "bar.o" { 
 }

    *file(«target») : *file(«foo.o»), *file(«bar.o») { 
 }

  • Arendaja saab mÀÀrata omapĂ€raseid koostamise taktika tunnuseid. Tunnus «*file» on mÀÀratud vaikevÀÀrtusena (@{
} viitab vĂ€ljundi su suppression’ile ja «exit 99» annab mĂ€rku uuesti koostamise vajadusest):

    tactic *file (failure_name) = {@{
    test -f %filename || exit 99
    for f in %

    Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster