Jak přeložit a spustit program Popeye pod Linuxem ?

How compile and run Popeye under Linux system ?

Václav Kotěšovec, 18.7.2007


Tento článek je napsán pro uživatele Windows, kteří s Linuxem zatím nepřišli příliš do styku nebo s ním mají jen minimální zkušenosti. Motivací pro občasné používání programu Popeye pod Linuxem je to, že pod Linuxem je možné testování úloh v délce až 999 půltahů, kdežto pod Windows jen do 699 půltahů. Pokud tedy budeme potřebovat přezkoušet např. sh#800 nebo h#450, pod Windows to nepůjde, pod Linuxem možná ano (pokud to bude časově zvládnutelné)! Tyto případy jsou ojedinělé, přesto jsem se s pár takovými úlohami, které byly dlouhé, ale přesto nebyly časově příliš náročné, setkal a snaha je přezkoušet mě vedla k experimentům s Popeyemi pod Linuxem.

This article about Popeye under Linux is given for Windows users with minimal experience with Linux. Motivation: Under Windows is possible tested chess problem up to 699 halfmoves, but under Linux up to 999 halfmoves. Some long chess problems (for example sh#800, h#400, #400) are possible tested only under Linux.


Program Popeye je volně šiřitelný (free) program na řešení šachových úloh. Je napsaný v jazyce C a na jeho vývoji se podílelo několik programátorů (Philippe Schnoebelen, Elmar Bartel, Norbert Geissler, Thomas Maeder, Torsten Linss, Stefan Hoening, Stefan Brunzen, Harald Denker, Thomas Bark, Stephen Emmerson). Výhodou je (na rozdíl od jiných programů, které stojí a padají vždy s jedním člověkem), že do jeho kódu "vidí" několik lidí, kteří jsou v něm schopni dělat opravy. Na internetu je k dispozici zdrojový kód v jazyku C a zkompilované verze pro Windows XP/2000/Vista (pywin32.exe), DOS (PYDOS32.EXE, pouze pro 80386 a vyšší, max.32 MB RAM), Windows 98 (pywin98.exe, max.768 MB RAM), které je možno pod těmito systémy snadno spustit. Aktuálně jde program stáhnout odtud Popeye 4.37

Horší je situace pod Linuxem, pro který není žádný spustitelný soubor připraven a pokud chce někdo pod tímto systémem Popeye provozovat, musí si je pod ním sám přeložit. Pokud má někdo větší zkušenosti s Linuxem, jistě to lehce zvládne, ale pokud je někdo zvyklý na systém Windows, může to být téměř neřešitelný problém. Mám více jak 30-ti leté zkušenosti s programováním na různých počítačích, ale toto byl i pro mě docela "tvrdý oříšek". Chci se proto se čtenáři podělit o výsledky svých pokusů, po kterých se mi nakonec podařilo Popeye pod Linuxem rozchodit. Jak tedy na Linux ?


1) Všechno je jinak

Nejprve je třeba na chvíli zapomenout na osvědčený styl práce a na některé věci, které pod Windows bereme jako samozřejmost. Programy pod Linuxem jsou nepřenositelné. Pokud si dám tu práci a rozchodím něco pod jedním systémem a pak zkopíruji přeložený program na jiný počítač (a to opět pod nějaký Linux), nemusí to fungovat, je nutno to tam znovu zkompilovat. Uživatelé Linuxu mě možná teď "ukamenují" tím, že právě nová kompilace přizpůsobí daný program té "mašině" na které bude spouštěn a že tam pak třeba bude o něco rychlejší atd., přesto toto považuji za největší slabinu Linuxu a největší brzdu efektivní práce. Zapomeňme tedy na přenositelné EXE soubory z Windows, pod Linuxem žádné nejsou a musíme si vždy program znovu zkompilovat.

2) instalace / VMWARE

Nehodlám se tady zabývat instalací samotného Linuxu. Předpokládám, že je na nějakém počítači již nainstalovaný.
Přesto existuje jedna dobrá cesta, jak zůstat v prostředí Windows, ale přesto pracovat v Linuxu a tou je VMWARE, doporučuji verzi 6.
Tento skvělý program umí emulovat různé operační systémy, např. pod Windows XP mít okno s Windows 98 a samozřejmě také jde emulovat různé verze Linuxů. Ve skutečnosti to není žádná emulace (známá např. z Virtual PC), všechno jede plnou rychlostí a pouze se virtualizují požadavky na volání služeb operačního systému.
Verzí Linuxu je celá řada (kdo se v tom má vyznat?) Po přečtení pár článků na internetu se mi zdál nejmodernější a nejprogresivnější z Linuxových systémů systém Fedora, aktuální je verze 7.

