~ chicken-core (chicken-5) /egg-environment.scm


  1;;; 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")
Trap