768 lines · 21.2 KB · Text
RawDownload
#!/bin/sh## tcc configure script (c) 2003 Fabrice Bellard # set temporary file name# if test ! -z "$TMPDIR" ; then#     TMPDIR1="${TMPDIR}"# elif test ! -z "$TEMPDIR" ; then#     TMPDIR1="${TEMPDIR}"# else#     TMPDIR1="/tmp"# fi## bashism: TMPN="${TMPDIR1}/tcc-conf-${RANDOM}-$$-${RANDOM}.c" TMPN="./conftest-$$"TMPH=$TMPN.h # default parametersprefix=""execprefix=""bindir=""libdir=""tccdir=""includedir=""mandir=""infodir=""sysroot=""cross_prefix=""os_release=""cc="gcc"ar="ar"bigendian="no"mingw32="no"LIBSUF=".a"EXESUF=""DLLSUF=".so"tcc_sysincludepaths=""tcc_libpaths=""tcc_crtprefix=""tcc_elfinterp=""triplet=confvars=suggest="yes"gcc_major=0gcc_minor=0cc_name="gcc"ar_set=cpu=cpuver=dwarf=targetos=build_cross=quiet= # use CC/AR from environment when settest -n "$CC" && cc="$CC"test -n "$AR" && ar="$AR" # set default CFLAGS if unset in environmenttest -z "$CFLAGS" && CFLAGS="-Wall -O2" # find source pathsource_path=${0%configure}source_path=${source_path%/} # $1: --OPTNAME=VALUE [, $2: NAME to assign-to instead of OPTNAME]assign_opt() {  set -- "${2:-${1%%=*}}" "${1#*=}"  # [--OPT]NAME VALUE  eval ${1#--}=\$2  # no risk of IFS/glob in [OPT]NAME} # succeed if $1 doesn't IFS-split funny (globs, spaces, ...)good_split() {  set -- "$1" $1  test $# = 2 && test "$1" = "$2"} # $1: NAME[=VALUE]  succeed if confvars has NAME or NAME=* elementconfvars_has() {  ! case " $confvars " in *" ${1%%=*} "* | *" ${1%%=*}="*)    false  esac} # [multiple] NAME or NAME=VALconfvars_set() {  for cv; do    good_split "$cv" || { echo "configure: ERROR: bad config '$cv'"; exit 1; }    confvars_has "$cv" && echo "configure: WARNING: duplicate config '$cv'"    confvars="$confvars $cv"  done} for opt do  eval opt=\"$opt\"  case "$opt" in  --prefix=*) assign_opt "$opt"  ;;  --exec-prefix=*) assign_opt "$opt" execprefix  ;;  --tccdir=*) assign_opt "$opt"  ;;  --bindir=*) assign_opt "$opt"  ;;  --libdir=*) assign_opt "$opt"  ;;  --includedir=*) assign_opt "$opt"  ;;  --sharedir=*) assign_opt "$opt"  ;;  --mandir=*) assign_opt "$opt"  ;;  --infodir=*) assign_opt "$opt"  ;;  --docdir=*) assign_opt "$opt"  ;;  --sysroot=*) assign_opt "$opt"  ;;  --targetos=*) assign_opt "$opt"  ;;  --source-path=*) assign_opt "$opt" source_path  ;;  --cross-prefix=*) assign_opt "$opt" cross_prefix  ;;  --os-release=*) assign_opt "$opt" os_release  ;;  --cc=*) assign_opt "$opt"  ;;  --ar=*) assign_opt "$opt" ; ar_set="yes"  ;;  --extra-cflags=*) assign_opt "$opt" CFLAGS  ;;  --extra-ldflags=*) assign_opt "$opt" LDFLAGS  ;;  --extra-libs=*) assign_opt "$opt" extralibs  ;;  --sysincludepaths=*) assign_opt "$opt" tcc_sysincludepaths  ;;  --libpaths=*) assign_opt "$opt" tcc_libpaths  ;;  --crtprefix=*) assign_opt "$opt" tcc_crtprefix  ;;  --elfinterp=*) assign_opt "$opt" tcc_elfinterp  ;;  --triplet=*) assign_opt "$opt"  ;;  --cpu=*) assign_opt "$opt"  ;;  --dwarf=*) confvars_set "dwarf=${opt#*=}"  ;;  --enable-cross) confvars_set cross  ;;  --disable-static) confvars_set static=no  ;;  --enable-static) confvars_set static  ;;  --disable-rpath) confvars_set rpath=no  ;;  --debug) confvars_set debug  ;;  --with-selinux) confvars_set selinux  ;;  --tcc-switches=*) assign_opt "$opt" tcc_switches  ;;  --config-mingw32) mingw32=yes  ;;  --config-mingw32=*) assign_opt "$opt" mingw32  ;;  --config-*) confvars_set "${opt#--config-}"; suggest="no"  ;;  --help|-h) show_help="yes"  ;;  -q) quiet=yes  ;;  *) echo "configure: WARNING: unrecognized option $opt"  ;;  esacdone show_help() {cat << EOFUsage: configure [options]Options: [defaults in brackets after descriptions] Standard options:  --help                   print this message  --prefix=PREFIX          install in PREFIX [$prefix]  --exec-prefix=EPREFIX    install architecture-dependent files in EPREFIX			   [same as prefix]  --bindir=DIR             user executables in DIR [EPREFIX/bin]  --libdir=DIR             object code libraries in DIR [EPREFIX/lib]  --tccdir=DIR             installation directory [EPREFIX/lib/tcc]  --includedir=DIR         C header files in DIR [PREFIX/include]  --sharedir=DIR           documentation root DIR [PREFIX/share]  --docdir=DIR             documentation in DIR [SHAREDIR/doc/tcc]  --mandir=DIR             man documentation in DIR [SHAREDIR/man]  --infodir=DIR            info documentation in DIR [SHAREDIR/info]   -q                      be quiet Advanced options (experts only):  --source-path=PATH       path of source code [$source_path]  --sysroot=PREFIX         prepend PREFIX to library/include paths [$sysroot]  --cc=CC                  use C compiler CC [$cc]  --ar=AR                  create archives using AR [$ar]  --extra-cflags=          specify compiler flags [$CFLAGS]  --extra-ldflags=         specify linker options [$LDFLAGS]   --debug                  include debug info with resulting binaries  --disable-static         make libtcc.so instead of libtcc.a  --enable-static          make libtcc.a instead of libtcc.dll (win32)  --disable-rpath          disable use of -rpath with libtcc.so  --with-selinux           use mmap for executable memory (tcc -run)  --enable-cross           build all cross compilers (see also 'make help')   --sysincludepaths=...    specify system include paths, colon separated  --libpaths=...           specify system library paths, colon separated  --crtprefix=...          specify locations of crt?.o, colon separated  --elfinterp=...          specify elf interpreter  --triplet=...            specify system library/include directory triplet  --tcc-switches=...       specify implicit switches passed to tcc   --config-uClibc,-musl    enable system specific configurations  --config-mingw32[=yes|no] build on windows using msys, busybox, etc.  --config-backtrace=no    disable stack backtraces (with -run or -bt)  --config-bcheck=no       disable bounds checker (-b)  --config-predefs=no      do not compile tccdefs.h, instead just include  --config-new_macho=no|yes force apple object format (autodetect osx <= 10)  --config-new_dtags=yes   use new ELF DTAGs (DT_RUNPATH instead of DT_RPATH)  --config-codesign=no     do not use codesign on apple to sign executables  --config-dwarf=x         use dwarf debug info instead of stabs (x=2..5)  --config-pie             let tcc generate position independent executables Cross build options (experimental):  --cpu=CPU                target CPU [$cpu]  --targetos=...           target OS (Darwin,WIN32,Android/Termux) [$targetos]  --os-release=x.y.z       target os release x.y.z [$os_release] (with BSD systems)  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]EOFexit 1} default() # set variable unless already set and not empty{    test -n "$2" && eval : \${$1:=\$2}  # ': ${foo:=$2}'} default_conf() # add one config to confvars unless already present{    confvars_has "$1" || confvars_set "$1"} if test -z "${source_path#.}" ; then  source_path=$(pwd)  source_path_used="no"else  source_path_used="yes"fi # OS specificbuildos=$(uname)cpu_sys=$(uname -m)default os_release "$(uname -r)" case $buildos in  Windows_NT|MINGW*|MSYS*|CYGWIN*)    buildos="WIN32"    case "$MSYSTEM" in      MINGW32) cpu_sys=i386 ;;      MINGW64) cpu_sys=x86_64 ;;      CLANGARM64|MINGW_ARM64) cpu_sys=arm64 ;;    esac  ;;  Linux)    if test "$(uname -o)" = "Android"; then      buildos=Android      if test -n "$TERMUX_VERSION"; then        buildos=Termux      fi    fi  ;;esac if test "$mingw32" = "yes"; then  default targetos WIN32else  default targetos "$buildos"fi default cpu "$cpu_sys" # check for crpss buildif test "$cpu" != "$cpu_sys" ||   test "$targetos" != "$buildos" ||   test -n "$cross_prefix"then  build_cross="yes"  cc="${cross_prefix}${cc}"  ar="${cross_prefix}${ar}"fi case "$cpu" in  x86|i386|i486|i586|i686|i86pc|BePC|i686-AT386)    cpu="i386"  ;;  x86_64|amd64|x86-64)    cpu="x86_64"  ;;  evbarm)    case "`uname -p`" in      aarch64|arm64)        cpu="arm64"        ;;      earmv*)        cpu="arm"        ;;    esac  ;;  aarch64|arm64|evbarm)    cpu="arm64"  ;;  arm*)    case "$cpu" in      arm|armv4l)	cpuver=4      ;;      armv5tel|armv5tejl)	cpuver=5      ;;      armv6j|armv6l)	cpuver=6      ;;      armv7|armv7a|armv7l)	cpuver=7      ;;    esac    cpu="arm"  ;;  alpha)    cpu="alpha"  ;;  "Power Macintosh"|ppc|ppc64)    cpu="ppc"  ;;  mips)    cpu="mips"  ;;  s390)    cpu="s390"  ;;  riscv64)    cpu="riscv64"  ;;  *)    echo "Unsupported CPU"    exit 1  ;;esac case $targetos in  Darwin)    confvars_set OSX dwarf=4    default_conf "codesign"    DLLSUF=".dylib"    if test -z "$build_cross"; then      if test "$cc" = "gcc"; then        cc=`command -v cc`        cc=`readlink $cc || echo clang`      fi      tcc_usrinclude="`xcrun --show-sdk-path`/usr/include"      default tcc_sysincludepaths "{B}/include:$tcc_usrinclude"      if test "${confvars%new_macho*}" = "${confvars}"; then          # if new_macho was not specified and (known) ver <= 10, use old (=no)          osxver=$(sw_vers -productVersion 2>/dev/null)  # X.Y.Z          osxver=${osxver%%.*}  # major version (or empty on sw_vers error)          [ "${osxver:-11}" -ge 11 ] || confvars_set new_macho=no      fi    fi    # on OSX M1 with --cpu=x86_64, build a tcc to run under rosetta entirely    if test "$cpu" = x86_64 && test "$cpu_sys" = arm64; then        CFLAGS="$CFLAGS -arch $cpu"        LDFLAGS="$LDFLAGS -arch $cpu"    fi    ;;  DragonFly|OpenBSD|FreeBSD|NetBSD)    confvars_set BSD ldl=no    ;;  Android|Termux)    if test "$targetos" = "Termux"; then      targetos=Android      default sysroot "/data/data/com.termux/files/usr"    else      default sysroot "/usr"    fi    default prefix "${sysroot}"    confvars_set Android new_dtags rpath=no dwarf=4    test "${cpu}" != "i386" && confvars_set pie    default_conf "static=no"    case "$cpu" in      arm) default triplet "arm-linux-androideabi"; cpuver=7 ;;      arm64) default triplet "aarch64-linux-android" ;;      x86_64) default triplet "x86_64-linux-android" ;;      i386) default triplet "i686-linux-android" ;;    esac    test "${cpu%64}" != "${cpu}" && S="64" || S=""    default tcc_sysincludepaths "{B}/include:{R}/include:{R}/include/${triplet}"    default tcc_libpaths "{B}:{R}/lib:/system/lib${S}"    default tcc_crtprefix "{R}/lib"    default tcc_elfinterp "/system/bin/linker${S}"    default tcc_switches "-Wl,-rpath=$sysroot/lib"    ;;  WIN32)    mingw32="yes"    confvars="WIN32 $confvars"  # WIN32 intentionally first (commit 729918ef)    default prefix "C:/Program Files/tcc"    default tccdir "${prefix}"    default bindir "${tccdir}"    default docdir "${tccdir}/doc"    default libdir "${tccdir}/libtcc"    # set tccdir at runtime from executable path    test "$tccdir" = "$bindir" && tccdir_auto="yes"    # chech $cc to avoid mingw gcc dependencies such as 'libgcc_s_dw2-1.dll'    # (no confirmed $cc_name yet, and also will never have if cross compiling)    test "${cc%gcc*}" = "$cc" || default LDFLAGS "-static"    LIBSUF=".lib"    EXESUF=".exe"    DLLSUF=".dll"    if test "$source_path_used" = "no"; then      source_path="."    fi    ;;  *)    ;;esac if test "$mingw32" = "no"; then  default prefix       "/usr/local"  default execprefix   "${prefix}"  default libdir       "${execprefix}/lib"  default bindir       "${execprefix}/bin"  default tccdir       "${libdir}/tcc"  default includedir   "${prefix}/include"  default sharedir     "${prefix}/share"  default docdir       "${sharedir}/doc"  default mandir       "${sharedir}/man"  default infodir      "${sharedir}/info"fi if test x"$show_help" = "xyes" ; then    show_helpfi CONFTEST=./conftest$EXESUFif test -z "$cross_prefix" \    && $cc -o $CONFTEST "$source_path/conftest.c" \    && $CONFTEST 2>/dev/null; then  cc_name="$($CONFTEST compiler)"  gcc_major="$($CONFTEST version)"  gcc_minor="$($CONFTEST minor)"else  if test -z "$build_cross"; then    echo "configure: error: '$cc' failed to compile conftest.c."  fi  if test "${cc%tcc*}" != "$cc"; then    cc_name="tcc"  elif test "${cc%clang*}" != "$cc"; then    cc_name="clang"  fifi if test -z "$build_cross"; then  bigendian="$($CONFTEST bigendian)"  _triplet="$($CONFTEST triplet)"  if test "$mingw32" = "no" ; then      if test -z "$triplet" && test -n "$_triplet"; then        if test -f "/usr/lib/$_triplet/crti.o"; then          triplet="$_triplet"        fi      fi      if test -z "$triplet"; then        case $cpu in x86_64|arm64|riscv64)          if test -f "/usr/lib64/crti.o" ; then            default tcc_libpaths "{B}:/usr/lib64"            default tcc_crtprefix "/usr/lib64"          fi        esac      fi      if test "$suggest" = "yes"; then        if test -f "/lib/ld-uClibc.so.0" ; then          echo "Perhaps you want ./configure --config-uClibc"        fi        if test -f "/lib/ld-musl-${cpu}.so.1"; then          echo "Perhaps you want ./configure --config-musl"        fi      fi  fielse  # can only make guesses about compiler and target  case $cpu in    ppc|mips|s390)  bigendian=yes;;

Lines 1–500 of 768.