[MODULE] GMXEXT_CSV

Extensiones oficiales y no para expander el lenguaje Gemix.

[MODULE] GMXEXT_CSV

Postby Zardoz » Thu Oct 21, 2021 7:34 pm

Bueno, he estado haciendo unas cuantas pruebas para ver si era capaz de compilar un modulo para Gemix... Voy a ir comentando los problemas que he ido encontrando, que hay para rato...

El principal escollo que me he encontrado, es que tanto para mi código como para el ejemplo del SDK, me da el error "MainLibraryProperties not found in /opt/gemix/modules/linux/release/GMXEXT_mod_csv.so - MODULE not valid" :
El código lo tengo aquí por si alguien quiere mirar y se le ocurre que puede estar mal : https://github.com/Zardoz89/csvDll/tree/gemix/gemix

Code: Select all
gemix /home/luis/repos/div/GMXEXT_mod_SDKexample/example.prg
 **** GEMIX Compiler 0.7.5 (BETA) ****
Copyright (C) 2005-2016 Skygem Software. All rights reserved

Precompiling...
Can't load /opt/gemix/modules/linux/release/GMX_mod_dbms.so (/opt/gemix/modules/linux/release/GMX_mod_dbms.so: undefined symbol: pthread_mutexattr_settype)
MainLibraryProperties not found in /opt/gemix/modules/linux/release/GMXEXT_mod_csv.so - MODULE not valid
MainLibraryProperties not found in /opt/gemix/modules/linux/release/GMXEXT_mod_sdkexample.so - MODULE not valid
using module id: 03 - GMX_mod_stdmain
using module id: 04 - GMX_mod_math
using module id: 05 - GMX_mod_graphics2Dlgy
using module id: 07 - GMX_mod_inputlgy
using module id: 14 - GMX_mod_text2Dlgy
Compiling...
Compiling: example.prg
example.prg:8:9: ERROR 34: Unknown name ( sdk_min )
function:
Break (0 warnings)
Exit with errors


----

La documentación es un caos. El post viewtopic.php?f=124&t=5348 tiene erratas... por ejemplo, las lineas :

Source Code (C) [ Download ] [ Hide ]
  • // The real function must have the following form:
  • GMXvoid GMXEXT_<name>() {
  •   [<Type> Variable = Get<Type>Param();]
  •   ...
  •  
  •   Ret<Type>Value(return_value);
  • }
  •  


Cuando las funciones son "GMXAPI_GetTypeParam()" , "GMXAPI_RetTypeValue()"...

----

No he visto nada de como compilarlo en Linux. A base de prueba y error, he visto de Gemix está compilado para 32bit (igual en 2021 habría que migrar a 64bit, que ya varias distros están quitando el soporte a binarios de 32 bit...)

EDIT: Veo que la beta 8.0 esta en 32 y 64 bits :y:

----

No veo que haya un ruta donde soltar los dll/so de los modulos externos sin mezclarlos con los propios de Gemix.

----

Otros detalles que veo mirando el código de las cabeceras y que ya no es referente a compilar en si módulos ...

Veo que se hace typedefs a tipos propios de Gemix, como GMXint, etc :y: , pero se hacen directamente sobre los tipos básicos de C :n: , lo cual puede ser un problema a la hora de portar el código de Gemix a otras plataformas o a 64 bits... Lo suyo es usar los tipos de <stdint.h> como uint8_t, int32_t, etc... que garantizan la portabilidad y los tamaños de los tipos en todas las plataformas.

----

El error "Can't load /opt/gemix/modules/linux/release/GMX_mod_dbms.so (/opt/gemix/modules/linux/release/GMX_mod_dbms.so: undefined symbol: pthread_mutexattr_settype)" , se debería de poder arreglar compilando (por lo menos) el modulo GMX_mod_dbms con el flag "-pthread" : https://stackoverflow.com/questions/221 ... tr-settype

----

El compilador de gemix, busca el fichero de configuración (gemix.cfg), los ficheros .rel y los .so necesarios en la ruta local. Es decir, espera que gemix.cfg, y los ficheros .rel estén exactamente en donde se está ejecutando. Si busca en otras rutas, no he visto mención de esto en ningún lado.
Lo cual lo vuelve complicado de instalar de una forma normal en un entorno unix cualquiera. Lo normal es buscar el fichero de configuración en este orden :

1. En el path de ejecución
2. $HOME/.config/gemix
3. /usr/share/gemix/
4. /usr/local/share/gemix
5. En la ubicación del ejecutable de gemix

Y para los ficheros .rel y .so sean necesarios, que siga un patrón similar:

1. En el path especificado en el gemix.cfg
2. /usr/lib/gemix/
3. /usr/local/lib/gemix
4. En la ubicación del ejecutable de gemix

Al seguir las rutas estándar, seria bastante fácil hacer un script de instalación de Gemix en un entorno unix y/o hacer un paquete .deb o .rpm. Y se podría lanzar gemix desde cualquier ruta, sin tener que ejecutarlo desde la carpeta donde descomprimes el ZIP (y poder usarlo desde un makefile; usarlo desde un language server desde vim o vscode, etc...)
Last edited by Zardoz on Mon Oct 25, 2021 6:02 pm, edited 1 time in total.
Zardoz
 
Posts: 15
Joined: Sun Oct 17, 2021 12:02 am

Re: Intentanto compilar un modulo/extesion

Postby CicTec » Thu Oct 21, 2021 8:44 pm

Zardoz wrote:Bueno, he estado haciendo unas cuantas pruebas para ver si era capaz de compilar un modulo para Gemix... Voy a ir comentando los problemas que he ido encontrando, que hay para rato...

El principal escollo que me he encontrado, es que tanto para mi código como para el ejemplo del SDK, me da el error "MainLibraryProperties not found in /opt/gemix/modules/linux/release/GMXEXT_mod_csv.so - MODULE not valid" :
El código lo tengo aquí por si alguien quiere mirar y se le ocurre que puede estar mal : https://github.com/Zardoz89/csvDll/tree/gemix/gemix

Code: Select all
gemix /home/luis/repos/div/GMXEXT_mod_SDKexample/example.prg
 **** GEMIX Compiler 0.7.5 (BETA) ****
Copyright (C) 2005-2016 Skygem Software. All rights reserved

Precompiling...
Can't load /opt/gemix/modules/linux/release/GMX_mod_dbms.so (/opt/gemix/modules/linux/release/GMX_mod_dbms.so: undefined symbol: pthread_mutexattr_settype)
MainLibraryProperties not found in /opt/gemix/modules/linux/release/GMXEXT_mod_csv.so - MODULE not valid
MainLibraryProperties not found in /opt/gemix/modules/linux/release/GMXEXT_mod_sdkexample.so - MODULE not valid
using module id: 03 - GMX_mod_stdmain
using module id: 04 - GMX_mod_math
using module id: 05 - GMX_mod_graphics2Dlgy
using module id: 07 - GMX_mod_inputlgy
using module id: 14 - GMX_mod_text2Dlgy
Compiling...
Compiling: example.prg
example.prg:8:9: ERROR 34: Unknown name ( sdk_min )
function:
Break (0 warnings)
Exit with errors


----

Hola Zardoz,

Yo normalmente para compilar uso CMake, puede ser que falte alguna opcion que le falta para que la Lib sea valida, montare un CMakeLists para el ejemplo del SDK para ver que pasa y luego te lo pasare una vez averiguado que compila.

Zardoz wrote:La documentación es un caos. El post viewtopic.php?f=124&t=5348 tiene erratas... por ejemplo, las lineas :

Source Code (C) [ Download ] [ Hide ]
  • // The real function must have the following form:
  • GMXvoid GMXEXT_<name>() {
  •   [<Type> Variable = Get<Type>Param();]
  •   ...
  •  
  •   Ret<Type>Value(return_value);
  • }
  •  


Cuando las funciones son "GMXAPI_GetTypeParam()" , "GMXAPI_RetTypeValue()"...

----

El post es antiguo, hubo mejoras desde entonces como el prefijo GMXAPI_, todavia aun no lo actualice, espero de hacerlo pronto...

Zardoz wrote:No he visto nada de como compilarlo en Linux. A base de prueba y error, he visto de Gemix está compilado para 32bit (igual en 2021 habría que migrar a 64bit, que ya varias distros están quitando el soporte a binarios de 32 bit...)

EDIT: Veo que la beta 8.0 esta en 32 y 64 bits :y:

Si, la nueva beta soporta ambos, no hay mas problema en eso. :)

Zardoz wrote:----

No veo que haya un ruta donde soltar los dll/so de los modulos externos sin mezclarlos con los propios de Gemix.

Se ponen en la misma carpeta de los oficiales, el SDK es universal, es el mismo tanto para los modulos oficiales como no, por eso recomiendo poner el prefijo EXT para diferenciar desde el oficial.

Zardoz wrote:----

Otros detalles que veo mirando el código de las cabeceras y que ya no es referente a compilar en si módulos ...

Veo que se hace typedefs a tipos propios de Gemix, como GMXint, etc :y: , pero se hacen directamente sobre los tipos básicos de C :n: , lo cual puede ser un problema a la hora de portar el código de Gemix a otras plataformas o a 64 bits... Lo suyo es usar los tipos de <stdint.h> como uint8_t, int32_t, etc... que garantizan la portabilidad y los tamaños de los tipos en todas las plataformas.

No recuerdo en el SDK de la 7.5, en la 8.0 ya es todo como dices hace tiempo. :)

