Mostrando entradas con la etiqueta libgd. Mostrar todas las entradas
Mostrando entradas con la etiqueta libgd. Mostrar todas las entradas

domingo, 14 de junio de 2009

Compilar para Windows desde Cygwin (II)

Vamos a compilar a libGD para Windows.

Nos traemos el código fuente:
wget http://www.libgd.org/releases/gd-2.0.36RC1.tar.bz2

Lo desempaquetamos:
tar jxvf gd-2.0.36RC1.tar.bz2

Nos vamos a su directorio:
cd gd-2.0.36RC1

Y le ponemos el parche para aligerar libGD:
patch -p0 < ..patches/libgd.trim.1.diff

Podríamos compilar libpng, libjpeg y freetype desde su código fuente, pero vamos a bajarlos ya compilados desde Mplayer Win32.
Ojo, desempaquetamos cada cosa en su sitio (bibliotecas, includes y scripts de configuración) según la jerarquía de directorios que os comenté.

Lo configuro desactivando la creación de la la bilioteca dinámica, y sólo hará la enlazada estáticamente:

CC="gcc-3" CFLAGS="-mno-cygwin -DNONDLL=1" ./configure --disable-shared --prefix=/mingw --with-png=/mingw --with-freetype=/mingw --with-jpeg=/mingw --without-xpm --without-fontconfig

A construir:
make

Y ya está, sólo falta instalarlo:
make install

viernes, 12 de junio de 2009

Parches

Imagina que modificas el código fuente de alguna utilidad. Cada vez que se libere una nueva versión, tendrás que volver a modificarla.
Pero un virtuoso programador (por ende: vago, orgulloso e impaciente) ideó a patch

Así que primero guardas en un ficherito tus cambios:
diff -u source.c.original source.c > source.diff

Y luego puedes decir a patch que aplique esos cambios a la nueva versión:
patch < source.diff

Y por supuesto no está limitado a cambios en un solo fichero, puedes tener un directorio con la versión inicial, otro directorio con la versión modificada por tí, y luego aplicar los cambios a un tercer directorio.

Por ejemplo, aquí me entretuve en recortar cosillas que no necesitaba de la versión 2.0.36 de libGD, e hize un .diff que bautizaremos como libgd.trim.1.diff.

Cuendo esté disponible la versión 2.0.37, le aplicaré mi parche asi:

cd src/gd-2.0.37
patch -p0 < ..patches/libgd.trim.1.diff

sábado, 18 de abril de 2009

KDE sobre Windows

¡Quién lo podía pensar, si hay KDE para Windows!

El instalador es muy similiar al de Cygwin.
Tiene su entorno de desarrollo basado en MinGW (dice que también puede ser MSVC).
De momento me he bajado las dependencias (iconv, expat, libpng, libjpeg) de libGD y xgawk, para ver si compilo una versión para MinGW y lo cuelgo junto a los binarios que ya tengo para Cygwin, aquí.

Con algo más de tiempo, igual se puede compilar Kdenlive, el editor de video.

miércoles, 15 de abril de 2009

Gráficos desde awk

Por mi edad y mi ser austero, soy un fanático de awk.
Maravilloso para procesar ficheritos de texto, descubrí que había una variante que procesaba XML, bautizada con el no muy original y sí muy descriptivo nombre de XMLgawk

La variante tenía un interesante interfaz para añadir extensiones al lenguaje, así que contribuí con una extensión para usar las funciones gráficas de libGD.

Aquí tenéis una austera página con los binarios para Cygwin, y unas someras explicaciones de cómo compilarlos desde los fuentes.

lunes, 23 de marzo de 2009

gd-2.0.36

Como parte de nuestra búsqueda de la brevedad y la bondad, vamos a aligerar un poco a libGD.

El paquete oficial de Cygwin tiene como dependencias a:
cygwin libXpm4 libfontconfig1 libjpeg62 libpng12

El problema es que libXpm4 tiene como dependencias al megapaquetón libX11_6, sólo para usar las funciones que manejan los bitmaps XPM, así que se puede sustituir por libXpm-noX.

