Zaměstnanec Red Hat představil sestavovací systém Goals. Vydání GNU Make 4.2

Richard Jones, autor libguestfs, pracující ve společnosti Red Hat, představil nový sestavovací nástroj Goals, zaměřený na odstranění nedostatků a problémů v nástroji make při zachování celkové jednoduchosti a srozumitelnosti skriptů. Nástroj make byl navržen v roce 1976 a má řadu konceptuálních nedostatků, které se plánuje odstranit v Goals, aniž by se měnila celková koncepce.
Zdrojový kód Goals distribuováno pod licencí GPLv2+.

Řešené problémy:

  • Podpora pouze jedné taktiky rozřešení závislostí — „sestavovací instrukce se spouští, pokud cílový soubor chybí, nebo je starší než jedna z závislostí“. V Goals se plánuje implementovat i další taktiky, jako je kontrola přítomnosti URL, porovnání času změny s jakýmkoliv souborem, hodnocení sestavení balíčku v Koji, porovnání kontrolních součtů, spouštění testovacích sad s výběrovým vynecháváním testů.
  • Při zpracování sestavovacích cílů nástroj make odděluje soubory a názvy pravidel, a jako důsledek chybí kontrola toho, že při spuštění pravidla skutečně vznikne soubor, jehož vytvoření je deklarováno. Například pokud existuje pravidlo s názvem „test“, které spouští skripty s testy, a náhodou vznikne soubor s názvem „test“, testy přestanou být volány, protože make považuje cíl za sestavený a nevyžaduje provedení jakýchkoliv akcí (k obejití problému v make lze uvést direktivu „.PHONY: test“). Goals jasně odděluje soubory a názvy pravidel.

    Zaměstnanec Red Hat představil sestavovací systém Goals. Vydání GNU Make 4.2
  • Problém s poskytováním pouze jednoho parametru pro sestavovací instrukce.

    Zaměstnanec Red Hat představil sestavovací systém Goals. Vydání GNU Make 4.2

    V Goals se navrhuje používat libovolný počet pojmenovaných parametrů. Například lze oddělit z názvu význačný znak ladicího souboru:

    Zaměstnanec Red Hat představil sestavovací systém Goals. Vydání GNU Make 4.2
  • Problémy interakce s shellovým interpretátorem. Například potřeba kontrolovat escapeování mezer v názvech souborů a adresářů, zbytečné zdroje na spuštění samostatného shellového interpretátoru při provádění každého příkazu, dvojí výklad symbolu „$“ (používá se jak v shellu, tak v make), zohlednění odsazení.

    Uvedené problémy se řeší v Goals použitím symbolu „%“ namísto „$“ pro sestavovací proměnné („$“ zůstává pouze pro shell), použitím parseru LALR(1), který vyžaduje obklopovat cesty a názvy souborů uvozovkami a zvýraznit bloky s kódem složenými závorkami. Celý blok se spouští v jednom instance příkazového shellu a uvnitř bloku je povoleno libovolné formátování kódu, bez vazby na speciální mezery.

    Bylo:
    cílové: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Stalo se:
    „cílové“: „foo.o“, „bar.o“ {
    LAGS < -o %@
    }

Další funkce cílů:

  • Volitelná podpora pro zadávání libovolných názvů a parametrů:

    cíl all = : „cílové“

    cíl link =
    „cílové“ : „foo.o“, „bar.o“ { … }

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

  • Dva režimy spuštění: režim make pro přiřazení cílových sestavení k názvům souborů (například soubor „foo.o“ odpovídá cíli „%name.o“), a režim přímého spuštění kompilace:

    cíl all = : link

    cíl link =
    „cílové“ : „foo.o“, compile („bar“) { … }

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

  • Taktika sestavení je určena speciálními pravidly, pomocí kterých lze určit potřebu znovu sestavit cílový cíl. Pokud je vazba na existenci souboru, je to jasně určeno odpovídajícím signálem („cílové“ pro název pravidla a *file(„cílové“) pro kontrolu souboru).

    „cílové“ : „foo.o“, „bar.o“ { … }

    *file(„cílové“) : *file(„foo.o“), *file(„bar.o“) { … }

  • Vývojář může definovat libovolné signály sestavovacích taktik. Signál „*file“ je definován ve výchozím nastavení (@{…} označuje potlačení výstupu a „exit 99“ signalizuje potřebu znovu sestavit):

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

    Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster