Página 1 de 1

Compilar SevenuP en Windows

Publicado: Lun Abr 15, 2019 7:52 pm
por Nat
Buenas,

Estoy peleándome con SevenuP y tengo pensadas algunas nuevas funcionalidades para añadirle, como poder cambiar el color de las líneas de la rejilla de caracteres que según el gráfico y el día me cuesta diferenciar, y también poder importar archivos binarios como gráficos extraídos de un antiguo programa.

El problema es que no encuentro la forma de compilarlo. Tengo instalada la última versión actualizada de MinGW, la última de wxWidgets (3.1.2), ambas funcionando y compilan sin problemas los ejemplos (carpeta samples) de wxWidgets. Pero cuando toca compilar SevenuP solo da errores.

En primer lugar en TheFrame.cpp hay dos que he apañado como podido, uno en la declaración del constructor y otro en un typecasting para "const wxChar *", errores que veo que también son conocidos por otros usuarios. Pero a partir de ahí, no ha habido suerte entre warnings y errores dan para unas 400 líneas de texto y la mayoría son, aparentemente, que no conoce funciones de wxWidgets.

Cualquier ayuda será bienvenida porque estoy atrancado ahí aunque de momento me apaño usando una pequeña utilidad para convertir los gráficos a formato SEV.

Re: Compilar SevenuP en Windows

Publicado: Mar Abr 16, 2019 6:41 pm
por Metalbrain
Hola,

Me temo que la culpa puede ser tanto de gcc (que cada vez es más exigente con los estándares, que además han ido evolucionando con el tiempo) como de la versión de wxWidgets. Con cada nueva versión estable de wxWidgets hay algunos cambios que pueden romper la compatibilidad, y por lo que he visto, de la 2.6 a la 2.8 no parece que tenga nada peligroso y es posible que la 2.8 sea por lo tanto compatible, pero para 3.0 han cambiado cosas relacionadas con el Unicode que pueden haber afectado de lleno.

Voy a instalar las últimas versiones de MinGW y wxWidgets a ver si consigo algo.

Re: Compilar SevenuP en Windows

Publicado: Mié Abr 17, 2019 11:16 am
por Metalbrain
Hola de nuevo, natohara

Anoche conseguí compilar el código con algunos cambios mínimos, pero era demasiado tarde para ponerme a documentar.

Para empezar no pude compilar wxWidgets (ni la 3.0.4 ni la 3.1.2) con la última versión que me bajé del MinGW, debido a este problema:
http://trac.wxwidgets.org/ticket/18349

Así que me bajé una versión más antigua ( esta https://sourceforge.net/projects/mingw/ ), que usa una versión 6 del gcc, y por fin pude compilar la librería y su ejemplo minimal (la 3.0.4).

Luego me puse a intentar compilar la versión 1.21 WIP usando el makefile de la 2.6.2 (makefile.gcc), y obtuve algunos errores. El principal era que no encontraba la librería, porque ahora no la tengo en D:\COMUN\WX , así que hay que modificar y poner la ruta de wxWidgets en la línea 32 del makefile.gcc

El siguiente error fue la falta de un archivo setup.h en la carpeta /include/wx de la librería. Copié el setup.h que había en /include/wx/msw y por fin empezó a compilar.

Luego corregí un par de errores de compilación debidos a cambios que hubo en la librería en la versión 2.8:
wxSAVE pasa a ser wxFD_SAVE
wxOVERWRITE_PROMPT pasa a ser wxFD_OVERWRITE_PROMPT

(en lugar de cambiar esto, creo que también debería compilar activando la compatibilidad con la versión 2.6, en setup.h con #define WXWIN_COMPATIBILITY_2_6 1)

Y por último para que no falle en el enlazado, hay que cambiar la versión de las librerías en la línea de LDFLAGS del makefile.gcc, pasando por ejemplo de "-lwxmsw26_adv" a "-lwxmsw30u_adv" (y el resto de msw26 hay que cambiarlos también, y creo que también añadir algún u extra , por ejemplo lwxregex -> lwxregexu ), y aparte añadir -lwinspool

Estoy escribiendo esto de memoria, esta tarde en casa miro a ver si no me he dejado algo, y haré más pruebas, como por ejemplo usar la versión 3.1.2 en lugar de la 3.0.4

Re: Compilar SevenuP en Windows

Publicado: Jue Abr 18, 2019 6:27 pm
por falvarez
Buenas.

Ya que estáis arremangados, ¿sería mucho pedir compilar (o explicar cómo hacerlo) una versión para macOS Intel?

Muchas gracias por adelantado.

Re: Compilar SevenuP en Windows

Publicado: Sab Abr 20, 2019 1:54 am
por Nat
Hola,

Esto es muy interesante, espero a que puedas probar con la 3.1.2 a ver si hay suerte. Gracias

Re: Compilar SevenuP en Windows

Publicado: Lun Abr 22, 2019 7:10 pm
por ochobitero
¿Eres tú el autor entonces Metalbrain?.

Si continúas con el desarrollo hay un par de funciones que me parecen imprescindibles que tuviera (o al menos no las he visto) y que no costarían mucho, una el poder cambiar el tamaño del sprite y otra una vista previa en miniatura.

También sería interesante que exportase en formato Sprite Pack para z88dk, pero esto ya sería más lioso supongo.

Dices en la página que no tenías las ganas necesarias para continúar hace ya unos años. ¿y qué tal si lo actualizas para Spectrun Next?, parece que hay un nuevo resurgir spectruniano y tal vez sería una motivación. Yo creo que es lo que a mí me hizo plantearme que tal vez valiera la pena reengancharse.

Re: Compilar SevenuP en Windows

Publicado: Mié Abr 24, 2019 2:26 am
por Metalbrain
Hola natohara,

Para compilar con la 3.1.2, aparte de lo anterior hace falta cambiar las definiciones de ADD_TOOL y ADD_TOOL2 en TheFrame.cpp, dejandolos así:

Código: Seleccionar todo

#define ADD_TOOL(id, bmp, tooltip, help) \
        toolBar->AddTool(id, wxEmptyString, bmp, wxNullBitmap, wxITEM_NORMAL, tooltip, help)

#define ADD_TOOL2(id, bmp, tooltip) \
        toolBar->AddTool(id, wxEmptyString, bmp, wxNullBitmap, wxITEM_NORMAL, tooltip, wxEmptyString)
(y esto supongo que también le viene bien a la 3.0.4)

y para enlazar hay que añadir más librerías, dejando la línea de LDFLAGS así:

Código: Seleccionar todo

LDFLAGS = -lwxmsw31u_core -lwxbase31u -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lversion -lwsock32 -lwininet -loleacc -luxtheme
Ochobitero, sí que soy el autor. Ahora mismo no tengo intención de continuar con el desarrollo de la herramienta, pero el formato del Sprite Pack no debería ser un problema, incluso la opción Attribute Mask la añadí expresamente para dicha biblioteca (aunque tampoco sé si ha cambiado mucho el formato desde 2007).

falvarez, ¿puedes probar esos cambios a TheFrame.cpp y ver si con eso logras que compile?

Re: Compilar SevenuP en Windows

Publicado: Mié Abr 24, 2019 2:21 pm
por Nat
Muchas gracias Metalbrain,

Acabo de desistir de intentarlo con la 1.21 WIP. Éste ha sido el procedimiento:

1) Corregir wxSAVE por wxFD_SAVE y wxOVERWRITE_PROMPT por wxFD_OVERWRITE_PROMPT en TheFrame.cpp

2) Modificar TheFrame.cpp para que quede así:

Código: Seleccionar todo

#define ADD_TOOL(id, bmp, tooltip, help) \
        toolBar->AddTool(id, wxEmptyString, bmp, wxNullBitmap, wxITEM_NORMAL, tooltip, help)

#define ADD_TOOL2(id, bmp, tooltip) \
        toolBar->AddTool(id, wxEmptyString, bmp, wxNullBitmap, wxITEM_NORMAL, tooltip, wxEmptyString)
3) Cambiar en makefile la trayectoria a wx

Código: Seleccionar todo

WXWIN=C:\wx
4) y LDFLAGS a

Código: Seleccionar todo

LDFLAGS=-lwxmsw31u_core -lwxbase31u -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lversion -lwsock32 -lwininet -loleacc -luxtheme
y éste ha sido el resultado:

Código: Seleccionar todo

g++ -c -o SevenuP_SevenuP.o -DHAVE_W32API_H -O2 -IC:\wx\include -IC:\wx\lib\gcc_lib\msw -Wall SevenuP.cpp
windres --use-temp-file -iSevenuP.rc -oSevenuP_SevenuP_rc.o --define HAVE_W32API_H --include-dir C:\wx\include --include-dir C:\wx\lib\gcc_lib\msw
g++ -o SevenuP.exe SevenuP_OpenFile.o SevenuP_TheFrame.o SevenuP_SevenuP.o SevenuP_SevenuP_rc.o -ladvapi32 -lcomctl32 -lcomdlg32 -lgdi32 -lkernel32 -lole32 -loleacc -loleaut32 -lrpcrt4 -lshell32 -lshlwapi -luser32 -luuid -luxtheme -lversion -lwininet -lwinmm -lwinspool -lwsock32 -lwxbase31u -lwxexpat -lwxjpeg -lwxmsw31u_core -lwxpng -lwxregexu -lwxtiff -lwxzlib -mthreads -LC:\wx\lib\gcc_lib -Wl,--subsystem,windows -mwindows
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxbase31u
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxexpat
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxjpeg
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw31u_core
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxpng
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxregexu
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxtiff
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxzlib
parece compilar bien pero a la hora del "link" tiene problemas.

He probado también desde MSYS con idéntico resultado y, por verificar que todo estaba bien, sí que consigue compilar el ejemplo "minimal" de la carpeta "samples".

Re: Compilar SevenuP en Windows

Publicado: Jue Abr 25, 2019 7:26 pm
por falvarez
Metalbrain escribió: falvarez, ¿puedes probar esos cambios a TheFrame.cpp y ver si con eso logras que compile?
Hola.

Da un montón de errores y, la verdad, no tengo ni idea de cómo meterles mano.

Código: Seleccionar todo

19:24 $ make
c++ -Os `wx-config --cxxflags`   -c -o TheFrame.o TheFrame.cpp
TheFrame.cpp:222:13: error: use of undeclared identifier 'inifile'; did you mean 'IniFile'?
        if (inifile.fail())
            ^~~~~~~
            IniFile
TheFrame.cpp:203:16: note: 'IniFile' declared here
        wxChar IniFile[10000];    // Max 10000 char for .ini file
               ^
TheFrame.cpp:222:20: error: member reference base type 'wxChar [10000]' is not a structure or union
        if (inifile.fail())
            ~~~~~~~^~~~~
TheFrame.cpp:246:17: error: use of undeclared identifier 'inifile'; did you mean 'IniFile'?
                inifile.clear();
                ^~~~~~~
                IniFile
TheFrame.cpp:203:16: note: 'IniFile' declared here
        wxChar IniFile[10000];    // Max 10000 char for .ini file
               ^
TheFrame.cpp:246:24: error: member reference base type 'wxChar [10000]' is not a structure or union
                inifile.clear();
                ~~~~~~~^~~~~~
TheFrame.cpp:247:17: error: use of undeclared identifier 'inifile'; did you mean 'IniFile'?
                inifile.open(path);
                ^~~~~~~
                IniFile
TheFrame.cpp:203:16: note: 'IniFile' declared here
        wxChar IniFile[10000];    // Max 10000 char for .ini file
               ^
TheFrame.cpp:247:24: error: member reference base type 'wxChar [10000]' is not a structure or union
                inifile.open(path);
                ~~~~~~~^~~~~
TheFrame.cpp:1194:308: error: use of undeclared identifier 'wxSAVE'
  ...- Joint Picture Experts Group|*.jpg|PCX - Zsoft Paintbrush|*.pcx|TIF - Tagged Image File Format|*.tif|XPM - X-Bitmap|*.xpm"),wxSAVE|wxOVERWRITE_PROM...
                                                                                                                                  ^
TheFrame.cpp:1194:315: error: use of undeclared identifier 'wxOVERWRITE_PROMPT'
  ...- Joint Picture Experts Group|*.jpg|PCX - Zsoft Paintbrush|*.pcx|TIF - Tagged Image File Format|*.tif|XPM - X-Bitmap|*.xpm"),wxSAVE|wxOVERWRITE_PROM...
                                                                                                                                         ^
TheFrame.cpp:1344:147: error: use of undeclared identifier 'wxSAVE'
  ...wxFileDialog dialog(this, _("Choose a file name to save"), SavePath, Current->OpenName,_("SEVenuP graphic format (*.sev)|*.sev"), wxSAVE|wxOVERWRITE...
                                                                                                                                       ^
TheFrame.cpp:1344:154: error: use of undeclared identifier 'wxOVERWRITE_PROMPT'
  ...dialog(this, _("Choose a file name to save"), SavePath, Current->OpenName,_("SEVenuP graphic format (*.sev)|*.sev"), wxSAVE|wxOVERWRITE_PROMPT);
                                                                                                                                 ^
TheFrame.cpp:1380:184: error: use of undeclared identifier 'wxSAVE'
  ...a file name to save"), SavePath, Current->OpenName, _("SCReen memory snapshot (*.scr)|*.scr|SEVenuP graphic format (*.sev)|*.sev"), wxSAVE|wxOVERWRI...
                                                                                                                                         ^
TheFrame.cpp:1380:191: error: use of undeclared identifier 'wxOVERWRITE_PROMPT'
  ...name to save"), SavePath, Current->OpenName, _("SCReen memory snapshot (*.scr)|*.scr|SEVenuP graphic format (*.sev)|*.sev"), wxSAVE|wxOVERWRITE_PROM...
                                                                                                                                         ^
TheFrame.cpp:1383:145: error: use of undeclared identifier 'wxSAVE'
  ...= new wxFileDialog(this,_("Choose a file name to save"), SavePath, Current->OpenName,_("SEVenuP graphic format (*.sev)|*.sev"), wxSAVE|wxOVERWRITE_P...
                                                                                                                                     ^
TheFrame.cpp:1383:152: error: use of undeclared identifier 'wxOVERWRITE_PROMPT'
  ...new wxFileDialog(this,_("Choose a file name to save"), SavePath, Current->OpenName,_("SEVenuP graphic format (*.sev)|*.sev"), wxSAVE|wxOVERWRITE_PRO...
                                                                                                                                          ^
TheFrame.cpp:1466:133: error: use of undeclared identifier 'wxOVERWRITE_PROMPT'; did you mean 'wxFD_OVERWRITE_PROMPT'?
  ...dialog(this, _("Choose a file name to save"), ExportDataPath, Current->OpenName, ExportDataExtensions, wxSAVE|(wxOVERWRITE_PROMPT*(1-appendfile)));
                                                                                                                    ^~~~~~~~~~~~~~~~~~
                                                                                                                    wxFD_OVERWRITE_PROMPT
/usr/local/include/wx-3.0/wx/filedlg.h:45:5: note: 'wxFD_OVERWRITE_PROMPT' declared here
    wxFD_OVERWRITE_PROMPT  = 0x0004,
    ^
TheFrame.cpp:1466:125: error: use of undeclared identifier 'wxSAVE'
        wxFileDialog dialog(this, _("Choose a file name to save"), ExportDataPath, Current->OpenName, ExportDataExtensions, wxSAVE|(wxOVERWRITE_PROM...
                                                                                                                            ^
16 errors generated.
make: *** [TheFrame.o] Error 1
Gracias. Saludos.

Re: Compilar SevenuP en Windows

Publicado: Lun Abr 29, 2019 2:55 pm
por Metalbrain
natohara escribió:y éste ha sido el resultado:

Código: Seleccionar todo

g++ -c -o SevenuP_SevenuP.o -DHAVE_W32API_H -O2 -IC:\wx\include -IC:\wx\lib\gcc_lib\msw -Wall SevenuP.cpp
windres --use-temp-file -iSevenuP.rc -oSevenuP_SevenuP_rc.o --define HAVE_W32API_H --include-dir C:\wx\include --include-dir C:\wx\lib\gcc_lib\msw
g++ -o SevenuP.exe SevenuP_OpenFile.o SevenuP_TheFrame.o SevenuP_SevenuP.o SevenuP_SevenuP_rc.o -ladvapi32 -lcomctl32 -lcomdlg32 -lgdi32 -lkernel32 -lole32 -loleacc -loleaut32 -lrpcrt4 -lshell32 -lshlwapi -luser32 -luuid -luxtheme -lversion -lwininet -lwinmm -lwinspool -lwsock32 -lwxbase31u -lwxexpat -lwxjpeg -lwxmsw31u_core -lwxpng -lwxregexu -lwxtiff -lwxzlib -mthreads -LC:\wx\lib\gcc_lib -Wl,--subsystem,windows -mwindows
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxbase31u
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxexpat
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxjpeg
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw31u_core
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxpng
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxregexu
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxtiff
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lwxzlib
parece compilar bien pero a la hora del "link" tiene problemas.

He probado también desde MSYS con idéntico resultado y, por verificar que todo estaba bien, sí que consigue compilar el ejemplo "minimal" de la carpeta "samples".
Mira el contenido del directorio C:\wx\lib\gcc_lib\msw que es donde se compilan las bibliotecas. Creo que tu problema es que solo has compilado la versión debug de wxWidgets, así que para compilar sevenup deberías poner BUILD=debug , y añadir la d a los nombres de archivos que no encuentras ahora mismo ( lwxbase31u -> lwxbase31ud , lwxexpat -> lwxexpatd , etc...), o bien compilar otra vez wxWidgets con BUILD=release

Re: Compilar SevenuP en Windows

Publicado: Sab May 04, 2019 12:57 am
por Nat
Metalbrain escribió:Mira el contenido del directorio C:\wx\lib\gcc_lib\msw que es donde se compilan las bibliotecas. Creo que tu problema es que solo has compilado la versión debug de wxWidgets, así que para compilar sevenup deberías poner BUILD=debug , y añadir la d a los nombres de archivos que no encuentras ahora mismo ( lwxbase31u -> lwxbase31ud , lwxexpat -> lwxexpatd , etc...), o bien compilar otra vez wxWidgets con BUILD=release
En realidad, no. Siempre estuvo compilada en la versión release pero, bueno, al final he conseguido compilar el fuente del SevenuP 1.21WIP y tengo que decir que la estructura de directorios que crea wxWidgets 3.1.2 es completamente diferente que la que necesita su makefile. Algo debo estar perdiéndome en este proceso si en tu caso wxWidgets utiliza otros nombres para los directorios. En el mío, para empezar, no crea la carpeta gcc_lib sino otra llamada gcc_dll y las librerías en lugar de ser ficheros .dll tienen la extensión .dll.a o .a pero, por si faltara poco, los nombres nada tienen que ver. Donde este makefile busca wxtiff el fichero real se llama libwxtiff-3.1, donde busca wxmsw31u_core, el fichero real se llama libwx_mswu_core-3.1, etc., etc. así que a falta de una mejor solución he creado la estructura apropiada de carpetas en wx\lib\gcc_lib con unas copias renombradas de las librerías que el makefile de SevenuP 1.21WIP sí es capaz de utilizar.

En otro orden de cosas, como acabo de probarlo no he tenido nada de tiempo para comprobar diferencias, pero de entrada y respecto a la versión 1.20 que descargué, noto que esta 1.21 no lee el fichero .INI con la configuración que ya tenía. Lo cambie como lo cambie, es como si el fichero no estuviera.

Muchas gracias por la colaboración. Cualquier idea para mejorar este procedimiento o hacerlo de una forma más limpia será bienvenida.

Re: Compilar SevenuP en Windows

Publicado: Sab May 04, 2019 8:55 am
por Nat
natohara escribió:
Metalbrain escribió:de entrada y respecto a la versión 1.20 que descargué, noto que esta 1.21 no lee el fichero .INI con la configuración que ya tenía.
Aún no estoy lo suficientemente familiarizado con el código pero en TheFrame.cpp hay un par de líneas comentadas y poco después un bloque de líneas (comentado curiosamente una a una) que son los que respectivamente se encargan de la asignación y la lectura del fichero de configuración. He quitado los comentarios, añadido delante de cada bloque un #ifdef __WXMSW__ y detrás un #endif y parece funcionar sin problemas.

En cuanto saque otro rato, me pongo a añadirle que lea del fichero de configuración los colores R,G,B para las rejillas de píxeles y caracteres y también intento que cuando se conmute entre uno y otro sprite/gráfico conserve el frame en el que se está trabajando. Esto último facilitaría el copy y paste entre dos sprites porque cuando se manejan 8 frames con sus correspondientes máscaras, se hace un poco cuesta arriba empezar desde el primer frame cada vez que se cambia de sprite (con Ctrl-F1,Ctrl-F2,...) Esta sería una aproximación inicial porque lo suyo es poder usar el clipboard entre dos instancias de SevenuP, lo que resultaría mucho más fácil y visual.

Respecto a mi propósito inicial de importar archivos .BIN, por ahora lo he solucionado con una utilidad de conversión externa pero así y todo habría mucho más que hacer porque lo cierto es que para conseguir un buen nivel en el editor tengo que intercambiar datos y manipular gráficos entre ZX Paintbrush y SevenuP (para el pincel de atributos, las inversiones, el copy y paste de trozos seleccionados del sprite,...)