Mi primera contribución en GitLab: Convertidor exhale
Hola a todos,
Ayer, estuve colaborando con el proyecto exhale para añadir compatibilidad para compilarlo usando MinGW en Windows.
Este proyecto es un convertidor de audio de código abierto que nos permite convertir archivos de audio WAV al codec xHE-AAC bajo el contenedor M4A.
Originalmente, el proyecto compila en Windows usando Visual Studio, pero al intentar compilarlo usando MSYS2/MinGW, nos daba problemas, específicamente esto:
H:/repos/media-autobuild_suite/build/exhale-git/src/app/../../src/app/exhaleApp.cpp: In function 'int main(int, char**)':
H:/repos/media-autobuild_suite/build/exhale-git/src/app/../../src/app/exhaleApp.cpp:246:85: error: '_SH_DENYWR' was not declared in this scope
246 | if (_sopen_s (&inFileHandle, inFileName, _O_RDONLY | _O_SEQUENTIAL | _O_BINARY, _SH_DENYWR, _S_IREAD) != 0)
| ^~~~~~~~~~
H:/repos/media-autobuild_suite/build/exhale-git/src/app/../../src/app/exhaleApp.cpp:320:100: error: '_SH_DENYRD' was not declared in this scope
320 | if (_sopen_s (&outFileHandle, outFileName, i | _O_SEQUENTIAL | _O_CREAT | _O_EXCL | _O_BINARY, _SH_DENYRD, _S_IWRITE) != 0)
| ^~~~~~~~~~
make[1]: *** [../makefile.base:112: ../../build/exhaleApp.d.o] Error 1
make[1]: Leaving directory '/build/exhale-git/src/app'
make: *** [makefile:18: all] Error 2
También nos daba problemas por una definición de fprintf_s
. Unos cambios tuvieron que hacerse en el código.
Para resolver el problema de que _SH_DENYRD
no estaba declarado, tuvimos que añadir el header share.h
:
Para resolver el problema de fprintf_s
, cambié el bloque #ifndef
a #if !defined
para verificar adicionalmente si estamos compilando bajo MinGW. Si esto es cierto, no declaramos esta variable que apunta a la función fprintf
:
Luego de realizar estos cambios, el programa compiló exitosamente.
Lo proximo que hice fue hacer unos cambios al archivo makefile.base
para que el proyecto Media Autobuild Suite pasara las variables CXXFLAGS
y LDFLAGS
a exhale:
Estos cambios fueron aprobados y fusionados al proyecto.
Mi inspiración para añadir esta herramienta al Media Autobuild Suite fue debido a que un usuario pidió que esta herramienta fuese añadido. Trabajé para añadirlo y abrí un «Pull Request», el cual refiné aplicando unas recomendaciones.
Este «Pull Request» fue fusionado al suite y ahora todos los usuarios pueden compilar y usar esta herramienta.