~ chicken-core (chicken-5) 95ed1c2d2c1ae12558d80bf7f5b5e12441729dd2
commit 95ed1c2d2c1ae12558d80bf7f5b5e12441729dd2 Author: felix <bunny351@gmail.com> AuthorDate: Mon Jun 7 12:52:28 2010 +0200 Commit: felix <bunny351@gmail.com> CommitDate: Mon Jun 7 12:52:28 2010 +0200 added -no-feature option; boot-chicken target does multistage build diff --git a/batch-driver.scm b/batch-driver.scm index 5e620819..415d7e56 100644 --- a/batch-driver.scm +++ b/batch-driver.scm @@ -278,6 +278,9 @@ (for-each register-feature! (append-map (cut string-split <> ",") (collect-options 'feature))) + (for-each + unregister-feature! + (append-map (cut string-split <> ",") (collect-options 'no-feature))) ;; Load extensions: (set! ##sys#features (cons #:compiler-extension ##sys#features)) diff --git a/c-platform.scm b/c-platform.scm index d1332b34..f44504ca 100644 --- a/c-platform.scm +++ b/c-platform.scm @@ -99,7 +99,7 @@ inline-limit profile-name disable-warning ; OBSOLETE parenthesis-synonyms - prelude postlude prologue epilogue nursery extend feature types + prelude postlude prologue epilogue nursery extend feature no-feature types emit-import-library emit-inline-file static-extension consult-inline-file heap-growth heap-shrinkage heap-initial-size ffi-define ffi-include-path) ) diff --git a/chicken-install.scm b/chicken-install.scm index 5d4ab735..ccdfb74f 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -86,6 +86,7 @@ (define *deploy* #f) (define *trunk* #f) (define *csc-features* '()) + (define *csc-nonfeatures* '()) (define *prefix* #f) (define *aliases* '()) @@ -393,7 +394,12 @@ (sprintf " -e \"(destination-prefix \\\"~a\\\")\"" (normalize-pathname prefix 'unix)) "")) - (sprintf " -e \"(extra-features '~s)\"" *csc-features*) + (if (pair? *csc-features*) + (sprintf " -e \"(extra-features '~s)\"" *csc-features*) + "") + (if (pair? *csc-nonfeatures*) + (sprintf " -e \"(extra-nonfeatures '~s)\"" *csc-nonfeatures*) + "") (if *deploy* " -e \"(deployment-mode #t)\"" "") #\space (shellpath (make-pathname (cadr e+d+v) (car e+d+v) "setup"))) ) @@ -638,6 +644,11 @@ EOF (set! *csc-features* (cons (string->symbol (cadr args)) *csc-features*)) (loop (cddr args) eggs)) + ((string=? "-no-feature" arg) + (unless (pair? (cdr args)) (usage 1)) + (set! *csc-nonfeatures* + (cons (string->symbol (cadr args)) *csc-nonfeatures*)) + (loop (cddr args) eggs)) ((string=? "-test" arg) (set! *run-tests* #t) (loop (cdr args) eggs)) diff --git a/csc.scm b/csc.scm index fe9bf704..2661869d 100644 --- a/csc.scm +++ b/csc.scm @@ -146,7 +146,7 @@ -disable-warning ; OBSOLETE -emit-inline-file -types -feature -debug-level -heap-growth -heap-shrinkage -heap-initial-size -consult-inline-file - -emit-import-library -static-extension)) + -emit-import-library -static-extension -no-feature)) (define-constant shortcuts '((-h "-help") @@ -159,7 +159,7 @@ (-i "-case-insensitive") (|-K| "-keyword-style") (|-X| "-extend") - (|-N| "-no-usual-integrations") + (|-N| "-no-usual-integrations") ; DEPRECATED (|-J| "-emit-all-import-libraries") (-x "-explicit-use") (-u "-unsafe") @@ -311,6 +311,7 @@ Usage: #{csc} FILENAME | OPTION ... Language options: -D -DSYMBOL -feature SYMBOL register feature identifier + -no-feature SYMBOL disable builtin feature identifier -c++ compile via a C++ source file (.cpp) -objc compile via Objective-C source file (.m) @@ -355,7 +356,7 @@ Usage: #{csc} FILENAME | OPTION ... -O -O0 -O1 -O2 -O3 -O4 -O5 -optimize-level NUMBER enable certain sets of optimization options -optimize-leaf-routines enable leaf routine optimization - -N -no-usual-integrations standard procedures may be redefined + -no-usual-integrations standard procedures may be redefined -u -unsafe disable safety checks -local assume globals are only modified in current file diff --git a/csi.scm b/csi.scm index bcb10222..be2490a9 100644 --- a/csi.scm +++ b/csi.scm @@ -85,6 +85,7 @@ usage: csi [FILENAME | OPTION ...] -p -print EXPRESSION evaluate and print result(s) -P -pretty-print EXPRESSION evaluate and print result(s) prettily -D -feature SYMBOL register feature identifier + -no-feature SYMBOL disable built-in feature identifier -q -quiet do not print banner EOF @@ -712,7 +713,7 @@ EOF '(#\k #\s #\v #\h #\D #\e #\i #\R #\b #\n #\q #\w #\- #\I #\p #\P) ) (define-constant long-options - '("-ss" "-sx" "-script" "-version" "-help" "--help" "-feature" "-eval" + '("-ss" "-sx" "-script" "-version" "-help" "--help" "-feature" "-no-feature" "-eval" "-case-insensitive" "-keyword-style" "-no-parentheses-synonyms" "-no-symbol-escape" "-r5rs-syntax" "-setup-mode" "-require-extension" "-batch" "-quiet" "-no-warnings" "-no-init" @@ -823,6 +824,7 @@ EOF (case-sensitive #f) ) (for-each register-feature! (collect-options "-feature")) (for-each register-feature! (collect-options "-D")) + (for-each unregister-feature! (collect-options "-no-feature")) (set! ##sys#include-pathnames (deldups (append (map chop-separator (collect-options "-include-path")) diff --git a/manual/Using the compiler b/manual/Using the compiler index 8f56a35c..70661b90 100644 --- a/manual/Using the compiler +++ b/manual/Using the compiler @@ -128,6 +128,8 @@ the source text should be read from standard input. ; -no-bound-checks : disable bound variable checks +; -no-feature SYMBOL : Disables the predefined feature-identifier {{SYMBOL}}. Multiple symbols may be given, if comma-separated. + ; -no-lambda-info : Don't emit additional information for each {{lambda}} expression (currently the argument-list, after alpha-conversion/renaming). ; -no-parentheses-synonyms STYLE : Disables list delimiter synonyms, [..] and {...} for (...). diff --git a/rules.make b/rules.make index 2ae5e228..825c21dd 100644 --- a/rules.make +++ b/rules.make @@ -1051,40 +1051,6 @@ check: $(CHICKEN_SHARED_EXECUTABLE) $(CSI_SHARED_EXECUTABLE) $(CSC_PROGRAM) bench: $(CHICKEN_SHARED_EXECUTABLE) $(CSI_SHARED_EXECUTABLE) $(CSC_PROGRAM) cd tests; echo >>bench.log; date >>bench.log; sh runbench.sh 2>&1 | tee -a bench.log -# 3-stage build - -.PHONY: stage1 stage2 stage3 - -# stage1: build static compiler from current sources with whatever chicken is -# currently available -stage1: - $(MAKE) -f $(SRCDIR)Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) \ - SRCDIR=$(SRCDIR) STATICBUILD=1 DEBUGBUILD=1 CHICKEN=$(CHICKEN) \ - confclean clean $(CHICKEN_PROGRAM)$(EXE) - $(COPY_COMMAND) $(CHICKEN_PROGRAM)$(EXE) $(CHICKEN_PROGRAM)-stage1$(EXE) - -chmod +x $(CHICKEN_PROGRAM)-stage1$(EXE) - -touch *.scm - $(MAKE) -f $(SRCDIR)Makefile.$(PLATFORM) SRCDIR=$(SRCDIR) stage2 - -# stage2: build static chicken with compiler built from current sources, so that -# it supports all functionality that has recently been added -stage2: - $(MAKE) -f $(SRCDIR)Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) \ - SRCDIR=$(SRCDIR) STATICBUILD=1 DEBUGBUILD=1 \ - CHICKEN=./$(CHICKEN_PROGRAM)-stage1 clean $(CHICKEN_PROGRAM)$(EXE) - $(COPY_COMMAND) $(CHICKEN_PROGRAM) $(CHICKEN_PROGRAM)-stage2$(EXE) - -chmod +x $(CHICKEN_PROGRAM)-stage2$(EXE) - -touch *.scm - $(MAKE) -f $(SRCDIR)Makefile.$(PLATFORM) stage3 - -# stage3: build whole system with compiler built from compiler built from current -# sources - this should normally not be contaminated by old compilers -# or runtime libraries -stage3: - $(MAKE) -f $(SRCDIR)Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) \ - SRCDIR=$(SRCDIR) CONFIG=$(CONFIG) \ - CHICKEN=./$(CHICKEN_PROGRAM)-stage2 \ - confclean clean all # build current head in sub-directory @@ -1103,5 +1069,20 @@ buildhead: boot-chicken: $(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) PREFIX=/nowhere CONFIG= \ - SRCDIR=$(SRCDIR) CHICKEN=$(CHICKEN) PROGRAM_SUFFIX=-boot STATICBUILD=1 \ - confclean chicken-boot$(EXE) + SRCDIR=$(SRCDIR) CHICKEN=$(CHICKEN) PROGRAM_SUFFIX=-boot-stage1 STATICBUILD=1 \ + C_COMPILER_OPTIMIZATION_OPTIONS= \ + confclean chicken-boot-stage1$(EXE) + $(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) PREFIX=/nowhere CONFIG= \ + SRCDIR=$(SRCDIR) CHICKEN=$(PWD)/chicken-boot-stage1$(EXE) PROGRAM_SUFFIX=-boot STATICBUILD=1 \ + C_COMPILER_OPTIMIZATION_OPTIONS= \ + touchfiles chicken-boot$(EXE) confclean + +.PHONY: touchfiles + +touchfiles: +ifdef WINDOWS_SHELL + rem now is this funky or what? + for %x in (*.scm) do copy /b %x +,, +else + touch *.scm +endif diff --git a/setup-api.scm b/setup-api.scm index 5e30d889..26e5cdf1 100644 --- a/setup-api.scm +++ b/setup-api.scm @@ -51,7 +51,7 @@ patch abort-setup setup-root-directory create-directory/parents test-compile try-compile run-verbose - extra-features + extra-features extra-nonfeatures copy-file move-file required-chicken-version required-extension-version sudo-install keep-intermediates @@ -119,6 +119,13 @@ (set! xfs fs)) (else xfs))))) +(define extra-nonfeatures + (let ((xfs '())) + (lambda (#!optional fs) + (cond (fs (apply unregister-feature! fs) + (set! xfs fs)) + (else xfs))))) + ; Setup shell commands (define *copy-command*) @@ -231,8 +238,11 @@ (if (deployment-mode) "-deployed" "") (append (map (lambda (f) - (string-append "-feature "(symbol->string f))) + (string-append "-feature " (symbol->string f))) (extra-features)) + (map (lambda (f) + (string-append "-no-feature " (symbol->string f))) + (extra-nonfeatures)) *csc-options*) ) " ") (find-program prg))) diff --git a/support.scm b/support.scm index e44eff9e..110958ec 100644 --- a/support.scm +++ b/support.scm @@ -1209,6 +1209,7 @@ Usage: chicken FILENAME OPTION ... Language options: -feature SYMBOL register feature identifier + -no-feature SYMBOL disable built-in feature identifier Syntax related options:Trap