Bug#893633: tuxpuck FTCBFS: fails to find freetype, but actually more complex

Helmut Grohne helmut at subdivi.de
Tue Mar 20 18:14:32 UTC 2018


Source: tuxpuck
Version: 0.8.2-8
Tags: patch
User: helmutg at debian.org
Usertags: rebootstrap

tuxpuck fails to cross build from source. The failure looks innocent
initially, it fails finding freetype.pc. Simple enough, use the right
pkg-config, but then it runs the damn thing.

Thus I noticed that the utils folder actually only contains build tools.
It's not meant to be build with a cross compiler. So rename CC to
CC_FOR_BUILD (to avoid dh_auto_build replacing it with a cross
compiler). Only thing is: We now need libsdl1.2-dev for both the build
architecture and the host architecture. That doesn't work, because
libsdl1.2-dev is not Multi-Arch: same and cannot be (due to sdl-config).
So I figured that the utils don't actually need sdl. All they use sdl
for is declaring integer types with particular widths and signedness.
That can easily be converted to using <inttypes.h> removing the need for
libsdl1.2-dev (for the build architecture). The freetype depdency is
only needed for the build architecture (thus annotate with :native) and
then it also finds freetype.pc. So with all these changes, tuxpuck
actually cross builds. The patch is a bit bigger, but I hope you can
still take it.

