ChangeBlog  •  Archiwum  •  Kategorie  •  Artykuły  •  Galeria  •  Czytelnicy  •  Rupieciarnia
RSS wpisów  |  RSS komentarzy
Zmienne środowiskowe używane przez Hierophanta

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.