Po drátě 5: Řešení úlohy č. 10
Zadáním úlohy byl tarball s configure skriptem a podadresáři s programy "Hello World!" s použitím samotného C, samotného C++ a knihoven Gtk, Gtkmm, Qt4 a KDE4, které ovšem všechny měly tento text změněný na "Tady nic neni". To samé o sobě tvrdilo i README, CMake skript, Makefile.am a licence GPL. Zbýval už jen skript configure, který po spuštění mezi hláškami brzy vypsal i "Tady nekde neco je".
Donutit tento configure skript, aby úspěšně doběhl, ale vůbec nebylo jednoduché, protože prováděl celou řadu divných akcí a kontrol, jako dvacetisekundovou modlitbu k Velkému Tuxovi, zkoušení možnosti objednání zmrzliny pro organizační tým nebo požadování hlavičkových souborů pro HAL verze větší než 0.5.13 a později pro HAL verze menší než 0.5.13. Přesto bylo možné donutit skript doběhnout úspěšně až do konce a vypsat hlášku "checking for password ... veda", a to pomocí různých přepínačů, parametrů nebo nainstalování těchto závislostí, bez nutnosti jakýchkoliv úprav configure skriptu.
Mnoho čekání šlo zkrátit a kontrol a závislostí splnit spuštěním skriptu jako:
HAL2_CFLAGS=1 HAL2_LIBS=1 NOPORN=1 TMPFIRSTFILE=`ls -1 /tmp | head -1` bash ./configure --with-shorter-tux-prayer --enable-hard-work --with-personal-icecream --enable-c --without-alsa
- Použití HAL2_CFLAGS a HAL2_LIBS přeskočí druhou kontrolu pro HAL (pro verzi menší než 0.5.13), přesně jak napsala chybová hláška. Pak stačí mít jen verzi větší než 0.5.13 nebo použít stejný trik i tam (kontrola jinak nebyla k ničemu potřebná).
- Použití --without-alsa bylo nutné, protože požadovaná verze ještě neexistuje (a --help na to u tohoto přepínače upozorňuje). Samotnou kontrolu šlo sice přeskočit zakomentováním ve skriptu nebo instalací falešné požadované verze, ale pak skript dával nesprávné heslo "vedma" (protože reálně takto skript nemohl úspěšně skončit). Protože kontrola verze byla dělána ručně, nešlo použít ani stejný trik jako s HAL.
- Skript configure kontroloval, jestli v současném adresáři je soubor configure, který je spustitelný, pokud ano, tak selhal. Možností bylo skript přejmenovat, atribut spustitelnosti odstranit a skript spouštět přes bash, nebo použít jiný builddir.
- Mezi požadavky byla utilita NumLockX verze přesně 1.1. Domovská stránka http://ktown.kde.org/~seli/numlockx/ poskytuje jen odkaz na verzi 1.2, pro verzi 1.1 bylo třeba změnit URL, nebo tarball najít jinde. Dalším problémem bylo, že starý configure skript verze 1.1 na současných distribucích není schopný najít knihovny Xlib, bylo tedy nutné ho znovu vytvořit, utilitu přeložit ručně, nebo přeložit verzi 1.2 s ručně změněnou verzí na 1.1. Bez verze 1.1 nedával skript správné heslo.
Zajímavosti
Stejně jako u úlohy č. 8 i zde šlo využít GPL a napsat si o kompletní zdrojový kód, configure byl generovaný ze snáze (no, relativně vzato :) ) čitelnějšího configure.ac, který ale nebyl přiložen. Tuto možnost ale nikdo z hráčů nevyužil. Vzhledem k tomu, že configure.ac měl být původně součástí a je tedy psán hodně nečitelně, by to ale zase nebyla až tak výrazná pomoc. Fakt, že bychom zdrojové kódy posílali na disketě poštou, by zřejmě také trochu zdržoval :).
Jednou ze změn v KDE4.0 byl přechod z autotools (tj. configure) na CMake. Autor úlohy tehdy nebyl příliš nadšen, protože autotools docela dobře znal, CMake ne, a ačkoliv výhody CMake na Windows a Mac OS byly zřejmé, na Linux to tak nevypadalo. Nostalgie na začátku psaní úlohy byla celkem rychle vystřídána zděšením a autor konečně plně prozřel a pochopil moudrost volby CMake.
Autorem úlohy je Luboš Luňák.
Přejmenovat to nešlo:
configure3: error: cannot find sources (configure) in . or ..
Co ale naopak fungovalo bylo zakomentování té kontroly