Zardoz wrote:----

El error "Can't load /opt/gemix/modules/linux/release/GMX_mod_dbms.so (/opt/gemix/modules/linux/release/GMX_mod_dbms.so: undefined symbol: pthread_mutexattr_settype)" , se debería de poder arreglar compilando (por lo menos) el modulo GMX_mod_dbms con el flag "-pthread" : https://stackoverflow.com/questions/221 ... tr-settype

Si esto estuve mirando, lo raro es que en mi distro de Ubuntu compilaba y se cargaba sin problemas, igual alguna dependencia que falta da instalar en tu equipo y que yo tengo, pero bueno, probare en cuanto pueda esa opcion, gracias por el link.

Zardoz wrote:----

El compilador de gemix, busca el fichero de configuración (gemix.cfg), los ficheros .rel y los .so necesarios en la ruta local. Es decir, espera que gemix.cfg, y los ficheros .rel estén exactamente en donde se está ejecutando. Si busca en otras rutas, no he visto mención de esto en ningún lado.
Lo cual lo vuelve complicado de instalar de una forma normal en un entorno unix cualquiera. Lo normal es buscar el fichero de configuración en este orden :

1. En el path de ejecución
2. $HOME/.config/gemix
3. /usr/share/gemix/
4. /usr/local/share/gemix
5. En la ubicación del ejecutable de gemix

Y para los ficheros .rel y .so sean necesarios, que siga un patrón similar:

1. En el path especificado en el gemix.cfg
2. /usr/lib/gemix/
3. /usr/local/lib/gemix
4. En la ubicación del ejecutable de gemix

Al seguir las rutas estándar, seria bastante fácil hacer un script de instalación de Gemix en un entorno unix y/o hacer un paquete .deb o .rpm. Y se podría lanzar gemix desde cualquier ruta, sin tener que ejecutarlo desde la carpeta donde descomprimes el ZIP (y poder usarlo desde un makefile; usarlo desde un language server desde vim o vscode, etc...)

gemix.cfg es opcional, si el compilador no lo encuentra setea todas sus opciones por default, los otros son como dices, de momento lo hice asi para que sea "portable" o sea no tener que instalar nada en el sistema unix, obviamente la opcion que dices seria de anadir para tener todo completo.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: Intentanto compilar un modulo/extesion

Postby Zardoz » Thu Oct 21, 2021 10:21 pm

Otra cosa... creo que estoy usando las cabeceras de la SDK 7.0 .

De hecho, me han comentado que me faltaria esto :

Code: Select all
GMXDEFINE_LIBRARY_PROPERTIES(GMXEXT_xxxxx,
    /* CATEGORY */
    GMXDEFINE_PROPERTY_CATEGORY(GMXCATEGORY_GENERIC);
    /* SYSTEM */
    GMXDEFINE_PROPERTY_SYSTEM(GMXSYSTEM_COMMON);
)


Y no veo esas macros por ningún lado en las cabeceras que tengo.
Zardoz
 
Posts: 15
Joined: Sun Oct 17, 2021 12:02 am

Re: Intentanto compilar un modulo/extesion

Postby CicTec » Thu Oct 21, 2021 10:27 pm

Zardoz wrote:Otra cosa... creo que estoy usando las cabeceras de la SDK 7.0 .

De hecho, me han comentado que me faltaria esto :

Code: Select all
GMXDEFINE_LIBRARY_PROPERTIES(GMXEXT_xxxxx,
    /* CATEGORY */
    GMXDEFINE_PROPERTY_CATEGORY(GMXCATEGORY_GENERIC);
    /* SYSTEM */
    GMXDEFINE_PROPERTY_SYSTEM(GMXSYSTEM_COMMON);
)


Y no veo esas macros por ningún lado en las cabeceras que tengo.

Estas son cosas nuevas del SDK 8.0, dame tiempo entre esta noches y manana de pasarte el SDK para la 8.0 que tienes, porque el que tengo yo de la nueva version ya es mas recien y tiene varias cosa nuevas.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

[MODULE] GMXEXT_CSV

Postby Zardoz » Mon Oct 25, 2021 6:02 pm

Pasado a la beta de la v8, funciona la cosa bien. Dejo el enlace al código, por si alguna otra persona intenta desarrollar un modulo y necesita un ejemplo completo funcionando : https://github.com/Zardoz89/csvDll/tree/gemix
Zardoz
 
Posts: 15
Joined: Sun Oct 17, 2021 12:02 am

Re: [MODULE] GMXEXT_CSV

Postby CicTec » Tue Oct 26, 2021 11:21 am

Buen aporte, gracias por el modulo con esta nueva feature. :)
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm


Return to Extensiones Gemix

Who is online

Users browsing this forum: No registered users and 1 guest