Subject: [PATCH 2/2] gnu: m17n-lib: fix cross-compile.

From: Z572 <[email-masked]>
Date: Mon, 6 Mar 2023 13:57:35 +0800

* gnu/local.mk: add m17n-lib-1.8.0-use-pkg-config-for-freetype.patch.
* gnu/packages/emacs.scm(m17n-lib):
[source]: add m17n-lib-1.8.0-use-pkg-config-for-freetype.patch.
[native-inputs]: when cross-compile add pkg-config, libtool, gettext-minimal,
autoconf, automake.
[arguments]: when cross-compile, add phase to fix rpl_malloc undefined references.
* gnu/packages/patches/m17n-lib-1.8.0-use-pkg-config-for-freetype.patch: new file.
---
 gnu/local.mk                                  |   2 +
 gnu/packages/emacs.scm                        |  25 +++-
 ...ib-1.8.0-use-pkg-config-for-freetype.patch | 125 ++++++++++++++++++
 3 files changed, 150 insertions(+), 2 deletions(-)
 create mode 100644 gnu/packages/patches/m17n-lib-1.8.0-use-pkg-config-for-freetype.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 07a7a0f527..1e98792f54 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -56,6 +56,7 @@
 # Copyright © 2022 Alex Griffin <[email-masked]>
 # Copyright © 2022 ( <[email-masked]>
 # Copyright © 2022 jgart <[email-masked]>
+# Copyright © 2023 Zheng Junjie <[email-masked]>
 #
 # This file is part of GNU Guix.
 #
@@ -1560,6 +1561,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/musl-cross-locale.patch			\
   %D%/packages/patches/mutt-store-references.patch		\
   %D%/packages/patches/m4-gnulib-libio.patch			\
+  %D%/packages/patches/m17n-lib-1.8.0-use-pkg-config-for-freetype.patch	\
   %D%/packages/patches/nautilus-extension-search-path.patch	\
   %D%/packages/patches/ncompress-fix-softlinks.patch		\
   %D%/packages/patches/ncftp-reproducible.patch			\
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 3754b79ef0..194c77fea4 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -621,8 +621,16 @@ (define-public m17n-lib
                            version ".tar.gz"))
        (sha256
         (base32
-         "0jp61y09xqj10mclpip48qlfhniw8gwy8b28cbzxy8hq8pkwmfkq"))))
+         "0jp61y09xqj10mclpip48qlfhniw8gwy8b28cbzxy8hq8pkwmfkq"))
+       (patches (search-patches "m17n-lib-1.8.0-use-pkg-config-for-freetype.patch"))))
     (build-system gnu-build-system)
