add --with-<feature> and --without-<feature> support to make.sh
[sbcl.git] / make-config.sh
index 157eea0..7b03394 100644 (file)
@@ -42,6 +42,9 @@ bad_option() {
     exit 1
 }
 
     exit 1
 }
 
+WITH_FEATURES=""
+WITHOUT_FEATURES=""
+
 some_options=false
 for option
 do
 some_options=false
 for option
 do
@@ -49,11 +52,16 @@ do
   # Split --foo=bar into --foo and bar.
   case $option in
       *=*)
   # Split --foo=bar into --foo and bar.
   case $option in
       *=*)
-        # For ease of scripting treat skip valued options with empty
+        # For ease of scripting skip valued options with empty
         # values.
         optarg=`expr "X$option" : '[^=]*=\(.*\)'` || optarg_ok=false
         option=`expr "X$option" : 'X\([^=]*=\).*'`
         ;;
         # values.
         optarg=`expr "X$option" : '[^=]*=\(.*\)'` || optarg_ok=false
         option=`expr "X$option" : 'X\([^=]*=\).*'`
         ;;
+      --with*)
+        optarg=`expr "X$option" : 'X--[^-]*-\(.*\)'` \
+            || bad_option "Malformed feature toggle: $option"
+        option=`expr "X$option" : 'X\(--[^-]*\).*'`
+        ;;
       *)
         optarg=""
         ;;
       *)
         optarg=""
         ;;
@@ -65,12 +73,21 @@ do
       --prefix=)
         $optarg_ok && SBCL_PREFIX=$optarg
         ;;
       --prefix=)
         $optarg_ok && SBCL_PREFIX=$optarg
         ;;
+      --arch=)
+        $oparg_ok && SBCL_ARCH=$optarg
+        ;;
       --xc-host=)
         $optarg_ok && SBCL_XC_HOST=$optarg
         ;;
       --dynamic-space-size=)
         $optarg_ok && SBCL_DYNAMIC_SPACE_SIZE=$optarg
        ;;
       --xc-host=)
         $optarg_ok && SBCL_XC_HOST=$optarg
         ;;
       --dynamic-space-size=)
         $optarg_ok && SBCL_DYNAMIC_SPACE_SIZE=$optarg
        ;;
+      --with)
+        WITH_FEATURES="$WITH_FEATURES :$optarg"
+        ;;
+      --without)
+        WITHOUT_FEATURES="$WITHOUT_FEATURES :$optarg"
+       ;;
       -*)
         bad_option "Unknown command-line option to $0: \"$option\""
         ;;
       -*)
         bad_option "Unknown command-line option to $0: \"$option\""
         ;;
@@ -86,6 +103,16 @@ do
   some_options=true
 done
 
   some_options=true
 done
 
+if (test -f customize-target-features.lisp && \
+    (test -n "$WITH_FEATURES" || test -n "$WITHOUT_FEATURES"))
+then
+    # Actually there's no reason why it would not work, but it would
+    # be confusing to say --with-thread only to have it turned off by
+    # customize-target-features.lisp...
+    echo "ERROR: Both customize-target-features.lisp, and feature-options"
+    echo "to make.sh present -- cannot use both at the same time."
+fi
+
 # Previously XC host was provided as a positional argument. 
 if test -n "$legacy_xc_spec"
 then
 # Previously XC host was provided as a positional argument. 
 if test -n "$legacy_xc_spec"
 then
@@ -128,6 +155,13 @@ Options:
       taken to be megabytes unless explicitly suffixed with Gb in
       order to specify the size in gigabytes.
 
       taken to be megabytes unless explicitly suffixed with Gb in
       order to specify the size in gigabytes.
 
+  --with-<feature>     Build with specified feature.
+  --without-<feature>  Build wihout the specfied feature.
+
+  --arch=<string>      Specify the architecture to build for.
+
+      Mainly for doing x86 builds on x86-64.
+
   --xc-host=<string>   Specify the Common Lisp compilation host.
 
       The string provided should be a command to invoke the
   --xc-host=<string>   Specify the Common Lisp compilation host.
 
       The string provided should be a command to invoke the
@@ -279,7 +313,8 @@ echo //initializing $ltf
 echo ';;;; This is a machine-generated file.' > $ltf
 echo ';;;; Please do not edit it by hand.' >> $ltf
 echo ';;;; See make-config.sh.' >> $ltf
 echo ';;;; This is a machine-generated file.' > $ltf
 echo ';;;; Please do not edit it by hand.' >> $ltf
 echo ';;;; See make-config.sh.' >> $ltf
-printf '(' >> $ltf
+echo "((lambda (features) (set-difference features (list$WITHOUT_FEATURES)))" >> $ltf
+printf " (union (list$WITH_FEATURES) (list " >> $ltf
 
 echo //guessing default target CPU architecture from host architecture
 case `uname -m` in
 
 echo //guessing default target CPU architecture from host architecture
 case `uname -m` in
@@ -318,7 +353,7 @@ echo //setting up CPU-architecture-dependent information
 sbcl_arch=${SBCL_ARCH:-$guessed_sbcl_arch}
 echo sbcl_arch=\"$sbcl_arch\"
 if [ "$sbcl_arch" = "" ] ; then
 sbcl_arch=${SBCL_ARCH:-$guessed_sbcl_arch}
 echo sbcl_arch=\"$sbcl_arch\"
 if [ "$sbcl_arch" = "" ] ; then
-    echo "can't guess target SBCL architecture, need SBCL_ARCH environment var"
+    echo "can't guess target SBCL architecture, please specify --arch=<name>"
     exit 1
 fi
 printf ":%s" "$sbcl_arch" >> $ltf
     exit 1
 fi
 printf ":%s" "$sbcl_arch" >> $ltf
@@ -564,7 +599,7 @@ export sbcl_os sbcl_arch
 sh tools-for-build/grovel-features.sh >> $ltf
 
 echo //finishing $ltf
 sh tools-for-build/grovel-features.sh >> $ltf
 
 echo //finishing $ltf
-echo ')' >> $ltf
+echo ')))' >> $ltf
 
 # FIXME: The version system should probably be redone along these lines:
 #
 
 # FIXME: The version system should probably be redone along these lines:
 #