~ chicken-core (chicken-5) /egg-environment.scm
Trap1;;; environment settings for egg compilation
2;
3; Copyright (c) 2017-2022, The CHICKEN Team
4; All rights reserved.
5;
6; Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
7; conditions are met:
8;
9; Redistributions of source code must retain the above copyright notice, this list of conditions and the following
10; disclaimer.
11; Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
12; disclaimer in the documentation and/or other materials provided with the distribution.
13; Neither the name of the author nor the names of its contributors may be used to endorse or promote
14; products derived from this software without specific prior written permission.
15;
16; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
17; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
18; AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
19; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23; OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24; POSSIBILITY OF SUCH DAMAGE.
25
26
27(foreign-declare #<<EOF
28#ifndef STATICBUILD
29# define STATIC_CHICKEN 0
30#else
31# define STATIC_CHICKEN 1
32#endif
33#ifndef DEBUGBUILD
34# define DEBUG_CHICKEN 0
35#else
36# define DEBUG_CHICKEN 1
37#endif
38EOF
39)
40
41(define staticbuild (foreign-value "STATIC_CHICKEN" bool))
42(define debugbuild (foreign-value "DEBUG_CHICKEN" bool))
43(define cross-chicken (feature? #:cross-chicken))
44(define binary-version (foreign-value "C_BINARY_VERSION" int))
45(define major-version (foreign-value "C_MAJOR_VERSION" int))
46(define chicken-install-program (foreign-value "C_CHICKEN_INSTALL_PROGRAM" c-string))
47
48(define default-cc (foreign-value "C_TARGET_CC" c-string))
49(define default-cxx (foreign-value "C_TARGET_CXX" c-string))
50(define default-install-program (foreign-value "C_TARGET_INSTALL_PROGRAM" c-string))
51(define default-cflags (foreign-value "C_TARGET_CFLAGS" c-string))
52(define default-ldflags (foreign-value "C_TARGET_LDFLAGS" c-string))
53(define default-install-program-executable-flags (foreign-value "C_TARGET_INSTALL_PROGRAM_EXECUTABLE_OPTIONS" c-string))
54(define default-install-program-data-flags (foreign-value "C_TARGET_INSTALL_PROGRAM_FILE_OPTIONS" c-string))
55(define default-libs (foreign-value "C_TARGET_MORE_LIBS" c-string))
56(define default-libdir (foreign-value "C_TARGET_LIB_HOME" c-string))
57(define default-runlibdir (foreign-value "C_TARGET_RUN_LIB_HOME" c-string))
58(define default-slibdir (foreign-value "C_TARGET_STATIC_LIB_HOME" c-string))
59(define default-incdir (foreign-value "C_TARGET_INCLUDE_HOME" c-string))
60(define default-bindir (foreign-value "C_TARGET_BIN_HOME" c-string))
61(define default-sharedir (foreign-value "C_TARGET_SHARE_HOME" c-string))
62
63(define default-platform
64 (if (eq? (software-type) 'windows)
65 (foreign-value "C_WINDOWS_SHELL" bool)
66 'unix))
67
68(define default-prefix (foreign-value "C_INSTALL_PREFIX" c-string))
69(define default-bindir (foreign-value "C_INSTALL_BIN_HOME" c-string))
70
71(define default-csc
72 (string-append default-bindir "/" (foreign-value "C_CSC_PROGRAM" c-string)))
73
74(define default-csi
75 (string-append default-bindir "/" (foreign-value "C_CSI_PROGRAM" c-string)))
76
77(define default-builder
78 (make-pathname default-bindir (foreign-value "C_CHICKEN_DO_PROGRAM" c-string)))
79
80(define target-librarian (foreign-value "C_TARGET_LIBRARIAN" c-string))
81(define target-librarian-options (foreign-value "C_TARGET_LIBRARIAN_FLAGS" c-string))
82
83(define host-prefix (foreign-value "C_INSTALL_PREFIX" c-string))
84(define host-repo (foreign-value "C_INSTALL_EGG_HOME" c-string))
85(define host-libdir (foreign-value "C_INSTALL_LIB_HOME" c-string))
86(define host-bindir (foreign-value "C_INSTALL_BIN_HOME" c-string))
87(define host-incdir (foreign-value "C_INSTALL_INCLUDE_HOME" c-string))
88(define host-sharedir (foreign-value "C_INSTALL_SHARE_HOME" c-string))
89(define host-libs (foreign-value "C_INSTALL_MORE_LIBS" c-string))
90(define host-cflags (foreign-value "C_INSTALL_CFLAGS" c-string))
91(define host-ldflags (foreign-value "C_INSTALL_LDFLAGS" c-string))
92(define host-cc (foreign-value "C_INSTALL_CC" c-string))
93(define host-cxx (foreign-value "C_INSTALL_CXX" c-string))
94
95(define target-repo
96 (string-append default-libdir "/chicken/" (number->string binary-version)))
97
98(define target-run-repo
99 (string-append default-runlibdir "/chicken/" (number->string binary-version)))
100
101(define +egg-info-extension+ "egg-info")
102(define +egg-extension+ "egg")
103
104(define (validate-environment)
105 (let ((var1 (get-environment-variable "CHICKEN_INSTALL_REPOSITORY"))
106 (var2 (get-environment-variable "CHICKEN_INSTALL_PREFIX")))
107 (unless (or (not var1) (absolute-pathname? var1))
108 (error "CHICKEN_INSTALL_REPOSITORY must be an absolute pathname" var1))
109 (unless (or (not var2) (absolute-pathname? var2))
110 (error "CHICKEN_INSTALL_PREFIX must be an absolute pathname" var2))))
111
112(define (destination-repository mode #!optional run)
113 (if (eq? 'target mode)
114 (if run target-run-repo target-repo)
115 (or (get-environment-variable "CHICKEN_INSTALL_REPOSITORY")
116 host-repo)))
117
118(define (probe-dir dir)
119 (and dir (directory-exists? dir) dir))
120
121(define cache-directory
122 (or (get-environment-variable "CHICKEN_EGG_CACHE")
123 (make-pathname (or (system-cache-directory)
124 (current-directory))
125 chicken-install-program)))
126
127(define cache-metadata-directory
128 ;; Directory where the VERSION, TIMESTAMP and STATUS files are
129 ;; stored (under their corresponding egg directory).
130 (make-pathname cache-directory ".cache-metadata"))
131
132(define +version-file+ "VERSION")
133(define +timestamp-file+ "TIMESTAMP")
134(define +status-file+ "STATUS")