Helmut
-------------- next part --------------
diff --minimal -Nru tuxpuck-0.8.2/debian/changelog tuxpuck-0.8.2/debian/changelog
--- tuxpuck-0.8.2/debian/changelog	2018-03-08 22:15:21.000000000 +0100
+++ tuxpuck-0.8.2/debian/changelog	2018-03-20 06:31:48.000000000 +0100
@@ -1,3 +1,13 @@
+tuxpuck (0.8.2-8.1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * Fix FTCBFS: (Closes: #-1)
+    + Build the utils folder with the build architecture compiler.
+    + Remove dependency on sdl from utils/*.c.
+    + Switch the freetype dependency to the build architecture.
+
+ -- Helmut Grohne <helmut at subdivi.de>  Tue, 20 Mar 2018 06:31:48 +0100
+
 tuxpuck (0.8.2-8) unstable; urgency=medium
 
   * Use compat level 11.
diff --minimal -Nru tuxpuck-0.8.2/debian/control tuxpuck-0.8.2/debian/control
--- tuxpuck-0.8.2/debian/control	2018-03-08 22:15:21.000000000 +0100
+++ tuxpuck-0.8.2/debian/control	2018-03-20 06:31:48.000000000 +0100
@@ -6,7 +6,7 @@
  Markus Koschany <apo at debian.org>
 Build-Depends:
  debhelper (>= 11),
- libfreetype6-dev,
+ libfreetype6-dev:native,
  libjpeg-dev,
  libpng-dev,
  libsdl1.2-dev,
diff --minimal -Nru tuxpuck-0.8.2/debian/patches/cross.patch tuxpuck-0.8.2/debian/patches/cross.patch
--- tuxpuck-0.8.2/debian/patches/cross.patch	1970-01-01 01:00:00.000000000 +0100
+++ tuxpuck-0.8.2/debian/patches/cross.patch	2018-03-20 06:31:48.000000000 +0100
@@ -0,0 +1,155 @@
+Index: tuxpuck-0.8.2/utils/Makefile
+===================================================================
+--- tuxpuck-0.8.2.orig/utils/Makefile
++++ tuxpuck-0.8.2/utils/Makefile
+@@ -1,18 +1,18 @@
+ # Makefile for TuxPuck Utils , Copyright Jacob Kroon 2001-2002
+-CC		= gcc
++CC_FOR_BUILD	= gcc
+ CFLAGS		+= -g -Wall -Werror
+ #############################################################
+ 
+ all : ttf2font data2c anim
+ 
+ ttf2font : ttf2font.c
+-	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) ttf2font.c `pkg-config --cflags --libs freetype2` -o ttf2font
++	$(CC_FOR_BUILD) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) ttf2font.c `pkg-config --cflags --libs freetype2` -o ttf2font
+ 
+ data2c : data2c.c
+-	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) data2c.c `sdl-config --cflags --libs` -o data2c
++	$(CC_FOR_BUILD) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) data2c.c -o data2c
+ 
+ anim : anim.c
+-	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) anim.c `sdl-config --cflags --libs` -o anim
++	$(CC_FOR_BUILD) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) anim.c -o anim
+ 
+ clean :
+ 	rm -f *~ data2c ttf2font anim
+Index: tuxpuck-0.8.2/utils/anim.c
+===================================================================
+--- tuxpuck-0.8.2.orig/utils/anim.c
++++ tuxpuck-0.8.2/utils/anim.c
+@@ -1,11 +1,10 @@
+ /* anim.c - Copyright (C) 2001-2002 Jacob Kroon, see COPYING for details */
+ 
++#include <inttypes.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <stdio.h>
+ #include <sys/stat.h>
+-#include <SDL_endian.h>
+-#include <SDL_types.h>
+ 
+ void errorc(char *msg)
+ {
+@@ -23,15 +22,15 @@
+ {
+   FILE *in = NULL;
+   struct stat theStat;
+-  Uint8 *data;
+-  Uint32 size;
++  uint8_t *data;
++  uint32_t size;
+ 
+   if ((in = fopen(filename, "rb")) == NULL)
+     errorcc("Couldn't open file, ", filename);
+   stat(filename, &theStat);
+-  data = (Uint8 *) malloc(theStat.st_size);
++  data = (uint8_t *) malloc(theStat.st_size);
+   size = theStat.st_size;
+-  fwrite(&size, sizeof(Uint32), 1, out);
++  fwrite(&size, sizeof(uint32_t), 1, out);
+   if (fread(data, theStat.st_size, 1, in) != 1)
+     errorcc("Error reading from file, ", filename);
+   fwrite(data, theStat.st_size, 1, out);
+@@ -45,8 +44,8 @@
+   char buffer1[100];
+   char buffer2[100];
+   char *ptr;
+-  Uint8 nbrOfFrames, nbrOfAnimations;
+-  Uint32 uint32;
++  uint8_t nbrOfFrames, nbrOfAnimations;
++  uint32_t uint32;
+   int j = 0, i = 0;
+ 
+   if (argc != 3)
+@@ -57,7 +56,7 @@
+     errorcc("Couldn't open file for writing: ", argv[2]);
+   if (fscanf(in, "NbrOfFrames: %d\n", &uint32) != 1)
+     errorc("Wrong number of frames!");
+-  nbrOfFrames = (Uint8) uint32;
++  nbrOfFrames = (uint8_t) uint32;
+   fwrite(&nbrOfFrames, 1, 1, out);
+   ptr = strrchr(argv[1], '/');
+   if (ptr)
+@@ -72,26 +71,26 @@
+   }
+   if (fscanf(in, "NbrOfAnimations: %d\n", &uint32) != 1)
+     errorc("Wrong number of animations!");
+-  nbrOfAnimations = (Uint8) uint32;
++  nbrOfAnimations = (uint8_t) uint32;
+   fwrite(&nbrOfAnimations, 1, 1, out);
+   for (i = 0; i < nbrOfAnimations; i++) {
+-    Uint32 n;
+-    Uint8 n2;
++    uint32_t n;
++    uint8_t n2;
+ 
+     if (fscanf(in, "%d\n", &n) != 1)
+       errorc("Couldnt read number of frames in animation!");
+-    n2 = (Uint8) n;
++    n2 = (uint8_t) n;
+     fwrite(&n2, 1, 1, out);
+     for (j = 0; j < n2; j++) {
+-      Uint32 frame;
+-      Uint32 time;
+-      Uint8 frame2;
+-      Uint16 time2;
++      uint32_t frame;
++      uint32_t time;
++      uint8_t frame2;
++      uint16_t time2;
+ 
+       if (fscanf(in, "%d %d\n", &frame, &time) != 2)
+ 	errorc("Error reading frames");
+-      frame2 = (Uint8) frame;
+-      time2 = (Uint16) time;
++      frame2 = (uint8_t) frame;
++      time2 = (uint16_t) time;
+       fwrite(&frame2, 1, 1, out);
+       fwrite(&time2, sizeof(time2), 1, out);
+     }
+Index: tuxpuck-0.8.2/utils/data2c.c
+===================================================================
+--- tuxpuck-0.8.2.orig/utils/data2c.c
++++ tuxpuck-0.8.2/utils/data2c.c
+@@ -1,10 +1,9 @@
+ /* data2c - Copyright (C) 2001-2002 Jacob Kroon, see COPYING for details */
+ 
++#include <inttypes.h>
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <sys/stat.h>
+-#include <SDL_types.h>
+-#include <SDL_endian.h>
+ 
+ void errorc(char *msg)
+ {
+@@ -24,7 +23,7 @@
+   char buffer[100];
+   unsigned char ch;
+   int i = 0;
+-  Uint32 size;
++  uint32_t size;
+   struct stat theStat;
+ 
+   if (argc != 3)
+@@ -39,7 +38,7 @@
+   fprintf(out, "/* %s */\n", buffer);
+   fprintf(out, "unsigned char %s[] = {\n", argv[2]);
+   for (i = 0; i < 4; i++)
+-    fprintf(out, "%d,", ((Uint8 *) & size)[i]);
++    fprintf(out, "%d,", ((uint8_t *) & size)[i]);
+   while (fread(&ch, 1, 1, in) != 0)
+     fprintf(out, "%d,", ch);
+   fseek(out, -1, SEEK_CUR);
diff --minimal -Nru tuxpuck-0.8.2/debian/patches/series tuxpuck-0.8.2/debian/patches/series
--- tuxpuck-0.8.2/debian/patches/series	2018-03-08 22:15:21.000000000 +0100
+++ tuxpuck-0.8.2/debian/patches/series	2018-03-20 06:31:48.000000000 +0100
@@ -3,3 +3,4 @@
 libpng-transition.patch
 FTBFS-with-fread.patch
 clang-FTBFS.patch
+cross.patch


More information about the Pkg-games-devel mailing list