VMWARE image systému Fedora 7 se dá stáhnout zde Fedora 7 - VMwareTools 6.0.0-45731 installed nebo přímo zde Virtual Appliances. Žádná složitá instalace, zvolíme image systému, spustíme a jsme v něm (s možností uložení stavu celého systému a opětného pokračování od místa, kde jsme přestali! Jednoduché, geniální.)
Další systémy pro VMWARE se dají stáhnout zde Virtual Appliance Marketplace po kliknutí na "Operating Systems".

3) Jak na síť a do Windows ?

Pokud se nám už podařilo Linux nabootovat nebo spustit pod VMWARE, musíme tam nejprve dostat aspoň zdrojové kódy programu Popeye. To není taková legrace, protože tento systém má jiný souborový systém. Naštěstí jsem pod Fedorou našel v menu "Add or remove software" možnost doinstalování "Windows File Server".

Něco se stáhlo z internetu a pak už bylo možné po kliknutí na "Network" se dostat přes síť na mateřský Windowsovský počítač (tedy fyzicky na stejný počítač, ale do systému, odkud jsem spustil VMWARE), ze kterého jsem pak zdrojové texty snadno přetažením myší zkopíroval do Linuxového systému. Tento krok byl jednoduchý a nebylo nutné žádné rebootování po instalaci nového softwaru.


4) Terminál - příkazová řádka pod Linuxem

Spustíme program Terminal a příkazem (z rootu) "cd adresar" (kde za "adresar" substituujeme skutečnou cestu) se přesuneme do příslušného adresáře, kde jsou zdrojové texty pro program Popeye.

5) Jak přeložit Popeye ?

Dobrá zpráva: Fedora 7 má v sobě už zabudovaný překladač GCC, takže není nutné překladač jazyka C někde hledat na internetu.

Přesto, pokud by pod jiným Linuxovým systémem nebyl překladač k dispozici, našel jsem stránku se všemi návody a linky pro stažení GCC - návod (samotná instalce překladače spočívá ve 3 příkazech: 1) kliknutí na configure, 2) příkaz z terminálu "make bootstrap", 3) příkaz z terminálu "make install". Pozor, krok 2 může na pomalejším počítači trvat i několik hodin!)

Vyznat se ve zdrojových kódech programu Popeye (i když jazyk C občas svými zápisy připomíná spíš poruchy na komunikační lince), po troše úsilí celkem jde. Pro překlad to však ani nepotřebujeme. Těch zdrojových souborů typu ".c" a dalších je ale ve staženém adresáři mnoho a otázka zní, jak to zkompilovat, který soubor je hlavní atd. Naštěstí ve stejném adresáři existuje soubor makefile.unx, ve kterém jsou zabudovány všechny vazby nutné pro kompilaci.

Teď důležitá věc (na kterou jsem přišel spíš náhodou). Soubor "makefile.unx" sám spustit pod Linuxem nejde (možná pod UNIXem ?), ale když ho přejmenuji na "makefile" (bez typu), stačí zadat z terminálu (v příslušném adresáři):

make

a stal se doslova zázrak, všechny soubory se bez jediné chyby přeložily! Vznikl soubor "py." (tedy bez typu) ve stejném adresáři.

6) Jak spustit zkompilovaný program ?

Tak toto je věc, která není nikde popsána a nad kterou jsem ztratil až zbytečně moc času. Nečekejte žádný příkaz run program. Nefunguje ani dvojklik na přeložený program. Pak jsem po dlouhém hledání na internetu našel v jednom zapadlém příkladu, že program se spustí po zadání tečky a lomítka! Kdo takto naprosto nemnemotechnický přikaz vymyslel, nevím....

Tedy v případě programu Popeye zadáme z řádky terminálu:
./py
nebo
./py soubor.py
nebo
./py -maxmem cisloM soubor.py

kde "soubor.py" je příslušný vstupní soubor s pozicemi pro Popeye a případné "cisloM" je maximální velkost přidělené paměti RAM, např. 100M apod.
Po zvětšení obrázku vlevo se můžete přesvědčit, že se skutecně spustila verze 4.37 a že i reaguje na parametr maxmem. Vzhůru na řešení superdlouhých úloh!


Závěr: Když jsem po trápení s Linuxem znovu nabootoval Windows, cítil jsem obrovskou úlevu. Žádné těžko zapamatovatelné a nelogické příkazy, pohodlná práce. Ještě, že se úloh v délce 700-999 půltahů vyskytne do roka jen pár. V tom případě je možné absolvovat popsaný "výlet do Linuxu", ale pak honem radši zpátky.