Quitar libfontconfig1, es fácil: al compilar el fuente de libGD, tenemos una opción durante la configuración.

libiconv sólo se usa para convertir de una oscura codificación de japonés a Unicode. Así que fuera, mejor usar Unicode directamente para los (ejem, escasos) textos en japonés que yo maneje.

Otro ahorro es quitar la tipografía de tamaño fijo.

Así que vamos poco a poco editando los fuentes e intentando compilarlos, y cuando ya ya funciona, guardamos los cambios en un parche:

diff -u Makefile.am.org Makefile.am > ../patches/libgd.trim.1.diff
diff -u configure.ac.org configure.ac >> ../patches/libgd.trim.1.diff
diff -u config/gdlib-config.in.org config/gdlib-config.in >> ../patches/libgd.trim.1.diff
diff -u gdft.c.org gdft.c >> ../patches/libgd.trim.1.diff
diff -u gddemo.c.org gddemo.c >> ../patches/libgd.trim.1.diff


El parche es una chapucilla: lo elegante sería un parche por cambio, y enviarlos a libGD.

El parche es éste:

--- Makefile.am.org 2007-11-27 09:30:34.000000000 +0100
+++ Makefile.am 2009-03-19 11:30:01.260819300 +0100
@@ -13,17 +13,19 @@

EXTRA_DIST = README-JPEG.TXT README.TXT configure.pl bdftogd demoin.png err.out index.html install-item makefile.sample readme.jpn entities.html entities.tcl

-include_HEADERS = gd.h gdfx.h gd_io.h gdcache.h gdfontg.h gdfontl.h gdfontmb.h gdfonts.h gdfontt.h entities.h
+include_FIXFONTS = gdfontg.h gdfontl.h gdfontmb.h gdfonts.h gdfontt.h
+
+include_HEADERS = gd.h gdfx.h gd_io.h gdcache.h entities.h

lib_LTLIBRARIES = libgd.la

-libgd_la_SOURCES = gd.c gdfx.c gd_security.c gd_gd.c gd_gd2.c gd_io.c gd_io_dp.c gd_gif_in.c gd_gif_out.c gd_io_file.c gd_io_ss.c gd_jpeg.c gd_png.c gd_ss.c gd_topal.c gd_wbmp.c gdcache.c gdfontg.c gdfontl.c gdfontmb.c gdfonts.c gdfontt.c gdft.c gdhelpers.c gdhelpers.h gdkanji.c gdtables.c gdxpm.c jisx0208.h wbmp.c wbmp.h
+libgd_la_FIXFONTSOURCES = gdfontg.c gdfontl.c gdfontmb.c gdfonts.c gdfontt.c

-libgd_la_LDFLAGS = -version-info 2:0:0 $(XTRA_LDFLAGS)
+libgd_la_SOURCES = gd.c gdfx.c gd_security.c gd_gd.c gd_gd2.c gd_io.c gd_io_dp.c gd_gif_in.c gd_gif_out.c gd_io_file.c gd_io_ss.c gd_jpeg.c gd_png.c gd_ss.c gd_topal.c gd_wbmp.c gdcache.c gdft.c gdhelpers.c gdhelpers.h gdtables.c gdxpm.c jisx0208.h wbmp.c wbmp.h

-libgd_la_LIBADD = $(LTLIBICONV)
+libgd_la_LDFLAGS = -version-info 2:0:0 $(XTRA_LDFLAGS)

-LDADD = ./libgd.la $(LIBICONV)
+LDADD = ./libgd.la

dist-zip: distdir
zip -qr $(distdir).zip $(distdir)
--- configure.ac.org 2009-03-17 16:42:29.526062500 +0100
+++ configure.ac 2009-03-18 16:44:50.994075200 +0100
@@ -61,19 +61,6 @@
AC_HEADER_STDC
AC_CHECK_HEADERS([errno.h limits.h stddef.h stdlib.h string.h unistd.h])

