summaryrefslogtreecommitdiff
path: root/extra/racket/racket-libpng16.patch
blob: 8e4b605f2c23240ac0afe1f05d762022e5077ead (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
From 5629a6156a5720e51a277849f75b3135cb93664f Mon Sep 17 00:00:00 2001
From: Matthew Flatt <mflatt@racket-lang.org>
Date: Wed, 15 May 2013 20:28:05 -0600
Subject: [PATCH] support libpng16

---
 collects/racket/draw/unsafe/png.rkt | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/collects/racket/draw/unsafe/png.rkt b/collects/racket/draw/unsafe/png.rkt
index 596fcb4..a6b028d 100644
--- a/collects/racket/draw/unsafe/png.rkt
+++ b/collects/racket/draw/unsafe/png.rkt
@@ -10,11 +10,15 @@
   [(unix)
    ;; Most Linux distros supply "libpng12", while other Unix
    ;; variants often have just "libpng", etc.
-   (ffi-lib "libpng15" '("15" "")
-	    #:fail (lambda ()
-		     (ffi-lib "libpng12" '("0" "")
-			      #:fail (lambda ()
-				       (ffi-lib "libpng")))))]
+   (let loop ([alts '(("libpng16" ("16" ""))
+                      ("libpng15" ("15" ""))
+                      ("libpng12" ("0" ""))
+                      ("libpng"))])
+     (cond
+      [(null? alts) #f]
+      [else (apply ffi-lib (car alts)
+                   #:fail (lambda ()
+                            (loop (cdr alts))))]))]
   [(macosx) (ffi-lib "libpng15.15.dylib")]
   [(windows)
    (ffi-lib "zlib1.dll")
@@ -29,9 +33,12 @@
 ;;  assume that other versions are also ok
 (define PNG_LIBPNG_VER_STRING (string->bytes/latin-1
                                (let ([v (png_access_version_number)])
-                                 (format "~s.~s"
+                                 (format "~s.~s~a"
                                          (quotient v 10000)
-                                         (quotient (remainder v 10000) 100)))))
+                                         (quotient (remainder v 10000) 100)
+                                         (if (zero? (remainder v 100))
+                                             ""
+                                             (format ".~a" (remainder v 100)))))))
 
 (define _png_structp (_cpointer 'png_structp))
 (define _png_infop (_cpointer 'png_infop))
-- 
1.8.1.6