domingo, 4 de noviembre de 2012

Compilar la versión del repositorio en Windows

En el artículo anterior expliqué los pasos para instalar todo lo necesario y compilar la versión de ZinjaI o PSeInt de los repositorios git en GNU/Linux. En este voy a comentar cómo hacerlo en un sistema Windows. Ya saben que vamos a necesitar el compilador, unas cuantas bibliotecas, git, y algo de paciencia.

Lo primero que vamos a instalar entonces son las herramientas para compilar: compilador y bibliotecas. Se puede intentar instalar todo (MinGW y wxWidgets mínimamente) por separado, pero requiere de muchos pasos. La forma más sencilla es hacer una instalación completa de cualquier versión no tan vieja de ZinjaI, ya que el instalador de ZinjaI incluye casi todo lo necesario. Entonces, vayan al sitio de ZinjaI, a la sección "Descargas", click en "Descargar el instalador para Windows", y luego de esperar unos segundos ejecuten el instalador. En el asistente de instalación de ZinjaI deben tener la precaución de seleccionar todos los componentes en la tercera página (a esto me refería con "completa", "wxWidgets" y "OpenGL" serán necesarios y no están seleccionados por defecto).


El segundo paso es instalar git, la herramienta que permitirá obtener los fuentes actualizados desde el repositorio. Para descargar e instalar git, vamos a http://git-scm.com/downloads y hacemos click en "Windows". Esto va a descargar un archivo con un nombre del estilo de "Git-1.8.0-preview20121022.exe". Al ejecutar ese archivo aparece el asistente de instalación de git. Podemos simplemente hacer click en Siguiente (o Next) hasta el final y dejar todo como está configurado por defecto.


Una vez que está todo instalado, vamos a necesitar dos consolas. Una será la de Windows (cmd), pero con algunas variables seteadas adicionales. La otra será la de git. Para abrir la consola de git podemos buscar el ícono de "GIT Bash" en el menú Inicio. En esta consola es donde debemos ejecutar el comando para clonar el repositorio git, comando que aparece al final de la sección de descargas de los sitios web de ZinjaI y PSeInt. Por ejemplo, para instalar ZinjaI el comando sería "git clone git://git.code.sf.net/p/zinjai/code zinjai-code". Después de una breve espera (dependiendo de la velocidad de la conexión a Internet), deberíamos tener una carpeta "zinjai-code" con los fuentes.


En este punto podemos cerrar la consola de GUI con el comando "exit", ya que lo que sigue se hará en la consola de Windows. Para abrir la consola de Windows y no tener que setear ninguna variable (PATH es la variable en cuestión), lo más fácil es hacerlo desde ZinjaI. En el menú "Herramientas" hay una opción que es "Abrir Consola...", con esta opción alcanza. Lo único que tendremos que hacer luego es ir a la carpeta zinjai-code con el comando "cd <algo>". El <algo> varía según la versión de Windows. En Windows XP por ejemplo, suponiendo que el nombre de usuario sea "Usuario", <algo> sería "\Documents and Settings\Usuario\zinjai-code" (incluyendo las comillas, porque la ruta contiene espacios). En Windows 7, sería "\Users\Usuario\zinjai-code" (y aquí no hacen falta las comillas). Recuerden que pueden escribir una partecita y usar la tecla Tab para que autocomplete lo que falta. Esto sirve también para saber si van escribiendo bien, ya que si no autocompleta es porque no existe.


Una vez en el directorio zinjai-code, hay dos opciones para que la compilación funcione: o bien corrigen los makefiles para que encuentren el compilador, o bien ponen el compilador donde lo quieren los makefiles. Es más fácil lo segundo, ya que la ruta de instalación de Zinjai puede depender de la versión e Idioma de Windows. Además, si no colocamos allí el compilador, el ZinjaI nuevo que compilemos no lo encontrará, ya que el compilador no está incluido en el repositorio. Entonces, buscamos la carpeta donde se instaló ZinjaI. Esta será (si no la modificaron al instalar) <algo>/zinjai, donde <algo> puede ser "c:\Archivos de programa", "C:\archivos de programa (x86)", "C:\Program Files" o "C:\Program Files (x86)". Desde allí hay que copiar la carpeta "MinGW" a la carpeta zinjai-code, tarea que pueden realizar con el Explorador de Archivos de Windows de toda la vida. Una vez finalizada la copia, solo queda ejecutar "mingw32-make win32" y esperar. Al cabo de un rato, tendrán su ZinjaI.exe nuevecito y esperando a ser ejecutado.


Más tarde, si hay noticias y queremos actualizar esos fuentes y compilar los cambios, debemos abrir la consola de git (GIT Bash), entrar a esa carpeta (con "cd zinjai-code") y ejecutar "git pull"; y luego abrir la consola de Windows desde ZinjaI y repetir los pasos de buscar la carpeta zinjai-code y ejecutar "mingw32-make win32".

Si usan el zinjai del repositorio para abrir la consola de Windows, deben cerrarlo antes del ming32-make, porque les puede dar un error cuando intente compilar un archivo que esté en uso.

Para compilar PSeInt los pasos son casi los mismos. Solo que en lugar de copiar MinGW deben editar el archivo mingw.conf y cambiar el valor de la variable MINGW_DIR por la ruta corta (para evitar el problema de los espacios) de la carpeta mingw de ZinjaI, que usualmente será "MINGW_DIR=c:\Archiv~1\zinjai\mingw". Al igual que en la versión para GNU/Linux, van a ver un error luego del mingw32-make diciendo algo de psdraw, y entonces el PSeInt que compilen podrá mostrar y editar en pantalla los diagramas de flujo, pero no guardarlos en archivos. Trataré de solucionar esto más adelante.

Entonces, resumiendo:
Los pasos para compilar por primera vez son:
   1) Instalar alguna versión de ZinjaI seleccionando todos los componentes.
   2) Instalar git
   3) Abrir GIT Bash y ejecutar "git clone git://git.code.sf.net/p/zinjai/code zinjai-code"
   4) Copiar la carpeta MinGW de la instalación de ZinjaI a la carpeta zinjai-code (zinjai) o editar mingw.conf (pseint).
   5) Abrir el ZinjaI instalado, ir al menú "Herramientas" y elegir "Abrir consola".
   6) Ir a la carpeta "zinjai-code" utilizando el comando "cd".
   7) Ejecutar "mingw32-make win32"
Y luego para actualizar:
   1) Abrir GIT Bash y ejecutar "cd zinjai-code" y "git pull"
   2) Iniciar ZinjaI para abrir la consola de Windows desde el menú Herramientas.
   3) Ir a la carpeta "zinjai-code" y volver a ejecutar "mingw32-make win32".

Nuevamente espero que les sirva de algo, por cualquier duda o error que encuentren si lo intentan pregunten en los comentarios.