-AM_ICONV
-# if test -n "$LIBICONV" ; then
-# LIBS="$LIBS $LIBICONV"
-# fi
-
-AC_CHECK_HEADERS(iconv.h,
- [AC_MSG_CHECKING(whether iconv.h defines iconv_t)
- AC_EGREP_HEADER([typedef.*iconv_t],iconv.h,
- [AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_ICONV_T_DEF, 1,
- [Define if defines iconv_t.])],
- AC_MSG_RESULT(no))])
-
# Checks for typedefs, structures, and compiler characteristics.
#AC_C_CONST
#AC_TYPE_SIZE_T
@@ -524,10 +511,9 @@

if test "$withval" != no; then
AC_CHECK_LIB(Xpm,XpmReadFileToXpmImage,
- [LIBS="-lXpm -lX11 $LIBS"
+ [LIBS="-lXpm $LIBS"
FEATURES="GD_XPM $FEATURES"
- AC_DEFINE(HAVE_LIBXPM, 1, [ Define if you have the Xpm library. ])],,
- [-lX11])
+ AC_DEFINE(HAVE_LIBXPM, 1, [ Define if you have the Xpm library. ])])
else
ac_cv_lib_Xpm_XpmReadFileToXpmImage=no
fi
--- config/gdlib-config.in.org 2009-03-19 16:12:36.221283200 +0100
+++ config/gdlib-config.in 2009-03-19 16:12:06.709311200 +0100
@@ -71,7 +71,7 @@
echo @LDFLAGS@
;;
--libs)
- echo @LIBS@ @LIBICONV@
+ echo @LIBS@
;;
--cflags|--includes)
echo -I@includedir@
@@ -84,7 +84,7 @@
echo "includedir: $includedir"
echo "cflags: -I@includedir@"
echo "ldflags: @LDFLAGS@"
- echo "libs: @LIBS@ @LIBICONV@"
+ echo "libs: @LIBS@"
echo "libdir: $libdir"
echo "features: @FEATURES@"
;;
--- gdft.c.org 2009-03-20 10:08:09.643623800 +0100
+++ gdft.c 2009-03-20 10:07:19.824264500 +0100
@@ -1081,26 +1081,7 @@
return "No character set found";
}

-#ifndef JISX0208
- if (encoding == gdFTEX_Shift_JIS)
- {
-#endif
- if ((tmpstr = (char *) gdMalloc (BUFSIZ)))
- {
- any2eucjp (tmpstr, string, BUFSIZ);
- next = tmpstr;
- }
- else
- {
next = string;
- }
-#ifndef JISX0208
- }
- else
- {
- next = string;
- }
-#endif

#if 0
fprintf(stderr,"dpi=%d,%d metric_res=%d ptsize=%g\n",hdpi,vdpi,METRIC_RES,ptsize);
--- gddemo.c.org 2009-03-20 10:36:35.767539000 +0100
+++ gddemo.c 2009-03-20 10:38:27.198319800 +0100
@@ -38,7 +38,9 @@
int i;

/* gd fonts for font test */
+#ifdef CONFIG_FIXFONT
gdFontPtr fonts[5];
+#endif
int y;

/* Create output image, in true color. */
@@ -136,6 +138,7 @@
/* Draw the styled, brushed line */
gdImageLine (im_out, 0, 255, 255, 0, gdStyledBrushed);
}
+#ifdef CONFIG_FIXFONT
/* Text (non-truetype; see gdtestft for a freetype demo) */
fonts[0] = gdFontGetTiny ();
fonts[1] = gdFontGetSmall ();
@@ -156,6 +159,7 @@
(unsigned char *) "hi", red);
y += fonts[i]->h;
}
+#endif
/* Random antialiased lines; coordinates all over the image,
but the output will respect a small clipping rectangle */
gdImageSetClip (im_out, 0, gdImageSY (im_out) - 100,


Los comandos para configurar y compilar quedan así:
LC_ALL=C autoreconf -i
CC=gcc-4 TMPDIR=/tmp CFLAGS="-march=core2 -DXPM_NO_X" ./configure --x-includes=/usr/include/noX --x-libraries=/usr/lib/noX --with-xpm --without-x --without-fontconfig
LC_ALL=C TMPDIR=/tmp make