Hromadná oprava importů v céčkových zdrojácích
6. 4. 2010 12:14
Pokud někdy potřebujete upravovat nějaký projekt psaný ve windows na unixovém systému, narazíte na problém s názvy souborů. Pokud totiž vývojáři nedodržují skutečná jména souborů (malá/velká písmena), tak takový import na unixovém systému selže.
Pokud je například ve zdrojáku napsáno
#include "Funkce.h"
ale soubor se ve skutečnosti jmenuje funkce.h, musíte
příslušný řádek s include opravit.
Navíc, pokud se v původních zdrojácích objevuje import z jiného adresáře
#include "include\Funkce.h"
nastává další problém s lomítkem v cestě.
Pro tyto účely jsem si vytvořil skript, který vše napraví.
Oprava zpětných lomítek
Opravu zpětných lomítek lze provést poměrně jednoduše pomocí
nalezení všech relevantních souboru pomocí programu find a
následné nahrazení lomítek programem sed. Je třeba si dát
pozor na to, aby se nahrazovala lomítka pouze na řádcích s klíčovým
slovem #include. Jinak by mohlo dojít k poškození
zdrojového kódu.
expression='/#include/s/\\/\//g' find . -name '*.h' -exec sed -i -e $expression {} \; find . -name '*.cpp' -exec sed -i -e $expression {} \;
Ve windows normální lomítka nevadí (alespoň při použití GCC), ale v unixovém systému zpětná lomítka vadí, protože to je znak, který se klidně může vyskytovat v názvu souboru. Proto je tato konverze výhodná a zpětně použitelná pro všechny vývojáře.
Oprava názvů souborů
Tato oprava je poněkud komplikovanější, protože se názvy musí opravovat relativně ke každému souboru. Jsou tedy nalezeny všechny importy, ty jsou seřazeny a jsou vybrány pouze unikátní řetězce.
Pomocí programu find a grep je nalezeno
příslušné jméno bez ohledu na velikost písmen. Pokud není nic nalezeno,
jedná se nejspíš o import knihovních hlaviček a ty se ignorují.
Z nalezeného jména ponechám poslední část stejné délky, jako originální vyhledávaný řetězec. Pokud se shodují s originálem, je vše v pořádku a nic se nenahrazuje.
Pokud se nalezne chyba, je sestaven nahrazovací výraz pro sed
a provede se nahrazení chybně napsaných cest. V tomto kroku se zároveň
z nahrazují znaky <> za obyčejné uvozovky, protože jde i import
z projektu.
Závěr
Popisovaný skript je možné stáhnout na spodní části stránky. Skript řeší automaticky problémy s kompilací zdrojových kódu psaných na windows tak, aby je bylo možné použít v unixovém systému. Tento skript slouží pouze pro převod importů. Byl použit pro převod projektu pro embedded zařízení bez vlastního OS.