+    (native-inputs
+     (if (%current-target-system)
+         (list pkg-config
+               libtool
+               gettext-minimal
+               autoconf automake)
+         '()))
     (inputs
      (list fribidi
            gd
@@ -631,7 +639,20 @@ (define-public m17n-lib
            libxml2
            m17n-db))
     (arguments
-     `(#:parallel-build? #f))
+     `(#:parallel-build? #f
+       ,@(if (%current-target-system)
+             '(#:phases
+               (modify-phases %standard-phases
+                 ;; AC_FUNC_MALLOC and AC_FUNC_REALLOC usually unneeded
+                 ;; see https://lists.gnu.org/archive/html/autoconf/2003-02/msg00017.html
+                 (add-after 'unpack 'fix-rpl_malloc
+                   (lambda _
+                     (substitute* "configure.ac"
+                       (("AC_FUNC_MALLOC") "")
+                       (("AC_FUNC_REALLOC") ""))
+                     ;; let bootstrap phase run.
+                     (delete-file "./configure")))))
+             '())))
     ;; With `guix lint' the home-page URI returns a small page saying
     ;; that your browser does not handle frames. This triggers the "URI
     ;; returns suspiciously small file" warning.
diff --git a/gnu/packages/patches/m17n-lib-1.8.0-use-pkg-config-for-freetype.patch b/gnu/packages/patches/m17n-lib-1.8.0-use-pkg-config-for-freetype.patch
new file mode 100644
index 0000000000..38c311bee5
--- /dev/null
+++ b/gnu/packages/patches/m17n-lib-1.8.0-use-pkg-config-for-freetype.patch
@@ -0,0 +1,125 @@
+backport from upstream.
+
+From b468fc95150b7ca0e766e7c385a60879e65322d4 Mon Sep 17 00:00:00 2001
+From: "K. Handa" <[email-masked]>
+Date: Tue, 23 Oct 2018 00:05:46 +0900
+Subject: Use pkg-config for freetype, use %p to print a pointer
+
+---
+ ChangeLog     |  5 +++++
+ configure.ac  | 48 +++++++++++++++++++-----------------------------
+ src/ChangeLog |  5 +++++
+ src/chartab.c |  4 ++--
+ 4 files changed, 31 insertions(+), 31 deletions(-)
+
+diff --git a/ChangeLog b/ChangeLog
+index b069d89..9dfc0b0 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -1,3 +1,8 @@
++2018-10-22  K. Handa  <[email-masked]>
++
++	* configure.ac: Do not use the program freetype-config, use
++	PKG_CHECK_MODULES for checking freetype2.
++
+ 2018-02-08  K. Handa  <[email-masked]>
+ 
+ 	Version 1.8.0 released.
+diff --git a/configure.ac b/configure.ac
+index 7f8b08e..3516bad 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -204,36 +204,26 @@ fi
+ AC_SUBST(OTF_LD_FLAGS)
+ 
+ dnl Check for Freetype2 usability.
+-AC_CHECK_PROG(HAVE_FREETYPE_CONFIG, freetype-config, yes)
+-if test "x$HAVE_FREETYPE_CONFIG" = "xyes"; then
+-  FREETYPE_INC=`freetype-config --cflags`
+-  save_CPPFLAGS="$CPPFLAGS"
+-  CPPFLAGS="$CPPFLAGS $FREETYPE_INC"
+-  AC_CHECK_HEADER(ft2build.h, HAVE_FREETYPE=yes,
+-  			      HAVE_FREETYPE=no CPPFLAGS="$save_CPPFLAGS")
+-  if test "x$HAVE_FREETYPE" = "xyes" ; then
+-    save_LIBS="$LIBS"
+-    LIBS="$LIBS `freetype-config --libs`"
+-    AC_CHECK_LIB(freetype, FT_Init_FreeType, HAVE_FREETYPE=yes,
+-    			   		     HAVE_FREETYPE=no)
+-    LIBS="$save_LIBS"
+-    if test "x$HAVE_FREETYPE" = "xyes"; then
+-      FREETYPE_LD_FLAGS=`freetype-config --libs`
+-      AC_DEFINE(HAVE_FREETYPE, 1, 
+-		[Define to 1 if you have FreeType library and header file.])
+-      M17N_EXT_LIBS="$M17N_EXT_LIBS freetype"
+-      AC_CHECK_HEADER(freetype/ftbdf.h, HAVE_FTBDF_H=yes, HAVE_FTBDF_H=no,
+-		      [#include <ft2build.h>
++PKG_CHECK_MODULES([FREETYPE], [freetype2], [HAVE_FREETYPE=yes],
++                                           [HAVE_FREETYPE=no])
++AS_IF([test "x$HAVE_FREETYPE" = "xyes"],
++  [CPPFLAGS="$CPPFLAGS $FREETYPE_CFLAGS";
++   FREETYPE_LD_FLAGS=FREETYPE_LIBS;
++   AC_DEFINE([HAVE_FREETYPE], [1],
++             [Define to 1 if you have FreeType library and header file.])
++   M17N_EXT_LIBS="$M17N_EXT_LIBS freetype";
++   AC_CHECK_HEADER([freetype/ftbdf.h], [HAVE_FTBDF_H=yes], [HAVE_FTBDF_H=no],
++                   [#include <ft2build.h>
+ #include FT_FREETYPE_H])
+-      if test "x$HAVE_FTBDF_H" = "xyes"; then
+-        AC_DEFINE(HAVE_FTBDF_H, 1,
+-		  [Define to 1 if you have freetype/ftbdf.h.])
+-      fi
+-      CONFIG_FLAGS="$CONFIG_FLAGS -DHAVE_FREETYPE"
+-    fi
+-  fi
+-fi
+-AC_SUBST(FREETYPE_LD_FLAGS)
++   AS_IF([test "x$HAVE_FTBDF_H" = "xyes"],
++     [AC_DEFINE([HAVE_FTBDF_H], [1],
++                [Define to 1 if you have freetype/ftbdf.h.])],
++     [])
++   CONFIG_FLAGS="$CONFIG_FLAGS -DHAVE_FREETYPE"
++  ],
++  []
++  )
++AC_SUBST([FREETYPE_LD_FLAGS])
+ 
+ dnl Check for Xft2 usability.
+ save_CPPFLAGS="$CPPFLAGS"
+diff --git a/src/ChangeLog b/src/ChangeLog
+index ee28ea6..8cb91c1 100644
+--- a/src/ChangeLog
++++ b/src/ChangeLog
+@@ -1,3 +1,8 @@
++2018-10-22  K. Handa  <[email-masked]>
++
++	* chartab.c (dump_sub_chartab): Use %p directive to print a
++	pointer value.
++
+ 2018-02-08  K. Handa  <[email-masked]>
+ 
+ 	Version 1.8.0 released.
+diff --git a/src/chartab.c b/src/chartab.c
+index d58aa65..8aeb6d7 100644
+--- a/src/chartab.c
++++ b/src/chartab.c
+@@ -558,7 +558,7 @@ dump_sub_chartab (MSubCharTable *table, void *default_value,
+ 	fprintf (mdebug__output, "(default nil)");
+     }
+   else
+-    fprintf (mdebug__output, "(default #x%X)", (unsigned) table->default_value);
++    fprintf (mdebug__output, "(default #x%p)", table->default_value);
+ 
+   default_value = table->default_value;
+   if (table->contents.tables)
+@@ -589,7 +589,7 @@ dump_sub_chartab (MSubCharTable *table, void *default_value,
+ 		  fprintf (mdebug__output, "nil)");
+ 	      }
+ 	    else
+-	      fprintf (mdebug__output, " #xx%X)", (unsigned) default_value);
++	      fprintf (mdebug__output, " #x%p)", default_value);
+ 	  }
+     }
+   fprintf (mdebug__output, ")");
+-- 
+cgit v1.1
+
-- 
2.39.1