Automatyka Hierophanta polega w wielkiej mierze na wartościach pewnych zmiennych środowiskowych. W zmienne te wpycha się określone wartości aby zmienić zachowanie Hiero, można też je odczytywać w celu wykorzystania w sekcjach [prep] czy [inst]. Opisywanie zmiennych to diablo złożony proces, bo różnią się miejscem definicji, typem definicji oraz obszarem na którym obowiązują. Ale muszę to zrobić, bo sam się w tym gubię i chcę sobie wydrukować rozpiskę do szybkiej konsultacji :)
OK, proponuję taki format:
| ZMIENNA | [wartość domyślna] | {typ definicji} | (obszar dostępności) |
| opis zastosowania danej zmiennej | |||
| HBS_HOME | [$HOME/hbs] | {twarda} | (od chwili definicji) |
| Katalog roboczy HBS | |||
| HBS_DONE | [$HOME/hbs/DONE] | {twarda} | (od chwili definicji) |
| Katalog w którym umieszczane będą pakiety binarne | |||
| HBS_PACKDIR | [/archiwa/HBS] | {twarda} | (od chwili definicji) |
| Tutaj lądować będą pakiety źródłowe | |||
| HBS_FAKEROOT | [/var/tmp/hbs] | {twarda} | (od chwili definicji) |
| Tutaj będą umieszczane katalogi "fake root" | |||
| PREFIX | [/usr] | {miękka} | (zaraz po [vars]) |
| --prefix= dla ./configure | |||
| BINDIR | [${PREFIX}/bin] | {miękka} | (zaraz po [vars]) |
| --bindir= dla ./configure | |||
| SBINDIR | [${PREFIX}/sbin] | {miękka} | (zaraz po [vars]) |
| --sbindir= dla ./configure | |||
| SYSCONFDIR | [/etc] | {miękka} | (zaraz po [vars]) |
| --sysconfdir= dla ./configure | |||
| DATADIR | [${PREFIX}/share] | {miękka} | (zaraz po [vars]) |
| --datadir= dla ./configure | |||
| INCLUDEDIR | [${PREFIX}/include] | {miękka} | (zaraz po [vars]) |
| --includedir= dla ./configure | |||
| LIBDIR | [${PREFIX}/lib] | {miękka} | (zaraz po [vars]) |
| --libdir= dla ./configure | |||
| LIBEXECDIR | [${LIBDIR}] | {miękka} | (zaraz po [vars]) |
| --libexecdir dla ./configure | |||
| LOCALSTATEDIR | [/var] | {miękka} | (zaraz po [vars]) |
| --localstatedir dla ./configure | |||
| MANDIR | [${PREFIX}/share/man] | {miękka} | (zaraz po [vars]) |
| --mandir dla ./configure | |||
| INFODIR | [${PREFIX}/share/info] | {miękka} | (zaraz po [vars]) |
| --infodir dla ./configure | |||
| DOCDIR | [${DATADIR}/${PKG_NAME}-${PKG_VERSION}] | {miękka} | (zaraz po [vars]) |
| używana przez automatyczny mechanizm kompresujący dokumentację, poza tym czysto pomocnicza | |||
| PKG_NAME | [ustalana w czasie wykonywania] | {twarda} | (zaraz po [info]) |
| nazwa pakietu | |||
| PKG_VERSION | [ustalana w czasie wykonywania] | {twarda} | (zaraz po [info]) |
| wersja programu | |||
| PKG_REVISION | [ustalana w czasie wykonywania] | {twarda} | (zaraz po [info]) |
| wersja pakietu | |||
| CONFIGURE_DEFS | ["--prefix=$PREFIX --bindir=$BINDIR --sbindir=$SBINDIR --sysconfdir=$SYSCONFDIR --datadir=$DATADIR --includedir=$INCLUDEDIR --libdir=$LIBDIR --libexecdir=$LIBEXECDIR --localstatedir=$LOCALSTATEDIR --mandir=$MANDIR --infodir=$INFODIR"] | {miękka} | (zaraz po [vars]) |
| domyślny ciąg opcji przekazywanych ./configure | |||
| MAKEALL_OPTS | [niezdefiniowana] | {twarda} | (od chwili definicji) |
| zmienna dodawana do wywołania "make" przy kompilacji. Aby uruchomić np. "make -s docs progs" zamiast samego "make" wystarczy zdefiniować ją na "-s docs progs". | |||
| HBS_MAKE | [make] | {miękka} | (zaraz po [vars]) |
| nazwa programu "make" używana w [build] i [inst]. Można jej użyć aby zmienić program "make" na inny, albo by globalnie dodać do wszystkich wywołań "make" jakąś opcję (np. -s) | |||
| HBS_CONFIGURE | [configure] | {miękka} | (zaraz po [vars]) |
| nazwa skryptu ./configure używana w [build]. Można jej użyć jeśli jakiś program używa np. skryptu o nazwie ./Configure. | |||
| MAKEINST_OPTS | ["install DESTDIR=\"$HBS_DESTDIR\""] | {miękka} | (zaraz po [vars]) |
| "target" dla wywołania $HBS_MAKE w [inst]. Np. dla glibc należy ją zdefiniować jako "install install_root=\"$HBS_DESTDIR\"" | |||
| HBS_SKIP_PREP | [niezdefiniowana] | {twarda} | (od chwili definicji) |
| jeśli zdefiniowana (obojętnie na jaką wartość), Hierophant całkowicie przeskoczy wykonywanie fragmentu [prep]. Wypierana przez opcję -noprep polecenia hbs. | |||
| HBS_SKIP_BUILD | [niezdefiniowana] | {twarda} | (od chwili definicji) |
| jeśli zdefiniowana (obojętnie na jaką wartość), Hierophant całkowicie przeskoczy wykonywanie fragmentu [build]. Wypierana przez opcję -nobuild polecenia hbs. | |||
| HBS_SKIP_INST | [niezdefiniowana] | {twarda} | (od chwili definicji) |
| jeśli zdefiniowana (obojętnie na jaką wartość), Hierophant całkowicie przeskoczy wykonywanie fragmentu [inst]. Wypierana przez opcję -noinst polecenia hbs. | |||
| HBS_SKIP_POST | [niezdefiniowana] | {twarda} | (od chwili definicji) |
| jeśli zdefiniowana (obojętnie na jaką
wartość), Hierophant pominie postprocessing plików w fake root. Czyli stripowanie binarek i kompresowanie dokumentacji. | |||
| HBS_SKIP_PATCHES | [niezdefiniowana] | {twarda} | (od chwili definicji) |
| jeśli zdefiniowana (obojętnie na jaką wartość), Hierophant pominie patchowanie źródeł w [prep]. | |||
| HBS_SKIP_COMPRESS_DOC | [niezdefiniowana] | {twarda} | (od chwili definicji) |
| jeśli zdefiniowana (obojętnie na jaką wartość), Hierophant pominie kompresowanie dokumentacji w $DOCDIR. | |||
| PATCHSCRIPT | [$PKG_DIR/BUILD/.hbs_patch] | {twarda} | (poczynając od [vars]) |
| Zawiera ścieżkę tymczasowego skryptu z poleceniami patchowania. Zmienna ta wskazuje na automatycznie utworzony skrypt który zawiera wszystkie polecenia dokonujące patchowania źródeł. Można tę zmienną source-ować aby ręcznie wywołać procedurę patchowania. Należy to robić przebywając w katalogu z rozpakowanymi źródłami. Zmienna ta przydaje się gdy wcześniej z jakiegoś powodu trzeba było zrezygnować z automatycznego patchowania (np. jeśli po rozpakowaniu źródeł trzeba z nimi zrobić coś jeszcze zanim będzie można nakładać patche). Zmienna ta jest zdefiniowana nawet jeśli sam skrypt patchujący nie istnieje (gdy pakiet nie używa patchy). | |||
| HBS_SKIP_DEPSGEN | [niezdefiniowana] | {twarda} | (od chwili definicji) |
| jeśli zdefiniowana (obojętnie na jaką
wartość), Hierophant pominie generowanie list zależności pakietu. Wynikowy pakiet nie będzie ani dostarczał żadnych zależności, ani żadnych wymagał. Z punktu widzenia Hiero, oczywiście. | |||
| SOURCE[0-9]+ | [ustalana w czasie wykonywania] | {twarda} | (poczynając od [vars]) |
| Seria zmiennych o nazwach SOURCE0, SOURCE1, SOURCE2 itp. Zawierają nazwy plików źródłowych znalezionych w katalogu FILES/ bądź zdefiniowanych w [files]. Główne źródła będą zawsze pierwsze (SOURCE0), pozostałe zajmują kolejne pozycje. Pliki nie będące skompresowanymi paczkami tar zajmują zawsze ostatnie pozycje. Zmiennych będzie tyle, ile odnalezionych/zdefiniowanych źródeł. | |||
| BUILDSUBDIR | [ustalana w czasie wykonywania] | {twarda} | (zaraz po [prep]) |
| Nazwa katalogu w którym znajdują się rozpakowane główne źródła. | |||
| EXTBUILDDIR | [niezdefiniowana] | {twarda} | (od chwili definicji) |
| Niektóre programy (jak np. gcc czy glibc)
wymagają, by kompilować je w katalogu innym niż ten w którym leżą ich
źródła. Definiując tę zmienną włączasz specjalny tryb pracy Hiero. Założy on w katalog BUILD/ drugi podkatalog, o nazwie podanej w EXTBUILDDIR, po czym z tego nowego katalogu wywoła skrypt ./configure z katalogu ze źródłami (czyli z $BUILDSUBDIR). W EXTBUILDDIR wykona też "make" i "make install". Ogólnie mówiąc, dla programów typu glibc czy gcc wystarczy zdefiniować tę zmienną a resztą zajmie się Hierophant. | |||
| MAKEALL_OPTS | [niezdefiniowana] | {twarda} | (od chwili definicji) |
| "target" dla wywołania $HBS_MAKE w [build]. Domyślnie niezdefiniowana, ale jeśli make ma wykonać "target" inny niż standardowy lub chcesz przekazać make jakieś opcje, to właśnie ta zmienna to umożliwia. Na dodatek nie wpływa na wywołanie $HBS_MAKE w sekcji [inst]. | |||
| PKG_NAME | [ustalana w czasie wykonywania] | {twarda} | (poczynając od [vars]) |
| Zmienna ta zawiera nazwę pakietu. | |||
| PKG_DIR | [ustalana w czasie wykonywania] | {twarda} | (poczynając od [vars]) |
| Zmienna ta zawiera ścieżkę dostępu do katalogu z paczkowanym pakietem. Czyli np. "/home/grzegorz/hbs/gqview" | |||
| FILES | [ustalana w czasie wykonywania] | {twarda} | (poczynając od [vars]) |
| Katalog w którym leżą wszystkie źródła (SOURCE0, SOURCE1 itp.). Czyli pewnie wskazuje na podkatalog FILES w $PKG_DIR. | |||
| HBS_DIR | [$HOME/hbs] | {twarda} | (poczynając od [vars]) |
| Prywatny katalog przeznaczony na budowanie paczek. Dostępne na wypadek gdyby ktoś chciał np. sprawdzić, czy PKG_DIR leży w obrębie ~/hbs. Bo nie musi. Teoretycznie katalog z paczką może leżeć prawie gdziekolwiek, bo Hiero stara się nie wyłazić bez potrzeby poza paczkę. Można sobie przenieść ~/hbs/gqview do /tmp, a następnie tam zbudować ten pakiet. Żaden problem. A wynikowa paczka wyląduje w $HBS_DIR/DONE/. | |||
| PKG_SUMMARY | [ustalana w czasie wykonywania] | {twarda} | (poczynając od [vars]) |
| Zawiera jednolinijkowy opis pakietu pobrany z sekcji INFO. | |||
| PKG_VERSION | [ustalana w czasie wykonywania] | {twarda} | (poczynając od [vars]) |
| Zmienna ta zawiera wersję paczkowanego oprogramowania. | |||
| PKG_REVISION | [ustalana w czasie wykonywania] | {twarda} | (poczynając od [vars]) |
| Zmienna ta zawiera wersję samego pakietu (release, revision, różnie to ludzie nazywają) | |||
| HBS_DESTDIR | [ustalana w czasie wykonywania] | {twarda} | (poczynając od [vars]) |
| Wskazuje na docelowy fake root. Standardowo będzie to rozwinięta wersja "/var/tmp/hbs/$PKG_NAME-$PKG_VERSION-$PKG_REVISION" | |||
LEGENDA:
Zmienne [niezdefiniowane] to te, które standardowo nie istnieją, nie są
definiowane przez Hiero.
Zmienne [ustalane w czasie wykonywania] to te,
które przyjmują pewne wartości, ale wartości te są różne w każdym
pakiecie.
Zmienne {miękkie} to te, które Hiero definiuje sobie tylko jeśli użytkownik ich wcześniej ręcznie samemu nie zdefiniował. Inaczej mówiąc, Hiero przypisuje im swoje wartości tylko jeśli użytkownik nie zrobił tego w sekcji [vars] lub samym środowisku (mówimy w końcu o zmiennych środowiskowych, więc zmienne miękkie można ustawić globalnie już przed uruchomieniem Hiero.)
Zmienne {twarde} dzielą się dodatkowo na [niezdefiniowane] i całą resztę. Te niezdefiniowane można spokojnie samemu ustawiać, zwykle po to właśnie są. Ale od zmiennych {twardych} definiowanych przez samego Hierophanta radzę się trzymać z daleka. Można odczytywać, ale nie wolno ich zmieniać.
Zmienne dostępne (od chwili definicji) można odczytywać w każdym punkcie po ich zdefiniowaniu, to jasne :)
Zmienne dostępne (zaraz po [vars]) są dostępne w każdej sekcji oprócz [vars]. Chodzi o to, że [vars] ma absolutne pierwszeństwo w stosunku do pozostałych sekcji i w chwili interpretowania [vars] wiele zmiennych (zwłaszcza tych {miękkich}) nie jest jeszcze dostępnych. Dlatego też nie można w [vars] odczytywać np. zmiennej $PREFIX i oczekiwać, że odczyta się z niej domyślne "/usr".
Za to zmiene dostępne (poczynając od [vars]) są do odczytania już w sekcji [vars], to chyba zrozumiałe.