aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu-system.am1
-rw-r--r--gnu/packages/fontutils.scm35
-rw-r--r--gnu/packages/patches/ttfautohint-source-date-epoch.patch70
3 files changed, 105 insertions, 1 deletions
diff --git a/gnu-system.am b/gnu-system.am
index 8822d0bdc0..e8cb5a630d 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -727,6 +727,7 @@ dist_patch_DATA = \
gnu/packages/patches/tidy-CVE-2015-5522+5523.patch \
gnu/packages/patches/tinyxml-use-stl.patch \
gnu/packages/patches/tk-find-library.patch \
+ gnu/packages/patches/ttfautohint-source-date-epoch.patch \
gnu/packages/patches/tophat-build-with-later-seqan.patch \
gnu/packages/patches/torsocks-dns-test.patch \
gnu/packages/patches/tvtime-gcc41.patch \
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index d64ed71bbf..c7cd519f65 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013, 2014, 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2014, 2016 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
;;;
@@ -29,6 +29,8 @@
#:use-module (gnu packages gettext)
#:use-module (gnu packages python)
#:use-module (gnu packages image)
+ #:use-module (gnu packages bison)
+ #:use-module (gnu packages flex)
#:use-module (gnu packages glib)
#:use-module (gnu packages xorg)
#:use-module (gnu packages gtk)
@@ -70,6 +72,37 @@ anti-aliased glyph bitmap generation with 256 gray levels.")
(license license:freetype) ; some files have other licenses
(home-page "http://www.freetype.org/")))
+(define-public ttfautohint
+ (package
+ (name "ttfautohint")
+ (version "1.5")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://savannah/freetype/ttfautohint-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1lgghck46p33z3hg8dnl76jryig4fh6d8rhzms837zp7x4hyfkv4"))
+ (patches (list (search-patch "ttfautohint-source-date-epoch.patch")))))
+ (build-system gnu-build-system)
+ (native-inputs
+ `(("flex" ,flex)
+ ("bison" ,bison)
+ ("pkg-config" ,pkg-config)))
+ (inputs
+ `(("freetype" ,freetype)
+ ("harfbuzz" ,harfbuzz)))
+ (arguments
+ `(#:configure-flags '("--with-qt=no"))) ;no gui
+ (synopsis "Automated font hinting")
+ (description
+ "ttfautohint provides a 99% automated hinting process and a platform for
+finely hand-hinting the last 1%. It is ideal for web fonts and supports many
+scripts.")
+ (license (list license:gpl2+ license:freetype)) ;choose one or the other
+ (home-page "http://www.freetype.org/ttfautohint/")))
+
(define-public fontconfig
(package
(name "fontconfig")
diff --git a/gnu/packages/patches/ttfautohint-source-date-epoch.patch b/gnu/packages/patches/ttfautohint-source-date-epoch.patch
new file mode 100644
index 0000000000..e42fdbf6b0
--- /dev/null
+++ b/gnu/packages/patches/ttfautohint-source-date-epoch.patch
@@ -0,0 +1,70 @@
+Honour an external definition of SOURCE_DATE_EPOCH when updating the embedded
+modification date in TTF/TTC files.
+
+--- a/lib/tatime.c
++++ b/lib/tatime.c
+@@ -15,6 +15,8 @@
+
+ #include <time.h>
+ #include <stdint.h>
++#include <errno.h>
++#include <limits.h>
+
+ #include "ta.h"
+
+@@ -27,12 +29,51 @@ TA_get_current_time(FT_ULong* high,
+ {
+ /* there have been 24107 days between January 1st, 1904 (the epoch of */
+ /* OpenType), and January 1st, 1970 (the epoch of the `time' function) */
+- TA_ULongLong seconds_to_1970 = 24107 * 24 * 60 * 60;
+- TA_ULongLong seconds_to_today = seconds_to_1970 + (TA_ULongLong)time(NULL);
++ const TA_ULongLong seconds_to_1970 = 24107 * 24 * 60 * 60;
++ TA_ULongLong seconds_to_build;
+
++ time_t now;
++ char *source_date_epoch, *endptr;
++ TA_ULongLong epoch;
++ source_date_epoch = getenv("SOURCE_DATE_EPOCH");
++ if (source_date_epoch) {
++ errno = 0;
++ epoch = strtoull(source_date_epoch, &endptr, 10);
++ if ((errno == ERANGE && (epoch == ULLONG_MAX || epoch == 0))
++ || (errno != 0 && epoch == 0)) {
++ fprintf(stderr,
++ "Environment variable $SOURCE_DATE_EPOCH: strtoull: %s\n",
++ strerror(errno));
++ exit(EXIT_FAILURE);
++ }
++ if (endptr == source_date_epoch) {
++ fprintf(stderr,
++ "Environment variable $SOURCE_DATE_EPOCH: No digits were found: %s\n",
++ endptr);
++ exit(EXIT_FAILURE);
++ }
++ if (*endptr != '\0') {
++ fprintf(stderr,
++ "Environment variable $SOURCE_DATE_EPOCH: Trailing garbage: %s\n",
++ endptr);
++ exit(EXIT_FAILURE);
++ }
++ if (epoch > ULONG_MAX) {
++ fprintf(stderr,
++ "Environment variable $SOURCE_DATE_EPOCH: value must be smaller "
++ "than or equal to: %lu but was found to be: %llu \n",
++ ULONG_MAX, epoch);
++ exit(EXIT_FAILURE);
++ }
++ now = epoch;
++ } else {
++ now = time(NULL);
++ }
+
+- *high = (FT_ULong)(seconds_to_today >> 32);
+- *low = (FT_ULong)seconds_to_today;
++ seconds_to_build = seconds_to_1970 + (TA_ULongLong)now;
++
++ *high = (FT_ULong)(seconds_to_build >> 32);
++ *low = (FT_ULong)seconds_to_build;
+ }
+
+ /* end of tatime.c */