V předchozím příspěvku na blogu jsme diskutovali o různých variantách sestavení Windows, které PostgreSQL podporuje. V tomto příspěvku budeme diskutovat o tom, jak jako vývojář založený na Unixu můžete zkontrolovat, zda by vaše oprava mohla fungovat ve Windows. (Pro zjednodušení řeknu „Unix“, což bude znamenat Linux, BSD, macOS a podobně.)
Za prvé, existuje několik způsobů, jak zkontrolovat opravu, aniž byste museli mít Windows.
Pokud se váš patch dotkne systému sestavení, například přidáním nových souborů nebo pravděpodobněji přidáním podmínek, nových možností sestavení nebo další ad-hoc logiky, může to narušit sestavení skriptů MSVC, které analyzují soubory makefiles Unix, jak jsme diskutovali. naposledy. Ale ve skutečnosti můžete tyto skripty spouštět také na Unixu. Není v nich (téměř) nic specifického pro Windows, protože jediné, co skutečně dělají, je analyzovat jednu sadu souborů a vytvářet další. Můžete prostě běžet
perl src/tools/msvc/mkvcbuild.pl
a uvidíte, co se stane. Toto funguje od potvrzení 73c8596. (Možná si předem uložte svou práci, protože to může přepsat některé vygenerované soubory, aby je používala vaše místní konfigurace mimo Windows). Tím vytvoříte soubory projektu pro Visual Studio, se kterými toho moc nenaděláte, ale můžete zkontrolovat, zda se skript vůbec spustil, můžete porovnat výstup před a po, nebo zda jste provedli „slepé úpravy“ některého z soubory pod src/tools/msvc/
můžete si je do určité míry ověřit.
Dalším způsobem je použití možností sestavení, které jsou obvykle spojeny s Windows. Která z nich je užitečná, závisí na tom, co váš patch změní. Například Windows sestaví s HAVE_UNIX_SOCKETS
nedefinováno, takže ruční testování může být užitečné, pokud provádíte změny v síťovém kódu. (To ale přestává fungovat, protože Windows nyní skutečně podporují sokety unixových domén.) Podobně HAVE_WORKING_LINK
je ve Windows nedefinovaný, i když jeho dopad je malý (a také mizí; někdy je důsledkem psaní blogových příspěvků, jako je tento, zjištění, že problémy, které jste chtěli popsat, by tam v první řadě být neměly, a jdeš je opravit). Obě tyto možnosti můžete změnit úpravou src/include/pg_config_manual.h
. Další důležitou možností je EXEC_BACKEND
, který nahrazuje fork()
ve stylu Unixu volání pomocí fork()
plus exec()
implementaci, kterou lze namapovat na CreateProcess()
na Windows. To se skutečně porouchá překvapivě zřídka, ale pokud ano, můžete to na unixovém systému odladit a opravit. Chcete-li povolit EXEC_BACKEND
, můžete buď upravit src/Makefile.global
a přidejte -DEXEC_BACKEND
na CPPFLAGS
, nebo možná přidejte definici do src/include/pg_config_manual.h
. (Nejsem si jistý, proč se to liší od ostatních; možná je třeba někdy opravit další věc. [aktualizace:také opraveno])
Když jsou tyto možnosti vyčerpány, pak je možná čas roztočit skutečný systém Windows. Chci prodiskutovat dvě možnosti, které jsou snadno dostupné pro příležitostného vývojáře. Nejprve si můžete stáhnout ukázkový obraz Windows od společnosti Microsoft a importovat jej do VirtualBoxu nebo něčeho podobného. Aktuální odkazy, které mohu najít, jsou:
- https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/
- https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
Druhý z nich je určen pro testování prohlížeče, takže ten první je možná nyní lepší, ale způsob testování prohlížeče je již nějakou dobu populární. Toto jsou bezplatné zkušební kopie, ale přečtěte si prosím licenci sami.
Za druhé, můžete spustit cloudovou instanci u poskytovatele cloud computingu. Nebudu je jmenovat, ale víte, kdo to jsou.
Když máte spuštěný operační systém Windows, doporučuji nainstalovat MSYS2. (První odkaz ke stažení výše od společnosti Microsoft má také nainstalované Visual Studio, pokud to chcete.) Pomocí prohlížeče (pravděpodobně Internet Explorer nebo jak se to teď jmenuje) přejděte na msys2.org, spusťte instalační program a za pár minut bude mít připraveno plné prostředí MSYS2/MinGW. Postupujte podle pokynů na webu msys2.org a aktualizujte správce balíčků. Poté otevřete MinGW (nikoli MSYS2) shell z nabídky Start a spusťte následující, abyste získali balíčky potřebné pro vývoj PostgreSQL:
pacman -S git
Nyní můžete git klonovat úložiště. Zatímco to běží…
pacman -S ${MINGW_PACKAGE_PREFIX}-gcc ${MINGW_PACKAGE_PREFIX}-gettext ${MINGW_PACKAGE_PREFIX}-icu ${MINGW_PACKAGE_PREFIX}-libxml2 ${MINGW_PACKAGE_PREFIX}-libxsltopen $preEFIX}-libXsltopen $preEFIX}-libingxslt $preEFIX}-libINGxslt $preEFIX}
MINGW_PACKAGE_PREFIX
je proměnná prostředí, která je nastavena pro vás, takže zadejte příkazy takto. (Bude se lišit pro 32bitové a 64bitové MinGW.) Balíčky bez předpony jsou balíčky MSYS2 (tj. Cygwin). Viz část 1 znovu, pokud je to matoucí. V tomto okamžiku budete mít k dispozici plné prostředí pro sestavení MinGW pro PostgreSQL. Můžete spustit konfiguraci, provést, provést kontrolu a tak dále. Pro některé možnosti sestavení mohou být vyžadovány další balíčky, ale ne všechny možnosti ve skutečnosti fungují; například žádný Readline (použijte k tomu Cygwin).V další části této série se podívám na možnosti automatického sestavení/nepřetržité integrace pro Windows, které lze použít k ověření oprav.