10 comentarios:

  1. Hola. Como citas en tu anterior post, fui un curioso y seguí los pasos para compilar en windows pero sin tener idea de lo que estaba haciendo, ya que no sé nada de c++ y estas cosas (lo mío es la programacion web). Seguí todos los pasos y funciona bien (zinjai y pseint). Pero mi pregunta es ¿que objetivo tiene esto? para que se hace todo lo anterior, para modiicar los fuentes? Gracias y salu2.

    ResponderEliminar
    Respuestas
    1. Es una forma de acceder a cambios que todavía no están publicados. Si vas ahora a la página de descargas de ZinjaI por ejemplo vas a ver que la versión que te ofrece descargar tiene ya varios meses, y sin embargo ya tengo casi lista la próxima versión (probablemente la publique hoy o mañana). Entonces, con el repositorio git podes ir viendo qué cambios hago y podes probarlos antes de que se publiquen como versión estable para descargar. Además, si alguien quiere cambiar algo o hacer algo con el código fuente, es una forma de que se mantenga en sincronía con código fuente "oficial", para evitar rehacer algo que ya está hecho, o evitar trabajar sobre cosas que ya cambiaron y que tenga que rehacer su trabajo.

      Eliminar
  2. Gracias por la aclaración. Una más. Se puede ejecutar o hacer algoritmos desde la línea de comandos en PSeInt? Gracias.

    ResponderEliminar
    Respuestas
    1. Si, hay un ejecutable que se llama pseint.bin o pseint.exe según el so. Pasandole el nombre del un archivo con pseudocódigo como argumento lo ejecuta, y pasándole "--help" muestra la lista de opciones para configurar el lenguaje y otras.

      Eliminar
  3. Pablo:
    Buenas tardes!

    Estoy intentando retomar el trabajo en la versión "rebel" (https://sourceforge.net/projects/pseintrebel) que había dejado allá a principios del año pasado.

    Quería comenzar por compilar la versión actual del repositorio de pseint y luego ver como incorporarle en forma mas "concienzuda" (y concensuada, si es posible) los cambios que ya había hecho.

    Sin embargo estoy teniendo algunos problemas con la compilación en windows (en linux va perfecto):

    1 - Para poder compilar pseint en windows deben estar creadas de antemano la carpeta "temp" y todas las subcarpetas, sino da error de "no existe el fichero o directorio" o algo así (en linux se crearon solas)

    2 - Una vez creada a mano cada una de las carpetas, la compilación da este error:

    c:\Archiv~1\zinjai\mingw/wx\lib/libwxmsw28_gl.a(gllib_glcanvas.o):glcanvas.cpp:(.text+0x5dd): undefined reference to `wglShareLists@8'
    collect2.exe: error: ld returned 1 exit status
    mingw32-make[2]: *** [..\bin\psdraw3.exe] Error 1

    Te pido disculpas si es por algo que no hice bien y no leí/entendí (no estoy con mucho tiempo para hacer el análisis que hice en su momento).
    El código de la versión "vieja" compila perfectamente e intenté hacer el mismo proceso sin suerte.
    Te agradezco si me podés dar una mano, tal vez hay algo que pasé por alto.

    Gracias.
    Saludos

    ResponderEliminar
    Respuestas
    1. Genial que volvamos a tener noticias tuyas! Hay funcionalidades de esa variación que quería incorporar en el nuevo código... Respecto a lo primero, ok, voy a corregir el makefile. Respecto a lo segundo, no se exactamente cual es el problema. Yo para windows lo compilo con el Makefile.wine, desde linux con wine, pero los argumentos y el compilador son los mismos. Ese anda seguro con las últimas versiones de ZinjaI, el OpenGL que trae, y el complemento de wxWidgets 2.8.12. Asegurate de tener esas versiones y fijate si de casualidad encontrás alguna diferencia importante entre los makefiles. Yo cuando esté en una compu con windows lo voy a probar también.

      Eliminar
  4. Gracias por el consejo, el Zinjai es "viejo", debe ser eso. Ahora me interesa la compilación desde linux y wine ¿hay tutorial para eso?
    Por otra parte, cualquier duda y/o ayuda que necesites para incorporar las funcionalidades del fork, contá conmigo.
    Gracias! un abrazo!

    ResponderEliminar
  5. No hay caso, el mismo error:

    c:\Archiv~1\zinjai\mingw/wx\lib/libwxmsw28_gl.a(gllib_glcanvas.o):glcanvas.cpp:(.text+0x5dd): undefined reference to `wglShareLists@8'
    collect2.exe: error: ld returned 1 exit status
    Makefile.w32:14: recipe for target '..\bin\psdraw3.exe' failed
    mingw32-make[2]: *** [..\bin\psdraw3.exe] Error 1

    Y con el úlitmo ZinjaI (20150331)

    Seguiré intentando. Gracias!

    ResponderEliminar
    Respuestas
    1. Era un problema en el orden en que se les pasaban las bibliotecas al linker, ya actualicé el makefile en el repositorio

      Eliminar