summaryrefslogtreecommitdiffstats
path: root/package/xorg
diff options
context:
space:
mode:
Diffstat (limited to 'package/xorg')
-rw-r--r--package/xorg/Config.in2
-rw-r--r--package/xorg/libXfont-1.1.0-noftinternals.patch294
-rw-r--r--package/xorg/libdir-la.patch153
-rw-r--r--package/xorg/xorg-config.patch5
-rw-r--r--package/xorg/xorg.mk12
5 files changed, 458 insertions, 8 deletions
diff --git a/package/xorg/Config.in b/package/xorg/Config.in
index 5dec3e94c..7b35c1980 100644
--- a/package/xorg/Config.in
+++ b/package/xorg/Config.in
@@ -4,8 +4,8 @@ config BR2_PACKAGE_XORG
depends !BR2_PACKAGE_TINYX
select BR2_PACKAGE_ZLIB
select BR2_PACKAGE_LIBPNG
- select BR2_PACKAGE_FREETYPE
select BR2_PACKAGE_EXPAT
+ select BR2_PACKAGE_FONTCONFIG
select BR2_PACKAGE_PKGCONFIG
help
The official X Window system and server.
diff --git a/package/xorg/libXfont-1.1.0-noftinternals.patch b/package/xorg/libXfont-1.1.0-noftinternals.patch
new file mode 100644
index 000000000..846410dc7
--- /dev/null
+++ b/package/xorg/libXfont-1.1.0-noftinternals.patch
@@ -0,0 +1,294 @@
+diff -urbN libXfont-1.1.0/src/FreeType/ftfuncs.c libXfont-1.1.0.new/src/FreeType/ftfuncs.c
+--- xc/lib/font/FreeType/ftfuncs.c 2005-10-24 02:32:05.000000000 +0800
++++ xc/lib/font/FreeType/ftfuncs.c 2006-06-25 10:56:24.221147322 +0800
+@@ -54,10 +54,7 @@
+ #include FT_TYPE1_TABLES_H
+ #include FT_XFREE86_H
+ #include FT_BBOX_H
+-#include FT_INTERNAL_TRUETYPE_TYPES_H
+ #include FT_TRUETYPE_TAGS_H
+-#include FT_INTERNAL_SFNT_H
+-#include FT_INTERNAL_STREAM_H
+ /*
+ * If you want to use FT_Outline_Get_CBox instead of
+ * FT_Outline_Get_BBox, define here.
+@@ -123,6 +120,25 @@
+ };
+
+
++/* read 2-byte value from a SFNT table */
++static FT_UShort
++sfnt_get_ushort( FT_Face face,
++ FT_ULong table_tag,
++ FT_ULong table_offset )
++{
++ FT_Byte buff[2];
++ FT_ULong len = sizeof(buff);
++ FT_UShort result = 0;
++
++ if ( !FT_Load_Sfnt_Table( face, table_tag, table_offset, buff, &len ) );
++ result = (FT_UShort)( (buff[0] << 8) | buff[1] );
++
++ return result;
++}
++
++#define sfnt_get_short(f,t,o) ((FT_Short)sfnt_get_ushort((f),(t),(o)))
++
++
+ static int ftypeInitP = 0; /* is the engine initialised? */
+ FT_Library ftypeLibrary;
+
+@@ -211,6 +227,10 @@
+ if(maxp && maxp->maxContours == 0)
+ face->bitmap = 1;
+ }
++
++ face->num_hmetrics = (FT_UInt) sfnt_get_ushort( face->face,
++ TTAG_hhea, 34 );
++
+ /* Insert face in hashtable and return it */
+ face->next = faceTable[bucket];
+ faceTable[bucket] = face;
+@@ -462,6 +482,34 @@
+ }
+
+ if( FT_IS_SFNT( face->face ) ) {
++#if 1
++ FT_F26Dot6 tt_char_width, tt_char_height, tt_dim_x, tt_dim_y;
++ FT_UInt nn;
++
++ instance->strike_index=0xFFFFU;
++
++ tt_char_width = (FT_F26Dot6)(trans->scale*(1<<6) + 0.5);
++ tt_char_height = (FT_F26Dot6)(trans->scale*(1<<6) + 0.5);
++
++ tt_dim_x = FLOOR64( ( tt_char_width * trans->xres + 36 ) / 72 + 32 );
++ tt_dim_y = FLOOR64( ( tt_char_height * trans->yres + 36 ) / 72 + 32 );
++
++ if ( tt_dim_x && !tt_dim_y )
++ tt_dim_y = tt_dim_x;
++ else if ( !tt_dim_x && tt_dim_y )
++ tt_dim_x = tt_dim_y;
++
++ for ( nn = 0; nn < face->face->num_fixed_sizes; nn++ )
++ {
++ FT_Bitmap_Size* sz = &face->face->available_sizes[nn];
++
++ if ( tt_dim_x == FLOOR64(sz->x_ppem + 32) && tt_dim_y == FLOOR64(sz->y_ppem + 32) )
++ {
++ instance->strike_index = nn;
++ break;
++ }
++ }
++#else
+ /* See Set_Char_Sizes() in ttdriver.c */
+ FT_Error err;
+ TT_Face tt_face;
+@@ -486,6 +534,7 @@
+ sfnt = (SFNT_Service)tt_face->sfnt;
+ err = sfnt->set_sbit_strike(tt_face,tt_x_ppem,tt_y_ppem,&instance->strike_index);
+ if ( err ) instance->strike_index=0xFFFFU;
++#endif
+ }
+
+ /* maintain a linked list of instances */
+@@ -803,31 +852,61 @@
+ * parse the htmx field in TrueType font.
+ */
+
+-/* from src/truetype/ttgload.c */
+ static void
+-tt_get_metrics( TT_HoriHeader* header,
++tt_get_metrics( FT_Face face,
+ FT_UInt idx,
++ FT_UInt num_hmetrics,
+ FT_Short* bearing,
+ FT_UShort* advance )
+-/* Copyright 1996-2001, 2002 by */
+-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+ {
+- TT_LongMetrics longs_m;
+- FT_UShort k = header->number_Of_HMetrics;
++ /* read the metrics directly from the horizontal header, we
++ * parse the SFNT table directly through the standard FreeType API.
++ * this works with any version of the library and doesn't need to
++ * peek at its internals. Maybe a bit less
++ */
++ FT_UInt count = num_hmetrics;
++ FT_ULong length = 0;
++ FT_ULong offset = 0;
++ FT_Error error;
+
+- if ( k == 0 ) {
+- *bearing = *advance = 0;
+- return;
+- }
++ error = FT_Load_Sfnt_Table( face, TTAG_hmtx, 0, NULL, &length );
+
+- if ( idx < (FT_UInt)k ) {
+- longs_m = (TT_LongMetrics )header->long_metrics + idx;
+- *bearing = longs_m->bearing;
+- *advance = longs_m->advance;
++ if ( count == 0 || error )
++ {
++ *advance = 0;
++ *bearing = 0;
++ }
++ else if ( idx < count )
++ {
++ offset = idx * 4L;
++ if ( offset + 4 > length )
++ {
++ *advance = 0;
++ *bearing = 0;
++ }
++ else
++ {
++ *advance = sfnt_get_ushort( face, TTAG_hmtx, offset );
++ *bearing = sfnt_get_short ( face, TTAG_hmtx, offset+2 );
++ }
++ }
++ else
++ {
++ offset = 4L * (count - 1);
++ if ( offset + 4 > length )
++ {
++ *advance = 0;
++ *bearing = 0;
++ }
++ else
++ {
++ *advance = sfnt_get_ushort ( face, TTAG_hmtx, offset );
++ offset += 4 + 2 * ( idx - count );
++ if ( offset + 2 > length)
++ *bearing = 0;
++ else
++ *bearing = sfnt_get_short ( face, TTAG_hmtx, offset );
+ }
+- else {
+- *bearing = ((TT_ShortMetrics*)header->short_metrics)[idx - k];
+- *advance = ((TT_LongMetrics )header->long_metrics)[k - 1].advance;
+ }
+ }
+
+@@ -835,6 +914,7 @@
+ ft_get_very_lazy_bbox( FT_UInt index,
+ FT_Face face,
+ FT_Size size,
++ FT_UInt num_hmetrics,
+ double slant,
+ FT_Matrix *matrix,
+ FT_BBox *bbox,
+@@ -842,15 +922,14 @@
+ FT_Long *vertAdvance)
+ {
+ if ( FT_IS_SFNT( face ) ) {
+- TT_Face ttface = (TT_Face)face;
+ FT_Size_Metrics *smetrics = &size->metrics;
+ FT_Short leftBearing = 0;
+ FT_UShort advance = 0;
+ FT_Vector p0, p1, p2, p3;
+
+ /* horizontal */
+- tt_get_metrics(&ttface->horizontal, index,
+- &leftBearing, &advance);
++ tt_get_metrics( face, index, num_hmetrics,
++ &leftBearing, &advance );
+
+ #if 0
+ fprintf(stderr,"x_scale=%f y_scale=%f\n",
+@@ -910,7 +989,27 @@
+ FT_UShort glyph_index, FT_Glyph_Metrics *metrics_return,
+ int *sbitchk_incomplete_but_exist )
+ {
+-#if (FREETYPE_VERSION >= 2001008)
++#if 1
++ if ( strike_index != 0xFFFFU && ft_face->available_sizes != NULL )
++ {
++ FT_Error error;
++ FT_Bitmap_Size* sz = &ft_face->available_sizes[strike_index];
++
++ error = FT_Set_Pixel_Sizes( ft_face, sz->x_ppem/64, sz->y_ppem/64 );
++ if ( !error )
++ {
++ error = FT_Load_Glyph( ft_face, glyph_index, FT_LOAD_SBITS_ONLY );
++ if ( !error )
++ {
++ if ( metrics_return != NULL )
++ *metrics_return = ft_face->glyph->metrics;
++
++ return 0;
++ }
++ }
++ }
++ return -1;
++#elif (FREETYPE_VERSION >= 2001008)
+ SFNT_Service sfnt;
+ TT_Face face;
+ FT_Error error;
+@@ -1043,6 +1142,7 @@
+ if( bitmap_metrics == NULL ) {
+ if ( sbitchk_incomplete_but_exist==0 && (instance->ttcap.flags & TTCAP_IS_VERY_LAZY) ) {
+ if( ft_get_very_lazy_bbox( idx, face->face, instance->size,
++ face->num_hmetrics,
+ instance->ttcap.vl_slant,
+ &instance->transformation.matrix,
+ &bbox, &outline_hori_advance,
+@@ -1207,10 +1307,27 @@
+ }
+
+ if( face->face->glyph->format != FT_GLYPH_FORMAT_BITMAP ) {
++#ifdef USE_GET_CBOX
++ FT_Outline_Get_CBox(&face->face->glyph->outline, &bbox);
++ ftrc = 0;
++#else
++ ftrc = FT_Outline_Get_BBox(&face->face->glyph->outline, &bbox);
++#endif
++ if( ftrc != 0 ) return FTtoXReturnCode(ftrc);
++ bbox.yMin = FLOOR64( bbox.yMin );
++ bbox.yMax = CEIL64 ( bbox.yMax );
++ ht_actual = ( bbox.yMax - bbox.yMin ) >> 6;
++ /* FreeType think a glyph with 0 height control box is invalid.
++ * So just let X to create a empty bitmap instead. */
++ if ( ht_actual == 0 )
++ is_outline = -1;
++ else
++ {
+ ftrc = FT_Render_Glyph(face->face->glyph,FT_RENDER_MODE_MONO);
+ if( ftrc != 0 ) return FTtoXReturnCode(ftrc);
+ is_outline = 1;
+ }
++ }
+ else{
+ is_outline=0;
+ }
+@@ -1221,6 +1338,7 @@
+ if( is_outline == 1 ){
+ if( correct ){
+ if( ft_get_very_lazy_bbox( idx, face->face, instance->size,
++ face->num_hmetrics,
+ instance->ttcap.vl_slant,
+ &instance->transformation.matrix,
+ &bbox, &outline_hori_advance,
+diff -urbN libXfont-1.1.0/src/FreeType/ftfuncs.h libXfont-1.1.0.new/src/FreeType/ftfuncs.h
+--- xc/lib/font/FreeType/ftfuncs.h 2005-07-07 22:59:47.000000000 +0800
++++ xc/lib/font/FreeType/ftfuncs.h 2006-06-21 21:05:28.533849804 +0800
+@@ -47,6 +47,7 @@
+ char *filename;
+ FT_Face face;
+ int bitmap;
++ FT_UInt num_hmetrics;
+ struct _FTInstance *instances;
+ struct _FTInstance *active_instance;
+ struct _FTFace *next; /* link to next face in bucket */
+diff -urbN libXfont-1.1.0/src/FreeType/ftsystem.c libXfont-1.1.0.new/src/FreeType/ftsystem.c
+--- xc/lib/font/FreeType/ftsystem.c 2005-07-09 14:36:10.000000000 +0800
++++ xc/lib/font/FreeType/ftsystem.c 2006-06-21 21:05:28.534849622 +0800
+@@ -35,7 +35,6 @@
+ #endif
+ #include <ft2build.h>
+ #include FT_CONFIG_CONFIG_H
+-#include FT_INTERNAL_DEBUG_H
+ #include FT_SYSTEM_H
+ #include FT_ERRORS_H
+ #include FT_TYPES_H
diff --git a/package/xorg/libdir-la.patch b/package/xorg/libdir-la.patch
new file mode 100644
index 000000000..90b0444c6
--- /dev/null
+++ b/package/xorg/libdir-la.patch
@@ -0,0 +1,153 @@
+--- xc/lib/Xft/ltmain.sh.orig 2004-04-23 12:43:42.000000000 -0600
++++ xc/lib/Xft/ltmain.sh 2007-01-13 15:04:20.000000000 -0700
+@@ -548,7 +548,7 @@
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+- exit 1
++ #exit 1
+ # else
+ # $echo "$modename: using $tagname tagged configuration"
+ fi
+@@ -1652,7 +1652,7 @@
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+- exit 1
++ #exit 1
+ # else
+ # $echo "$modename: using $tagname tagged configuration"
+ fi
+@@ -5362,10 +5362,13 @@
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+- if test "$inst_prefix_dir" = "$destdir"; then
+- $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+- exit 1
+- fi
++ #
++ # This breaks install into our staging area. -PB
++ #
++ #if test "$inst_prefix_dir" = "$destdir"; then
++ # $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
++ # exit 1
++ #fi
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+--- xc/extras/fontconfig/ltmain.sh.orig 2004-04-23 12:43:42.000000000 -0600
++++ xc/extras/fontconfig/ltmain.sh 2007-01-13 15:04:20.000000000 -0700
+@@ -548,7 +548,7 @@
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+- exit 1
++ #exit 1
+ # else
+ # $echo "$modename: using $tagname tagged configuration"
+ fi
+@@ -1652,7 +1652,7 @@
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+- exit 1
++ #exit 1
+ # else
+ # $echo "$modename: using $tagname tagged configuration"
+ fi
+@@ -5362,10 +5362,13 @@
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+- if test "$inst_prefix_dir" = "$destdir"; then
+- $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+- exit 1
+- fi
++ #
++ # This breaks install into our staging area. -PB
++ #
++ #if test "$inst_prefix_dir" = "$destdir"; then
++ # $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
++ # exit 1
++ #fi
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+--- xc/extras/freetype2/builds/unix/ltmain.sh.orig 2007-01-13 15:05:47.000000000 -0700
++++ xc/extras/freetype2/builds/unix/ltmain.sh 2007-01-13 15:07:55.000000000 -0700
+@@ -226,8 +226,9 @@
+ # line option must be used.
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+- $echo "$modename: specify a tag with \`--tag'" 1>&2
+- exit $EXIT_FAILURE
++ $echo "$modename: defaulting to \`CC'"
++ $echo "$modename: if this is not correct, specify a tag with \`--tag'"
++# exit $EXIT_FAILURE
+ # else
+ # $echo "$modename: using $tagname tagged configuration"
+ fi
+@@ -2147,8 +2148,14 @@
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
+- dir="$libdir"
+- absdir="$libdir"
++ # Adding 'libdir' from the .la file to our library search paths
++ # breaks crosscompilation horribly. We cheat here and don't add
++ # it, instead adding the path where we found the .la. -CL
++ dir="$abs_ladir"
++ absdir="$abs_ladir"
++ libdir="$abs_ladir"
++ #dir="$libdir"
++ #absdir="$libdir"
+ fi
+ else
+ dir="$ladir/$objdir"
+@@ -2615,6 +2622,16 @@
+ esac
+ if grep "^installed=no" $deplib > /dev/null; then
+ path="$absdir/$objdir"
++# This interferes with crosscompilation. -CL
++# else
++# eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
++# if test -z "$libdir"; then
++# $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
++# exit 1
++# fi
++# if test "$absdir" != "$libdir"; then
++# $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
++# fi
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+@@ -5165,6 +5182,10 @@
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
++ # Replacing uninstalled with installed can easily break crosscompilation,
++ # since the installed path is generally the wrong architecture. -CL
++ newdependency_libs="$newdependency_libs $deplib"
++ continue
+ case $deplib in
+ *.la)
+ name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
+@@ -5483,10 +5504,13 @@
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+- if test "$inst_prefix_dir" = "$destdir"; then
+- $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+- exit $EXIT_FAILURE
+- fi
++ #
++ # This breaks install into our staging area. -PB
++ #
++ # if test "$inst_prefix_dir" = "$destdir"; then
++ # $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
++ # exit $EXIT_FAILURE
++ # fi
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
diff --git a/package/xorg/xorg-config.patch b/package/xorg/xorg-config.patch
index 9bfd56726..389801e1d 100644
--- a/package/xorg/xorg-config.patch
+++ b/package/xorg/xorg-config.patch
@@ -1,6 +1,6 @@
--- xc/config/cf/host.def~ Thu May 12 15:28:01 MDT 2005
+++ xc/config/cf/host.def Thu May 12 15:28:01 MDT 2005
-@@ -0,0 +1,44 @@
+@@ -0,0 +1,45 @@
+#define KDriveXServer YES
+#define TinyXServer YES
+#define XfbdevServer YES
@@ -10,7 +10,8 @@
+
+#define HasFreetype2 YES
+#define Freetype2Dir REPLACE_STAGING_DIR
-+#define HasFontconfig NO
++#define HasFontconfig YES
++#define FontconfigDir REPLACE_STAGING_DIR
+#define HasLibpng YES
+#define HasZlib YES
+#define HaveLib64 NO
diff --git a/package/xorg/xorg.mk b/package/xorg/xorg.mk
index 7477a4606..3f913458a 100644
--- a/package/xorg/xorg.mk
+++ b/package/xorg/xorg.mk
@@ -12,7 +12,7 @@ XORG_APPS:=xlsfonts/xlsfonts xmodmap/xmodmap xinit/startx \
mkfontscale/mkfontscale mkfontdir/mkfontdir \
#xterm/xterm
-XORG_LIBS:= Xft fontconfig Xrender Xaw Xmu Xt \
+XORG_LIBS:= Xft Xrender Xaw Xmu Xt \
SM ICE Xpm Xp Xext X11 Xmuu Xxf86misc
@@ -73,9 +73,12 @@ endif
$(DL_DIR)/$(XORG_SOURCE):
$(WGET) -P $(DL_DIR) $(XORG_SITE)/$(XORG_SOURCE)
-$(XORG_DIR)/.configured: $(DL_DIR)/$(XORG_SOURCE)
+$(XORG_DIR)/.unpacked: $(DL_DIR)/$(XORG_SOURCE)
$(XORG_CAT) $(DL_DIR)/$(XORG_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
toolchain/patch-kernel.sh $(XORG_DIR) package/xorg/ \*.patch
+ touch $(XORG_DIR)/.unpacked
+
+$(XORG_DIR)/.configured: $(XORG_DIR)/.unpacked
$(SED) 's:REPLACE_STAGING_DIR:$(STAGING_DIR):g' $(XORG_HOST_DEF)
$(SED) 's:REPLACE_GCCINC_DIR:$(shell $(TARGET_CROSS)gcc -print-file-name=include):g' $(XORG_CF)
$(SED) 's:REPLACE_STAGING_DIR:$(STAGING_DIR):g' $(XORG_CF)
@@ -98,10 +101,10 @@ $(XORG_XSERVER): $(XORG_DIR)/.configured
$(STAGING_DIR)$(TARGET_LIBX)/libX11.so.6.2: $(XORG_XSERVER)
-mkdir -p $(STAGING_DIR)/usr/X11R6
+ ln -fs ../../include $(STAGING_DIR)/usr/X11R6/include
ln -fs ../../lib $(STAGING_DIR)$(TARGET_LIBX)
( cd $(XORG_DIR); $(MAKE) \
DESTDIR=$(STAGING_DIR) install XCURSORGEN=xcursorgen MKFONTSCALE=mkfontscale )
- $(SED) 's,/usr/X11R6,$(STAGING_DIR)/usr/X11R6,' $(STAGING_DIR)/usr/X11R6/lib/pkgconfig/*.pc
touch -c $(STAGING_DIR)$(TARGET_LIBX)/libX11.so.6.2
$(TARGET_XSERVER): $(XORG_XSERVER)
@@ -146,8 +149,7 @@ $(XORG_LIBX)/libX11.so.6.2: $(TARGET_XSERVER)
$(TARGET_DIR)/usr/bin/mcookie: package/xorg/mcookie.c
$(TARGET_CROSS)gcc -Wall -Os -s package/xorg/mcookie.c -o $(TARGET_DIR)/usr/bin/mcookie
-xorg: zlib png pkgconfig expat freetype \
- $(STAGING_DIR)$(TARGET_LIBX)/libX11.so.6.2 \
+xorg: zlib png pkgconfig expat fontconfig $(STAGING_DIR)$(TARGET_LIBX)/libX11.so.6.2 \
$(XORG_LIBX)/libX11.so.6.2 $(TARGET_DIR)/usr/bin/mcookie
xorg-source: $(DL_DIR)/$(XORG_SOURCE)