Subversion Repositories tendra.SVN

Rev

Rev 113 | 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