Rev 105 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#!/bin/sh
# $Id\$
#
# Copyright (c) 2002-2005 The TenDRA Project <http://www.tendra.org/>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of The TenDRA Project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific, prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
# This script is inspired by Postfix' makedefs script.
# The purpose of this script is to determine the host on which we are
# compiling TenDRA and provide sane compilation defaults.
HOSTARCH=`uname -m`
SYSTEM=`uname -s`
VERSION=`uname -r`
. ./makedefs.funcs
if [ "${1}" = "-h" ]; then
usage
exit
fi
if [ -f defs.mk ]; then
echo "NOTICE: defs.mk file found, backing up to defs.mk.bak, overwriting..."
echo
cp defs.mk defs.mk.bak
fi
echo "${SYSTEM}.${VERSION} ${HOSTARCH} detected..."
echo
# See the URL in the warning below for why this is bad.
if [ ! -z ${LD_LIBRARY_PATH} ]; then
echo "WARNING: LD_LIBRARY_PATH set, please don't do that (see:"
echo "http://www.visi.com/~barr/ldpath.html)"
echo "Setting to empty environment variable..."
echo
LD_LIBRARY_PATH=""
fi
# Set up defaults
EXECFORMAT=elf # ELF is the de facto executable file format nowadays.
case "${SYSTEM}.${VERSION}" in
DragonFly.1*) # Use the system supplied GCC for CC.
# System definition is __DragonFly__
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=
LDCRT="/usr/lib/crt1.o"
LIBS="-L/usr/lib -lc"
OSFAM="dragonfly"
OSVER="DRAGONFLY1"
;;
FreeBSD.4*) # Use the system supplied GCC for CC.
# System definition is __FreeBSD__
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=
LDCRT="/usr/lib/crt1.o"
LIBS="-L/usr/lib -lc"
OSFAM="freebsd"
OSVER="FREEBSD4"
;;
FreeBSD.5*) # Use the system supplied GCC for CC.
# System definition is __FreeBSD__
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=
LDCRT="/usr/lib/crt1.o"
LIBS="-L/usr/lib -lc"
OSFAM="freebsd"
OSVER="FREEBSD5"
;;
FreeBSD.6*) # Use the system supplied GCC for CC.
# System definition is __FreeBSD__
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=
LDCRT="/usr/lib/crt1.o"
LIBS="-L/usr/lib -lc"
OSFAM="freebsd"
OSVER="FREEBSD6"
;;
FreeBSD.7*) # Use the system supplied GCC for CC.
# System definition is __FreeBSD__
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=
LDCRT="/usr/lib/crt1.o"
LIBS="-L/usr/lib -lc"
OSFAM="freebsd"
OSVER="FREEBSD7"
;;
FreeBSD.*) # Use the system supplied GCC for CC.
# System definition is __FreeBSD__
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=
LDCRT="/usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o"
#LDCRT="/usr/lib/crt1.o"
LIBS="-L/usr/lib -lc"
OSFAM="freebsd"
OSVER="12"
MKDIRCMD="/bin/mkdir"
RMCMD="/bin/rm -rf"
ASCMD="/usr/bin/as"
AS1CMD="/usr/bin/as"
LDCMD="/usr/bin/ld"
;;
Plan9.*) #Plan 9
LD="ld"
CC="cc"
CFLAGS="-DFS_TEMPNAM=0 -D_BSD_EXTENSION ${CFLAGS}"
LDOPTS=
LDCRT="/usr/lib/crt1.o"
LIBS="-L/usr/lib -lc"
OSFAM="plan9"
OSVER="4"
EXECFORMAT="aout"
;;
Linux.2.4*) # Use the system supplied GCC for CC.
# System definition is __linux
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS="--dynamic-linker /lib/ld-linux.so.2"
LDCRT="/usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o"
LIBS="-L/usr/lib -lc"
OSFAM="linux"
OSVER="LINUX24"
;;
Linux.2.6*) # Use the system supplied GCC for CC.
# System definition is __linux
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=""
LDCRT="/usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o"
LIBS="-L/usr/lib -lc"
OSFAM="linux"
OSVER="LINUX26"
;;
Minix.2*) # Use the system supplied cc for CC.
# It aims to be C90 conforming.
check_cc
LD=""
CFLAGS=${CFLAGS}
LDOPTS=
LDCRT=""
# Minix only runs on x86 for now.
LIBS="-L/usr/lib/i386 -lc"
OSFAM="minix"
OSVER="MINIX2"
;;
NetBSD.1*) #
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=
LDCRT="/usr/lib/crt0.o"
LIBS="-L/usr/lib -lc"
OSFAM="netbsd"
OSVER="NETBSD1"
;;
NetBSD.2*) #
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS="--dynamic-linker /libexec/ld.elf_so"
LDCRT="/usr/lib/crt0.o /usr/lib/crti.o /usr/lib/crtn.o"
LIBS="-L/usr/lib -lc"
OSFAM="netbsd"
OSVER="NETBSD2"
;;
NetBSD.3*) #
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=
LDCRT=
LIBS="-lc"
OSFAM="netbsd"
OSVER="NETBSD3"
;;
NetBSD.7*) #
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=
LIBS="-lc"
OSFAM="netbsd"
OSVER="7.x"
ASCMD="/usr/bin/as"
AS1CMD="/usr/bin/as"
LDCMD="/usr/bin/ld"
if [ -z "${PREFIX}" ]; then
PREFIX=/usr/local;
fi
LDCRT="/usr/lib/crt0.o /usr/lib/crti.o /usr/lib/crtn.o"
;;
NetBSD.8*) #
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=
LIBS="-lc"
OSFAM="netbsd"
OSVER="NETBSD8"
ASCMD="/usr/bin/as"
AS1CMD="/usr/bin/as"
LDCMD="/usr/bin/ld"
if [ -z "${PREFIX}" ]; then
PREFIX=/usr/local;
fi
LDCRT="/usr/lib/crt0.o /usr/lib/crti.o /usr/lib/crtn.o"
;;
OpenBSD.3*) #
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=
LDCRT="/usr/lib/crt0.o"
LIBS="-L/usr/lib -lc"
OSFAM="openbsd"
OSVER="OPENBSD3"
;;
OpenBSD.4*) #
check_cc
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=
LDCRT="/usr/lib/crt0.o"
LIBS="-L/usr/lib -lc"
OSFAM="openbsd"
OSVER="OPENBSD4"
;;
SunOS.5*) # Do not use the cc in /usr/ucb since it is an optional
# software package.
if [ "x${CC}" = "x" ]; then
CC=`/usr/bin/env cc`
case "${CC}" in
*ucb*cc*)
echo "Please set your PATH or CC environment variable to a working compiler and not"
echo "the ucb/cc one"
exit 1
;;
esac;
fi
CC=${CC}
LD="ld"
CFLAGS=${CFLAGS}
LDOPTS=
LDCRT=
LIBS="-L/usr/lib -lc"
OSFAM="sunos"
OSVER="SUNOS5"
;;
*) # Make sure we specify what we want to hear from the
# people submitting feedback.
echo "Unknown \"${SYSTEM}\" and \"${VERSION}\" combination"
echo "Please report the following to the developers:"
echo
echo "uname -r: ${VERSION}"
echo "uname -s: ${SYSTEM}"
echo
;;
esac
check_hostarch
BASE_DIR=`pwd`
INSTALL_DIR="/usr/local/lib/TenDRA-5.0.0"
CFLAGS="${CFLAGS} -I${BASE_DIR}/src/include"
echo "Setting defs.mk environment to the following:"
echo
echo "PREFIX: ${PREFIX}"
echo "CC: ${CC}"
echo "CCVER_MAJOR: ${CCVER_MAJOR}"
echo "CCVER_MINOR: ${CCVER_MINOR}"
echo "CCVER_TINY: ${CCVER_TINY}"
echo "LD: ${LD}"
echo "MKDIR ${MKDIRCMD}"
echo "RM ${RMCMD}"
echo "CFLAGS: ${CFLAGS}"
echo "LDOPTS: ${LDOPTS}"
echo "LDCRT: ${LDCRT}"
echo "LIBS: ${LIBS}"
echo "OSFAM: ${OSFAM}"
echo "OSVER: ${OSVER}"
echo "BLDARCH: ${BLDARCH} (${HOSTARCH})"
echo "BLDARCHBITS: ${BLDARCHBITS} bit"
echo "EXECFORMAT: ${EXECFORMAT}"
echo "BASE_DIR: ${BASE_DIR}"
echo "INSTALL_DIR: ${INSTALL_DIR}"
cat > defs.mk <<EOF
PREFIX=${PREFIX}
CC?=${CC}
CCVER_MAJOR=${CCVER_MAJOR}
CCVER_MINOR=${CCVER_MINOR}
CCVER_TINY=${CCVER_TINY}
LD?=${LD}
CFLAGS=${CFLAGS}
LDOPTS=${LDOPTS}
LDCRT=${LDCRT}
LIBS=${LIBS}
OSFAM=${OSFAM}
OSVER=${OSVER}
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
BLDARCH=${BLDARCH}
BLDARCHBITS=${BLDARCHBITS}
EXECFORMAT=${EXECFORMAT}
BASE_DIR=${BASE_DIR}
INSTALL_DIR=${INSTALL_DIR}
BOOTSTRAP_DIR=${BASE_DIR}/bootstrap_install
CRT0=${CRT0}
CRT1=${CRT1}
CRTN=${CRTN}
BUILD_ERRORS=\$(BASE_DIR)/src/build/BUILD_ERRORS
# Binary paths
SHELL= /bin/sh
ENVCMD=
ASCMD= ${ASCMD}
LDCMD= ${LDCMD}
MKDIRCMD= ${MKDIRCMD}
RMCMD= ${RMCMD}
# Keep in alphabetical order
AS= \${ASCMD}
AR= \${ENVCMD} ar
COPY= \${ENVCMD} cp
ECHO= \${ENVCMD} echo
ECHODIR= \${ENVCMD} echo
EXIT= exit
INSTALL= ${ENVCMD} install
LN= \${ENVCMD} ln
MKDIR= \${ENVCMD} mkdir
MOVE= \${ENVCMD} mv
RANLIB= \${ENVCMD} ranlib
REMOVE= \${ENVCMD} rm -f
SORT= \${ENVCMD} sort
TEST= \${ENVCMD} test
TOKENS_COMMON= src/lib/machines/common/tokens
TOKENS_MACH= src/lib/machines/\$(OSFAM)/\$(BLDARCH)/tokens
INSTALL_DIR=\$(BASE_DIR)/install
INSTALL_MACHDIR= \$(INSTALL_DIR)/machines/\$(OSFAM)/\$(BLDARCH)
# Directory where to install binarie tools like tcc and tld
INSTALL_BINDIR= \$(INSTALL_MACHDIR)/bin
# Directory where to install environments for tcc
INSTALL_ENVDIR= \$(INSTALL_MACHDIR)/env
INSTALL_STARTUPDIR= \$(INSTALL_MACHDIR)/startup
INSTALL_LIBDIR= \$(INSTALL_DIR)/lib
TLD= \$(INSTALL_BINDIR)/tld
TCC= \$(INSTALL_BINDIR)/tcc
TPL= \$(INSTALL_BINDIR)/tpl
SID= \$(INSTALL_BINDIR)/sid
TSPEC= \$(INSTALL_BINDIR)/tspec
TNC= \$(INSTALL_BINDIR)/tnc
#directories
COMMON_DIR=${INSTALL_DIR}/lib
MACH_DIR=${INSTALL_DIR}/machines
MAN_DIR=/usr/local/man
WORK_DIR=${BASE_DIR}/work
TEMP_DIR=/var/tmp
MACH_CPU=\$(BLDARCH)
MACH_OS=\$(OSFAM)
MACH_BASE=${MACH_DIR}/${MACH_OS}/${MACH_CPU}
#MACH_WORK=${WORK_DIR}/${MACH_OS}/${MACH_CPU}
PUBLIC_BIN=/usr/local/bin
EOF