#! /usr/bin/env perl # -*- mode: perl -*- ## Toilet Lisp, a Common Lisp subset for the Étoilé runtime. ## Copyright (C) 2008 Matthias Andreas Benkard. ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or (at ## your option) any later version. ## ## This program is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program. If not, see . $CC = $ENV{'CC'} // "gcc"; $CFLAGS = $ENV{'CFLAGS'} // ""; $OBJCFLAGS = $ENV{'OBJCFLAGS'} // $CFLAGS; $MAKE = $ENV{'MAKE'} // "make"; $XCODEBUILD = $ENV{'XCODEBUILD'} // "xcodebuild"; $LLVM_CONFIG = $ENV{'LLVM_CONFIG'} // "llvm-config"; $llvm = `$LLVM_CONFIG --version`; if ($llvm =~ /(\d+)\.(\d+).*/) { $llvm_maj = $1; $llvm_min = $2; } `echo '\#include ' | $CC $CFLAGS $OBJCFLAGS -c -o /dev/null -x c - 2>/dev/null`; if ($? == 0) { $ffi_h = 1; } else { `echo '\#include ' | $CC $CFLAGS $OBJCFLAGS -c -o /dev/null -x c - 2>/dev/null`; if ($? == 0) { $ffi_ffi_h = 1; } else { $no_ffi = 1; } } `echo '\#include ' | $CC $CFLAGS $OBJCFLAGS -c -o /dev/null -x c - 2>/dev/null`; $histedit_h = 1 if ($? == 0); `$XCODEBUILD -version`; if ($? == 0) { $xcode = 1; $build_cmd = "xcodebuild"; } elsif ($ENV{'GNUSTEP_MAKEFILES'} && (`$MAKE --version` =~ /^GNU.*/)) { $build_cmd = "$MAKE"; } $darwin = (`uname -s` =~ "Darwin"); $debian = !$darwin; if ($darwin) { $install = "sudo port install"; } elsif ($debian) { $install = "sudo apt-get install"; } @steps = (); @optional_steps = (); $optional_install = $install; print "Your system lacks the following REQUIRED components:\n"; if ($no_ffi) { print " * libffi\n"; $install = "$install libffi" if $darwin; $install = "$install libffi-dev" if $debian; $installp = 1; } unless ($histedit_h) { print " * libedit\n"; $install = "$install libedit" if $darwin; $install = "$install libedit-dev" if $debian; $installp = 1; } unless ($build_cmd) { print " * Either xcodebuild or GNUstep-Make\n"; if ($debian) { $install = "$install gnustep-make libgnustep-base-dev" if $debian; $installp = 1; } elsif ($darwin) { push @steps, (" * Download and install Xcode from: http://developer.apple.com/tools/download/\n"); push @steps, (" OR: Install gnustep-make and gnustep-base through MacPorts.\n"); } } print "\n"; print "Your system lacks the following OPTIONAL components:\n"; unless ($llvm_maj && $llvm_min && $llvm_maj >= 2 && $llvm_min >= 4) { print " * LLVM >= 2.3\n"; $optional_install = "$optional_install llvm" if $darwin; $optional_install = "$optional_install llvm" if $debian; $optionalp = 1; push @optional_steps, (" NOTE: If your distribution's version of LLVM is too old, please download and\n"); push @optional_steps, (" install it manually from: http://llvm.org/releases/\n"); } if ($installp) { print "\n"; print "In order to be able to compile Toilet Lisp, please follow these steps:\n"; print " * In a shell, type: $install\n" if ($installp); print join("", @steps); print " * Rerun $0.\n"; } if ($optionalp) { print "\n"; print "If you want the compiler, please follow these steps:\n"; print " * In a shell, type: $optional_install\n" if ($optionalp); print join("", @optional_steps); print " * Rerun $0.\n"; } if (!$installp) { print "\n"; print "Congratulations! You can now build Toilet Lisp by following these steps:\n"; if ($xcode) { print " * In a shell, type: $XCODEBUILD"; print " -configuration \"Debug (no LLVM)\"" if ($optionalp); print "\n"; } else { print " * In a shell, type: $MAKE"; print " USE_LLVM=NO" if ($optionalp); print "\n"; } }