Fossil 2.3 для Windows 2000
Введение
Fossil — это свободная программа с открытым исходным кодом для поддержки процесса разработки программного обеспечения. Она реализует следующие задачи:
- контроль версий и ведение истории проекта (как Git или Mercurial);
- учёт заявок на исправление ошибок и доработку (как JIRA);
- ведение документации проекта (как Wiki).
Все перечисленные функции реализуются одним исполняемым файлом, который может использоваться в режиме командной строки или как web-сервер проекта.
Описание проблемы
К сожалению, современные версии Fossil отказываются работать на операционной системе Windows 2000, выдавая при запуске ошибку "The procedure entry point freeaddrinfo could not be located in the dynamic link library WS2_32.dll". Дело в том, что системные функции "getaddrinfo" и "freeaddrinfo" были реализованы только в операционных системах начиная с Windows XP.
Но в документации MSDN описан способ решения этой проблемы. Чтобы избавиться от ошибки, нужно пересобрать программу с подключённым заголовочным файлом "wspiapi.h", который заменит в тексте программы вызовы отсутствующих функций блоками реализующего их кода.
Сборка Fossil
Сборку Fossil для Windows 2000 нужно производить в среде Windows 2000. Ниже описана процедура сборки с помощью инструментария TDM-GCC версии 5.1.0-3.
Установка TDM-GCC производится в стандартном режиме, без изменения опций по умолчанию. В комплекте поставки TDM-GCC заголовочный файл "wspiapi.h" отсутствует, но его можно взять из исходных текстов операционной системы ReactOS (…\sdk\include\psdk\wspiapi.h), после чего записать в папку "C:\TDM-GCC-32\include"
Предположим, что исходные тексты Fossil распакованы в папку "fossil-2.3". Тогда в них нужно внести следующие изменения:
- "fossil-2.3\src\cgi.c" — после строки "#include <ws2tcpip.h>" добавить строку "#include <wspiapi.h>";
- "fossil-2.3\src\http_socket.c" — после строки "#include <ws2tcpip.h>" добавить строку "#include <wspiapi.h>";
- "fossil-2.3\src\th_tcl.c" — заменить в строке "#define _WIN32_WINNT 0x0502" константу "0x0502" на "0x0501" (чтобы при сборке с подключённым TCL избавиться от ошибки, связанной с отсутствием функции SetDllDirectoryA в динамической библиотеке KERNEL32.dll.
После исправления исходных текстов надо выполнить команды:
> CD fossil-2.3
> mingw32-make -f win/Makefile.mingw USE_WINDOWS=1 FOSSIL_ENABLE_TCL=1 FOSSIL_ENABLE_TCL_STUBS=1 FOSSIL_ENABLE_TCL_PRIVATE_STUBS=1
> strip.exe fossil.exe
В текущей папке появится файл fossil.exe, который можно использовать в операционной системе Windows 2000.
Использованные материалы
- Официальный сайт программы Fossil — http://www.fossil-scm.org/
- Официальный сайт проекта ReactOS — http://www.reactos.org/
- Официальный сайт проекта TDM-GCC — http://tdm-gcc.tdragon.net