upgrade pre-built libraries for Windows and Mac OS X
Mostly upgrades the drawing stack to the latest Cairo, Pango, Glib, etc., but also upgrades the OpenSSL library on Windows to 1.0.1g. The new "racket/src/native-libs" directory provides scripts to rebuild the libraries from source. Those script are fragile, because library sources and configuration scripts are fragile. The scripts at least archive some expertise/advice in a mostly executable form.
This commit is contained in:
parent
fb34d4e76e
commit
23cf3ba11e
16
Makefile
16
Makefile
|
@ -45,17 +45,19 @@ cpus-in-place:
|
||||||
|
|
||||||
# Explicitly propagate variables for non-GNU `make's:
|
# Explicitly propagate variables for non-GNU `make's:
|
||||||
PKG_LINK_COPY_ARGS = PKGS="$(PKGS)" LINK_MODE="$(LINK_MODE)"
|
PKG_LINK_COPY_ARGS = PKGS="$(PKGS)" LINK_MODE="$(LINK_MODE)"
|
||||||
|
LIBSETUP = -N raco -l- raco setup
|
||||||
|
|
||||||
plain-in-place:
|
plain-in-place:
|
||||||
$(MAKE) base
|
$(MAKE) base
|
||||||
if $(MACOSX_CHECK) ; then $(MAKE) native-from-git ; fi
|
if $(MACOSX_CHECK) ; then $(MAKE) native-from-git ; fi
|
||||||
$(MAKE) pkg-links $(PKG_LINK_COPY_ARGS)
|
$(MAKE) pkg-links $(PKG_LINK_COPY_ARGS)
|
||||||
$(PLAIN_RACKET) -N raco -l- raco setup $(JOB_OPTIONS) $(PLT_SETUP_OPTIONS)
|
$(PLAIN_RACKET) $(LIBSETUP) $(JOB_OPTIONS) $(PLT_SETUP_OPTIONS)
|
||||||
|
|
||||||
win32-in-place:
|
win32-in-place:
|
||||||
$(MAKE) win32-base
|
$(MAKE) win32-base
|
||||||
$(MAKE) win32-pkg-links $(PKG_LINK_COPY_ARGS)
|
$(MAKE) win32-pkg-links $(PKG_LINK_COPY_ARGS)
|
||||||
$(WIN32_PLAIN_RACKET) -N raco -l- raco setup $(JOB_OPTIONS) $(PLT_SETUP_OPTIONS)
|
$(WIN32_PLAIN_RACKET) $(LIBSETUP) -nxiID $(JOB_OPTIONS) $(PLT_SETUP_OPTIONS) racket
|
||||||
|
$(WIN32_PLAIN_RACKET) $(LIBSETUP) $(JOB_OPTIONS) $(PLT_SETUP_OPTIONS)
|
||||||
|
|
||||||
again:
|
again:
|
||||||
$(MAKE) LINK_MODE="--restore"
|
$(MAKE) LINK_MODE="--restore"
|
||||||
|
@ -86,10 +88,19 @@ base:
|
||||||
cd racket/src/build; $(MAKE) install $(SELF_FLAGS_qq) PLT_SETUP_OPTIONS="$(JOB_OPTIONS) $(PLT_SETUP_OPTIONS)"
|
cd racket/src/build; $(MAKE) install $(SELF_FLAGS_qq) PLT_SETUP_OPTIONS="$(JOB_OPTIONS) $(PLT_SETUP_OPTIONS)"
|
||||||
|
|
||||||
win32-base:
|
win32-base:
|
||||||
|
$(MAKE) win32-remove-setup-dlls
|
||||||
IF NOT EXIST build\config cmd /c mkdir build\config
|
IF NOT EXIST build\config cmd /c mkdir build\config
|
||||||
cmd /c echo #hash((links-search-files . ())) > build\config\config.rktd
|
cmd /c echo #hash((links-search-files . ())) > build\config\config.rktd
|
||||||
cmd /c racket\src\worksp\build-at racket\src\worksp ..\..\..\build\config $(JOB_OPTIONS) $(PLT_SETUP_OPTIONS)
|
cmd /c racket\src\worksp\build-at racket\src\worksp ..\..\..\build\config $(JOB_OPTIONS) $(PLT_SETUP_OPTIONS)
|
||||||
|
|
||||||
|
# Start by removing DLLs that may be loaded by `raco setup`
|
||||||
|
win32-remove-setup-dlls:
|
||||||
|
IF EXIST racket\lib\longdouble.dll cmd /c del racket\lib\longdouble.dll
|
||||||
|
IF EXIST racket\lib\libiconv-2.dll cmd /c del racket\lib\libiconv-2.dll
|
||||||
|
IF EXIST racket\lib\iconv.dll cmd /c del racket\lib\iconv.dll
|
||||||
|
IF EXIST racket\lib\libeay32.dll cmd /c del racket\lib\libeay32.dll
|
||||||
|
IF EXIST racket\lib\ssleay32.dll cmd /c del racket\lib\ssleay32.dll
|
||||||
|
|
||||||
racket/src/build/Makefile: racket/src/configure racket/src/Makefile.in
|
racket/src/build/Makefile: racket/src/configure racket/src/Makefile.in
|
||||||
cd racket/src/build; ../configure $(CONFIGURE_ARGS_qq)
|
cd racket/src/build; ../configure $(CONFIGURE_ARGS_qq)
|
||||||
|
|
||||||
|
@ -420,7 +431,6 @@ client:
|
||||||
$(MAKE) installer-from-bundle $(COPY_ARGS)
|
$(MAKE) installer-from-bundle $(COPY_ARGS)
|
||||||
|
|
||||||
win32-client:
|
win32-client:
|
||||||
IF EXIST build\user cmd /c rmdir /S /Q build\user
|
|
||||||
$(MAKE) win32-base $(COPY_ARGS)
|
$(MAKE) win32-base $(COPY_ARGS)
|
||||||
$(MAKE) win32-distro-build-from-server $(COPY_ARGS)
|
$(MAKE) win32-distro-build-from-server $(COPY_ARGS)
|
||||||
$(MAKE) win32-bundle-from-server $(COPY_ARGS)
|
$(MAKE) win32-bundle-from-server $(COPY_ARGS)
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit b698e73c35c0a211cad85646da2b36d1184cec6b
|
Subproject commit 53cdd395b6ab011f85bcf8c8f45032656e727013
|
|
@ -4,11 +4,11 @@
|
||||||
|
|
||||||
(define deps
|
(define deps
|
||||||
'("base"
|
'("base"
|
||||||
("draw-i386-macosx" #:platform "i386-macosx")
|
("draw-i386-macosx-2" #:platform "i386-macosx")
|
||||||
("draw-x86_64-macosx" #:platform "x86_64-macosx")
|
("draw-x86_64-macosx-2" #:platform "x86_64-macosx")
|
||||||
("draw-ppc-macosx" #:platform "ppc-macosx")
|
("draw-ppc-macosx-2" #:platform "ppc-macosx")
|
||||||
("draw-win32-i386" #:platform "win32\\i386")
|
("draw-win32-i386-2" #:platform "win32\\i386")
|
||||||
("draw-win32-x86_64" #:platform "win32\\x86_64")))
|
("draw-win32-x86_64-2" #:platform "win32\\x86_64")))
|
||||||
|
|
||||||
(define pkg-desc "implementation (no documentation) part of \"draw\"")
|
(define pkg-desc "implementation (no documentation) part of \"draw\"")
|
||||||
|
|
||||||
|
|
|
@ -9,22 +9,16 @@
|
||||||
[(unix) (ffi-lib "libcairo" '("2" ""))]
|
[(unix) (ffi-lib "libcairo" '("2" ""))]
|
||||||
[(macosx)
|
[(macosx)
|
||||||
(ffi-lib "libpixman-1.0.dylib")
|
(ffi-lib "libpixman-1.0.dylib")
|
||||||
(ffi-lib "libpng15.15.dylib")
|
(ffi-lib "libpng16.16.dylib")
|
||||||
(ffi-lib "libcairo.2.dylib")]
|
(ffi-lib "libcairo.2.dylib")]
|
||||||
[(win32)
|
[(windows)
|
||||||
(ffi-lib "zlib1.dll")
|
|
||||||
(ffi-lib "libpng14-14.dll")
|
|
||||||
(ffi-lib "libexpat-1.dll")
|
|
||||||
(ffi-lib "freetype6.dll")
|
|
||||||
(ffi-lib "libfontconfig-1.dll")
|
|
||||||
(ffi-lib "libcairo-2.dll")]
|
|
||||||
[(win64)
|
|
||||||
(ffi-lib "zlib1.dll")
|
(ffi-lib "zlib1.dll")
|
||||||
(ffi-lib "libintl-8.dll")
|
(ffi-lib "libintl-8.dll")
|
||||||
(ffi-lib "libpng14-14.dll")
|
(ffi-lib "libpng16-16.dll")
|
||||||
(ffi-lib "libexpat-1.dll")
|
(ffi-lib "libexpat-1.dll")
|
||||||
(ffi-lib "libfreetype-6.dll")
|
(ffi-lib "libfreetype-6.dll")
|
||||||
(ffi-lib "libfontconfig-1.dll")
|
(ffi-lib "libfontconfig-1.dll")
|
||||||
|
(ffi-lib "libpixman-1-0.dll")
|
||||||
(ffi-lib "libcairo-2.dll")])
|
(ffi-lib "libcairo-2.dll")])
|
||||||
|
|
||||||
(provide (protect-out cairo-lib))
|
(provide (protect-out cairo-lib))
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
[(macosx)
|
[(macosx)
|
||||||
(ffi-lib "libintl.8.dylib")
|
(ffi-lib "libintl.8.dylib")
|
||||||
(ffi-lib "libglib-2.0.0.dylib")]
|
(ffi-lib "libglib-2.0.0.dylib")]
|
||||||
[(win32) (ffi-lib "libglib-2.0-0.dll")]
|
[(windows)
|
||||||
[(win64)
|
(ffi-lib "libiconv-2.dll")
|
||||||
(ffi-lib "libintl-8.dll")
|
(ffi-lib "libintl-8.dll")
|
||||||
(ffi-lib "libglib-2.0-0.dll")])
|
(ffi-lib "libglib-2.0-0.dll")])
|
||||||
|
|
||||||
|
@ -23,18 +23,18 @@
|
||||||
[(macosx)
|
[(macosx)
|
||||||
(ffi-lib "libgthread-2.0.0.dylib")
|
(ffi-lib "libgthread-2.0.0.dylib")
|
||||||
(ffi-lib "libgmodule-2.0.0.dylib")]
|
(ffi-lib "libgmodule-2.0.0.dylib")]
|
||||||
[(win32)
|
[(windows)
|
||||||
(ffi-lib "libgmodule-2.0-0.dll")]
|
|
||||||
[(win64)
|
|
||||||
(ffi-lib "libgthread-2.0-0.dll")
|
(ffi-lib "libgthread-2.0-0.dll")
|
||||||
(ffi-lib "libgmodule-2.0-0.dll")])
|
(ffi-lib "libgmodule-2.0-0.dll")])
|
||||||
|
|
||||||
(define-runtime-lib gobj-lib
|
(define-runtime-lib gobj-lib
|
||||||
[(unix) (ffi-lib "libgobject-2.0" '("0" ""))]
|
[(unix) (ffi-lib "libgobject-2.0" '("0" ""))]
|
||||||
[(macosx)
|
[(macosx)
|
||||||
(ffi-lib "libffi.5.dylib")
|
(ffi-lib "libffi.6.dylib")
|
||||||
(ffi-lib "libgobject-2.0.0.dylib")]
|
(ffi-lib "libgobject-2.0.0.dylib")]
|
||||||
[(windows) (ffi-lib "libgobject-2.0-0.dll")])
|
[(windows)
|
||||||
|
(ffi-lib "libffi-6.dll")
|
||||||
|
(ffi-lib "libgobject-2.0-0.dll")])
|
||||||
|
|
||||||
(define-ffi-definer define-glib glib-lib)
|
(define-ffi-definer define-glib glib-lib)
|
||||||
(define-ffi-definer define-gmodule gmodule-lib)
|
(define-ffi-definer define-gmodule gmodule-lib)
|
||||||
|
|
|
@ -8,11 +8,8 @@
|
||||||
|
|
||||||
(define-runtime-lib jpeg-lib
|
(define-runtime-lib jpeg-lib
|
||||||
[(unix) (ffi-lib "libjpeg" '("62" "8" "9" ""))]
|
[(unix) (ffi-lib "libjpeg" '("62" "8" "9" ""))]
|
||||||
[(macosx)
|
[(macosx) (ffi-lib "libjpeg.9.dylib")]
|
||||||
;; for PPC, it's actually version 8!
|
[(windows) (ffi-lib "libjpeg-9.dll")])
|
||||||
(ffi-lib "libjpeg.62.dylib")]
|
|
||||||
[(win32) (ffi-lib "libjpeg-7.dll")]
|
|
||||||
[(win64) (ffi-lib "libjpeg-8.dll")])
|
|
||||||
|
|
||||||
(define-ffi-definer define-jpeg jpeg-lib
|
(define-ffi-definer define-jpeg jpeg-lib
|
||||||
#:provide provide)
|
#:provide provide)
|
||||||
|
@ -26,10 +23,8 @@
|
||||||
(define _J_DITHER_MODE _int)
|
(define _J_DITHER_MODE _int)
|
||||||
(define _J_COLOR_TRANSFORM _int)
|
(define _J_COLOR_TRANSFORM _int)
|
||||||
|
|
||||||
(define _jbool (if win64?
|
(define _jbool (if (eq? (system-type) 'windows)
|
||||||
(make-ctype _byte
|
_stdbool
|
||||||
(lambda (v) (if v 1 0))
|
|
||||||
(lambda (v) (not (zero? v))))
|
|
||||||
_bool))
|
_bool))
|
||||||
(define-enum
|
(define-enum
|
||||||
0
|
0
|
||||||
|
|
|
@ -22,19 +22,13 @@
|
||||||
[(unix) (ffi-lib "libpangocairo-1.0" '("0" ""))]
|
[(unix) (ffi-lib "libpangocairo-1.0" '("0" ""))]
|
||||||
[(macosx)
|
[(macosx)
|
||||||
(ffi-lib "libpangocairo-1.0.0.dylib")]
|
(ffi-lib "libpangocairo-1.0.0.dylib")]
|
||||||
[(win32)
|
[(windows)
|
||||||
(ffi-lib "libpangowin32-1.0-0.dll")
|
|
||||||
(ffi-lib "libexpat-1.dll")
|
|
||||||
(ffi-lib "freetype6.dll")
|
|
||||||
(ffi-lib "libfontconfig-1.dll")
|
|
||||||
(ffi-lib "libpangoft2-1.0-0.dll")
|
|
||||||
(ffi-lib "libpangocairo-1.0-0.dll")]
|
|
||||||
[(win64)
|
|
||||||
(ffi-lib "libintl-8.dll")
|
(ffi-lib "libintl-8.dll")
|
||||||
(ffi-lib "libpangowin32-1.0-0.dll")
|
(ffi-lib "libpangowin32-1.0-0.dll")
|
||||||
(ffi-lib "libexpat-1.dll")
|
(ffi-lib "libexpat-1.dll")
|
||||||
(ffi-lib "libfreetype-6.dll")
|
(ffi-lib "libfreetype-6.dll")
|
||||||
(ffi-lib "libfontconfig-1.dll")
|
(ffi-lib "libfontconfig-1.dll")
|
||||||
|
(ffi-lib "libharfbuzz-0.dll")
|
||||||
(ffi-lib "libpangoft2-1.0-0.dll")
|
(ffi-lib "libpangoft2-1.0-0.dll")
|
||||||
(ffi-lib "libpangocairo-1.0-0.dll")])
|
(ffi-lib "libpangocairo-1.0-0.dll")])
|
||||||
|
|
||||||
|
|
|
@ -18,10 +18,10 @@
|
||||||
[else (apply ffi-lib (car alts)
|
[else (apply ffi-lib (car alts)
|
||||||
#:fail (lambda ()
|
#:fail (lambda ()
|
||||||
(loop (cdr alts))))]))]
|
(loop (cdr alts))))]))]
|
||||||
[(macosx) (ffi-lib "libpng15.15.dylib")]
|
[(macosx) (ffi-lib "libpng16.16.dylib")]
|
||||||
[(windows)
|
[(windows)
|
||||||
(ffi-lib "zlib1.dll")
|
(ffi-lib "zlib1.dll")
|
||||||
(ffi-lib "libpng14-14.dll")])
|
(ffi-lib "libpng16-16.dll")])
|
||||||
|
|
||||||
(define-ffi-definer define-png png-lib
|
(define-ffi-definer define-png png-lib
|
||||||
#:provide provide)
|
#:provide provide)
|
||||||
|
|
|
@ -204,6 +204,13 @@
|
||||||
(cairo_matrix_t-y0 m)))
|
(cairo_matrix_t-y0 m)))
|
||||||
(cairo_surface_flush s)
|
(cairo_surface_flush s)
|
||||||
(define cg (cairo_quartz_surface_get_cg_context s))
|
(define cg (cairo_quartz_surface_get_cg_context s))
|
||||||
|
(begin
|
||||||
|
;; A Cairo flush doesn't reset the clipping region. The
|
||||||
|
;; implementation of clipping is that there's a saved
|
||||||
|
;; GState that we can use to get back to the original
|
||||||
|
;; clipping region, so restore (and save again) that state:
|
||||||
|
(CGContextRestoreGState cg)
|
||||||
|
(CGContextSaveGState cg))
|
||||||
(CGContextSaveGState cg)
|
(CGContextSaveGState cg)
|
||||||
(CGContextConcatCTM cg trans)
|
(CGContextConcatCTM cg trans)
|
||||||
(let ([n (cairo_rectangle_list_t-num_rectangles rs)])
|
(let ([n (cairo_rectangle_list_t-num_rectangles rs)])
|
||||||
|
|
|
@ -262,6 +262,7 @@
|
||||||
(define c-xscale 1)
|
(define c-xscale 1)
|
||||||
(define c-yscale 1)
|
(define c-yscale 1)
|
||||||
(define c-offset 0)
|
(define c-offset 0)
|
||||||
|
(define c-rotate 0)
|
||||||
(define c-gray? #f)
|
(define c-gray? #f)
|
||||||
(public*
|
(public*
|
||||||
[set-bitmaps (lambda (on?) (set! no-bitmaps? (not on?)) (refresh))]
|
[set-bitmaps (lambda (on?) (set! no-bitmaps? (not on?)) (refresh))]
|
||||||
|
@ -275,6 +276,7 @@
|
||||||
[set-scale (lambda (xs ys) (set! xscale xs) (set! yscale ys) (refresh))]
|
[set-scale (lambda (xs ys) (set! xscale xs) (set! yscale ys) (refresh))]
|
||||||
[set-offset (lambda (o) (set! offset o) (refresh))]
|
[set-offset (lambda (o) (set! offset o) (refresh))]
|
||||||
[set-canvas-offset (lambda (o) (set! c-offset o) (refresh))]
|
[set-canvas-offset (lambda (o) (set! c-offset o) (refresh))]
|
||||||
|
[set-canvas-rotation (lambda (r) (set! c-rotate r) (refresh))]
|
||||||
[set-canvas-gray (lambda (g?) (set! c-gray? g?) (refresh))])
|
[set-canvas-gray (lambda (g?) (set! c-gray? g?) (refresh))])
|
||||||
(override*
|
(override*
|
||||||
[on-paint
|
[on-paint
|
||||||
|
@ -1042,6 +1044,7 @@
|
||||||
(send can-dc set-brush b)
|
(send can-dc set-brush b)
|
||||||
(send can-dc set-pen p)))
|
(send can-dc set-pen p)))
|
||||||
(send can-dc set-origin c-offset c-offset)
|
(send can-dc set-origin c-offset c-offset)
|
||||||
|
(send can-dc set-rotation c-rotate)
|
||||||
(send can-dc set-scale c-xscale c-yscale)
|
(send can-dc set-scale c-xscale c-yscale)
|
||||||
(send can-dc set-alpha current-c-alpha)
|
(send can-dc set-alpha current-c-alpha)
|
||||||
(when c-clip
|
(when c-clip
|
||||||
|
@ -1415,6 +1418,9 @@
|
||||||
(make-object check-box% "Cvs +10" hp3
|
(make-object check-box% "Cvs +10" hp3
|
||||||
(lambda (self event)
|
(lambda (self event)
|
||||||
(send canvas set-canvas-offset (if (send self get-value) 10 0))))
|
(send canvas set-canvas-offset (if (send self get-value) 10 0))))
|
||||||
|
(make-object check-box% "Cvs rot" hp3
|
||||||
|
(lambda (self event)
|
||||||
|
(send canvas set-canvas-rotation (if (send self get-value) (* pi -1/5) 0))))
|
||||||
(make-object choice% "Cvs Clip" '("None" "Empty" "Square" "Squares" "Octagon") hp3
|
(make-object choice% "Cvs Clip" '("None" "Empty" "Square" "Squares" "Octagon") hp3
|
||||||
(lambda (self event)
|
(lambda (self event)
|
||||||
(send canvas set-canvas-clip (case (send self get-selection)
|
(send canvas set-canvas-clip (case (send self get-selection)
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
(define collection 'multi)
|
(define collection 'multi)
|
||||||
|
|
||||||
(define deps
|
(define deps
|
||||||
'(("racket-win32-i386" #:platform "win32\\i386")
|
'(("racket-win32-i386-2" #:platform "win32\\i386")
|
||||||
("racket-win32-x86_64" #:platform "win32\\x86_64")
|
("racket-win32-x86_64-2" #:platform "win32\\x86_64")
|
||||||
("db-ppc-macosx" #:platform "ppc-macosx")
|
("db-ppc-macosx" #:platform "ppc-macosx")
|
||||||
("db-win32-i386" #:platform "win32\\i386")
|
("db-win32-i386" #:platform "win32\\i386")
|
||||||
("db-win32-x86_64" #:platform "win32\\x86_64")
|
("db-win32-x86_64" #:platform "win32\\x86_64")
|
||||||
|
|
|
@ -149,9 +149,7 @@
|
||||||
(format template filename-version-part)
|
(format template filename-version-part)
|
||||||
(format template "xxxxxxx"))))])
|
(format template "xxxxxxx"))))])
|
||||||
(map copy-dll (list
|
(map copy-dll (list
|
||||||
(if (equal? "win32\\x86_64" (path->string (system-library-subpath #f)))
|
"libiconv-2.dll"
|
||||||
"libiconv-2.dll"
|
|
||||||
"iconv.dll")
|
|
||||||
"longdouble.dll"))
|
"longdouble.dll"))
|
||||||
(when (or (memq 'racketcgc types)
|
(when (or (memq 'racketcgc types)
|
||||||
(memq 'gracketcgc types))
|
(memq 'gracketcgc types))
|
||||||
|
|
23
racket/src/configure
vendored
23
racket/src/configure
vendored
|
@ -1447,6 +1447,7 @@ Optional Features:
|
||||||
--enable-libs install Racket static libraries, if any
|
--enable-libs install Racket static libraries, if any
|
||||||
--enable-libffi use installed libffi (enabled by default for Unix)
|
--enable-libffi use installed libffi (enabled by default for Unix)
|
||||||
--enable-sdk=<path> use Mac OS X 10.4 SDK directory
|
--enable-sdk=<path> use Mac OS X 10.4 SDK directory
|
||||||
|
--enable-sdk5=<path> use Mac OS X 10.5 SDK directory
|
||||||
--enable-sdk6=<path> use Mac OS X 10.6 SDK directory
|
--enable-sdk6=<path> use Mac OS X 10.6 SDK directory
|
||||||
--enable-xonx use Unix style (e.g., use Gtk) for Mac OS X
|
--enable-xonx use Unix style (e.g., use Gtk) for Mac OS X
|
||||||
--enable-libfw install Mac OS X frameworks to /Library/Frameworks
|
--enable-libfw install Mac OS X frameworks to /Library/Frameworks
|
||||||
|
@ -2690,6 +2691,11 @@ if test "${enable_sdk+set}" = set; then :
|
||||||
enableval=$enable_sdk;
|
enableval=$enable_sdk;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check whether --enable-sdk was given.
|
||||||
|
if test "${enable_sdk+set}" = set; then :
|
||||||
|
enableval=$enable_sdk;
|
||||||
|
fi
|
||||||
|
|
||||||
# Check whether --enable-xonx was given.
|
# Check whether --enable-xonx was given.
|
||||||
if test "${enable_xonx+set}" = set; then :
|
if test "${enable_xonx+set}" = set; then :
|
||||||
enableval=$enable_xonx;
|
enableval=$enable_xonx;
|
||||||
|
@ -3023,11 +3029,20 @@ show_explicitly_enabled "${enable_libfw}" "Frameworks-to-system"
|
||||||
show_explicitly_enabled "${enable_userfw}" "Frameworks-to-user"
|
show_explicitly_enabled "${enable_userfw}" "Frameworks-to-user"
|
||||||
|
|
||||||
if test "${enable_sdk}" != "" ; then
|
if test "${enable_sdk}" != "" ; then
|
||||||
|
if test "${enable_sdk5}" != "" ; then
|
||||||
|
echo "ERROR: cannot specify both --enable-sdk and --enable-sdk5"
|
||||||
|
fi
|
||||||
if test "${enable_sdk6}" != "" ; then
|
if test "${enable_sdk6}" != "" ; then
|
||||||
echo "ERROR: cannot specify both --enable-sdk and --enable-sdk6"
|
echo "ERROR: cannot specify both --enable-sdk and --enable-sdk6"
|
||||||
fi
|
fi
|
||||||
echo "=== Using Mac OS X 10.4 SDK directory ${enable_sdk}"
|
echo "=== Using Mac OS X 10.4 SDK directory ${enable_sdk}"
|
||||||
fi
|
fi
|
||||||
|
if test "${enable_sdk5}" != "" ; then
|
||||||
|
if test "${enable_sdk6}" != "" ; then
|
||||||
|
echo "ERROR: cannot specify both --enable-sdk5 and --enable-sdk6"
|
||||||
|
fi
|
||||||
|
echo "=== Using Mac OS X 10.5 SDK directory ${enable_sdk}"
|
||||||
|
fi
|
||||||
if test "${enable_sdk6}" != "" ; then
|
if test "${enable_sdk6}" != "" ; then
|
||||||
echo "=== Using Mac OS X 10.6 SDK directory ${enable_sdk6}"
|
echo "=== Using Mac OS X 10.6 SDK directory ${enable_sdk6}"
|
||||||
fi
|
fi
|
||||||
|
@ -4577,6 +4592,14 @@ $as_echo "#define HAVE_STDINT_H 1" >>confdefs.h
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "${enable_sdk5}" != "" ; then
|
||||||
|
PREFLAGS="$PREFLAGS -isysroot ${enable_sdk5} -mmacosx-version-min=10.5"
|
||||||
|
LDFLAGS="$LDFLAGS -isysroot ${enable_sdk5} -mmacosx-version-min=10.5"
|
||||||
|
SUB_CONFIGURE_EXTRAS="${SUB_CONFIGURE_EXTRAS} CFLAGS="'"'"${CFLAGS}"'"'
|
||||||
|
SUB_CONFIGURE_EXTRAS="${SUB_CONFIGURE_EXTRAS} CPPFLAGS="'"'"${PREFLAGS}"'"'
|
||||||
|
SUB_CONFIGURE_EXTRAS="${SUB_CONFIGURE_EXTRAS} LDFLAGS="'"'"${LDFLAGS}"'"'
|
||||||
|
fi
|
||||||
|
|
||||||
if test "${enable_sdk6}" != "" ; then
|
if test "${enable_sdk6}" != "" ; then
|
||||||
PREFLAGS="$PREFLAGS -isysroot ${enable_sdk6} -mmacosx-version-min=10.6"
|
PREFLAGS="$PREFLAGS -isysroot ${enable_sdk6} -mmacosx-version-min=10.6"
|
||||||
LDFLAGS="$LDFLAGS -isysroot ${enable_sdk6} -mmacosx-version-min=10.6"
|
LDFLAGS="$LDFLAGS -isysroot ${enable_sdk6} -mmacosx-version-min=10.6"
|
||||||
|
|
|
@ -1,148 +1,39 @@
|
||||||
Information on building 3rd-party libraries needed for Mac OS X GRacket.
|
See "../native-libs/README.txt" for information about building most
|
||||||
|
3rd-party native libraries that are needed for Racket libraries
|
||||||
|
|
||||||
Get these packages (or newer, if compatible):
|
|
||||||
pkg-config-0.25.tar.gz [PowerPC: pkg-config-0.23.tar.gz]
|
|
||||||
libpng-1.5.7.tar.gz
|
|
||||||
pixman-0.24.2.tar.gz [PowerPC: pixman-0.21.6.tar.gz]
|
|
||||||
cairo-1.10.2.tar.gz
|
|
||||||
gettext-0.18.1.1.tar.gz [PowerPC: gettext-0.17.tar.gz]
|
|
||||||
libffi-3.0.10.tar.gz [PowerPC: skip]
|
|
||||||
glib-2.31.14.tar.gz [PowerPC: glib-2.22.4.tar.gz]
|
|
||||||
pango-1.29.5.tar.gz [PowerPC: pango-1.28.0.tar.gz]
|
|
||||||
gmp-5.0.5.tar.gz
|
|
||||||
mpfr-3.1.1.tar.gz
|
|
||||||
libjpeg62 (maybe in binary form)
|
|
||||||
|
|
||||||
PSMTabBarControl, probably from
|
In addition, the `racket/gui' library uses PSMTabBarControl on Mac OS X.
|
||||||
https://github.com/dorianj/PSMTabBarControl
|
|
||||||
[PowerPC: maccode.googlecode.com]
|
|
||||||
and handled differently; note that the version
|
|
||||||
at from maccode has a bug on dealloc() and
|
|
||||||
uses methods that are now deprecated
|
|
||||||
|
|
||||||
|
Download:
|
||||||
|
|
||||||
|
https://github.com/dorianj/PSMTabBarControl
|
||||||
|
or
|
||||||
|
maccode.googlecode.com [PowerPC]
|
||||||
|
|
||||||
|
Note that the version at from maccode has a bug on dealloc() and uses
|
||||||
|
methods that are now deprecated.
|
||||||
|
|
||||||
Patches:
|
Patches:
|
||||||
cairo/src/cairo-path-fixed.c:1295: [from Cairo repo, 3/18/11]
|
|
||||||
/* This check is valid because the current implementation of
|
|
||||||
* _cairo_path_fixed_is_box () only accepts rectangles like:
|
|
||||||
* move,line,line,line[,line|close[,close|move]]. */
|
|
||||||
buf = cairo_path_head (path);
|
|
||||||
if (buf->num_ops > 4)
|
|
||||||
return TRUE;
|
|
||||||
glib/glib/gconvert.c:61: comment out #error near
|
|
||||||
#if defined(USE_LIBICONV_GNU) && !defined (_LIBICONV_H)
|
|
||||||
pango/pango/modules.c:573: change to
|
|
||||||
// read_modules ();
|
|
||||||
pango/modules/basic/basic-atsui.c,
|
|
||||||
pango/pangocairo-atsuifont.c,
|
|
||||||
pango/pangoatsui.h,
|
|
||||||
pango/pangoatsui.c:
|
|
||||||
apply "atsui.patch" (32-bit only)
|
|
||||||
pango/modules/basic/basic-coretext.c,
|
|
||||||
pango/pangocairo-coretextfont.c:
|
|
||||||
apply "coretext.patch" (64-bit only)
|
|
||||||
gettext/gettext-tools/gnulib-lib/stpncpy.c:28: may need to comment out
|
|
||||||
// # define __stpncpy stpncpy
|
|
||||||
PowerPC: PSMTabBarControl/PSMTabBarControl.m:216: change to
|
PowerPC: PSMTabBarControl/PSMTabBarControl.m:216: change to
|
||||||
|
|
||||||
// copy _cells because removing a cell
|
// copy _cells because removing a cell
|
||||||
// can modify the array (which is not allowed)
|
// can modify the array (which is not allowed)
|
||||||
NSArray *copyOfCells = [NSArray arrayWithArray: _cells];
|
NSArray *copyOfCells = [NSArray arrayWithArray: _cells];
|
||||||
NSEnumerator *enumerator = [copyOfCells objectEnumerator];
|
NSEnumerator *enumerator = [copyOfCells objectEnumerator];
|
||||||
gcc-4.0: gmp/gmp.h:424: __gnu_inline__ => __weak__
|
|
||||||
|
|
||||||
Configures (where <dest> is some temporary area):
|
In XCode:
|
||||||
pkg-config: --prefix=<dest>
|
|
||||||
libpng: --prefix=<dest>
|
|
||||||
pixman: --prefix=<dest>
|
|
||||||
Cairo: PATH=<dest>/bin:... --disable-xlib --disable-ft --disable-fc --prefix=<dest>
|
|
||||||
gettext: --prefix=<dest>
|
|
||||||
libffi: --prefix=<dest>
|
|
||||||
glib: PATH=<dest>/bin:... CFLAGS=-I<dest>/include LDFLAGS=-L<dest>/lib --prefix=<dest>
|
|
||||||
[PowerPC: after configure, set "allow_undefined_flag" to "" in "libtool";
|
|
||||||
add "-lresolv" to link command for "libgio"]
|
|
||||||
Pango: PATH=<dest>/bin:... --without-x --with-included-modules=yes --with-dynamic-modules=no --prefix=<dest>
|
|
||||||
[PowerPC: same as glib for "libtool"; use PATH for `make', too]
|
|
||||||
gmp: --prefix=<dest>
|
|
||||||
mpfr: CFLAGS=-I<dest>/include LDFLAGS=-L<dest>/lib --prefix=<dest>
|
|
||||||
|
|
||||||
To support 10.4, add
|
|
||||||
CC=gcc-4.0
|
|
||||||
CPPFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4"
|
|
||||||
LDFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4"
|
|
||||||
for all packages.
|
|
||||||
|
|
||||||
Note: PATH above ensures that pkg-config binaries are used to find
|
|
||||||
things in <dest> rather than some other area, such as /opt/local.
|
|
||||||
|
|
||||||
Be sure to use two-level namespaces for all libraries. While
|
|
||||||
two-level namespaces are the default on Mac OS X, some packages turn
|
|
||||||
on flat namespaces, at least on PowerPC. Use `otol -vh' and look for
|
|
||||||
"TWOLEVEL" in the output to check that a library uses two-level
|
|
||||||
namespaces.
|
|
||||||
|
|
||||||
XCode:
|
|
||||||
Build PSMTabBarControl. You only need the Framework target, and
|
Build PSMTabBarControl. You only need the Framework target, and
|
||||||
in Release mode (which is "Build for Archiving" in Xcode 4.5).
|
in Release mode (which is "Build for Archiving" in Xcode 4.5).
|
||||||
Use `ditto' to reduce the framework to one architecture.
|
Use `ditto' to reduce the framework to one architecture.
|
||||||
Add back the "LICENSE.txt" file.
|
Add back the "LICENSE.txt" file.
|
||||||
|
|
||||||
Install:
|
Install:
|
||||||
racket install-libs.rkt <dest>/lib
|
|
||||||
* using `racket' for the target installation
|
|
||||||
* do not include a trailing slash
|
|
||||||
* double-check installed libraries to ensure that they do not
|
|
||||||
have <dest> in their shared-library paths
|
|
||||||
|
|
||||||
Also copy "PSMTabBarControl.framework" into the installation's "lib"
|
Copy "PSMTabBarControl.framework" into the installation's "lib"
|
||||||
directory. You can flatten all the auto-version soft links (moving
|
directory or a suitable package-source directory. You can flatten
|
||||||
"PSMTabBarControl" and "Resources" to immediately inside
|
all the auto-version soft links (moving "PSMTabBarControl" and
|
||||||
"PSMTabBarControl), and you can use `ditto' to prune the binary to
|
"Resources" to immediately inside "PSMTabBarControl), and you can
|
||||||
just the platform that you're using.
|
use `ditto' to prune the binary to just the platform that you're
|
||||||
|
using.
|
||||||
--------------------------------------------------
|
|
||||||
# This script isn't right, because the versions are out of date
|
|
||||||
# and libffi isn't included, but maybe it clarifies some of
|
|
||||||
# the instructions above
|
|
||||||
|
|
||||||
DESTDIR=
|
|
||||||
WORKDIR=
|
|
||||||
ARCHDIR=
|
|
||||||
|
|
||||||
cd "$WORKDIR"
|
|
||||||
tar zxf "$ARCHDIR"pkg-config-0.23.tar.gz
|
|
||||||
tar zxf "$ARCHDIR"libpng-1.4.0.tar.gz
|
|
||||||
tar zxf "$ARCHDIR"pixman-0.21.6.tar.gz
|
|
||||||
tar zxf "$ARCHDIR"cairo-1.10.2.tar.gz
|
|
||||||
tar zxf "$ARCHDIR"gettext-0.17.tar.gz
|
|
||||||
tar zxf "$ARCHDIR"glib-2.22.4.tar.gz
|
|
||||||
tar zxf "$ARCHDIR"pango-1.28.0.tar.gz
|
|
||||||
cd pkg-config-0.23/
|
|
||||||
./configure --prefix="$DESTDIR"
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
cd ../libpng-1.4.0/
|
|
||||||
./configure --prefix="$DESTDIR"
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
cd ..
|
|
||||||
cd pixman-0.21.6/
|
|
||||||
./configure --prefix="$DESTDIR"
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
cd ../cairo-1.10.2/
|
|
||||||
env PATH="$DESTDIR"/bin:"$PATH" ./configure --disable-xlib --disable-ft --disable-fc --prefix="$DESTDIR"
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
cd ../gettext-0.17/
|
|
||||||
./configure --prefix="$DESTDIR"
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
cd ../glib
|
|
||||||
cd ../glib-2.22.4/
|
|
||||||
env PATH="$DESTDIR"/bin:"$PATH" CFLAGS=-I"$DESTDIR"/include LDFLAGS=-L"$DESTDIR"/lib ./configure --prefix="$DESTDIR"
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
cd ../pango-1.28.0/
|
|
||||||
env PATH="$DESTDIR"/bin:"$PATH" ./configure --without-x --with-included-modules=yes --with-dynamic-modules=no --prefix="$DESTDIR"
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|
|
@ -1,129 +0,0 @@
|
||||||
diff -r -u pango-1.29.5-orig/modules/basic/basic-atsui.c pango-1.29.5/modules/basic/basic-atsui.c
|
|
||||||
--- pango-1.29.5-orig/modules/basic/basic-atsui.c 2011-08-15 19:11:08.000000000 -0600
|
|
||||||
+++ pango-1.29.5/modules/basic/basic-atsui.c 2012-05-17 15:06:09.000000000 -0600
|
|
||||||
@@ -53,10 +53,13 @@
|
|
||||||
PangoGlyphString *glyphs,
|
|
||||||
int i,
|
|
||||||
int offset,
|
|
||||||
- PangoGlyph glyph)
|
|
||||||
+ PangoGlyph glyph,
|
|
||||||
+ ATSUTextLayout text_layout)
|
|
||||||
{
|
|
||||||
PangoRectangle logical_rect;
|
|
||||||
|
|
||||||
+ if (!glyph) { glyph = PANGO_GET_UNKNOWN_GLYPH(glyph); }
|
|
||||||
+
|
|
||||||
glyphs->glyphs[i].glyph = G_UNLIKELY (glyph == kATSDeletedGlyphcode) ?
|
|
||||||
PANGO_GLYPH_EMPTY : glyph;
|
|
||||||
|
|
||||||
@@ -64,9 +67,30 @@
|
|
||||||
glyphs->glyphs[i].geometry.y_offset = 0;
|
|
||||||
|
|
||||||
glyphs->log_clusters[i] = offset;
|
|
||||||
- pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, NULL, &logical_rect);
|
|
||||||
- glyphs->glyphs[i].geometry.width = logical_rect.width;
|
|
||||||
-}
|
|
||||||
+ if (text_layout) {
|
|
||||||
+ ATSTrapezoid bounds;
|
|
||||||
+ ItemCount actual;
|
|
||||||
+ double w;
|
|
||||||
+
|
|
||||||
+ ATSUGetGlyphBounds(text_layout,
|
|
||||||
+ 0, 0,
|
|
||||||
+ i,
|
|
||||||
+ 1,
|
|
||||||
+ kATSUseFractionalOrigins,
|
|
||||||
+ 1,
|
|
||||||
+ &bounds,
|
|
||||||
+ &actual);
|
|
||||||
+ w = (Fix2X(bounds.upperRight.x) - Fix2X(bounds.upperLeft.x));
|
|
||||||
+ glyphs->glyphs[i].geometry.width = w * PANGO_SCALE;
|
|
||||||
+ } else {
|
|
||||||
+ pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, NULL, &logical_rect);
|
|
||||||
+ glyphs->glyphs[i].geometry.width = logical_rect.width;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#ifndef DoubleToFixed
|
|
||||||
+# define DoubleToFixed(a) ((Fixed)((double) (a) * fixed1))
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
static void
|
|
||||||
basic_engine_shape (PangoEngineShape *engine,
|
|
||||||
@@ -87,9 +111,10 @@
|
|
||||||
PangoATSUIFont *afont = PANGO_ATSUI_FONT (font);
|
|
||||||
ATSUStyle style;
|
|
||||||
ATSUFontID fontID;
|
|
||||||
- ATSUAttributeTag styleTags[] = { kATSUFontTag };
|
|
||||||
- ATSUAttributeValuePtr styleValues[] = { &fontID };
|
|
||||||
- ByteCount styleSizes[] = { sizeof (ATSUFontID) };
|
|
||||||
+ Fixed fontSize;
|
|
||||||
+ ATSUAttributeTag styleTags[] = { kATSUFontTag, kATSUSizeTag };
|
|
||||||
+ ATSUAttributeValuePtr styleValues[] = { &fontID, &fontSize };
|
|
||||||
+ ByteCount styleSizes[] = { sizeof (ATSUFontID), sizeof(Fixed) };
|
|
||||||
|
|
||||||
utf16 = g_utf8_to_utf16 (text, length, NULL, &n16, NULL);
|
|
||||||
|
|
||||||
@@ -101,6 +126,7 @@
|
|
||||||
|
|
||||||
err = ATSUCreateStyle(&style);
|
|
||||||
fontID = pango_atsui_font_get_atsfont (afont);
|
|
||||||
+ fontSize = DoubleToFixed((double)pango_atsui_font_get_size(afont) / PANGO_SCALE);
|
|
||||||
|
|
||||||
err = ATSUSetAttributes(style,
|
|
||||||
(ItemCount)(sizeof(styleTags) / sizeof(styleTags[0])),
|
|
||||||
@@ -133,11 +159,11 @@
|
|
||||||
|
|
||||||
if (pango_is_zero_width (wc))
|
|
||||||
{
|
|
||||||
- set_glyph (font, glyphs, i, p - text, PANGO_GLYPH_EMPTY);
|
|
||||||
+ set_glyph (font, glyphs, i, p - text, PANGO_GLYPH_EMPTY, NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
- set_glyph (font, glyphs, i, p - text, layout_records[i].glyphID);
|
|
||||||
+ set_glyph (font, glyphs, i, p - text, layout_records[i].glyphID, text_layout);
|
|
||||||
|
|
||||||
if (g_unichar_type (wc) == G_UNICODE_NON_SPACING_MARK)
|
|
||||||
{
|
|
||||||
diff -r -u pango-1.29.5-orig/pango/pangoatsui.c pango-1.29.5/pango/pangoatsui.c
|
|
||||||
--- pango-1.29.5-orig/pango/pangoatsui.c 2011-08-15 19:11:08.000000000 -0600
|
|
||||||
+++ pango-1.29.5/pango/pangoatsui.c 2012-05-17 15:06:23.000000000 -0600
|
|
||||||
@@ -229,3 +229,10 @@
|
|
||||||
|
|
||||||
return priv->font_ref;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+int pango_atsui_font_get_size (PangoATSUIFont *font)
|
|
||||||
+{
|
|
||||||
+ PangoATSUIFontPrivate *priv = font->priv;
|
|
||||||
+
|
|
||||||
+ return pango_font_description_get_size(priv->desc);
|
|
||||||
+}
|
|
||||||
diff -r -u pango-1.29.5-orig/pango/pangoatsui.h pango-1.29.5/pango/pangoatsui.h
|
|
||||||
--- pango-1.29.5-orig/pango/pangoatsui.h 2011-08-15 19:11:08.000000000 -0600
|
|
||||||
+++ pango-1.29.5/pango/pangoatsui.h 2012-05-17 15:06:27.000000000 -0600
|
|
||||||
@@ -71,6 +71,8 @@
|
|
||||||
CGFontRef pango_atsui_font_get_cgfont (PangoATSUIFont *font);
|
|
||||||
ATSFontRef pango_atsui_font_get_atsfont (PangoATSUIFont *font);
|
|
||||||
|
|
||||||
+int pango_atsui_font_get_size (PangoATSUIFont *font);
|
|
||||||
+
|
|
||||||
#endif /* PANGO_ENABLE_ENGINE || PANGO_ENABLE_BACKEND */
|
|
||||||
|
|
||||||
GType pango_atsui_font_get_type (void) G_GNUC_CONST;
|
|
||||||
diff -r -u pango-1.29.5-orig/pango/pangocairo-atsuifont.c pango-1.29.5/pango/pangocairo-atsuifont.c
|
|
||||||
--- pango-1.29.5-orig/pango/pangocairo-atsuifont.c 2011-08-15 19:11:08.000000000 -0600
|
|
||||||
+++ pango-1.29.5/pango/pangocairo-atsuifont.c 2012-02-13 09:33:45.000000000 -0700
|
|
||||||
@@ -136,6 +136,12 @@
|
|
||||||
metrics->strikethrough_position = metrics->ascent / 3;
|
|
||||||
metrics->strikethrough_thickness = ats_metrics.underlineThickness * cafont->size * PANGO_SCALE;
|
|
||||||
|
|
||||||
+ metrics->underline_position = -metrics->underline_position;
|
|
||||||
+ pango_quantize_line_geometry (&metrics->underline_thickness,
|
|
||||||
+ &metrics->underline_position);
|
|
||||||
+ metrics->underline_position = -(metrics->underline_position
|
|
||||||
+ + metrics->underline_thickness);
|
|
||||||
+
|
|
||||||
return metrics;
|
|
||||||
}
|
|
|
@ -1,215 +0,0 @@
|
||||||
diff -r -u pango-1.29.5-orig/modules/basic/basic-coretext.c pango-1.29.5/modules/basic/basic-coretext.c
|
|
||||||
--- pango-1.29.5-orig/modules/basic/basic-coretext.c 2011-08-15 18:11:08.000000000 -0700
|
|
||||||
+++ pango-1.29.5/modules/basic/basic-coretext.c 2012-05-17 13:04:39.000000000 -0700
|
|
||||||
@@ -54,18 +54,26 @@
|
|
||||||
PangoGlyphString *glyphs,
|
|
||||||
int i,
|
|
||||||
int offset,
|
|
||||||
- PangoGlyph glyph)
|
|
||||||
+ PangoGlyph glyph,
|
|
||||||
+ const CGSize *adv)
|
|
||||||
{
|
|
||||||
PangoRectangle logical_rect;
|
|
||||||
|
|
||||||
+ if (!glyph) { glyph = PANGO_GET_UNKNOWN_GLYPH(glyph); }
|
|
||||||
+
|
|
||||||
glyphs->glyphs[i].glyph = glyph;
|
|
||||||
|
|
||||||
glyphs->glyphs[i].geometry.x_offset = 0;
|
|
||||||
glyphs->glyphs[i].geometry.y_offset = 0;
|
|
||||||
|
|
||||||
glyphs->log_clusters[i] = offset;
|
|
||||||
- pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, NULL, &logical_rect);
|
|
||||||
- glyphs->glyphs[i].geometry.width = logical_rect.width;
|
|
||||||
+ if (adv) {
|
|
||||||
+ /* by using the advances array, we get kerning */
|
|
||||||
+ glyphs->glyphs[i].geometry.width = adv->width * PANGO_SCALE;
|
|
||||||
+ } else {
|
|
||||||
+ pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, NULL, &logical_rect);
|
|
||||||
+ glyphs->glyphs[i].geometry.width = logical_rect.width;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -87,15 +95,17 @@
|
|
||||||
CFArrayRef runs;
|
|
||||||
CTRunRef run;
|
|
||||||
CTRunStatus run_status;
|
|
||||||
- CFIndex i, glyph_count;
|
|
||||||
+ CFIndex i, glyph_count, num_runs, run_index, run_offset, run_glyph_count;
|
|
||||||
const CGGlyph *cgglyphs;
|
|
||||||
+ const CGSize *cgadvs;
|
|
||||||
+ int free_cgglyphs = 0, free_cgadvs = 0;
|
|
||||||
|
|
||||||
CFTypeRef keys[] = {
|
|
||||||
- (CFTypeRef) kCTFontAttributeName
|
|
||||||
+ (CFTypeRef) kCTFontAttributeName
|
|
||||||
};
|
|
||||||
|
|
||||||
CFTypeRef values[] = {
|
|
||||||
- pango_core_text_font_get_ctfont (cfont)
|
|
||||||
+ pango_core_text_font_get_ctfont (cfont)
|
|
||||||
};
|
|
||||||
|
|
||||||
attributes = CFDictionaryCreate (kCFAllocatorDefault,
|
|
||||||
@@ -110,8 +120,6 @@
|
|
||||||
|
|
||||||
cstr = CFStringCreateWithCString (kCFAllocatorDefault, copy,
|
|
||||||
kCFStringEncodingUTF8);
|
|
||||||
- g_free (copy);
|
|
||||||
-
|
|
||||||
attstr = CFAttributedStringCreate (kCFAllocatorDefault,
|
|
||||||
cstr,
|
|
||||||
attributes);
|
|
||||||
@@ -120,13 +128,22 @@
|
|
||||||
|
|
||||||
runs = CTLineGetGlyphRuns (line);
|
|
||||||
|
|
||||||
- /* Since Pango divides things into runs already, we assume there is
|
|
||||||
- * only a single run in this line.
|
|
||||||
+ /* Since Pango divides things into runs already, we might assume there is
|
|
||||||
+ * only a single run in this line. However, unknown glyphs lead to
|
|
||||||
+ * separate runs.
|
|
||||||
*/
|
|
||||||
- run = CFArrayGetValueAtIndex (runs, 0);
|
|
||||||
- run_status = CTRunGetStatus (run);
|
|
||||||
- glyph_count = CTRunGetGlyphCount (run);
|
|
||||||
- cgglyphs = CTRunGetGlyphsPtr (run);
|
|
||||||
+ num_runs = CFArrayGetCount (runs);
|
|
||||||
+ glyph_count = 0;
|
|
||||||
+ for (i = 0; i < num_runs; i++) {
|
|
||||||
+ run = CFArrayGetValueAtIndex (runs, i);
|
|
||||||
+ glyph_count += CTRunGetGlyphCount (run);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ g_free (copy);
|
|
||||||
+
|
|
||||||
+ run_offset = 0;
|
|
||||||
+ run_index = 0;
|
|
||||||
+ run_glyph_count = 0;
|
|
||||||
|
|
||||||
p = text;
|
|
||||||
pango_glyph_string_set_size (glyphs, glyph_count);
|
|
||||||
@@ -135,10 +152,41 @@
|
|
||||||
|
|
||||||
for (i = 0; i < glyph_count; i++)
|
|
||||||
{
|
|
||||||
- CFIndex real_i, prev_i;
|
|
||||||
+ CFIndex real_i, prev_i, run_real_i;
|
|
||||||
gunichar wc;
|
|
||||||
gunichar mirrored_ch;
|
|
||||||
|
|
||||||
+ if (i - run_offset >= run_glyph_count) {
|
|
||||||
+ run_offset = i;
|
|
||||||
+ run = CFArrayGetValueAtIndex (runs, run_index++);
|
|
||||||
+ run_glyph_count = CTRunGetGlyphCount (run);
|
|
||||||
+ run_status = CTRunGetStatus (run);
|
|
||||||
+
|
|
||||||
+ if (free_cgglyphs) {
|
|
||||||
+ free((void*)cgglyphs);
|
|
||||||
+ free_cgglyphs = 0;
|
|
||||||
+ }
|
|
||||||
+ cgglyphs = CTRunGetGlyphsPtr (run);
|
|
||||||
+ if (!cgglyphs) {
|
|
||||||
+ CFRange range = { 0, 0 };
|
|
||||||
+ cgglyphs = (CGGlyph *)malloc(run_glyph_count * sizeof(CGGlyph));
|
|
||||||
+ free_cgglyphs = 1;
|
|
||||||
+ CTRunGetGlyphs (run, range, (CGGlyph *)cgglyphs);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (free_cgadvs) {
|
|
||||||
+ free((void*)cgadvs);
|
|
||||||
+ free_cgadvs = 0;
|
|
||||||
+ }
|
|
||||||
+ cgadvs = CTRunGetAdvancesPtr (run);
|
|
||||||
+ if (!cgadvs) {
|
|
||||||
+ CFRange range = { 0, 0 };
|
|
||||||
+ cgadvs = (CGSize *)malloc(run_glyph_count * sizeof(CGSize));
|
|
||||||
+ free_cgadvs = 1;
|
|
||||||
+ CTRunGetAdvances (run, range, (CGSize *)cgadvs);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
wc = g_utf8_get_char (p);
|
|
||||||
|
|
||||||
if (analysis->level % 2)
|
|
||||||
@@ -147,11 +195,13 @@
|
|
||||||
|
|
||||||
if (run_status & kCTRunStatusRightToLeft)
|
|
||||||
{
|
|
||||||
+ run_real_i = run_glyph_count - (i - run_offset) - 1;
|
|
||||||
real_i = glyph_count - i - 1;
|
|
||||||
prev_i = real_i + 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
+ run_real_i = i - run_offset;
|
|
||||||
real_i = i;
|
|
||||||
prev_i = real_i - 1;
|
|
||||||
}
|
|
||||||
@@ -161,7 +211,7 @@
|
|
||||||
|
|
||||||
if (pango_is_zero_width (wc))
|
|
||||||
{
|
|
||||||
- set_glyph (font, glyphs, real_i, p - text, PANGO_GLYPH_EMPTY);
|
|
||||||
+ set_glyph (font, glyphs, real_i, p - text, PANGO_GLYPH_EMPTY, NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
@@ -171,7 +221,7 @@
|
|
||||||
|
|
||||||
if (result != PANGO_COVERAGE_NONE)
|
|
||||||
{
|
|
||||||
- set_glyph (font, glyphs, real_i, p - text, cgglyphs[real_i]);
|
|
||||||
+ set_glyph (font, glyphs, real_i, p - text, cgglyphs[run_real_i], cgadvs + run_real_i);
|
|
||||||
|
|
||||||
if (g_unichar_type (wc) == G_UNICODE_NON_SPACING_MARK)
|
|
||||||
{
|
|
||||||
@@ -196,13 +246,18 @@
|
|
||||||
else
|
|
||||||
{
|
|
||||||
set_glyph (font, glyphs, real_i, p - text,
|
|
||||||
- PANGO_GET_UNKNOWN_GLYPH (wc));
|
|
||||||
+ PANGO_GET_UNKNOWN_GLYPH (wc), NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
p = g_utf8_next_char (p);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (free_cgglyphs)
|
|
||||||
+ free((void *)cgglyphs);
|
|
||||||
+ if (free_cgadvs)
|
|
||||||
+ free((void *)cgadvs);
|
|
||||||
+
|
|
||||||
CFRelease (line);
|
|
||||||
CFRelease (attstr);
|
|
||||||
CFRelease (cstr);
|
|
||||||
diff -r -u pango-1.29.5-orig/pango/pangocairo-coretextfont.c pango-1.29.5/pango/pangocairo-coretextfont.c
|
|
||||||
--- pango-1.29.5-orig/pango/pangocairo-coretextfont.c 2011-08-15 18:11:08.000000000 -0700
|
|
||||||
+++ pango-1.29.5/pango/pangocairo-coretextfont.c 2012-05-17 14:14:02.000000000 -0700
|
|
||||||
@@ -147,6 +147,12 @@
|
|
||||||
metrics->strikethrough_position = metrics->ascent / 3;
|
|
||||||
metrics->strikethrough_thickness = CTFontGetUnderlineThickness (ctfont) * PANGO_SCALE;
|
|
||||||
|
|
||||||
+ metrics->underline_position = -metrics->underline_position;
|
|
||||||
+ pango_quantize_line_geometry (&metrics->underline_thickness,
|
|
||||||
+ &metrics->underline_position);
|
|
||||||
+ metrics->underline_position = -(metrics->underline_position
|
|
||||||
+ + metrics->underline_thickness);
|
|
||||||
+
|
|
||||||
layout = pango_layout_new (context);
|
|
||||||
font_desc = pango_font_describe_with_absolute_size ((PangoFont *) font);
|
|
||||||
pango_layout_set_font_description (layout, font_desc);
|
|
||||||
diff -r -u pango-1.29.5-orig/pango/pangocoretext-fontmap.c pango-1.29.5/pango/pangocoretext-fontmap.c
|
|
||||||
--- pango-1.29.5-orig/pango/pangocoretext-fontmap.c 2011-11-22 11:02:35.000000000 -0800
|
|
||||||
+++ pango-1.29.5/pango/pangocoretext-fontmap.c 2013-02-02 06:13:34.000000000 -0800
|
|
||||||
@@ -941,6 +941,8 @@
|
|
||||||
CTFontDescriptorRef desc = CFArrayGetValueAtIndex (ctfaces, i);
|
|
||||||
|
|
||||||
str = CTFontDescriptorCopyAttribute (desc, kCTFontFamilyNameAttribute);
|
|
||||||
+ if (!str) continue;
|
|
||||||
+
|
|
||||||
buffer = gchar_from_cf_string (str);
|
|
||||||
|
|
||||||
family_name = g_utf8_casefold (buffer, -1);
|
|
|
@ -1,44 +0,0 @@
|
||||||
#lang racket/base
|
|
||||||
(require racket/path racket/system)
|
|
||||||
|
|
||||||
(define from (vector-ref (current-command-line-arguments) 0))
|
|
||||||
(define to
|
|
||||||
(path->string (simplify-path (build-path (collection-path "racket")
|
|
||||||
'up 'up "lib/")
|
|
||||||
#f)))
|
|
||||||
|
|
||||||
(define libs
|
|
||||||
'("libffi.5"
|
|
||||||
"libgio-2.0.0"
|
|
||||||
"libgmodule-2.0.0"
|
|
||||||
"libgthread-2.0.0"
|
|
||||||
"libglib-2.0.0"
|
|
||||||
"libgobject-2.0.0"
|
|
||||||
"libintl.8"
|
|
||||||
"libpango-1.0.0"
|
|
||||||
"libpangocairo-1.0.0"
|
|
||||||
"libcairo.2"
|
|
||||||
"libpixman-1.0"
|
|
||||||
"libpng15.15"
|
|
||||||
"libgmp.10"
|
|
||||||
"libmpfr.4"
|
|
||||||
"libjpeg.62"))
|
|
||||||
|
|
||||||
(define (fixup p p-new)
|
|
||||||
(printf "Fixing ~s\n" p-new)
|
|
||||||
(system (format "install_name_tool -id ~a ~a" (file-name-from-path p-new) p-new))
|
|
||||||
(for-each (lambda (s)
|
|
||||||
(system (format "install_name_tool -change ~a @loader_path/~a ~a"
|
|
||||||
(format "~a/~a.dylib" from s)
|
|
||||||
(format "~a.dylib" s)
|
|
||||||
p-new)))
|
|
||||||
libs))
|
|
||||||
|
|
||||||
(define (install p)
|
|
||||||
(let* ([p (format "~a.dylib" p)]
|
|
||||||
[dest (string-append to p)])
|
|
||||||
(when (file-exists? dest) (delete-file dest))
|
|
||||||
(copy-file (build-path from p) dest)
|
|
||||||
(fixup p dest)))
|
|
||||||
|
|
||||||
(for-each install libs)
|
|
213
racket/src/native-libs/README.txt
Normal file
213
racket/src/native-libs/README.txt
Normal file
|
@ -0,0 +1,213 @@
|
||||||
|
The core `racket' executable has minimal library dependencies. In
|
||||||
|
contrast, libraries implemented in various packages, such as the
|
||||||
|
"draw" or "math" packages, rely on additional C-implemented libraries,
|
||||||
|
such as Cairo, GMP, etc., all of which are loaded dynamically. On Unix
|
||||||
|
variants, we expect users to install C-implemented libraries (usually
|
||||||
|
through the operating system's package manager). For Windows and Mac
|
||||||
|
OS X, we supply pre-built libraries in platform-specific packages; the
|
||||||
|
corresponding Racket packages include platform-specific dependencies
|
||||||
|
on those packages.
|
||||||
|
|
||||||
|
This directory contains scripts and patches to build Windows and Mac
|
||||||
|
OS X libraries in a consistent and portable way. Naturally, the script
|
||||||
|
and patches are fragile, so we upgrade libraries
|
||||||
|
infrequently. Currently, we use the following external packages and
|
||||||
|
versions:
|
||||||
|
|
||||||
|
pkg-config-0.28
|
||||||
|
sed-4.2 (Windows only, to avoid non-GNU `sed')
|
||||||
|
openssl-1.0.1g (Windows only)
|
||||||
|
libiconv-1.14 (Windows only)
|
||||||
|
zlib-1.2.8 (Windows only)
|
||||||
|
libffi-3.0.13
|
||||||
|
expat-2.1.0
|
||||||
|
gettext-0.18.3.2
|
||||||
|
glib-2.39.92
|
||||||
|
libpng-1.6.10
|
||||||
|
pixman-0.32.4
|
||||||
|
cairo-1.12.16
|
||||||
|
jpegsrc.v9a
|
||||||
|
harfbuzz-0.9.27
|
||||||
|
fontconfig-2.11.1
|
||||||
|
freetype-2.5.3
|
||||||
|
pango-1.36.3
|
||||||
|
poppler-0.24.5
|
||||||
|
mpfr-3.1.2
|
||||||
|
gmp-5.1.3
|
||||||
|
|
||||||
|
The above lists is aimed at the graphics stack, and there are a few
|
||||||
|
more libraries not covered here, yet. See "../mac/README.txt" and
|
||||||
|
"../worksp/README" for more information.
|
||||||
|
|
||||||
|
Preliminiaries
|
||||||
|
--------------
|
||||||
|
|
||||||
|
For Windows (cross-compile from Mac OS X or Linux):
|
||||||
|
|
||||||
|
The build scripts assume a MinGW cross compiler installed in
|
||||||
|
"/usr/mw32" (for 32-bit builds) and "/usr/mw64" (for 64-bit builds).
|
||||||
|
In addition, building "glib" requires "gettext" executables that run
|
||||||
|
on the build machine in your PATH.
|
||||||
|
|
||||||
|
Beware that the "libdir" configuration in
|
||||||
|
/usr/mw{32,64}/{i686,x86_64}-w64-mingw32/lib/libstdc++.la
|
||||||
|
may be wrong, in which case you'll need to fix it by hand.
|
||||||
|
|
||||||
|
For Mac OS X (i386 and x86_64 on Intel, ppc on PowerPC):
|
||||||
|
|
||||||
|
The script assumes that "/Developer/SDKs/MacOSX10.5.sdk" (for 32-bit
|
||||||
|
builds) and "/Developer/SDKs/MacOSX10.6.sdk" (for 64-bit builds) are
|
||||||
|
available.
|
||||||
|
|
||||||
|
You can get the 10.5 SDK out of the ".dmg" for Xcode 3.2.6; mount it
|
||||||
|
(don't run it), open -R "MacOSX10.5.pkg", and right click to run.
|
||||||
|
Probably you can get the 10.6 SDK in a similar way.
|
||||||
|
|
||||||
|
If you wanted to build for 10.4, and if you're using gcc instead of
|
||||||
|
Clang, then note that you'll need gcc-4.0 --- but the Pango version
|
||||||
|
listed above relies on CoreText, which is available only with 10.5 and
|
||||||
|
later.
|
||||||
|
|
||||||
|
Build Steps (assuming no version changes)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
* Download .tar.{gz,bz2,xz} archives for the above packages. Stash
|
||||||
|
them in some directory, <archive-dir>
|
||||||
|
|
||||||
|
* Create a working directory, <build-dir>, and make it the current
|
||||||
|
directory.
|
||||||
|
|
||||||
|
* Run
|
||||||
|
|
||||||
|
racket <here-dir>/build-all.rkt \
|
||||||
|
--{win,mac} \
|
||||||
|
--m{32,64} \
|
||||||
|
--archives <archive-dir>
|
||||||
|
|
||||||
|
where <here-dir> is the deirectory containing this file,
|
||||||
|
`--win' versus `--mac' selects a Windows versus Mac OS X build,
|
||||||
|
and `--m32' versus `--m64' selects a 32-bit versus 64-bit build.
|
||||||
|
|
||||||
|
* Run
|
||||||
|
|
||||||
|
racket <here-dir>/install.rkt \
|
||||||
|
--{win,mac} \
|
||||||
|
--m{32,64} \
|
||||||
|
<native-pkgs-dir>
|
||||||
|
|
||||||
|
where <native-pkgs-dir> contains the package "source" directories,
|
||||||
|
such as "draw-win32-i386". The <native-pkgs-dir> is normally a
|
||||||
|
checkout of "https://github.com/plt/libs.git".
|
||||||
|
|
||||||
|
Details
|
||||||
|
-------
|
||||||
|
|
||||||
|
The "build-all.rkt" script runs "build.rkt" for each external package
|
||||||
|
that needs to be built for the specified platform. The "build.rkt"
|
||||||
|
script encodes suitable environment and flag settings for building
|
||||||
|
native libraries.
|
||||||
|
|
||||||
|
The first build step is "pkg-config", which is built for the current
|
||||||
|
build platform, as opposed to the target platform. The resulting
|
||||||
|
`pkg-config` is installed into "<build-dir>/dest/bin", which is
|
||||||
|
included in the PATH environment variable when all other configuration
|
||||||
|
steps are run. If you used an installed `pkg-config', then you'd end
|
||||||
|
up linking to installed packages on the build machine, which would be
|
||||||
|
confusing at best.
|
||||||
|
|
||||||
|
More details for Windows:
|
||||||
|
|
||||||
|
* GNU `sed' is built to run on the build platform, just in case the
|
||||||
|
build platform's `sed' is BSD-style (as on Mac OS X).
|
||||||
|
|
||||||
|
* The generated ".dll"s go to "dest/bin".
|
||||||
|
|
||||||
|
* The "install.rkt" script finalizes the build by stripping debugging
|
||||||
|
symbols.
|
||||||
|
|
||||||
|
* Beware of dynamic linking to libgcc or libstdc++. The build script
|
||||||
|
uses `-static-libgcc' and `-static-libstdc++' to statically link
|
||||||
|
those libraries. Use "depends.exe" to check DLL dependencies.
|
||||||
|
|
||||||
|
More details for Mac OS X:
|
||||||
|
|
||||||
|
* 32-bit binaries are built for 10.5 and up. 64-bit binaries are
|
||||||
|
built for 10.6 and up.
|
||||||
|
|
||||||
|
* The generated ".dylib"s go to "dest/lib".
|
||||||
|
|
||||||
|
* The "install.rkt" script finalizes the build by stripping debugging
|
||||||
|
symbols and adjusting cross-library references to be relative
|
||||||
|
paths.
|
||||||
|
|
||||||
|
During the build, ".dylib"s in "<build-dir>/dest/lib" will contain
|
||||||
|
full paths when they depend on other ".dylibs" in the same
|
||||||
|
directory. The "install.rkt" script uses `install_name_tool' to
|
||||||
|
rewrite those paths to relative form using "@loader_path".
|
||||||
|
|
||||||
|
You can use
|
||||||
|
|
||||||
|
otool -L <name>.dylib
|
||||||
|
|
||||||
|
to check that "<name>.dylib" does not refer to any other library
|
||||||
|
through an absolute path (i.e., your <build-dir> path). Also, watch
|
||||||
|
out for "/usr/opt/local" paths, which means that you have
|
||||||
|
accidentally links to MacPorts libraries.
|
||||||
|
|
||||||
|
* All ".dylib"s should use two-level namespaces. Use `otool -vh' and
|
||||||
|
look for "TWOLEVEL" in the output to double check that a library
|
||||||
|
build uses two-level namespaces.
|
||||||
|
|
||||||
|
When Library Versions Change
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
An external package such as "libffi-3.0.13" generates a library with a
|
||||||
|
name like "libffi.6.dylib". Upgrading a library may change the version
|
||||||
|
on the generated ".dll" or ".dylib". In that case, you must update
|
||||||
|
several places:
|
||||||
|
|
||||||
|
* Update the library version in "install.rkt".
|
||||||
|
|
||||||
|
* Update the `ffi-lib' reference in the corresponding Racket wrapper
|
||||||
|
libraries.
|
||||||
|
|
||||||
|
* Update the "info.rkt" dependencies in the Racket packages that
|
||||||
|
contain changed Racket wrappers, because a new ".dll" or ".dylib"
|
||||||
|
version will necessitate a new Racket package version (as a suffix
|
||||||
|
on the package name).
|
||||||
|
|
||||||
|
When Things Don't Work
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
You may have to change "build-all.rkt" and "build.rkt", especially if
|
||||||
|
you're trying to upgrade external libraries. On upgrade, patches will
|
||||||
|
fail, new dependencies will be introduced, and so on. In particular,
|
||||||
|
the configuration flags and patches that we use are described within
|
||||||
|
"build.rkt".
|
||||||
|
|
||||||
|
You can run "build.rkt" directly to work on problems with an
|
||||||
|
individual external package. The "build-all.rkt" detects that an
|
||||||
|
external package <package-name> has been built though the existence of
|
||||||
|
the file
|
||||||
|
|
||||||
|
<build-dir>/dest/stamps/<package-name>
|
||||||
|
|
||||||
|
so delete that file to make "build-all.rkt" try again for
|
||||||
|
<package-name>.
|
||||||
|
|
||||||
|
If You Have to Start Over Completely
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
See
|
||||||
|
|
||||||
|
* "racket/src/mac/README.txt" in a Racket v5.x source distirbution
|
||||||
|
|
||||||
|
* https://github.com/soegaard/racket-osx-libs
|
||||||
|
|
||||||
|
* http://cairographics.org/end_to_end_build_for_mac_os_x/
|
||||||
|
|
||||||
|
* Pre-built packages from www.gtk.org, specifically the "dev"
|
||||||
|
archives.
|
||||||
|
|
||||||
|
for old build notes. The "build.rkt" script automates most everything
|
||||||
|
we learned.
|
52
racket/src/native-libs/build-all.rkt
Normal file
52
racket/src/native-libs/build-all.rkt
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
#lang racket/base
|
||||||
|
(require racket/system
|
||||||
|
racket/format
|
||||||
|
racket/runtime-path
|
||||||
|
"cmdline.rkt")
|
||||||
|
|
||||||
|
(define (get-package-names win?)
|
||||||
|
(append
|
||||||
|
'("pkg-config")
|
||||||
|
(if win?
|
||||||
|
'("sed"
|
||||||
|
"longdouble"
|
||||||
|
"libiconv"
|
||||||
|
"openssl"
|
||||||
|
"zlib")
|
||||||
|
null)
|
||||||
|
'("expat"
|
||||||
|
"gettext"
|
||||||
|
"libffi"
|
||||||
|
"glib"
|
||||||
|
"libpng"
|
||||||
|
"freetype"
|
||||||
|
"fontconfig"
|
||||||
|
"pixman"
|
||||||
|
"cairo"
|
||||||
|
"harfbuzz"
|
||||||
|
"pango"
|
||||||
|
"gmp"
|
||||||
|
"mpfr"
|
||||||
|
"jpeg"
|
||||||
|
"poppler")))
|
||||||
|
|
||||||
|
(define-runtime-path build-rkt "build.rkt")
|
||||||
|
|
||||||
|
(build-command-line)
|
||||||
|
|
||||||
|
(define package-names (get-package-names win?))
|
||||||
|
|
||||||
|
(for ([package-name (in-list package-names)])
|
||||||
|
(printf "~a\n" (make-string 72 #\=))
|
||||||
|
(cond
|
||||||
|
[(file-exists? (build-path "dest" "stamps" package-name))
|
||||||
|
(printf "Done already: ~a\n" package-name)]
|
||||||
|
[else
|
||||||
|
(printf "Building ~a\n" package-name)
|
||||||
|
(parameterize ([current-namespace (make-base-namespace)]
|
||||||
|
[current-command-line-arguments
|
||||||
|
(vector (if win? "--win" "--mac")
|
||||||
|
(if m32? (if ppc? "--mppc" "--m32") "--m64")
|
||||||
|
"--archives" (~a archives-dir)
|
||||||
|
package-name)])
|
||||||
|
(dynamic-require build-rkt #f))]))
|
389
racket/src/native-libs/build.rkt
Normal file
389
racket/src/native-libs/build.rkt
Normal file
|
@ -0,0 +1,389 @@
|
||||||
|
#lang racket/base
|
||||||
|
(require racket/system
|
||||||
|
racket/format
|
||||||
|
racket/string
|
||||||
|
racket/file
|
||||||
|
racket/runtime-path
|
||||||
|
"cmdline.rkt")
|
||||||
|
|
||||||
|
(define skip-unpack? #f)
|
||||||
|
(define skip-config? #f)
|
||||||
|
|
||||||
|
(define package-name
|
||||||
|
(build-command-line
|
||||||
|
#:once-each
|
||||||
|
[("--skip-unpack") "Skip `unpack` step"
|
||||||
|
(set! skip-unpack? #t)]
|
||||||
|
[("--skip-config") "Skip `configure` step"
|
||||||
|
(set! skip-config? #t)]
|
||||||
|
#:args (package-name)
|
||||||
|
package-name))
|
||||||
|
|
||||||
|
;; --------------------------------------------------
|
||||||
|
;; Shell commands:
|
||||||
|
|
||||||
|
(define (system/show s)
|
||||||
|
(displayln s)
|
||||||
|
(unless (system s)
|
||||||
|
(exit 1)))
|
||||||
|
|
||||||
|
(define (system*/show . s)
|
||||||
|
(displayln (string-join (map (lambda (v) (if (path? v) (path->string v) v))
|
||||||
|
s)
|
||||||
|
" "))
|
||||||
|
(unless (apply system* s)
|
||||||
|
(exit 1)))
|
||||||
|
|
||||||
|
;; --------------------------------------------------
|
||||||
|
;; Unpack package and find package's source directory in the current
|
||||||
|
;; directory:
|
||||||
|
|
||||||
|
(define (find-package package-name dir? [fail-ok? #f])
|
||||||
|
(define candidates
|
||||||
|
(for/list ([f (in-list (directory-list))]
|
||||||
|
#:when (if dir?
|
||||||
|
(directory-exists? f)
|
||||||
|
(file-exists? f))
|
||||||
|
#:when (let ([s (path->string f)])
|
||||||
|
(and ((string-length s) . > . (string-length package-name))
|
||||||
|
(string=? (substring s 0 (string-length package-name))
|
||||||
|
package-name))))
|
||||||
|
f))
|
||||||
|
|
||||||
|
(cond
|
||||||
|
[(and fail-ok? (null? candidates))
|
||||||
|
#f]
|
||||||
|
[else
|
||||||
|
(when (null? candidates)
|
||||||
|
(error 'build "could not find ~a for package: ~a"
|
||||||
|
(if dir? "directory" "archive")
|
||||||
|
package-name))
|
||||||
|
(unless (null? (cdr candidates))
|
||||||
|
(error 'build "found multiple ~a matches for package: ~s"
|
||||||
|
(if dir? "directory" "archive")
|
||||||
|
candidates))
|
||||||
|
(car candidates)]))
|
||||||
|
|
||||||
|
(define-runtime-path longdouble-c "../racket/src/longdouble/longdouble.c")
|
||||||
|
(define-runtime-path longdouble-h "../racket/src/longdouble/longdouble.h")
|
||||||
|
|
||||||
|
(unless skip-unpack?
|
||||||
|
(case package-name
|
||||||
|
[("longdouble")
|
||||||
|
(make-directory* "longdouble-1")
|
||||||
|
(copy-file longdouble-c "longdouble-1/longdouble.c" #t)
|
||||||
|
(copy-file longdouble-h "longdouble-1/longdouble.h" #t)
|
||||||
|
(when (file-exists? "longdouble-1/longdouble.dll")
|
||||||
|
(delete-file "longdouble-1/longdouble.dll"))
|
||||||
|
(with-output-to-file "longdouble-1/configure"
|
||||||
|
#:exists 'truncate
|
||||||
|
(lambda ()
|
||||||
|
(printf "#!~a\n" (find-executable-path "sh"))
|
||||||
|
(printf "echo 'longdouble.dll:' > Makefile\n")
|
||||||
|
(printf "echo \"\t${CC} -shared -o longdouble.dll -DIMPLEMENTING_MSC_LONGDOUBLE=1 longdouble.c\" >> Makefile\n")
|
||||||
|
(printf "echo '' >> Makefile\n")
|
||||||
|
(printf "echo 'install:' >> Makefile\n")
|
||||||
|
(printf "echo '\tcp longdouble.dll ../dest/bin' >> Makefile\n")))
|
||||||
|
(file-or-directory-permissions "longdouble-1/configure" #o777)]
|
||||||
|
[else
|
||||||
|
(define archive (parameterize ([current-directory archives-dir])
|
||||||
|
(build-path archives-dir (find-package package-name #f))))
|
||||||
|
(define dir (find-package package-name #t #t))
|
||||||
|
(when dir
|
||||||
|
(printf "Removing ~a" dir)
|
||||||
|
(delete-directory/files dir))
|
||||||
|
(system/show (~a "tar zxf " archive))]))
|
||||||
|
|
||||||
|
(define package-dir (find-package package-name #t))
|
||||||
|
|
||||||
|
;; --------------------------------------------------
|
||||||
|
;; Create destination:
|
||||||
|
|
||||||
|
(unless (directory-exists? "dest")
|
||||||
|
(make-directory "dest"))
|
||||||
|
|
||||||
|
(define dest (path->complete-path "dest"))
|
||||||
|
|
||||||
|
;; --------------------------------------------------
|
||||||
|
;; Patches:
|
||||||
|
|
||||||
|
;; Enable kerning and set DPI to 72:
|
||||||
|
(define-runtime-path coretext-patch "patches/coretext.patch")
|
||||||
|
|
||||||
|
;; Enable "symbol" fonts, and fix off-by-one:
|
||||||
|
(define-runtime-path win32text-patch "patches/win32text.patch")
|
||||||
|
|
||||||
|
;; Needed when building with old GCC, such as 4.0:
|
||||||
|
(define-runtime-path gmp-weak-patch "patches/gmp-weak.patch")
|
||||||
|
|
||||||
|
;; XP doesn't have rand_s() as used by glib:
|
||||||
|
(define-runtime-path rand-patch "patches/rand.patch")
|
||||||
|
|
||||||
|
;; HarfBuzz makefile seems broken for MinGW as of 0.9.27:
|
||||||
|
(define-runtime-path fixdef-patch "patches/fixdef.patch")
|
||||||
|
|
||||||
|
;; Remove "-fno-check-new", which Clang does not recognize:
|
||||||
|
(define-runtime-path nonochecknew-patch "patches/nonochecknew.patch")
|
||||||
|
|
||||||
|
;; 64-bit MinGW doesn't like this use of `__always_inline__`:
|
||||||
|
(define-runtime-path noforceinline-patch "patches/noforceinline.patch")
|
||||||
|
|
||||||
|
;; Disable libtool's management of standard libs so that
|
||||||
|
;; MinGW's -static-libstdc++ works:
|
||||||
|
(define-runtime-path libtool-link-patch "patches/libtool-link.patch")
|
||||||
|
(define-runtime-path libtool64-link-patch "patches/libtool64-link.patch")
|
||||||
|
|
||||||
|
;; --------------------------------------------------
|
||||||
|
;; General environment and flag configuration:
|
||||||
|
|
||||||
|
(define win-prefix (if m32?
|
||||||
|
"i686-w64-mingw32"
|
||||||
|
"x86_64-w64-mingw32"))
|
||||||
|
|
||||||
|
;; Build GNU sed to avoid potential BSD sed:
|
||||||
|
(define need-sed? win?)
|
||||||
|
|
||||||
|
(define (sdk n)
|
||||||
|
(~a " -isysroot /Developer/SDKs/MacOSX10."n".sdk -mmacosx-version-min=10."n))
|
||||||
|
|
||||||
|
(define all-env
|
||||||
|
(cond
|
||||||
|
[win?
|
||||||
|
(case package-name
|
||||||
|
[("pkg-config" "sed")
|
||||||
|
;; pkgconfig and sed run on build platform:
|
||||||
|
null]
|
||||||
|
[("openssl")
|
||||||
|
;; Not libtool, and prefix added automatically
|
||||||
|
(list
|
||||||
|
(list "CC" "gcc -static-libgcc"))]
|
||||||
|
[else
|
||||||
|
(list
|
||||||
|
;; We'd prefer to add "-static-libgcc" to CFLAGS, but
|
||||||
|
;; libtool doesn't pass `static-libgcc` through.
|
||||||
|
(list "CC" (~a win-prefix "-gcc -static-libgcc")))])]
|
||||||
|
[m32?
|
||||||
|
(define sdk-flags (sdk 5))
|
||||||
|
(list
|
||||||
|
(list "CPPFLAGS" (~a "-m32" sdk-flags))
|
||||||
|
(list "LDFLAGS" (~a "-m32" sdk-flags)))]
|
||||||
|
[else
|
||||||
|
(define sdk-flags (sdk 6))
|
||||||
|
(list
|
||||||
|
(list "CPPFLAGS" (~a "-m64" sdk-flags))
|
||||||
|
(list "LDFLAGS" (~a "-m64" sdk-flags)))]))
|
||||||
|
|
||||||
|
(define cxx-env
|
||||||
|
(if win?
|
||||||
|
(list
|
||||||
|
(list "CXX" (~a win-prefix "-g++ -static-libgcc -static-libstdc++")))
|
||||||
|
null))
|
||||||
|
|
||||||
|
(define all-args
|
||||||
|
(append
|
||||||
|
(list (~a "--prefix=" dest))
|
||||||
|
(cond
|
||||||
|
[win?
|
||||||
|
(case package-name
|
||||||
|
[("pkg-config" "sed")
|
||||||
|
;; pkgconfig and sed run on build platform:
|
||||||
|
null]
|
||||||
|
[("openssl")
|
||||||
|
;; not the usual "configure"
|
||||||
|
null]
|
||||||
|
[("zlib")
|
||||||
|
;; zlib doesn't understand --host=
|
||||||
|
null]
|
||||||
|
[else
|
||||||
|
;; Everything else cross-compiles normally:
|
||||||
|
(cond
|
||||||
|
[m32?
|
||||||
|
(list "--host=i686-w64-mingw32")]
|
||||||
|
[else
|
||||||
|
(list "--host=x86_64-w64-mingw32")])])]
|
||||||
|
[else null])))
|
||||||
|
|
||||||
|
(define (merge e1 e2)
|
||||||
|
(define ht
|
||||||
|
(for/fold ([ht (hash)]) ([e (in-list (append e1 e2))])
|
||||||
|
(define v (hash-ref ht (car e) #f))
|
||||||
|
(if v
|
||||||
|
(hash-set ht (car e) (string-append v " " (cadr e)))
|
||||||
|
(hash-set ht (car e) (cadr e)))))
|
||||||
|
(for/list ([(k v) (in-hash ht)])
|
||||||
|
(list k v)))
|
||||||
|
|
||||||
|
(define gcc-4.0?
|
||||||
|
(and mac?
|
||||||
|
(let ([o (open-output-bytes)])
|
||||||
|
(parameterize ([current-output-port o])
|
||||||
|
(system "gcc -v"))
|
||||||
|
(regexp-match? #rx"gcc version 4[.]0" (get-output-bytes o)))))
|
||||||
|
(when gcc-4.0? (printf "using gcc 4.0"))
|
||||||
|
|
||||||
|
;; --------------------------------------------------
|
||||||
|
;; Package-specific environment and flag configuration:
|
||||||
|
|
||||||
|
(define (config #:depends [deps null]
|
||||||
|
#:env [env null]
|
||||||
|
#:configure-exe [exe #f]
|
||||||
|
#:configure [args null]
|
||||||
|
#:make [make "make"]
|
||||||
|
#:setup [setup null]
|
||||||
|
#:patches [patches null]
|
||||||
|
#:post-patches [post-patches null]
|
||||||
|
#:fixup [fixup #f])
|
||||||
|
(for ([d (in-list (append (if (or (equal? package-name "pkg-config")
|
||||||
|
(equal? package-name "sed"))
|
||||||
|
'()
|
||||||
|
(append
|
||||||
|
'("pkg-config")
|
||||||
|
(if need-sed? '("sed") '())))
|
||||||
|
deps))])
|
||||||
|
(unless (file-exists? (build-path dest "stamps" d))
|
||||||
|
(error 'build "prerequisite needed: ~a" d)))
|
||||||
|
(values env exe args make setup patches post-patches fixup))
|
||||||
|
|
||||||
|
(define path-flags
|
||||||
|
(list (list "CPPFLAGS" (~a "-I" dest "/include"))
|
||||||
|
(list "LDFLAGS" (~a "-L" dest "/lib"))))
|
||||||
|
|
||||||
|
(define (windows-only)
|
||||||
|
(unless win?
|
||||||
|
(error (format "build ~a only for Windows" package-name))))
|
||||||
|
|
||||||
|
(define-values (extra-env configure-exe extra-args make-command setup patches post-patches fixup)
|
||||||
|
(case package-name
|
||||||
|
[("pkg-config") (config #:configure (list "--with-internal-glib"))]
|
||||||
|
[("sed") (config)]
|
||||||
|
[("longdouble") (config)]
|
||||||
|
[("libiconv")
|
||||||
|
(windows-only)
|
||||||
|
(config)]
|
||||||
|
[("openssl")
|
||||||
|
(windows-only)
|
||||||
|
(config #:configure-exe (find-executable-path "sh")
|
||||||
|
#:configure (list "./Configure"
|
||||||
|
(~a "--cross-compile-prefix=" win-prefix "-")
|
||||||
|
#f ; other flags here
|
||||||
|
(~a "mingw" (if m32? "" "64"))
|
||||||
|
"shared"))]
|
||||||
|
[("expat") (config)]
|
||||||
|
[("gettext") (config #:depends (if win? '("libiconv") '())
|
||||||
|
#:configure '("--enable-languages=c")
|
||||||
|
#:make (if win?
|
||||||
|
;; We only need libintl, and building
|
||||||
|
;; only that avoids other problems.
|
||||||
|
"cd gettext-runtime/intl && make"
|
||||||
|
"make"))]
|
||||||
|
[("libffi") (config)]
|
||||||
|
[("zlib")
|
||||||
|
(windows-only)
|
||||||
|
(config #:make (~a "make -f win32/Makefile.gcc"
|
||||||
|
" PREFIX=" win-prefix "-"
|
||||||
|
" INCLUDE_PATH=" dest "/include"
|
||||||
|
" LIBRARY_PATH=" dest "/lib"
|
||||||
|
" BINARY_PATH=" dest "/bin"
|
||||||
|
" LDFLAGS=-static-libgcc")
|
||||||
|
#:fixup (~a "cp zlib1.dll " dest "/bin && cp libz.dll.a " dest "/lib"))]
|
||||||
|
[("glib") (config #:depends (append '("libffi" "gettext")
|
||||||
|
(if win?
|
||||||
|
'("libiconv")
|
||||||
|
'()))
|
||||||
|
#:env path-flags
|
||||||
|
#:patches (if (and win? m32?)
|
||||||
|
(list rand-patch)
|
||||||
|
null))]
|
||||||
|
[("libpng") (config #:depends (if win? '("zlib") '())
|
||||||
|
#:env (if win? path-flags null))]
|
||||||
|
[("freetype") (config #:depends '("libpng"))]
|
||||||
|
[("fontconfig") (config #:depends '("expat" "freetype")
|
||||||
|
#:configure '("--disable-docs"))]
|
||||||
|
[("pixman") (config #:patches (if (and win? (not m32?))
|
||||||
|
(list noforceinline-patch)
|
||||||
|
null))]
|
||||||
|
[("cairo") (config #:depends '("pixman" "fontconfig" "freetype" "libpng")
|
||||||
|
#:env path-flags
|
||||||
|
#:configure '("--enable-xlib=no"))]
|
||||||
|
[("harfbuzz") (config #:depends '("fontconfig" "freetype" "cairo")
|
||||||
|
#:configure '("--without-icu")
|
||||||
|
#:patches (if win?
|
||||||
|
(list fixdef-patch)
|
||||||
|
null)
|
||||||
|
#:env cxx-env)]
|
||||||
|
[("pango") (config #:depends '("cairo" "harfbuzz")
|
||||||
|
#:env (if win? path-flags null)
|
||||||
|
#:configure '("--without-x"
|
||||||
|
"--with-included-modules=yes"
|
||||||
|
"--with-dynamic-modules=no")
|
||||||
|
#:patches (list coretext-patch
|
||||||
|
win32text-patch))]
|
||||||
|
[("gmp") (config #:patches (if gcc-4.0? (list gmp-weak-patch) null)
|
||||||
|
#:configure (append
|
||||||
|
'("--enable-shared" "--disable-static")
|
||||||
|
(if (and m32? mac?)
|
||||||
|
(list "ABI=32")
|
||||||
|
null)))]
|
||||||
|
[("mpfr") (config #:configure '("--enable-shared" "--disable-static")
|
||||||
|
#:depends '("gmp")
|
||||||
|
#:env path-flags)]
|
||||||
|
[("jpeg") (config)]
|
||||||
|
[("poppler") (config #:env (append path-flags
|
||||||
|
cxx-env)
|
||||||
|
#:patches (list nonochecknew-patch)
|
||||||
|
#:post-patches (if win?
|
||||||
|
(list (if m32?
|
||||||
|
libtool-link-patch
|
||||||
|
libtool64-link-patch))
|
||||||
|
null)
|
||||||
|
#:configure '("--enable-zlib"
|
||||||
|
"--disable-splash-output"
|
||||||
|
"--disable-poppler-cpp"))]
|
||||||
|
[else (error 'build "unrecognized package: ~a" package-name)]))
|
||||||
|
|
||||||
|
;; --------------------------------------------------
|
||||||
|
;; Go!
|
||||||
|
|
||||||
|
(define (stamp package-name)
|
||||||
|
(make-directory* (build-path dest "stamps"))
|
||||||
|
(call-with-output-file*
|
||||||
|
(build-path dest "stamps" package-name)
|
||||||
|
#:exists 'truncate
|
||||||
|
void))
|
||||||
|
|
||||||
|
(parameterize ([current-directory package-dir]
|
||||||
|
[current-environment-variables
|
||||||
|
(environment-variables-copy
|
||||||
|
(current-environment-variables))])
|
||||||
|
(putenv "PATH" (~a dest "/bin"
|
||||||
|
":"
|
||||||
|
(if win?
|
||||||
|
(if m32?
|
||||||
|
"/usr/mw32/bin:"
|
||||||
|
"/usr/mw64/bin:")
|
||||||
|
"")
|
||||||
|
(getenv "PATH")))
|
||||||
|
(for ([e (in-list (merge all-env extra-env))])
|
||||||
|
(printf "~a=~a\n" (car e) (cadr e))
|
||||||
|
(putenv (car e) (cadr e)))
|
||||||
|
(unless skip-unpack?
|
||||||
|
(for ([s (in-list setup)])
|
||||||
|
(system/show s))
|
||||||
|
(for ([p (in-list patches)])
|
||||||
|
(system/show (~a "patch -p2 < " p))))
|
||||||
|
(unless skip-config?
|
||||||
|
(apply system*/show
|
||||||
|
(or configure-exe "./configure")
|
||||||
|
(let loop ([extra-args extra-args])
|
||||||
|
(cond
|
||||||
|
[(null? extra-args) all-args]
|
||||||
|
[(not (car extra-args)) (append all-args (cdr extra-args))]
|
||||||
|
[else (cons (car extra-args) (loop (cdr extra-args)))])))
|
||||||
|
(for ([p (in-list post-patches)])
|
||||||
|
(system/show (~a "patch -p2 < " p))))
|
||||||
|
(system/show make-command)
|
||||||
|
(system/show (~a make-command " install"))
|
||||||
|
(when fixup
|
||||||
|
(system/show fixup))
|
||||||
|
(stamp package-name)
|
||||||
|
(displayln "Success!"))
|
55
racket/src/native-libs/cmdline.rkt
Normal file
55
racket/src/native-libs/cmdline.rkt
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
#lang racket/base
|
||||||
|
(require racket/cmdline)
|
||||||
|
|
||||||
|
(provide build-command-line
|
||||||
|
m32? win? mac? ppc?
|
||||||
|
archives-dir)
|
||||||
|
|
||||||
|
(define m32? 'unknown)
|
||||||
|
(define win? 'unknown)
|
||||||
|
(define mac? 'unknown)
|
||||||
|
(define ppc? #f)
|
||||||
|
|
||||||
|
(define archives-dir (current-directory))
|
||||||
|
|
||||||
|
(define-syntax-rule (build-command-line c ...)
|
||||||
|
(let ()
|
||||||
|
(define m32? 'unknown)
|
||||||
|
(define win? 'unknown)
|
||||||
|
(define mac? 'unknown)
|
||||||
|
(define ppc? (regexp-match? #rx"ppc" (system-library-subpath #f)))
|
||||||
|
(define archives-dir (current-directory))
|
||||||
|
(begin0
|
||||||
|
(command-line
|
||||||
|
#:once-any
|
||||||
|
[("--win") "build Windows via MinGW"
|
||||||
|
(set! win? #t)]
|
||||||
|
[("--mac") "build for/on Mac OS X"
|
||||||
|
(set! win? #f)]
|
||||||
|
#:once-any
|
||||||
|
[("--m32") "build 32-bit mode x86/PowerPC"
|
||||||
|
(set! m32? #t)]
|
||||||
|
[("--m64") "build 64-bit mode x86_64"
|
||||||
|
(set! m32? #f)]
|
||||||
|
[("--mppc") "build 32-bit mode PowerPC"
|
||||||
|
(set! m32? #t)
|
||||||
|
(set! ppc? #t)]
|
||||||
|
#:once-each
|
||||||
|
[("--archives") dir "Find archives in <dir>"
|
||||||
|
(set! archives-dir dir)]
|
||||||
|
c ...)
|
||||||
|
(when (eq? win? 'unknown)
|
||||||
|
(error 'build "please pick `--win` or `--mac`"))
|
||||||
|
(when (eq? m32? 'unknown)
|
||||||
|
(error 'build "please pick `--m32` or `--m64`"))
|
||||||
|
(when (and ppc? (not m32?))
|
||||||
|
(error 'build "cannot use `--m64` on PowerPC"))
|
||||||
|
(set! mac? (not win?))
|
||||||
|
(install! m32? win? mac? (and mac? ppc?) archives-dir))))
|
||||||
|
|
||||||
|
(define (install! -m32? -win? -mac? -ppc? -archives-dir)
|
||||||
|
(set! m32? -m32?)
|
||||||
|
(set! win? -win?)
|
||||||
|
(set! mac? -mac?)
|
||||||
|
(set! ppc? -ppc?)
|
||||||
|
(set! archives-dir -archives-dir))
|
268
racket/src/native-libs/install.rkt
Normal file
268
racket/src/native-libs/install.rkt
Normal file
|
@ -0,0 +1,268 @@
|
||||||
|
#lang racket/base
|
||||||
|
(require racket/path
|
||||||
|
racket/system
|
||||||
|
racket/format
|
||||||
|
racket/file
|
||||||
|
racket/pretty
|
||||||
|
"cmdline.rkt")
|
||||||
|
|
||||||
|
(define libs
|
||||||
|
'("libffi.6"
|
||||||
|
"libgio-2.0.0"
|
||||||
|
"libgmodule-2.0.0"
|
||||||
|
"libgthread-2.0.0"
|
||||||
|
"libglib-2.0.0"
|
||||||
|
"libgobject-2.0.0"
|
||||||
|
"libintl.8"
|
||||||
|
"libharfbuzz.0"
|
||||||
|
"libpango-1.0.0"
|
||||||
|
"libpangocairo-1.0.0"
|
||||||
|
"libpangoft2-1.0.0"
|
||||||
|
"libexpat.1"
|
||||||
|
"libfontconfig.1"
|
||||||
|
"libfreetype.6"
|
||||||
|
"libcairo.2"
|
||||||
|
"libpixman-1.0"
|
||||||
|
"libpng16.16"
|
||||||
|
"libgmp.10"
|
||||||
|
"libmpfr.4"
|
||||||
|
"libjpeg.9"
|
||||||
|
"libpoppler.44"
|
||||||
|
"libpoppler-glib.8"))
|
||||||
|
|
||||||
|
(define win-libs
|
||||||
|
'("libiconv-2"
|
||||||
|
"libeay32"
|
||||||
|
"ssleay32"
|
||||||
|
"longdouble"
|
||||||
|
"zlib1"
|
||||||
|
"libpangowin32-1.0.0"))
|
||||||
|
|
||||||
|
(define package-mapping
|
||||||
|
`(["draw" ; pkg name
|
||||||
|
"-2" ; pkg suffix (increment after "-" when library versions change)
|
||||||
|
"racket/draw" ; subdir
|
||||||
|
"" ; extra for "LICENSE.txt"
|
||||||
|
(["libffi" "libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others."]
|
||||||
|
["libglib" "GLib is released under the GNU Library General Public License (GNU LGPL)."]
|
||||||
|
"libgio"
|
||||||
|
"libgmodule"
|
||||||
|
"libgobject"
|
||||||
|
"libgthread"
|
||||||
|
["libintl" "libintl is released under the GNU Library General Public License (GNU LGPL)."]
|
||||||
|
["libharfbuzz" "HarfBuzz is relased under a MIT license."]
|
||||||
|
["libpango" "Pango is released under the GNU Library General Public License (GNU LGPL)."]
|
||||||
|
"libpangocairo"
|
||||||
|
"libpangoft2"
|
||||||
|
"libpangowin32"
|
||||||
|
"libexpat"
|
||||||
|
["libfontconfig" ,(~a "FontConfig:\n"
|
||||||
|
" Copyright © 2000,2001,2002,2003,2004,2006,2007 Keith Packard\n"
|
||||||
|
" Copyright © 2005 Patrick Lam\n"
|
||||||
|
" Copyright © 2009 Roozbeh Pournader\n"
|
||||||
|
" Copyright © 2008,2009 Red Hat, Inc.\n"
|
||||||
|
" Copyright © 2008 Danilo Šegan\n"
|
||||||
|
" Copyright © 2012 Google, Inc.")]
|
||||||
|
["libfreetype" "Pixman is relased under the FreeType project license."]
|
||||||
|
["libcairo" "Cairo is released under the GNU Library General Public License (GNU LGPL)."]
|
||||||
|
["libpixman" "Pixman is relased under a MIT license."]
|
||||||
|
["libpng" "Libpng is released under the libpng license."]
|
||||||
|
["libjpeg" "This software is based in part on the work of the Independent JPEG Group."]
|
||||||
|
["zlib1" "zlib is by Jean-loup Gailly and Mark Adler."])]
|
||||||
|
["racket"
|
||||||
|
"-2"
|
||||||
|
"racket"
|
||||||
|
""
|
||||||
|
(["libeay32" ,(~a "This product includes software developed by the OpenSSL Project for\n"
|
||||||
|
"use in the OpenSSL Toolkit (http://www.openssl.org/).\n"
|
||||||
|
"\n"
|
||||||
|
"Eric Young is the author of libeay and ssleay.")]
|
||||||
|
"ssleay32"
|
||||||
|
["libiconv-2" "libiconv is released under the GNU Lesser General Public License (GNU LGPL)."]
|
||||||
|
["longdouble" ,(~a "The source to longdouble is included with the Racket source code,\n"
|
||||||
|
"which is available from\n"
|
||||||
|
" http://www.racket-lang.org/")])]
|
||||||
|
["math"
|
||||||
|
""
|
||||||
|
"math"
|
||||||
|
""
|
||||||
|
(["libgmp" "GNU MP is released under the GNU Lesser General Public License (GNU LGPL)."]
|
||||||
|
["libmpfr" "MPFR is released under the GNU Lesser General Public License (GNU LGPL)."])]
|
||||||
|
["poppler"
|
||||||
|
""
|
||||||
|
"racket-poppler"
|
||||||
|
""
|
||||||
|
(["libpoppler"
|
||||||
|
;; Note: Poppler is GPL and *not* in the main Racket distribution (which is LGPL)
|
||||||
|
"Poppler is released under the GNU General Public License (GNU GPL)."])]))
|
||||||
|
|
||||||
|
(define (libs-of-pkg p) (list-ref p 4))
|
||||||
|
|
||||||
|
(define dest-dir
|
||||||
|
(build-command-line
|
||||||
|
#:args (dest-dir)
|
||||||
|
dest-dir))
|
||||||
|
|
||||||
|
(define from (build-path (current-directory) "dest" (if win? "bin" "lib")))
|
||||||
|
|
||||||
|
(define (find-pkg lib)
|
||||||
|
(define pkg (for/or ([p (in-list package-mapping)])
|
||||||
|
(define nl
|
||||||
|
(for/or ([nl (in-list (libs-of-pkg p))])
|
||||||
|
(define n (if (pair? nl) (car nl) nl))
|
||||||
|
(cond
|
||||||
|
[(equal? n lib) nl]
|
||||||
|
[else
|
||||||
|
(define len (string-length n))
|
||||||
|
(and ((string-length lib) . > . (add1 len))
|
||||||
|
(string=? n (substring lib 0 len))
|
||||||
|
(regexp-match? #rx"[-.0-9]" (string (string-ref lib len)))
|
||||||
|
nl)])))
|
||||||
|
(and nl
|
||||||
|
(list (car p) (cadr p) (caddr p)
|
||||||
|
(and (pair? nl) (cadr nl))))))
|
||||||
|
(unless pkg
|
||||||
|
(error 'install "cannot find package for library: ~e" lib))
|
||||||
|
(apply values pkg))
|
||||||
|
|
||||||
|
(define (gen-info platform i-platform pkg pkg-name subdir libs lics lic-end)
|
||||||
|
(define dest (build-path dest-dir pkg-name))
|
||||||
|
(define lib-path (build-path dest subdir "info.rkt"))
|
||||||
|
(define top-path (build-path dest "info.rkt"))
|
||||||
|
(define same? (equal? lib-path top-path))
|
||||||
|
(define (write-libs o)
|
||||||
|
(newline o)
|
||||||
|
(pretty-write `(define install-platform ,i-platform) o)
|
||||||
|
(newline o)
|
||||||
|
(pretty-write `(define copy-foreign-libs (quote ,libs)) o))
|
||||||
|
(define (write-pkg o)
|
||||||
|
(newline o)
|
||||||
|
(pretty-write `(define collection 'multi) o)
|
||||||
|
(pretty-write `(define deps '("base")) o)
|
||||||
|
(newline o)
|
||||||
|
(pretty-write `(define pkg-desc ,(format "native libraries for \"~a\" package" pkg)) o)
|
||||||
|
(newline o)
|
||||||
|
(pretty-write `(define pkg-authors '(mflatt)) o))
|
||||||
|
(unless same?
|
||||||
|
(printf "Write ~a\n" lib-path)
|
||||||
|
(call-with-output-file*
|
||||||
|
lib-path
|
||||||
|
#:exists 'truncate
|
||||||
|
(lambda (o)
|
||||||
|
(displayln "#lang setup/infotab" o)
|
||||||
|
(write-libs o))))
|
||||||
|
(printf "Write ~a\n" top-path)
|
||||||
|
(call-with-output-file*
|
||||||
|
top-path
|
||||||
|
#:exists 'truncate
|
||||||
|
(lambda (o)
|
||||||
|
(displayln "#lang setup/infotab" o)
|
||||||
|
(write-pkg o)
|
||||||
|
(when same?
|
||||||
|
(write-libs o))))
|
||||||
|
(define lic-path (build-path dest "LICENSE.txt"))
|
||||||
|
(printf "Write ~a\n" lic-path)
|
||||||
|
(call-with-output-file*
|
||||||
|
lic-path
|
||||||
|
#:exists 'truncate
|
||||||
|
(lambda (o)
|
||||||
|
(displayln pkg-name o)
|
||||||
|
(displayln "Copyright (c) 2010-2014 PLT Design Inc." o)
|
||||||
|
(newline o)
|
||||||
|
(displayln "This package is distributed under the GNU Lesser General Public" o)
|
||||||
|
(displayln "License (LGPL). This means that you can link this package into" o)
|
||||||
|
(displayln "proprietary applications, provided you follow the rules stated in the" o)
|
||||||
|
(displayln "LGPL. You can also modify this package; if you distribute a modified" o)
|
||||||
|
(displayln "version, you must distribute it under the terms of the LGPL, which in" o)
|
||||||
|
(displayln "particular means that you must release the source code for the" o)
|
||||||
|
(displayln "modified software. See http://www.gnu.org/copyleft/lesser.html" o)
|
||||||
|
(displayln "for more information." o)
|
||||||
|
(for ([l (in-list lics)])
|
||||||
|
(newline o)
|
||||||
|
(displayln l o))
|
||||||
|
(display lic-end o))))
|
||||||
|
|
||||||
|
(define (install platform i-platform so fixup libs)
|
||||||
|
(define pkgs (make-hash))
|
||||||
|
(define pkgs-lic (make-hash))
|
||||||
|
|
||||||
|
(define (install lib)
|
||||||
|
(define p (format "~a.~a" lib so))
|
||||||
|
(define-values (pkg suffix subdir lic) (find-pkg lib))
|
||||||
|
(define dir (build-path dest-dir
|
||||||
|
(~a pkg "-" platform suffix)
|
||||||
|
subdir))
|
||||||
|
(define dest (build-path dir p))
|
||||||
|
(make-directory* dir)
|
||||||
|
(when (file-exists? dest) (delete-file dest))
|
||||||
|
(copy-file (build-path from p) dest)
|
||||||
|
(fixup p dest)
|
||||||
|
|
||||||
|
(hash-update! pkgs pkg (lambda (l) (cons p l)) '())
|
||||||
|
(when lic
|
||||||
|
(hash-update! pkgs-lic pkg (lambda (l) (cons lic l)) '())))
|
||||||
|
|
||||||
|
(for-each install libs)
|
||||||
|
|
||||||
|
(for ([(pkg libs) (in-hash pkgs)])
|
||||||
|
(define a (assoc pkg package-mapping))
|
||||||
|
(gen-info platform
|
||||||
|
i-platform
|
||||||
|
pkg
|
||||||
|
(~a pkg "-" platform (cadr a))
|
||||||
|
(caddr a)
|
||||||
|
libs
|
||||||
|
(reverse (hash-ref pkgs-lic pkg null))
|
||||||
|
(list-ref a 3))))
|
||||||
|
|
||||||
|
(define (install-mac)
|
||||||
|
(define (fixup p p-new)
|
||||||
|
(printf "Fixing ~s\n" p-new)
|
||||||
|
(system (format "install_name_tool -id ~a ~a" (file-name-from-path p-new) p-new))
|
||||||
|
(for-each (lambda (s)
|
||||||
|
(system (format "install_name_tool -change ~a @loader_path/~a ~a"
|
||||||
|
(format "~a/~a.dylib" from s)
|
||||||
|
(format "~a.dylib" s)
|
||||||
|
p-new)))
|
||||||
|
libs)
|
||||||
|
(system (format "strip -S ~a" p-new)))
|
||||||
|
|
||||||
|
(define platform (~a (if m32?
|
||||||
|
(if ppc? "ppc" "i386")
|
||||||
|
"x86_64")
|
||||||
|
"-macosx"))
|
||||||
|
|
||||||
|
(install platform platform "dylib" fixup libs))
|
||||||
|
|
||||||
|
(define (install-win)
|
||||||
|
(define exe-prefix (if m32?
|
||||||
|
"i686-w64-mingw32"
|
||||||
|
"x86_64-w64-mingw32"))
|
||||||
|
|
||||||
|
(define (fixup p p-new)
|
||||||
|
(printf "Fixing ~s\n" p-new)
|
||||||
|
(system (~a exe-prefix "-strip -S " p-new)))
|
||||||
|
|
||||||
|
(parameterize ([current-environment-variables
|
||||||
|
(environment-variables-copy
|
||||||
|
(current-environment-variables))])
|
||||||
|
(putenv "PATH" (~a (if m32?
|
||||||
|
"/usr/mw32/bin:"
|
||||||
|
"/usr/mw64/bin:")
|
||||||
|
(getenv "PATH")))
|
||||||
|
|
||||||
|
(install (~a "win32-" (if m32? "i386" "x86_64"))
|
||||||
|
(~a "win32\\" (if m32? "i386" "x86_64"))
|
||||||
|
"dll"
|
||||||
|
fixup
|
||||||
|
(for/list ([s (in-list (append libs
|
||||||
|
win-libs))])
|
||||||
|
(regexp-replace #rx"!"
|
||||||
|
(regexp-replace* #rx"[.]"
|
||||||
|
(regexp-replace #rx"[.](?=.*[.])" s "!")
|
||||||
|
"-")
|
||||||
|
".")))))
|
||||||
|
|
||||||
|
(cond
|
||||||
|
[win? (install-win)]
|
||||||
|
[else (install-mac)])
|
127
racket/src/native-libs/patches/coretext.patch
Normal file
127
racket/src/native-libs/patches/coretext.patch
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
diff -r -u old/pango-1.36.3/modules/basic/basic-coretext.c new/pango-1.36.3/modules/basic/basic-coretext.c
|
||||||
|
--- old/pango-1.36.3/modules/basic/basic-coretext.c 2014-03-05 21:33:55.000000000 -0700
|
||||||
|
+++ new/pango-1.36.3/modules/basic/basic-coretext.c 2014-03-30 09:52:46.000000000 -0600
|
||||||
|
@@ -55,7 +55,8 @@
|
||||||
|
PangoGlyphString *glyphs,
|
||||||
|
int i,
|
||||||
|
int offset,
|
||||||
|
- PangoGlyph glyph)
|
||||||
|
+ PangoGlyph glyph,
|
||||||
|
+ CGSize *adv)
|
||||||
|
{
|
||||||
|
PangoRectangle logical_rect;
|
||||||
|
|
||||||
|
@@ -65,8 +66,13 @@
|
||||||
|
glyphs->glyphs[i].geometry.y_offset = 0;
|
||||||
|
|
||||||
|
glyphs->log_clusters[i] = offset;
|
||||||
|
- pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, NULL, &logical_rect);
|
||||||
|
- glyphs->glyphs[i].geometry.width = logical_rect.width;
|
||||||
|
+ if (adv) {
|
||||||
|
+ /* by using the advances array, we get kerning */
|
||||||
|
+ glyphs->glyphs[i].geometry.width = adv->width * PANGO_SCALE;
|
||||||
|
+ } else {
|
||||||
|
+ pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, NULL, &logical_rect);
|
||||||
|
+ glyphs->glyphs[i].geometry.width = logical_rect.width;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -92,6 +98,7 @@
|
||||||
|
CTRunRef current_run;
|
||||||
|
CFIndex *current_indices;
|
||||||
|
const CGGlyph *current_cgglyphs;
|
||||||
|
+ const CGSize *current_cgadvs;
|
||||||
|
CTRunStatus current_run_status;
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -118,6 +125,7 @@
|
||||||
|
iter->current_run = CFArrayGetValueAtIndex (iter->runs, run_number);
|
||||||
|
iter->current_run_status = CTRunGetStatus (iter->current_run);
|
||||||
|
iter->current_cgglyphs = CTRunGetGlyphsPtr (iter->current_run);
|
||||||
|
+ iter->current_cgadvs = CTRunGetAdvancesPtr (iter->current_run);
|
||||||
|
|
||||||
|
ct_glyph_count = CTRunGetGlyphCount (iter->current_run);
|
||||||
|
iter->current_indices = malloc (sizeof (CFIndex *) * ct_glyph_count);
|
||||||
|
@@ -175,6 +183,12 @@
|
||||||
|
return iter->current_cgglyphs[iter->ct_i];
|
||||||
|
}
|
||||||
|
|
||||||
|
+static CGSize
|
||||||
|
+run_iterator_get_cgadv (struct RunIterator *iter)
|
||||||
|
+{
|
||||||
|
+ return iter->current_cgadvs[iter->ct_i];
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static CFIndex
|
||||||
|
run_iterator_get_index (struct RunIterator *iter)
|
||||||
|
{
|
||||||
|
@@ -297,6 +311,7 @@
|
||||||
|
{
|
||||||
|
CFIndex index;
|
||||||
|
CGGlyph cgglyph;
|
||||||
|
+ CGSize cgadv;
|
||||||
|
gunichar wc;
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -338,6 +353,7 @@
|
||||||
|
gi = g_slice_new (struct GlyphInfo);
|
||||||
|
gi->index = run_iterator_get_index (&riter);
|
||||||
|
gi->cgglyph = run_iterator_get_cgglyph (&riter);
|
||||||
|
+ gi->cgadv = run_iterator_get_cgadv (&riter);
|
||||||
|
gi->wc = run_iterator_get_character (&riter);
|
||||||
|
|
||||||
|
glyph_list = g_slist_prepend (glyph_list, gi);
|
||||||
|
@@ -426,7 +442,7 @@
|
||||||
|
if (gi == NULL || gi->index > gs_i)
|
||||||
|
{
|
||||||
|
/* gs_i is behind, insert empty glyph */
|
||||||
|
- set_glyph (font, glyphs, gs_i, p - text, PANGO_GLYPH_EMPTY);
|
||||||
|
+ set_glyph (font, glyphs, gs_i, p - text, PANGO_GLYPH_EMPTY, NULL);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (gi->index < gs_i)
|
||||||
|
@@ -457,7 +473,7 @@
|
||||||
|
|
||||||
|
if (result != PANGO_COVERAGE_NONE)
|
||||||
|
{
|
||||||
|
- set_glyph (font, glyphs, gs_i, p - text, gi->cgglyph);
|
||||||
|
+ set_glyph (font, glyphs, gs_i, p - text, gi->cgglyph, &gi->cgadv);
|
||||||
|
|
||||||
|
if (g_unichar_type (gi->wc) == G_UNICODE_NON_SPACING_MARK)
|
||||||
|
{
|
||||||
|
@@ -480,7 +496,7 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
- set_glyph (font, glyphs, gs_i, p - text, PANGO_GET_UNKNOWN_GLYPH (gi->wc));
|
||||||
|
+ set_glyph (font, glyphs, gs_i, p - text, PANGO_GET_UNKNOWN_GLYPH (gi->wc), NULL);
|
||||||
|
|
||||||
|
glyph_iter = g_slist_next (glyph_iter);
|
||||||
|
}
|
||||||
|
diff -r -u old/pango-1.36.3/pango/pangocairo-coretextfont.c new/pango-1.36.3/pango/pangocairo-coretextfont.c
|
||||||
|
--- old/pango-1.36.3/pango/pangocairo-coretextfont.c 2014-03-05 21:33:55.000000000 -0700
|
||||||
|
+++ new/pango-1.36.3/pango/pangocairo-coretextfont.c 2014-03-30 09:52:46.000000000 -0600
|
||||||
|
@@ -147,6 +147,12 @@
|
||||||
|
metrics->strikethrough_position = metrics->ascent / 3;
|
||||||
|
metrics->strikethrough_thickness = CTFontGetUnderlineThickness (ctfont) * PANGO_SCALE;
|
||||||
|
|
||||||
|
+ metrics->underline_position = -metrics->underline_position;
|
||||||
|
+ pango_quantize_line_geometry (&metrics->underline_thickness,
|
||||||
|
+ &metrics->underline_position);
|
||||||
|
+ metrics->underline_position = -(metrics->underline_position
|
||||||
|
+ + metrics->underline_thickness);
|
||||||
|
+
|
||||||
|
layout = pango_layout_new (context);
|
||||||
|
font_desc = pango_font_describe_with_absolute_size ((PangoFont *) font);
|
||||||
|
pango_layout_set_font_description (layout, font_desc);
|
||||||
|
diff -r -u old/pango-1.36.3/pango/pangocairo-coretextfontmap.c new/pango-1.36.3/pango/pangocairo-coretextfontmap.c
|
||||||
|
--- old/pango-1.36.3/pango/pangocairo-coretextfontmap.c 2014-03-05 21:33:55.000000000 -0700
|
||||||
|
+++ new/pango-1.36.3/pango/pangocairo-coretextfontmap.c 2014-03-30 09:52:46.000000000 -0600
|
||||||
|
@@ -186,5 +186,5 @@
|
||||||
|
pango_cairo_core_text_font_map_init (PangoCairoCoreTextFontMap *cafontmap)
|
||||||
|
{
|
||||||
|
cafontmap->serial = 1;
|
||||||
|
- cafontmap->dpi = 96.;
|
||||||
|
+ cafontmap->dpi = 72.;
|
||||||
|
}
|
12
racket/src/native-libs/patches/fixdef.patch
Normal file
12
racket/src/native-libs/patches/fixdef.patch
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
diff -r -u old/harfbuzz-0.9.27/src/Makefile.in new/harfbuzz-0.9.27/src/Makefile.in
|
||||||
|
--- old/harfbuzz-0.9.27/src/Makefile.in 2014-03-31 09:23:00.000000000 -0600
|
||||||
|
+++ new/harfbuzz-0.9.27/src/Makefile.in 2014-03-31 09:23:27.000000000 -0600
|
||||||
|
@@ -2234,7 +2234,7 @@
|
||||||
|
"$<" \
|
||||||
|
> "$@.tmp" && mv "$@.tmp" "$@" || ( $(RM) "$@.tmp"; false )
|
||||||
|
harfbuzz.def: $(HBHEADERS) $(HBNODISTHEADERS)
|
||||||
|
- $(AM_V_GEN) (echo EXPORTS; \
|
||||||
|
+ $(AM_V_GEN) ( \
|
||||||
|
(cat $^ || echo 'hb_ERROR ()' ) | \
|
||||||
|
$(EGREP) '^hb_.* \(' | \
|
||||||
|
sed -e 's/ (.*//' | \
|
15
racket/src/native-libs/patches/gmp-weak.patch
Normal file
15
racket/src/native-libs/patches/gmp-weak.patch
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
diff -r -u old/gmp-5.1.3/gmp-h.in new/gmp-5.1.3/gmp-h.in
|
||||||
|
--- old/gmp-5.1.3/gmp-h.in 2014-04-02 17:37:19.000000000 -0600
|
||||||
|
+++ new/gmp-5.1.3/gmp-h.in 2014-04-02 17:39:16.000000000 -0600
|
||||||
|
@@ -361,9 +361,9 @@
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#if (defined __GNUC_STDC_INLINE__) || (__GNUC__ == 4 && __GNUC_MINOR__ == 2) \
|
||||||
|
|| (defined __GNUC_GNU_INLINE__ && defined __cplusplus)
|
||||||
|
-#define __GMP_EXTERN_INLINE extern __inline__ __attribute__ ((__gnu_inline__))
|
||||||
|
+#define __GMP_EXTERN_INLINE extern __inline__ __attribute__ ((__weak__))
|
||||||
|
#else
|
||||||
|
-#define __GMP_EXTERN_INLINE extern __inline__
|
||||||
|
+#define __GMP_EXTERN_INLINE extern __inline__ __attribute__ ((__weak__))
|
||||||
|
#endif
|
||||||
|
#define __GMP_INLINE_PROTOTYPES 1
|
||||||
|
#endif
|
34
racket/src/native-libs/patches/libtool-link.patch
Normal file
34
racket/src/native-libs/patches/libtool-link.patch
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
diff -r -u old/poppler-0.24.5/libtool new/poppler-0.24.5/libtool
|
||||||
|
--- old/poppler-0.24.5/libtool 2014-04-01 07:00:21.000000000 -0600
|
||||||
|
+++ new/poppler-0.24.5/libtool 2014-04-01 07:00:07.000000000 -0600
|
||||||
|
@@ -10167,14 +10167,14 @@
|
||||||
|
old_archive_from_expsyms_cmds=""
|
||||||
|
|
||||||
|
# Commands used to build a shared archive.
|
||||||
|
-archive_cmds="\$CC -shared -nostdlib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
|
||||||
|
+archive_cmds="\$CC -shared \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
|
||||||
|
archive_expsym_cmds="if test \\\"x\\\`\$SED 1q \$export_symbols\\\`\\\" = xEXPORTS; then
|
||||||
|
cp \$export_symbols \$output_objdir/\$soname.def;
|
||||||
|
else
|
||||||
|
echo EXPORTS > \$output_objdir/\$soname.def;
|
||||||
|
cat \$export_symbols >> \$output_objdir/\$soname.def;
|
||||||
|
fi~
|
||||||
|
- \$CC -shared -nostdlib \$output_objdir/\$soname.def \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
|
||||||
|
+ \$CC -shared \$output_objdir/\$soname.def \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
|
||||||
|
|
||||||
|
# Commands used to build a loadable module if different from building
|
||||||
|
# a shared archive.
|
||||||
|
@@ -10256,10 +10256,10 @@
|
||||||
|
|
||||||
|
# Dependencies to place before and after the objects being linked to
|
||||||
|
# create a shared library.
|
||||||
|
-predep_objects="/usr/mw32/bin/../lib/gcc/i686-w64-mingw32/4.9.0/../../../../i686-w64-mingw32/lib/../lib/dllcrt2.o /usr/mw32/bin/../lib/gcc/i686-w64-mingw32/4.9.0/crtbegin.o"
|
||||||
|
-postdep_objects="/usr/mw32/bin/../lib/gcc/i686-w64-mingw32/4.9.0/crtend.o"
|
||||||
|
+predep_objects=""
|
||||||
|
+postdep_objects=""
|
||||||
|
predeps=""
|
||||||
|
-postdeps="-lstdc++ -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt"
|
||||||
|
+postdeps=""
|
||||||
|
|
||||||
|
# The library search path used internally by the compiler when linking
|
||||||
|
# a shared library.
|
34
racket/src/native-libs/patches/libtool64-link.patch
Normal file
34
racket/src/native-libs/patches/libtool64-link.patch
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
diff -r -u old/poppler-0.24.5/libtool new/poppler-0.24.5/libtool
|
||||||
|
--- old/poppler-0.24.5/libtool 2014-04-04 16:45:38.000000000 -0600
|
||||||
|
+++ new/poppler-0.24.5/libtool 2014-04-04 16:46:07.000000000 -0600
|
||||||
|
@@ -10167,14 +10167,14 @@
|
||||||
|
old_archive_from_expsyms_cmds=""
|
||||||
|
|
||||||
|
# Commands used to build a shared archive.
|
||||||
|
-archive_cmds="\$CC -shared -nostdlib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
|
||||||
|
+archive_cmds="\$CC -shared \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
|
||||||
|
archive_expsym_cmds="if test \\\"x\\\`\$SED 1q \$export_symbols\\\`\\\" = xEXPORTS; then
|
||||||
|
cp \$export_symbols \$output_objdir/\$soname.def;
|
||||||
|
else
|
||||||
|
echo EXPORTS > \$output_objdir/\$soname.def;
|
||||||
|
cat \$export_symbols >> \$output_objdir/\$soname.def;
|
||||||
|
fi~
|
||||||
|
- \$CC -shared -nostdlib \$output_objdir/\$soname.def \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
|
||||||
|
+ \$CC -shared \$output_objdir/\$soname.def \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
|
||||||
|
|
||||||
|
# Commands used to build a loadable module if different from building
|
||||||
|
# a shared archive.
|
||||||
|
@@ -10256,10 +10256,10 @@
|
||||||
|
|
||||||
|
# Dependencies to place before and after the objects being linked to
|
||||||
|
# create a shared library.
|
||||||
|
-predep_objects="/usr/mw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.0/../../../../x86_64-w64-mingw32/lib/../lib/dllcrt2.o /usr/mw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.0/../../../../x86_64-w64-mingw32/lib/../lib/crtbegin.o"
|
||||||
|
-postdep_objects="/usr/mw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.0/../../../../x86_64-w64-mingw32/lib/../lib/crtend.o"
|
||||||
|
+predep_objects=""
|
||||||
|
+postdep_objects=""
|
||||||
|
predeps=""
|
||||||
|
-postdeps="-lstdc++ -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt"
|
||||||
|
+postdeps=""
|
||||||
|
|
||||||
|
# The library search path used internally by the compiler when linking
|
||||||
|
# a shared library.
|
13
racket/src/native-libs/patches/noforceinline.patch
Normal file
13
racket/src/native-libs/patches/noforceinline.patch
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
diff -u -r old/pixman-0.32.4/pixman/pixman-compiler.h new/pixman-0.32.4/pixman/pixman-compiler.h
|
||||||
|
--- old/pixman-0.32.4/pixman/pixman-compiler.h 2014-04-04 15:06:39.000000000 -0600
|
||||||
|
+++ new/pixman-0.32.4/pixman/pixman-compiler.h 2014-04-04 15:07:27.000000000 -0600
|
||||||
|
@@ -78,7 +78,7 @@
|
||||||
|
# define noinline __declspec(noinline)
|
||||||
|
#elif defined __GNUC__ || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
|
||||||
|
# define inline __inline__
|
||||||
|
-# define force_inline __inline__ __attribute__ ((__always_inline__))
|
||||||
|
+# define force_inline __inline__
|
||||||
|
# define noinline __attribute__((noinline))
|
||||||
|
#else
|
||||||
|
# ifndef force_inline
|
||||||
|
Only in new/pixman-0.32.4/pixman: pixman-compiler.h~
|
13
racket/src/native-libs/patches/nonochecknew.patch
Normal file
13
racket/src/native-libs/patches/nonochecknew.patch
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
diff -u -r old/poppler-0.24.5/configure new/poppler-0.24.5/configure
|
||||||
|
--- old/poppler-0.24.5/configure 2014-04-01 04:55:51.000000000 -0600
|
||||||
|
+++ new/poppler-0.24.5/configure 2014-04-01 04:56:11.000000000 -0600
|
||||||
|
@@ -24905,7 +24905,7 @@
|
||||||
|
fi
|
||||||
|
case "$enable_compile_warnings" in
|
||||||
|
no) ;;
|
||||||
|
- yes) CXXFLAGS="-Wall -Woverloaded-virtual -Wnon-virtual-dtor -Wcast-align -fno-exceptions -fno-check-new -fno-common $CXXFLAGS";
|
||||||
|
+ yes) CXXFLAGS="-Wall -Woverloaded-virtual -Wnon-virtual-dtor -Wcast-align -fno-exceptions -fno-common $CXXFLAGS";
|
||||||
|
CFLAGS="-Wall $CFLAGS" ;;
|
||||||
|
kde) CXXFLAGS="-Wnon-virtual-dtor -Wno-long-long -Wundef \
|
||||||
|
-D_XOPEN_SOURCE=600 -D_BSD_SOURCE -Wcast-align \
|
||||||
|
Only in new/poppler-0.24.5: configure~
|
13
racket/src/native-libs/patches/rand.patch
Normal file
13
racket/src/native-libs/patches/rand.patch
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
diff -u -r old/glib-2.39.92/glib/grand.c new/glib-2.39.92/glib/grand.c
|
||||||
|
--- old/glib-2.39.92/glib/grand.c 2014-03-31 08:42:11.000000000 -0600
|
||||||
|
+++ new/glib-2.39.92/glib/grand.c 2014-03-31 08:42:56.000000000 -0600
|
||||||
|
@@ -264,7 +264,7 @@
|
||||||
|
gint i;
|
||||||
|
|
||||||
|
for (i = 0; i < G_N_ELEMENTS (seed); i++)
|
||||||
|
- rand_s (&seed[i]);
|
||||||
|
+ seed[i] = rand();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return g_rand_new_with_seed_array (seed, 4);
|
||||||
|
|
33
racket/src/native-libs/patches/win32text.patch
Normal file
33
racket/src/native-libs/patches/win32text.patch
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
diff -r -u old/pango-1.36.3/modules/basic/basic-win32.c new/pango-1.36.3/modules/basic/basic-win32.c
|
||||||
|
--- old/pango-1.36.3/modules/basic/basic-win32.c 2014-04-01 09:45:50.000000000 -0600
|
||||||
|
+++ new/pango-1.36.3/modules/basic/basic-win32.c 2014-04-01 09:49:32.000000000 -0600
|
||||||
|
@@ -468,7 +468,7 @@
|
||||||
|
g_print (G_STRLOC ": ScriptItemize: uDefaultLanguage:%04x uBidiLevel:%d\n",
|
||||||
|
control.uDefaultLanguage, state.uBidiLevel);
|
||||||
|
#endif
|
||||||
|
- if (ScriptItemize (wtext, wlen, G_N_ELEMENTS (items), &control, NULL,
|
||||||
|
+ if (ScriptItemize (wtext, wlen, G_N_ELEMENTS (items) - 1, &control, NULL,
|
||||||
|
items, &nitems))
|
||||||
|
{
|
||||||
|
#ifdef BASIC_WIN32_DEBUGGING
|
||||||
|
Only in new/pango-1.36.3/modules/basic: basic-win32.c~
|
||||||
|
diff -r -u old/pango-1.36.3/pango/pangowin32-fontmap.c new/pango-1.36.3/pango/pangowin32-fontmap.c
|
||||||
|
--- old/pango-1.36.3/pango/pangowin32-fontmap.c 2014-04-01 09:45:50.000000000 -0600
|
||||||
|
+++ new/pango-1.36.3/pango/pangowin32-fontmap.c 2014-04-01 09:49:32.000000000 -0600
|
||||||
|
@@ -1501,6 +1501,7 @@
|
||||||
|
ff_name (lfp->lfPitchAndFamily & 0xF0, tmp_for_ff_name),
|
||||||
|
is_synthetic ? " synthetic" : ""));
|
||||||
|
|
||||||
|
+#if 0
|
||||||
|
/* Ignore Symbol fonts (which don't have any Unicode mapping
|
||||||
|
* table). We could also be fancy and use the PostScript glyph name
|
||||||
|
* table for such if present, and build a Unicode map by mapping
|
||||||
|
@@ -1508,6 +1509,7 @@
|
||||||
|
*/
|
||||||
|
if (lfp->lfCharSet == SYMBOL_CHARSET)
|
||||||
|
return;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
if (g_hash_table_lookup (win32fontmap->fonts, lfp))
|
||||||
|
{
|
||||||
|
Only in new/pango-1.36.3/pango: pangowin32-fontmap.c~
|
|
@ -56,6 +56,7 @@ AC_ARG_ENABLE(dynlib, [ --enable-libs install Racket static librarie
|
||||||
AC_ARG_ENABLE(libffi, [ --enable-libffi use installed libffi (enabled by default for Unix)], , enable_libffi=default)
|
AC_ARG_ENABLE(libffi, [ --enable-libffi use installed libffi (enabled by default for Unix)], , enable_libffi=default)
|
||||||
|
|
||||||
AC_ARG_ENABLE(sdk, [ --enable-sdk=<path> use Mac OS X 10.4 SDK directory])
|
AC_ARG_ENABLE(sdk, [ --enable-sdk=<path> use Mac OS X 10.4 SDK directory])
|
||||||
|
AC_ARG_ENABLE(sdk, [ --enable-sdk5=<path> use Mac OS X 10.5 SDK directory])
|
||||||
AC_ARG_ENABLE(sdk, [ --enable-sdk6=<path> use Mac OS X 10.6 SDK directory])
|
AC_ARG_ENABLE(sdk, [ --enable-sdk6=<path> use Mac OS X 10.6 SDK directory])
|
||||||
AC_ARG_ENABLE(xonx, [ --enable-xonx use Unix style (e.g., use Gtk) for Mac OS X])
|
AC_ARG_ENABLE(xonx, [ --enable-xonx use Unix style (e.g., use Gtk) for Mac OS X])
|
||||||
AC_ARG_ENABLE(libfw, [ --enable-libfw install Mac OS X frameworks to /Library/Frameworks])
|
AC_ARG_ENABLE(libfw, [ --enable-libfw install Mac OS X frameworks to /Library/Frameworks])
|
||||||
|
@ -324,11 +325,20 @@ show_explicitly_enabled "${enable_libfw}" "Frameworks-to-system"
|
||||||
show_explicitly_enabled "${enable_userfw}" "Frameworks-to-user"
|
show_explicitly_enabled "${enable_userfw}" "Frameworks-to-user"
|
||||||
|
|
||||||
if test "${enable_sdk}" != "" ; then
|
if test "${enable_sdk}" != "" ; then
|
||||||
|
if test "${enable_sdk5}" != "" ; then
|
||||||
|
echo "ERROR: cannot specify both --enable-sdk and --enable-sdk5"
|
||||||
|
fi
|
||||||
if test "${enable_sdk6}" != "" ; then
|
if test "${enable_sdk6}" != "" ; then
|
||||||
echo "ERROR: cannot specify both --enable-sdk and --enable-sdk6"
|
echo "ERROR: cannot specify both --enable-sdk and --enable-sdk6"
|
||||||
fi
|
fi
|
||||||
echo "=== Using Mac OS X 10.4 SDK directory ${enable_sdk}"
|
echo "=== Using Mac OS X 10.4 SDK directory ${enable_sdk}"
|
||||||
fi
|
fi
|
||||||
|
if test "${enable_sdk5}" != "" ; then
|
||||||
|
if test "${enable_sdk6}" != "" ; then
|
||||||
|
echo "ERROR: cannot specify both --enable-sdk5 and --enable-sdk6"
|
||||||
|
fi
|
||||||
|
echo "=== Using Mac OS X 10.5 SDK directory ${enable_sdk}"
|
||||||
|
fi
|
||||||
if test "${enable_sdk6}" != "" ; then
|
if test "${enable_sdk6}" != "" ; then
|
||||||
echo "=== Using Mac OS X 10.6 SDK directory ${enable_sdk6}"
|
echo "=== Using Mac OS X 10.6 SDK directory ${enable_sdk6}"
|
||||||
fi
|
fi
|
||||||
|
@ -729,6 +739,14 @@ case "$host_os" in
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "${enable_sdk5}" != "" ; then
|
||||||
|
PREFLAGS="$PREFLAGS -isysroot ${enable_sdk5} -mmacosx-version-min=10.5"
|
||||||
|
LDFLAGS="$LDFLAGS -isysroot ${enable_sdk5} -mmacosx-version-min=10.5"
|
||||||
|
SUB_CONFIGURE_EXTRAS="${SUB_CONFIGURE_EXTRAS} CFLAGS="'"'"${CFLAGS}"'"'
|
||||||
|
SUB_CONFIGURE_EXTRAS="${SUB_CONFIGURE_EXTRAS} CPPFLAGS="'"'"${PREFLAGS}"'"'
|
||||||
|
SUB_CONFIGURE_EXTRAS="${SUB_CONFIGURE_EXTRAS} LDFLAGS="'"'"${LDFLAGS}"'"'
|
||||||
|
fi
|
||||||
|
|
||||||
if test "${enable_sdk6}" != "" ; then
|
if test "${enable_sdk6}" != "" ; then
|
||||||
PREFLAGS="$PREFLAGS -isysroot ${enable_sdk6} -mmacosx-version-min=10.6"
|
PREFLAGS="$PREFLAGS -isysroot ${enable_sdk6} -mmacosx-version-min=10.6"
|
||||||
LDFLAGS="$LDFLAGS -isysroot ${enable_sdk6} -mmacosx-version-min=10.6"
|
LDFLAGS="$LDFLAGS -isysroot ${enable_sdk6} -mmacosx-version-min=10.6"
|
||||||
|
|
|
@ -102,46 +102,23 @@ In principle, you could build them from scratch, but since they
|
||||||
are (mostly) maintained by people and organizations other than
|
are (mostly) maintained by people and organizations other than
|
||||||
PLT, we supply them in binary form.
|
PLT, we supply them in binary form.
|
||||||
|
|
||||||
The DLLs are available from
|
The DLLs are distributed in packages, but they are also available
|
||||||
|
from
|
||||||
http://download.racket-lang.org/libs/
|
|
||||||
|
https://github.com/plt/libs
|
||||||
|
|
||||||
and they must be installed into
|
and they must be installed into
|
||||||
|
|
||||||
racket\lib
|
racket\lib
|
||||||
|
|
||||||
The "get-libs.rkt" script in "racket\src" can download the libraries,
|
|
||||||
and the script is used by "build.bat".
|
|
||||||
|
|
||||||
Pre-built libraries use "msvcrt.dll", as opposed to the run-time
|
Pre-built libraries use "msvcrt.dll", as opposed to the run-time
|
||||||
library for a particular version of MSVC. For more information on that
|
library for a particular version of MSVC. For more information on that
|
||||||
choice, in case you want to compile you own, see
|
choice, in case you want to compile you own via MSVC, see
|
||||||
|
|
||||||
http://kobyk.wordpress.com/2007/07/20/
|
http://kobyk.wordpress.com/2007/07/20/
|
||||||
dynamically-linking-with-msvcrtdll-using-visual-c-2005/
|
dynamically-linking-with-msvcrtdll-using-visual-c-2005/
|
||||||
|
|
||||||
In the case of OpenSSL v1.0.0g, two files that use `_stat' lead to an
|
See also "..\native-lib\README.txt".
|
||||||
unresolved reference to `_stat64i32'. That function is equivalent to
|
|
||||||
`_stat' as exported by "msvcrt.dll"; due to a tangle of `#define's, to
|
|
||||||
make the OpenSSL source refer to `_stat', you must use `struct
|
|
||||||
_stat64i32' in place of `struct stat', `#undef _stat', and use
|
|
||||||
`_stat()' in place of `stat()'.
|
|
||||||
|
|
||||||
The pre-built binaries are unpatched with the exception of
|
|
||||||
"libpangowin32", where the following patches are used with version
|
|
||||||
pango-1.28.3:
|
|
||||||
|
|
||||||
pango/pangowin32-fontmap.c:1198:
|
|
||||||
Comment out SYMBOL_CHARSET test
|
|
||||||
modules/basic/basic-win32.c:331:
|
|
||||||
/* Ignore the high surrogate */
|
|
||||||
if (!(wtext[i] >= 0xD800 && wtext[i] < 0xDBFF))
|
|
||||||
modules/basic/basic-win32.c:479:
|
|
||||||
if (ScriptItemize (wtext, wlen, G_N_ELEMENTS (items) - 1, &control, NULL,
|
|
||||||
|
|
||||||
The "longdouble.dll" library is used to implement extflonums. Its
|
|
||||||
source is "longdouble.c" in the Racket source directory, and it must
|
|
||||||
be compiled using MinGW and with `IMPLEMENTING_MSC_LONGDOUBLE' defined.
|
|
||||||
|
|
||||||
Building Racket3m and GRacket3m
|
Building Racket3m and GRacket3m
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
Loading…
Reference in New Issue
Block a user