Hace poco he reinstalado el Mac y dado que estoy reinstalando todo para poder volver a compilar BennuGD para OSX aprovecho para poner las instrucciones aquí, dado que las otras que circulan por ahí están un poco desfasadas.
- Instalar Xcode (https://developer.apple.com/xcode/index.php)
- Instalar macports (http://www.macports.org/install.php)
- Abrir el programa Terminal
- Ejecutar el siguiente comando:
sudo port install libsdl +no_x11 +universal libsdl_mixer +universal zlib +universal libpng +universal openssl +universal
(tardará un buen rato) - Descargar el código fuente de BennuGD ejecutando el siguiente comando en la terminal:
svn co https://bennugd.svn.sourceforge.net/svnroot/bennugd (https://bennugd.svn.sourceforge.net/svnroot/bennugd) bennugd - Copiar en la carpeta del código fuente de BennuGD el script que pongo más abajo en un fichero de texto de nombre "build-osx.sh"
- Editar el fichero core/bgdi/src/main.c y debajo en la línea 37 añadir:
#include <SDL/SDL.h> - Ejecutar en la terminal el siguiente comando:
cd bennugd
chmod a+x build-osx.sh
./build-osx.sh release
Una vez hecho esto tendréis BennuGD compilado para OSX en la carpeta bin/osx-darwin
#!/bin/bash
TARGET=osx-darwin
echo "### Building BennuGD Core ###"
cd core
chmod a+x configure
# Patch Makefile.in's to build .dylib's instead of .so's
FILES="bgdrtm/src/Makefile.in
bgdrtm/src/Makefile.am"
for i in $FILES; do
sed -i -e 's/-module/-shared/g' $i
done
FILES="bgdi/src/Makefile.in
bgdi/src/Makefile.am"
for i in $FILES; do
sed -i -e 's/-lbgdrtm/-lbgdrtm -lSDLmain -lSDL -Wl,-framework,Cocoa/g' $i
done
case $1 in
release)
CFLAGS="-arch i386 -I/opt/local/include" LDFLAGS="-arch i386 -L/opt/local/lib" ./configure && make clean && make
;;
*)
make
;;
esac
if [ $? -ne 0 ]; then
echo "*** ABORT ***"
exit 1
fi
cd -
echo "### Building BennuGD Modules ###"
cd modules
chmod a+x configure
# Patch Makefile.in's to build .dylib's instead of .so's
for i in *; do
if [ -d $i ]; then
sed -i -e 's/-module/-shared/g' $i/Makefile.in;
sed -i -e 's/-module/-shared/g' $i/Makefile.am;
fi;
done
case $1 in
release)
CFLAGS="-arch i386 -I/opt/local/include" LDFLAGS="-arch i386 -L/opt/local/lib" ./configure && make clean && make
;;
*)
make
;;
esac
if [ $? -ne 0 ]; then
echo "*** ABORT ***"
exit 1
fi
cd -
echo "### Building BennuGD Tools ###"
cd tools/moddesc
chmod a+x configure
case $1 in
release)
CFLAGS="-arch i386 -I/opt/local/include" LDFLAGS="-arch i386 -L/opt/local/lib" ./configure && make clean && make
;;
*)
make
;;
esac
if [ $? -ne 0 ]; then
echo "*** ABORT ***"
exit 1
fi
cd -
echo "### Copying files to bin folder ###"
mkdir -p bin/$TARGET 2>/dev/null
#cp 3rdparty/des-4.04b/libdes.so bin/$TARGET
cp core/bgdi/src/.libs/bgdi bin/$TARGET
cp core/bgdc/src/bgdc bin/$TARGET
cp core/bgdrtm/src/.libs/libbgdrtm.dylib bin/$TARGET
cp $(find modules -name '*.dylib') bin/$TARGET
cp tools/moddesc/moddesc bin/$TARGET
echo "### Build done! ###"
exit 0
[Editado] He añadido openssl a la lista de librerías que se deben instalar con macports.
muy bien hecho joseba!
karma++
Quote from: SplinterGU on December 08, 2012, 02:36:42 AM
muy bien hecho joseba!
karma++
La verdad es que eso que hiciste de que buscara las libmod* además de las mod* me ha simplificado mucho la vida en la compilación para mac :)
por eso lo hice... para ti, para simplificarte la vida.
voy a ver si encuentro una version piratilla del leopard y lo pruebo en una maquina virtual xD
Lo del include sdl /sdl. No lo entiendo. Si en pc no hace falta...
Quote from: DCelso on December 08, 2012, 08:34:08 PM
Lo del include sdl /sdl. No lo entiendo. Si en pc no hace falta...
Aquí sí hace falta. Es por alguna cuestión de cómo las aplicaciones deben hablarse con OSX que no es igual en todas las plataformas.
joseba, por que hay que poner SDL.h en core/bgdi/src/main.c ?
me gustaria saber la razon... si es por el #define main(...) sdl_main(...) en el .pc, eso hay que cambiar el .pc... yo en todas mis instalaciones cambio el .pc... lo lamento por las instalaciones estandard, pero el reemplazo del main de sdl hace cosas que no son buenas... y ya los modulos hacen las inicializaciones correctas... hacer doble inicializacion va a dar problemas... (a pesar de que en teoria no deberia, en algun que otro caso lo dan...)
pero quizas tu te refieres a otras cosas... podrias explicar con mas detalles?
Quote from: SplinterGU on December 09, 2012, 02:01:06 AM
joseba, por que hay que poner SDL.h en core/bgdi/src/main.c ?
me gustaria saber la razon... si es por el #define main(...) sdl_main(...) en el .pc, eso hay que cambiar el .pc... yo en todas mis instalaciones cambio el .pc... lo lamento por las instalaciones estandard, pero el reemplazo del main de sdl hace cosas que no son buenas... y ya los modulos hacen las inicializaciones correctas... hacer doble inicializacion va a dar problemas... (a pesar de que en teoria no deberia, en algun que otro caso lo dan...)
pero quizas tu te refieres a otras cosas... podrias explicar con mas detalles?
Es para que SDL haga la inicialización, sí.
El tema es que en OSX los programas que no sean de modo texto deben hacer una inicialización propia (no la propia de los módulos).
Yo no tengo mayor inconceniente pero debes decirme qué hacer exactamente para ver si funciona o no.
cual es la inicializacion que te refieres?
Quote from: SplinterGU on December 09, 2012, 04:47:25 PM
cual es la inicializacion que te refieres?
Todo esto:
http://hg.libsdl.org/SDL/file/fba40d9f4a73/src/main/macosx/SDLMain.m
que es lo que pasa si no usas esa inicializacion? por lo que veo mete la aplicacion en el menu bar y no se que otra cosa mas, pero no se si hay algo critico...
edit: y bueno, si te sirve hacerlo asi, adelante, pero no me parece ideal meterle al bgdi dependencias de SDL, cuando todo lo que se busco desde el principio era que no la tenga.
Eso mismo iba a decir yo. ;)
Quote from: DCelso on December 09, 2012, 08:43:08 PM
Eso mismo iba a decir yo. ;)
te entendi perfectamente a que apuntabas, y como opino igual, pregunte... ;) lo que no quito es que si esa es la unica forma o la mas rapida (en este momento) y no queda otra opcion, y bueno, adelante con ello... pero la cosa es que realmente lo programas que no son texto, son aquellos que incluyen mod_video (o libvideo, para ser precisos) y ahi deberia hacerse esta inicializacion si es que realmente es necesaria.