Да неча по левым пепелищам шляться, возвращайся лучше на родное.
Нате новую простыню. Все пока в процессе. Решил, что надо сохраниться на случай. А то потом хрен будет вспомнить. Да и заодно помогу "конкурентам" порешать вечно откладываемую задачу 4449. В общем, собрал opennx для вин под mingw естественным путем, включая инсталятор и звуковую требуху. Ставилась цель пройти этот естественный путь. Код с моего гита на базе r729, а вся остальное пока - nxwin... etc - вытягивается в процессе сборки оригинальное от клиента 3.5.0-9.
Итак, квест.
Взял wheezy бекпортнутую, установил туда mingw-w64, а именно:
Spoiler
Код: Выделить всё
binutils-mingw-w64 binutils-mingw-w64-i686 binutils-mingw-w64-x86-64 g++-mingw-w64 g++-mingw-w64-i686 g++-mingw-w64-x86-64 gcc-mingw-w64 gcc-mingw-w64-base gcc-mingw-w64-i686 gcc-mingw-w64-x86-64 gfortran-mingw-w64 gfortran-mingw-w64-i686 gfortran-mingw-w64-x86-64 gnat-mingw-w64 gnat-mingw-w64-i686 gnat-mingw-w64-x86-64 mingw-w64 mingw-w64-dev
mingw-w64-i686-dev mingw-w64-tools mingw-w64-x86-64-dev
также поставил nasm - нужен для libjpeg-turbo (которая, помнится, под nx не сыграла, но изначально она там есть).
Делее подготовка к кросс-компиляции opennx. Говорят, что для mingw32 это уже все есть "в коробке", особенно под Федорой.
Но чет не дотумкал найти всю эту радость пакетами для mingw-w64-i686, посему пришлось самому ставить.
Для полного удобства сделал chown -R dim:users /usr/i686-w64-mingw32. Может некошерно, но облегчает. Дальнейшие операции выполнял в основном из под юзера.
Нагуглил и стянул mingw-libgnurx-2.5.1-src.tar.gz и патч для статической ее линковки:
Spoiler
Код: Выделить всё
patch -p0 < build-static-gnurx.patch
./configure --prefix=/usr/i686-w64-mingw32 --host=i686-w64-mingw32 --target=i686-w64-mingw32
make && make install
cp /usr/i686-w64-mingw32//lib/libregex.a /usr/i686-w64-mingw32/lib/libpcreposix.a
(Последнее cp от того, что configure от опененэныкса не может определить -lregex, порядок параметров путает. А -lpcreposix ставит корректно.)
От рута apt-get source libltdl-dev
Spoiler
Код: Выделить всё
autoconf
./configure --prefix=/usr/i686-w64-mingw32 --host=i686-w64-mingw32
make && make install
Следущая засада - отсутствие mingw32-configure, а нужен. Долго гуглил и нагуглил. Исправил, положил в /usr/bin:
Spoiler
Код: Выделить всё
#!/bin/sh -
# mingw32-configure
# Copyright (C) 2008 Red Hat Inc., Richard W.M. Jones.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# This is a useful command-line script which configures
# a program for cross-compilation. It is meant to be
# the equivalent of the %{_mingw32_configure} macro in
# /etc/rpm/macros.mingw32
mingw32_prefix=/usr/i686-w64-mingw32/sys-root/mingw
mingw32_libdir=$mingw32_prefix/lib
mingw32_host=i686-w64-mingw32
mingw32_target=i686-w64-mingw32
mingw32_cc=i686-w64-mingw32-gcc
mingw32_cflags="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=
PKG_CONFIG_PATH="$mingw32_libdir/pkgconfig" \
CC="$mingw32_cc" \
CFLAGS="$mingw32_cflags" \
./configure \
--host=$mingw32_host \
--target=$mingw32_target \
--prefix=$_mingw32_prefix \
"$@"
(В предпоследней строчке не ошибка, префикс в итоге пустой, и это гуд.)
Далее нужен вайн. У меня этерсофтовский 1.12, обычный тоже пойдет, даже проще в итоге.
Под вайном пашет инсталлер, который, кстати, нужно откуда-нить стащить и поставить. Также при кросс-конфигурации многочисленных пакетов под ним (вайном) дофига чего запускается тестового.
Upd: еще в системе должон быть поставлен unrar
В файл /usr/bin/iscc (755) кладется врапер к инсталеру. Тоже найден на просторах (уже не помню где) и поправлен:
Spoiler
Код: Выделить всё
#!/bin/sh
unset DISPLAY
scriptname=$1
[ -f "$scriptname" ] && scriptname=$(winepath -w "$scriptname")
# Define BADWINE, if we got a wine with a NULL-resource bug.
BADWINE=-dBADWINE=1
/usr/bin/wine "C:\Program Files\Inno Setup 5\ISCC.exe" "$scriptname" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" $BADWINE
Для новых вайнов BADWINE можно убрать/сделать пустым.
UPD: Для неэтерсофтовского вайна обязателен еще пакет wine-binfmt.
Следующий шаг - кросс-компиленная wxWidgets. Пользовал 2.8.12, трешку теоретически тоже можно, да только патч на opennx получается конский. В гите есть ветка - может на будующее. Исходники берем на офф странице. Собирается так:
Spoiler
Код: Выделить всё
mingw32-configure --prefix=/usr/i686-w64-mingw32 --with-mingw \
--disable-compat26 --disable-compat24 --disable-shared --enable-unicode \
--disable-debug --with-zlib=builtin --enable-std_iostreams
make
make install
Что-то там еще вроде перед этим доставляется, забыл уже - гуглится легко.
UPD: apt-get install help2man
Наконец-то собирается opennx строчками, стоящими бессонных ночей:
Код: Выделить всё
git clone git://git.etersoft.ru/people/dimbor/packages/opennx.git
cd opennx
git checkout mingw-build # это временно
# autoreconf # вообще необязательно - у меня без разницы.
./configure --host=i686-w64-mingw32 --with-dllpath=/usr/i686-w64-mingw32/bin \
--with-nxproto=3.5.0 --with-wxdir=/usr/i686-w64-mingw32/bin \
--enable-staticwx CFLAGS="-static-libstdc++ -static-libgcc" \
CXXFLAGS="-static-libstdc++ -static-libgcc" \
--with-wine-iscc=/usr/bin/iscc \
--prefix=/usr/i686-w64-mingw32 --with-nxwin --with-orignx
make dist-platform
Здесь засада была в двух отсутствующих в проекте файлах. Если lgpl.rtf валяется буквально на каждом углу, то version.iss нашел только в EHS одноименного автора.
В оконцовке при счастливом расположении созвездий получается файл OpenNX-0.16.0.0-Setup.exe в packaging/win32
Оно устанавливается под виндовс и криво, но работает.
Теперь надо будет:
- запузырить в инсталятор местный более лучший nxwin сотоварищи.
- половить глюки - какие-то патчи от Djelf там есть, а каких-то совсем даже нет.
- потестить наконец-то долбанный звук.