summaryrefslogtreecommitdiff
path: root/chickadee/config.scm.in
blob: 211ce740f3dd7ead06c2f6c1633425144c9e02bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
;;; Chickadee Game Toolkit
;;; Copyright © 2016 David Thompson <dthompson2@worcester.edu>
;;;
;;; Licensed under the Apache License, Version 2.0 (the "License");
;;; you may not use this file except in compliance with the License.
;;; You may obtain a copy of the License at
;;;
;;;    http://www.apache.org/licenses/LICENSE-2.0
;;;
;;; Unless required by applicable law or agreed to in writing, software
;;; distributed under the License is distributed on an "AS IS" BASIS,
;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;;; See the License for the specific language governing permissions and
;;; limitations under the License.

;;; Commentary:
;;
;; Build time configuration.
;;
;;; Code:

(define-module (chickadee config)
  #:use-module (ice-9 match)
  #:use-module (system foreign)
  #:export (dynamic-link*
            %datadir
            %chickadee-version
            %libpng
            %libpng-version
            %libturbojpeg
            %libopenal
            %libvorbisfile
            %libmpg123
            %libfreetype
            %libreadline
            scope-datadir))

;; Try to link against multiple library possibilities, such as the
;; absolute file name discovered by ./configure or by searching the
;; library load path as a fallback method.  Useful when distributing
;; relocatable builds.
(define (dynamic-link* names)
  (let loop ((names* names))
    (match names*
      (()
       (error "could not find library" names))
      ((name . rest)
       (or (false-if-exception (dynamic-link name))
           (loop rest))))))

(define %datadir
  (or (getenv "CHICKADEE_DATADIR") "@chickadee_datadir@/chickadee"))

(define %chickadee-version "@PACKAGE_VERSION@")

;; The version of libpng that chickadee was built against.  Used for
;; initializing libpng.
(define %libpng-version "@PNG_VERSION@")

;; When LD_LIBRARY_PATH is set, we *don't* want to use the absolute
;; file name of the library that pkgconfig found.  Instead, we want to
;; use the library name itself so the search path is used.
(define-syntax-rule (define-library-name name
                      (absolute ...)
                      (relative ...))
  (define name
    (cond
     ((getenv "LD_LIBRARY_PATH")
      '(relative ...))
     (else
      '(absolute ...)))))

(define-library-name %libpng
  ("@PNG_LIBDIR@/libpng")
  ("libpng"))
(define-library-name %libturbojpeg
  ("@TURBOJPEG_LIBDIR@/libturbojpeg")
  ("libturbojpeg"))
(define-library-name %libopenal
  ("@OPENAL_LIBDIR@/libopenal")
  ("libopenal"))
(define-library-name %libvorbisfile
  ("@VORBIS_LIBDIR@/libvorbisfile")
  ("libvorbisfile"))
(define-library-name %libmpg123
  ("@MPG123_LIBDIR@/libmpg123")
  ("libmpg123"))
(define-library-name %libfreetype
  ("@FREETYPE_LIBDIR@/libfreetype")
  ("libfreetype"))
(define-library-name %libreadline
  ("@READLINE_LIBDIR@/libreadline")
  ("libreadline"))

(define (scope-datadir file)
  "Append the Chickadee data directory to FILE."
  (string-append %datadir "/" file))