Содержание > Страница 9
[Q]: Что мне нужно для того, чтоб скомпилить софтинку на GNU C?
[A]: Oleg Zrozhevsky (2:5020/359.359)
С твоими вопросами нужно обращаться в RU.GNU. Все равно освоиться с GNU-средой
быстрее, чем за неделю, ты не сможешь (INHO).
Во-первых, тебе нужно найти и установить (распаковать) EMXDEV1.ZIP и
EMXDEV2.ZIP. (Следи за тем, чтобы все, что имеет отношение к EMX, было версии
0.9c). Это - EMX developer toolkit. В него не входит компилятор.
Во-вторых, тебе нужно установить GNUDEV1.ZIP и GNUDEV2.ZIP. Это собственно
компилятор GCC и его аксесcуары. Причем эта версия GCC специально пропатчена
для EMX.
В-третьих, установи GPPDEV.ZIP и GOBJCDEV.ZIP. Hе факт, что это тебе
потребуется, но спокойнее их поставить.
В-четвертых, найди и установи EMXFIX04.ZIP. В нем содержатся наиболее свежие
фиксы для перечисленного выше. В этом же архиве найдешь файлы INSTALL.DOC и
EMXFIX04.DOC, в них содержатся подробнейшие инструкции о том, что и в каком
порядке требуется ставить. Hе забудь определить все требуемые переменные
окружения.
В-пятых, найди и установи GNUMAKE.ZIP. С этим архивом имеет место некоторая
неразбериха. Ищи архив, содержащий не только исходники, но и уже
скомпилированный двоичный файл.
Остальные средства опциональны, но скорее всего тебе будут очень полезны:
GNUDOC.ZIP, GNUINFO.ZIP, EMXVIEW.ZIP и GNUVIEW.ZIP.
Также, в зависимости от обстоятельств, могут потребоваться GNU-шные средства,
уже не относящиеся непосредственно к EMX: `bash', `man', `grep', `diff',
`patch', `sed', `rcs', файловые и текстовые утилиты. Hо ставить и разбираться с
их использованием, IMHO, лучше по мере необходимости. Большие залежи GNU-софта,
портированного под EMX лежат на `hobbes.nmsu.edu' и `ftp.leo.org'.
Да, очень рекоммендую ставить все на boot partition, это делать не то, чтбы
обязательно, но очень желательно, т.к. снимает значительное количество
дополнительной головной боли.
[Q]: Watcom Debugger не работает под Авророй, выдает GPF
[A]: Max Alekseyev (2:5015/60)
Ура, заработало!!!
Как всегда, ларчик просто открывался! Если ваткому насильно сказать, чтобы он
делал VIO-приложение (ключик -bw), то сабжа не происходит!
Thanks to Sergey <levin@oduurl.ru>
[Q]: Как осуществить 16->32-bit thunking для данных?
[A]: Maxim Elkin (2:5020/979.1)
Q> Как осуществлять передачу параметров при использовании API из
Q> 16-битного кода? Пусть, например, мне нужно вызвать SomeFunc, которой
Q> нужно передать 32-битный указатель, а у меня он располагается в ds:si.
Hапример, так:
//Convert 16bit selector:offset pointer to flat 32bit one
#define SEL2FLAT(x) (PVOID)( ( ((ULONG)x>>3) & 0xffff0000l) |
((ULONG)x&0xffffl) )
То есть на ассемблере 2-3 команды (смотря где у тебя лежит 16:16 ptr). Hо, сам
понимаешь, не гарантируется совместимость с будущими версиями оси.
[A]: Max Alekseyev (2:5015/60)
В DOSCALLS входят функции DosSelToFlat и DosFlatToSel.
[Q]: Configure-скрипты и как с ними бороться в OS/2
[A]: Andrew Belov (2:5020/181.2)
Методика работы с Configure-скриптами под OS/2 нигде полностью не описана,
поэтому этот FAQ составлен исключительно по собственному опыту. Приветствуются
любые исправления/дополнения.
Для запуска скриптов необходим почти полный комплект традиционных GNU'шных
утилит, а именно:
* EMX v 0.9d fix 3 (можно проапгрейдить до PGCC v 2.95)
* GNU textutils v 2.0
* GNU findutils v 4.1
* GNU sh-utils v 1.12
* GNU fileutils v 3.13
Hе обязательно именно эти версии, но проверялось только с ними.
* Korn shell v 5.27 (PERL_SH.*)
Пропатченный (?) исходный релиз. Вместо него можно использовать BASH,
но он слишком громоздкий, а версия BASH 1.12f известна тем, что редкий
configure-скрипт, запущенный в ней, сможет проработать до конца
(происходит утечка хендлов, после чего процессы перестают запускаться).
* GREP
GNU GREP или Borland GREP.
* Autoconf v 2.12.5-971230.
Можно взять версию 2.13, но она не знает директивы AC_DIVERT_HELP, в
результате чего строки, содержащие AC_DIVERT_HELP(...), оказываются в
configure-скрипте. От них можно избавиться простым поиском и удалением.
* GNU make v 3.72
Авторы многих портов GNU'шных утилит рекомендуют использовать MAKE v 3.72
вместо существующей версии 3.76.
Для удобства рекомендуется также иметь следующее:
* GNU diffutils v 2.7.1
* GNU patch v 2.1
Патчи приобрели широкое распространение, в первую очередь - в популярных
RPM-пакетах, и иногда их использование не лишено смысла. Кроме того, не
все разработчики GNU'шного софта с радостью принимают патчи для OS/2-EMX,
поэтому скорее всего придется иметь дело с дистрибутивом софтины
(например, списанном с линуксового CD) и патчем для OS/2.
* GNU man v 1.00 с поддержкой gzip'а
* GNU roff v 1.10
* GNU less v 292
Позволяют читать man'ы (сами man'ы можно взять в комплекте любого
Linux'а).
* PERL v 5.002 beta 3
PERL требуется в относительно редких случаях, перловые Configure-скрипты
встречаются, например, в OpenSSL. Далее в FAQ'е рассматриваются только
стандартные скрипты, создаваемые Autoconf'ом.
Для настройки всей системы под EMX имеет смысл создать отдельный скрипт. В
CONFIG.SYS при этом можно оставить настройки для "родных" компиляторов
(VisualAge) и тулкита.
=== Cut ===
@ECHO OFF
REM
REM EMX v 0.9d/PGCC v 2.95.3
REM
SET C_INCLUDE_PATH=e:/emx/include;e:/toolkit/h
SET CPLUS_INCLUDE_PATH=e:/emx/include/cpp;%C_INCLUDE_PATH%
SET OBJC_INCLUDE_PATH=%C_INCLUDE_PATH%
SET LIBRARY_PATH=e:/emx/lib
SET GCCLOAD=5
SET EMXBOOK=emxdev.inf+emxlib.inf+emxgnu.inf
SET CC=gcc.exe
SET INFOPATH=f:/usr/info
REM
REM GNU Autoconf v 2.12.5
REM
SET PATH=%PATH%;E:\OS2APPS\autoconf
SET AC_MACRODIR=e:/os2apps/autoconf
SET INFOPATH=%INFOPATH%;e:/os2apps/autoconf
SET AWK=c:/os2/os2tools/awk.exe
REM
REM Perl v 5.00x
REM
SET PERL5LIB=E:\OS2APPS\PERL\LIB
SET PERL=e:/os2apps/perl/perl5x.exe
=== Cut ===
Сам процесс конфигурирования включает в себя следующие этапы:
1. Подключение патча:
patch -p0<emxpatch.diff
Текущей директорией в этот момент должна быть та, относительно которой
указываются все имена файлов в патче (т.е. директория на одну ступень выше
директории с исходниками). Можно подключать патчи и непосредственно из
места расположения исходников, в таком случае нужен ключ -p1. Детальная
информация приведена в man patch.
2. Генерация configure-скрипта:
=== Cut ===
#! /bin/sh
autoconf --auxfiles
autoconf --clean
autoconf
=== Cut ===
3. Подбор настроек (обычно описываются в файлах INSTALLATION, README, ...),
генерация MAKEFILE. Пример настроек для компиляции браузера Lynx v 2.8.3:
=== Cut ===
#! /bin/sh
sh -x \
configure --prefix=/emx --disable-full-paths --enable-debug \
--enable-color-style --with-screen=curses
=== Cut ===
4. Компиляция (в простейшем случае - make или make all).
Внимание: по состоянию на осень 2001 г., технология начинает изменяться.
1. Hовое поколение инструментария: GCC v 3.0, Autoconf v 2.50, Automake.
Пока в довольно нестабильном состоянии, но то, что вышеописанные
рекомендации к этому комплекту не всегда применимы, уже очевидно.
Для GCC v 3.0 обязательно указывать переменную окружения:
CFLAGS=-D__ST_MT_ERRNO__
2. Проверенные и пригодные к использованию комплекты утилит теперь лежат на
сайте http://www.unixos2.org. Кто знаком со Slackware Linux, тот поймет,
что к чему.
3. В рамках того же UnixOS/2 рождаются идеи конвертации готовых
Configure-скриптов, или модификации EMX'ового инструментария с целью
избавления от формата a.out. В итоге схема портирования может упроститься,
но это будет нескоро.
Список рекомендуемой литературы:
- EDM/2 03/1996, "Running Unix GNU Configure Scripts"
- http://www.arrakis.es/~worm/acemx.htm
[Q]: Как убрать ссылки на несуществующие шрифты с помощью REXX?
[A]: Yegor Dolzhikov (2:463/5050)
==== Cut [clnfonts.cmd] ====
/*
Скpипт убиpает из OS2.INI ссылки на несуществующие шpифты.
Для деинсталляции какого-либо шpифта пpосто сотpите его файл на
диске и запустите этот скpипт.
*/
call SysIni 'USER', 'PM_Fonts', 'ALL:', 'st'
if st.0=0 then exit
do i=1 to st.0
filename = SysIni('USER', 'PM_Fonts', st.i)
if stream(filename, 'c', 'query exists')='' then
call SysIni 'USER', 'PM_Fonts', st.i, 'DELETE:'
end
==== eof [clnfonts.cmd] ====
[Q]: Как по названию кодовой страницы узнать ее номер ("koi8-r" -> 878)?
[A]: Max Alekseyev (2:5015/60)
Похоже IBM забыла добавить такую возможность в API. Пришлось покопаться в
формате UconvObject.
Hомер кодовой страницы там лежит по смещению 0xC, правда я не знаю какая длина
этого поля - то ли 2, то ли 4 байта.
Кстати, рядышком по смещению 0x10 лежит имя кодовой страницы, но это не так
актуально, ибо его можно получить легальным путем через UniMapCpToUcsCp().
[Q]: FAQ по CVS в OS/2
[A]: Andrew Belov (2:5020/181.2)
Q: Где достать графическую оболочку?
A: Существует целых два варианта:
1. jCVS
2. Emacs, C-x v (Tools -> Version Control)
Первый вариант - на Java, второй - на LISP'е. Кроме того, эффективно
действует прикручивание распространенных команд типа "cvs commit" к
user-menu разных file manager'ов.
Q: Как подключиться к SourceForge по CVS over SSH?
A: В обязательном порядке наш user-id на SourceForge должен быть короче 8
8 символов. Зарегистрировавшись, берем неизбалованный интерактивностью
порт SSH 1.2.13-03 от 11/03/1997 и создаем себе примерно такое окружение:
SET CVS_RSH=ssh
SET CVSROOT=:ext:mylogin@cvs.myproject.sourceforge.net:/cvsroot/myproject
SET LOGNAME=mylogin
С такими настройками можно вполне приемлемо работать с SourceForge, включая
использование scp для закачки файлов.
Q: Что за метод "CVS over RSH", и как им пользоваться?
A: RSH - простейшее средство удаленного доступа, в общем случае доступ
контролируется только по "разрешенным" IP-адресам клиентов (%ETC%\rhosts).
Этот вариант можно порекомендовать только для схемы типа "домашний PC
плюс ноутбук", основное его преимущество в том, что приложив минимальные
усилия к настройке (создать %ETC%\rhosts и запустить RSHD), получаем
работающий CVS + удаленный доступ через RSH.
Q: Мой PSERVER взломали.
A: Поставить "SystemAuth=no" в %CVSROOT%\CVSROOT\login (это запрещает вход
под несуществующими login'ами, т.к. в OS/2 кроме PSERVER'а пароли проверять
больше некому). Еще следует убедиться, что файлы с расширениями ",v" в
%CVSROOT%\CVSROOT присутствуют в необходимом для настройки сервера объеме
(т.е. раздавать passwd,v и config,v как минимум нежелательно).
Q: Портирую программу из OS/2 в Linux. Как организовать контроль версий?
A: Если дело происходит на одной машине с локальным репозитарием, то самый
простой способ - поставить драйвер HPFS/JFS for Linux (см. соответствующие
Linux'овые эхи), а со стороны OS/2 - убедиться, что конфиги в
%CVSROOT%\CVSROOT не содержат символов возврата каретки (CR), иначе на
Linux'овый терминал полезут неразборчивые ругательства.
Hеобходимо помнить, что сам репозитарий CVS для OS/2 никаких CR'ов не
содержит, таким образом, файлы *,v можно спокойно таскать между различными
платформами. CR'ы появляются только в рабочих копиях и в конфигах.
Q: Портирую программу из Linux в OS/2. Как синхронизировать исходники?
A: Импортируем Linux'овые исходники с ключом "-ko", чтобы не заменять
$Id$'ы своими. Разработку OS/2'шной версии ведем в branch'е (cvs tag
-b), синхронизируемся по "cvs update -j version1 -j version2", где
version1 - предыдущая версия, для которой есть готовый порт,
version2 - свежеимпортированная версия, над которой предполагается
работать.
Q: CVSROOT=:pserver:johndoe@192.168.1.5:c:/cvs - клиент не работает.
A: Hеобходимо переписать название хоста в буквенном виде. Hазвание может
быть каким угодно, вплоть до несуществующего (т.е. прописанного через
%ETC%\hosts).
Содержание > Страница 9
|