En ZaspeSharp (antes se llamaba Zazpe), comencé a utilizar Prebuild como herramienta para independizarme del IDE.
ZaspeSharp es un programa muy simple para manejar las asistencias de personas a determinados eventos, y apunta, en un futuro, a generar una variedad de informes sobre estos datos. Está desarrollado con C#, principalmente en Mono bajo GNU/Linux. Sin embargo también funciona bajo Windows con el .NET Framework 2.0. En éste último caso es necesario bajarse el runtime de Gtk# 2.10, que se encuentra en la página de descargas en la web del proyecto.
Ojalá sirva para alguien más que para el director del coro Monseñor Zaspe. Supongamos que alguien se interesa en el proyecto y desea hacer unas modificaciones. Esta persona conoce mucho sobre la plataforma .NET, y es programador C#. Trabaja en Windows con SharpDevelop. Imaginemos cuatro personas más similares a esta última: la primera maneja muy bien Visual Studio 2003 y es el que usa; la segunda tiene Visual Studio 2005; la tercera trabaja en GNU/Linux con MonoDevelop; y la cuarta prefiere modificar los archivos de código fuente con GVim y compilar con NAnt o las Autotools. ¿Cómo satisfacer a todas ellas?
Antes, en ZaspeSharp, incluía los archivos de solución y proyectos para MonoDevelop y SharpDevelop. Con eso cubría ambas plataformas: Windows y GNU/Linux. El problema es que como trabajo principalmente en éste último, a veces los archivos de SharpDevelop quedaban rotos al no incluir algún fichero necesario.
La solución se llama Prebuild. Y aunque todavía tiene un camino por seguir, se puede decir que funciona. Lo que se hace es escribir un archivo XML con los datos de la solución. Luego se ejecuta el programa (que está incluido en el SVN de ZaspeSharp) indicándole este archivo y el target, que puede ser MonoDevelop, SharpDevelop (1.x o 2.x), NAnt, Autotools, Visual Studio 2002, 2003 y 2005.
Todo esto parece impresionante, pero sin embargo tuve algunos problemas. Se ve que los chicos encargados del desarrollo de Prebuild trabajan más con otras herramientas distintas a MonoDevelop, ya que algunas opciones no se seteaban bien para éste. Está bien… uso la versión 0.14 que salió hace poco, pero algunas características creo que estaban en la 0.13. Así que modifiqué el código encargado de generar los archivos de éste IDE para que soporte algunas de estas cosas. Los archivos generados para MonoDevelop (uso la versión 0.14) y para SharpDevelop (versión 2.2) son correctos. No lo tengo para testear, pero seguramente funciona bien para todas las versiones de Visual Studio. Si apuntamos a NAnt hay que modificar algunas cositas en el archivo .build generado para un proyecto de ZaspeSharp, que es un poco complejo, lo admito. Y finalmente, no funciona si intentamos generar los archivos para las Autotools, seguramente por la complejidad de ese proyecto que mencioné. Además, habría que ver si estoy seteando correctamente las opciones en el archivo XML… esta es otra contra de Prebuild: documentación cero. Me estuve guiando con unos ejemplos que vienen en el paquete, y con este schema XML.
Poniendo todo en la balanza, me quedo con Prebuild. Tengo lo de antes, más NAnt (con algunos pequeños sacrificios) y Visual Studio. Pueden probar esto bajándose el código de ZaspeSharp desde el repositorio Subversion (svn co http://zaspe-sharp.google…), y ejecutando el binario prebuild.exe (en GNU/Linux con Mono o en Windows) según lo indica el archivo README (no tengo idea si ese ingles está muy bien, pero se entiende).
El código modificado de Prebuild se encuentra aquí.
Algunos screenshots de ZaspeSharp en GNU/Linux y en Windows: