Как заменить libiconv MacPort на 64-битную версию Mac по умолчанию? - PullRequest
3 голосов
/ 12 ноября 2011

MacPorts установил "libiconv @ 1.14_0 + universal" в качестве зависимости от моей системы.Это 32-битный вариант, и он начал вызывать проблемы, когда я попытался скомпилировать программное обеспечение для распознавания голоса под названием Simon Listens.В процессе поиска в Google я обнаружил, что этот Mac на самом деле поставляется с 64-битным вариантом libiconv по умолчанию , и я смог найти указанные файлы в моей системе:

$ find /usr/lib -name libiconv*
/usr/lib/libiconv.2.4.0.dylib
/usr/lib/libiconv.2.dylib
/usr/lib/libiconv.dylib

чтобы использовать системную библиотеку, самый быстрый способ, которым я мог придумать, - это удалить версию libiconv для MacPort, чтобы системная библиотека в конечном итоге была выбрана в качестве запасного варианта, поскольку она должна была представить (мое предположение) где-то внизу в PATH.

Но это не удалось из-за зависимостей:

$ sudo port uninstall libiconv @1.14_0+universal
Unable to uninstall libiconv @1.14_0+universal, the following ports depend on it:
...

Итак, теперь мой вопрос состоит в том, как я могу попросить MacPort заменить свой граф зависимостей, чтобы он указывал на библиотеку и использовать ее уже в моей системе?

1 Ответ

1 голос
/ 22 марта 2012

Другой подход, позволяющий избежать проблем с MacPorts libiconv, заключается в создании simon для новой системы MacPorts плюс необходимые пакеты, такие как cyrus-sasl2, zlib, portaudio и kdesdk4 в пользовательское местоположение, e. г. /opt/macports-simon.

У меня на компьютере под управлением Mac OS X 10.6.8 работал следующий код:

# compile simon on Mac OS X 10.6.8 using MacPorts for the installation of zlib, portaudio and kdesdk4
# http://www.simon-listens.org
# http://sourceforge.net/projects/speech2text/

# get a root shell
sudo -H -i  

# prevent idle sleep
pmset -a force sleep 0 displaysleep 0 disksleep 0

mv -i /opt/local /opt/local-off
mv -i /usr/local /usr/local-off

cd /tmp
mkdir buildsimon || exit 1
cd buildsimon || exit 1

# create custom /opt/macports-simon to install zlib, portaudio and kdesdk4
# cf. http://guide.macports.org/#installing.macports.source.multiple
MP_PREFIX='/opt/macports-simon'
unset PATH
export PATH='/bin:/sbin:/usr/bin:/usr/sbin'
curl -L -O https://distfiles.macports.org/MacPorts/MacPorts-2.0.4.tar.bz2
tar -xjf MacPorts-2.0.4.tar.bz2
cd MacPorts-2.0.4 || exit 1
./configure --prefix="${MP_PREFIX}" --with-applications-dir="${MP_PREFIX}/Applications"
make
make install

cd /tmp/buildsimon

unset PATH
export PATH="${MP_PREFIX}/bin:/bin:/sbin:/usr/bin:/usr/sbin"

# get the Portfiles and update the system
port -v selfupdate

# install cyrus-sasl2
port -f uninstall cyrus-sasl2
port clean --all cyrus-sasl2
port extract cyrus-sasl2
cd "$(port dir cyrus-sasl2)"/work/cyrus-sasl-2.1.23
printf '%s\n' H '/\(darwin\[15\]\)/s//\1./g' wq | sudo ed -s config/ltconfig
printf '%s\n' H '/\(darwin\[15\]\)/s//\1./g' wq | sudo ed -s saslauthd/config/ltconfig
cd /tmp/buildsimon
port -f -s install cyrus-sasl2
otool -L /opt/macports-simon/lib/libsasl2.dylib

port -f install zlib
port -f install portaudio
port -f install kdesdk4

port installed zlib portaudio kdesdk4 cyrus-sasl2

# enable dbus with launchd
# http://www.freedesktop.org/wiki/Software/dbus
# open -e dbus-1.5.8/README.launchd
launchctl load -w /Library/LaunchDaemons/org.freedesktop.dbus-system.plist 
launchctl load -w /Library/LaunchAgents/org.freedesktop.dbus-session.plist
sudo -u _mysql mysql_install_db5
sudo port load mysql5-server

# todo: how to configure simon to use /opt/macports-simon directly?
ln -isv "${MP_PREFIX}" /usr/local

cd /tmp/buildsimon

# http://sourceforge.net/projects/speech2text/
curl -L -O http://netcologne.dl.sourceforge.net/project/speech2text/simon/0.3.0/simon-0.3.0.tar.bz2
tar -xjf simon-0.3.0.tar.bz2 
cd simon-0.3.0 || exit 1

# Note that /usr/local got symlinked to "${MP_PREFIX}" above!
unset PATH
export PATH='/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin'


# the following commands are taken from simon-0.3.0/build.sh

mkdir build 2> /dev/null
cd build || exit 1
cmake -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ..

# append ${MP_PREFIX}/lib/libiconv.dylib to gcc command in link.txt file
printf '%s\n' H '/\/usr\/bin\/gcc/s|\(.*\)|\1 '"${MP_PREFIX}"'/lib/libiconv.dylib|' wq | 
   ed -s julius/julius/CMakeFiles/juliusexe.dir/link.txt

# replace gcc option ' -bundle ' with ' -dynamiclib '
egrep -Ilsr -Z -e ' -bundle ' . | 
   xargs -0 -n 1 /bin/sh -c 'printf "%s\n" H "g/ -bundle /s// -dynamiclib /g" wq | /bin/ed -s "${1}"' argv0

make

touch ./julius/gramtools/mkdfa/mkfa-1.44-flex/* 
make 
make install
# ldconfig    # not needed on Mac OS X
kbuildsycoca4 
echo -e "**** Build completed ****\n\nThe executable file \"simon\" is now ready and has been installed.\n\nIssue \"simon\" to start it."

unset PATH
export PATH="${MP_PREFIX}/bin:/bin:/sbin:/usr/bin:/usr/sbin"

otool -L "${MP_PREFIX}/bin/simon"

simon

mv -i /opt/local-off /opt/local 
mv -i /usr/local-off /usr/local 
...