#!/bin/bash
#
# Copyright (c) 2006 Mellanox Technologies. All rights reserved.
#
# This Software is licensed under one of the following licenses:
#
# 1) under the terms of the "Common Public License 1.0" a copy of which is
#    available from the Open Source Initiative, see
#    http://www.opensource.org/licenses/cpl.php.
#
# 2) under the terms of the "The BSD License" a copy of which is
#    available from the Open Source Initiative, see
#    http://www.opensource.org/licenses/bsd-license.php.
#
# 3) under the terms of the "GNU General Public License (GPL) Version 2" a
#    copy of which is available from the Open Source Initiative, see
#    http://www.opensource.org/licenses/gpl-license.php.
#
# Licensee has the right to choose one of the above licenses.
#
# Redistributions of source code must retain the above copyright
# notice and one of the license notices.
#
# Redistributions in binary form must reproduce both the above copyright
# notice, one of the license notices in the documentation
# and/or other materials provided with the distribution.
#
#  $Id: configure 9097 2006-08-24 06:39:09Z vlad $
#

usage()
{
cat << EOF
\`configure' configures variables for kernel modules compilation

Usage:  `basename $0` [options]

    --prefix=PREFIX  for userspace components [/usr]
    --build_root=BUILD_ROOT  root directory to build RPM packages
    --kernel-version=VERSION  make for this kernel [$(uname -r)]
    --modules-dir=DIR  modules directory [/lib/modules/$(uname -r)]
    --kernel-sources=DIR  make for this kernel [/lib/modules/$(uname -r)/build]
    --skip-autoconf
    -j[N]|--with-njobs=[N] : Allow N configure jobs at once; jobs as number of CPUs with no arg.

    Kernel modules configuration:

    --build-dummy-mods    Build dummy modules for ULPs and storage drivers [no]

    --with-core-mod    make CONFIG_INFINIBAND=m [no]
    --without-core-mod   [yes]

    --with-ipoib-mod    make CONFIG_INFINIBAND_IPOIB=m [no]
    --without-ipoib-mod   [yes]

    --with-ipoib-cm    make CONFIG_INFINIBAND_IPOIB_CM=y [yes]
    --without-ipoib-cm   [no]

    --with-ipoib-allmulti    make CONFIG_IPOIB_ALL_MULTI=y [yes]
    --without-ipoib-allmulti   [no]

    --with-ipoib_debug-mod    make CONFIG_INFINIBAND_IPOIB_DEBUG=y [yes]
    --without-ipoib_debug-mod    [no]

    --with-ipoib_debug_data-mod    make CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y [no]
    --without-ipoib_debug_data-mod    [yes]

    --with-e_ipoib-mod    make CONFIG_E_IPOIB=m [no]
    --without-e_ipoib-mod    [yes]

    --with-sdp-mod    make CONFIG_INFINIBAND_SDP=m [no]
    --without-sdp-mod    [yes]

    --with-sdp_debug-mod    make CONFIG_INFINIBAND_SDP_DEBUG=y [yes]
    --without-sdp_debug-mod   [no]

    --with-sdp_debug_data-mod    make CONFIG_INFINIBAND_SDP_DEBUG_DATA=y [no]
    --without-sdp_debug_data-mod    [yes]

    --with-srp-mod    make CONFIG_INFINIBAND_SRP=m [no]
    --without-srp-mod    [yes]

    --with-user_mad-mod    make CONFIG_INFINIBAND_USER_MAD=m [no]
    --without-user_mad-mod    [yes]

    --with-user_access-mod    make CONFIG_INFINIBAND_USER_ACCESS=m [no]
    --without-user_access-mod    [yes]

    --with-addr_trans-mod    make CONFIG_INFINIBAND_ADDR_TRANS=y [no]
    --without-addr_trans-mod    [yes]

    --with-mthca-mod    make CONFIG_INFINIBAND_MTHCA=m [no]
    --without-mthca-mod    [yes]

    --with-mthca_debug-mod    make CONFIG_INFINIBAND_MTHCA_DEBUG=y [yes]
    --without-mthca_debug-mod    [no]

    --with-mlx4-mod         make CONFIG_MLX4_CORE=y CONFIG_MLX4_INFINIBAND=y [no]
    --without-mlx4-mod      [yes]

    --with-mlx5-mod         make CONFIG_MLX5_CORE=y CONFIG_MLX5_INFINIBAND=y [no]
    --without-mlx5-mod      [yes]

    --with-mlx4_core-mod         make CONFIG_MLX4_CORE=y [no]
    --without-mlx4_core-mod      [yes]

    --with-mlx5_core-mod         make CONFIG_MLX5_CORE=y [no]
    --without-mlx5_core-mod      [yes]

    --with-mlx4_en-mod         make CONFIG_MLX4_EN=y [no]
    --without-mlx4_en-mod      [yes]

    --with-mlx4_vnic-mod         make CONFIG_MLX4_VNIC=y [no]
    --without-mlx4_vnic-mod      [yes]

    --with-mlx4_en-perf-stat     make CONFIG_MLX4_EN_PERF_STAT=y [no]
    --without-mlx4_en-perf-stat  [yes]

    --with-mlx4_vnic_debug-mod    make CONFIG_MLX4_VNIC_DEBUG=y [yes]
    --without-mlx4_vnic_debug-mod    [no]

    --with-mlx4_inf-mod         make CONFIG_MLX4_INFINIBAND=y [no]
    --without-mlx4_inf-mod      [yes]

    --with-mlx5_inf-mod         make CONFIG_MLX5_INFINIBAND=y [no]
    --without-mlx5_inf-mod      [yes]

    --with-mlx4_fc-mod         make CONFIG_MLX4_FC=y [no]
    --without-mlx4_fc-mod      [yes]

    --with-mlx4_debug-mod         make CONFIG_MLX4_DEBUG=y [yes]
    --without-mlx4_debug-mod      [no]

    --with-mlx5_debug-mod         make CONFIG_MLX5_DEBUG=y [yes]
    --without-mlx5_debug-mod      [no]

    --with-ipath_inf-mod    make CONFIG_INFINIBAND_IPATH=m [no]
    --without-ipath_inf-mod    [yes]

    --with-9pnet_rdma-mod    make CONFIG_NET_9P_RDMA=m [no]
    --without-9pnet_rdma-mod    [yes]

    --with-9p-mod    make CONFIG_9P_FS=m [no]
    --without-9p-mod    [yes]

    --with-qib-mod    make CONFIG_INFINIBAND_QIB=m [no]
    --without-qib-mod    [yes]

    --with-iser-mod    make CONFIG_INFINIBAND_ISER=m [no]
    --without-iser-mod    [yes]

    --with-isert-mod    make CONFIG_INFINIBAND_ISERT=m [no]
    --without-isert-mod    [yes]

    --with-ehca-mod    make CONFIG_INFINIBAND_EHCA=m [no]
    --without-ehca-mod    [yes]

    --with-rds-mod    make CONFIG_RDS=m [no]
    --without-rds-mod   [no]

    --with-rds_debug-mod    make CONFIG_RDS_DEBUG=y [no]
    --without-rds_debug-mod    [yes]

    --with-madeye-mod   make CONFIG_INFINIBAND_MADEYE=m [no]
    --without-madeye-mod    [yes]

    --with-qlgc_vnic-mod    make CONFIG_INFINIBAND_QLGC_VNIC=m [no]
    --without-qlgc_vnic-mod    [yes]

    --with-qlgc_vnic_stats-mod    make CONFIG_INFINIBAND_QLGC_VNIC_STATS=y [no]
    --without-qlgc_vnic_stats-mod    [yes]

    --with-cxgb3-mod    make CONFIG_INFINIBAND_CXGB3=m [no]
    --without-cxgb3-mod    [yes]

    --with-cxgb3i-mod    make CONFIG_SCSI_CXGB3_ISCSI=m [no]
    --without-cxgb3i-mod    [yes]

    --with-cxgb3_debug-mod    make CONFIG_INFINIBAND_CXGB3_DEBUG=y [no]
    --without-cxgb3_debug-mod    [yes]

    --with-cxgb4-mod    make CONFIG_INFINIBAND_CXGB4=m [no]
    --without-cxgb4-mod    [yes]

    --with-cxgb4i-mod    make CONFIG_SCSI_CXGB4_ISCSI=m [no]
    --without-cxgb4i-mod    [yes]

    --with-nes-mod    make CONFIG_INFINIBAND_NES=m [no]
    --without-nes-mod    [yes]

    --with-ocrdma-mod    make CONFIG_INFINIBAND_OCRDMA=m [no]
    --without-ocrdma-mod    [yes]

    --with-nes_debug-mod    make CONFIG_INFINIBAND_NES_DEBUG=y [no]
    --without-nes_debug-mod    [yes]

    --with-memtrack  enable momory tracking [no]
    --without-memtrack disable memory tracking [yes]

    --with-debug-info  make CONFIG_DEBUG_INFO=y [yes]
    --without-debug-info [no]

    --with-nfsrdma-mod    make CONFIG_SUNRPC_XPRT_RDMA=m [no]
    --without-nfsrdma-mod    [yes]

    --with-amso1100-mod    make CONFIG_INFINIBAND_AMSO1100=m [no]
    --without-amso1100-mod    [yes]

    --with-scsi_transport_srp-mod    make CONFIG_SCSI_SRP_ATTRS=m [no]
    --without-scsi_transport_srp-mod    [yes]

    --with-odp             make CONFIG_INFINIBAND_ON_DEMAND_PAGING=y [no]
    --without-odp             [yes]

    --with-wqe-format             make CONFIG_INFINIBAND_WQE_FORMAT=y [no]
    --without-wqe-format             [yes]

    --with-pa-mr             make CONFIG_INFINIBAND_PA_MR=y [no]
    --without-pa-mr             [yes]

    --with-nvmf_host-mod    make CONFIG_NVMF_HOST=m [no]
    --without-nvmf_host-mod    [yes]

    --with-nvmf_target-mod    make CONFIG_NVMF_TARGET=m [no]
    --without-nvmf_target-mod    [yes]

    --help - print out options


EOF

#   Currently not supported options
#    --with-sdp-zcopy  make CONFIG_INFINIBAND_SDP_SEND_ZCOPY=y CONFIG_INFINIBAND_SDP_RECV_ZCOPY=y [no]
#    --without-sdp-zcopy [yes]
}

# Execute command w/ echo and exit if it fail
ex()
{
        echo "$@"
        if ! "$@"; then
                printf "\nFailed executing $@\n\n"
                exit 1
        fi
}

# Compare 2 kernel versions
check_kerver()
{
        local kver=$1
        local min_kver=$2
        shift 2

        kver_a=$(echo -n ${kver} | cut -d '.' -f 1)
        kver_b=$(echo -n ${kver} | cut -d '.' -f 2)
        kver_c=$(echo -n ${kver} | cut -d '.' -f 3 | cut -d '-' -f 1 | tr -d [:alpha:][:punct:])

        min_kver_a=$(echo -n ${min_kver} | cut -d '.' -f 1)
        min_kver_b=$(echo -n ${min_kver} | cut -d '.' -f 2)
        min_kver_c=$(echo -n ${min_kver} | cut -d '.' -f 3 | cut -d '-' -f 1 | tr -d [:alpha:][:punct:])

        if [ ${kver_a} -lt ${min_kver_a} ] ||
                [[ ${kver_a} -eq ${min_kver_a} && ${kver_b} -lt ${min_kver_b} ]] ||
                [[ ${kver_a} -eq ${min_kver_a} && ${kver_b} -eq ${min_kver_b} && ${kver_c} -lt ${min_kver_c} ]]; then
                return 1
        fi

        return 0
}

function check_autofconf {
	VAR=$1
	VALUE=$(tac ${KSRC}/include/*/autoconf.h | grep -m1 ${VAR} | sed -ne 's/.*\([01]\)$/\1/gp')

	eval "export $VAR=$VALUE"
}

function add_conf {
    COMMENT=$1
    PARAM=${2%=*}
    VALUE=${2#*=}
    OICONF=${PWD}/ofed_scripts/openib.conf.tmp

    touch $OICONF
    if ! (grep -wq "^$PARAM" $OICONF > /dev/null 2>&1); then
        echo >> "${OICONF}"
        echo "${COMMENT}" >> "${OICONF}"
        echo "${PARAM}=${VALUE}" >> "${OICONF}"
    fi
}

# set defaults

SKIP_AUTOCONF=${SKIP_AUTOCONF:-0}
BUILD_DUMMY_MODS=${BUILD_DUMMY_MODS:-0}
NJOBS=1
FORCE_AUTOGEN=${FORCE_AUTOGEN:-0}
CONFIG_MEMTRACK=${CONFIG_MEMTRACK:-''}
CONFIG_DEBUG_INFO=${CONFIG_DEBUG_INFO:-'y'}
CONFIG_INFINIBAND=${CONFIG_INFINIBAND:-''}
CONFIG_INFINIBAND_IPOIB=${CONFIG_INFINIBAND_IPOIB:-''}
CONFIG_INFINIBAND_IPOIB_CM=${CONFIG_INFINIBAND_IPOIB_CM:-''}
CONFIG_INFINIBAND_SDP=${CONFIG_INFINIBAND_SDP:-''}
CONFIG_INFINIBAND_SDP_DUMMY=${CONFIG_INFINIBAND_SDP_DUMMY:-''}
CONFIG_INFINIBAND_SRP=${CONFIG_INFINIBAND_SRP:-''}
CONFIG_INFINIBAND_SRP_DUMMY=${CONFIG_INFINIBAND_SRP_DUMMY:-''}

CONFIG_INFINIBAND_USER_MAD=${CONFIG_INFINIBAND_USER_MAD:-''}
CONFIG_INFINIBAND_USER_ACCESS=${CONFIG_INFINIBAND_USER_ACCESS:-''}
CONFIG_INFINIBAND_ADDR_TRANS=${CONFIG_INFINIBAND_ADDR_TRANS:-''}
CONFIG_INFINIBAND_USER_MEM=${CONFIG_INFINIBAND_USER_MEM:-''}
CONFIG_INFINIBAND_MTHCA=${CONFIG_INFINIBAND_MTHCA:-''}

CONFIG_MLX4_CORE=${CONFIG_MLX4_CORE:-''}
CONFIG_MLX5_CORE=${CONFIG_MLX5_CORE:-''}
CONFIG_MLX4_EN=${CONFIG_MLX4_EN:-''}
CONFIG_MLX4_VNIC=${CONFIG_MLX4_VNIC:-''}
CONFIG_MLX4_INFINIBAND=${CONFIG_MLX4_INFINIBAND:-''}
CONFIG_MLX5_INFINIBAND=${CONFIG_MLX5_INFINIBAND:-''}
CONFIG_MLX4_DEBUG=${CONFIG_MLX4_DEBUG:-''}
CONFIG_MLX5_DEBUG=${CONFIG_MLX5_DEBUG:-''}
CONFIG_BACKPORT_LRO=${CONFIG_BACKPORT_LRO:-''}
CONFIG_MLX4_EN_PERF_STAT=${CONFIG_MLX4_EN_PERF_STAT:-''}

CONFIG_MLX4_FC=${CONFIG_MLX4_FC:-''}

CONFIG_INFINIBAND_IPOIB_DEBUG=${CONFIG_INFINIBAND_IPOIB_DEBUG:-''}
CONFIG_INFINIBAND_ISER=${CONFIG_INFINIBAND_ISER:-''}
CONFIG_INFINIBAND_ISER_DUMMY=${CONFIG_INFINIBAND_ISER_DUMMY:-''}
CONFIG_INFINIBAND_ISERT=${CONFIG_INFINIBAND_ISERT:-''}
CONFIG_INFINIBAND_ISERT_DUMMY=${CONFIG_INFINIBAND_ISERT_DUMMY:-''}
CONFIG_SCSI_ISCSI_ATTRS=${CONFIG_SCSI_ISCSI_ATTRS:-''}
CONFIG_ISCSI_TCP=${CONFIG_ISCSI_TCP:-''}
CONFIG_INFINIBAND_EHCA=${CONFIG_INFINIBAND_EHCA:-''}
CONFIG_INFINIBAND_EHCA_SCALING=${CONFIG_INFINIBAND_EHCA_SCALING:-''}
CONFIG_E_IPOIB=${CONFIG_E_IPOIB:-''}
CONFIG_RDS=${CONFIG_RDS:-''}
CONFIG_RDS_DUMMY=${CONFIG_RDS_DUMMY:-''}
CONFIG_RDS_RDMA=${CONFIG_RDS_RDMA:-''}
CONFIG_RDS_TCP=${CONFIG_RDS_TCP:-''}
CONFIG_RDS_DEBUG=${CONFIG_RDS_DEBUG:-''}
CONFIG_INFINIBAND_MADEYE=${CONFIG_INFINIBAND_MADEYE:-''}
CONFIG_INFINIBAND_QLGC_VNIC=${CONFIG_INFINIBAND_QLGC_VNIC:-''}
CONFIG_INFINIBAND_CXGB3=${CONFIG_INFINIBAND_CXGB3:-''}
CONFIG_CHELSIO_T3=${CONFIG_CHELSIO_T3:-''}
CONFIG_INFINIBAND_CXGB4=${CONFIG_INFINIBAND_CXGB4:-''}
CONFIG_CHELSIO_T4=${CONFIG_CHELSIO_T4:-''}
CONFIG_SCSI_CXGB3_ISCSI=${CONFIG_SCSI_CXGB3_ISCSI:-''}
CONFIG_SCSI_CXGB4_ISCSI=${CONFIG_SCSI_CXGB4_ISCSI:-''}
CONFIG_NVMF_HOST=${CONFIG_NVMF_HOST:-''}
CONFIG_NVMF_HOST_DUMMY=${CONFIG_NVMF_HOST_DUMMY:-''}
CONFIG_NVMF_TARGET=${CONFIG_NVMF_TARGET:-''}
CONFIG_NVMF_TARGET_DUMMY=${CONFIG_NVMF_TARGET_DUMMY:-''}
CONFIG_INFINIBAND_NES=${CONFIG_INFINIBAND_NES:-''}
CONFIG_INFINIBAND_OCRDMA=${CONFIG_INFINIBAND_OCRDMA:-''}

CONFIG_SUNRPC_XPRT_RDMA=${CONFIG_SUNRPC_XPRT_RDMA:-''}
CONFIG_SUNRPC_XPRT_RDMA_DUMMY=${CONFIG_SUNRPC_XPRT_RDMA_DUMMY:-''}
CONFIG_SUNRPC_XPRT_RDMA_CLIENT=${CONFIG_SUNRPC_XPRT_RDMA_CLIENT:-''}
CONFIG_SUNRPC_XPRT_RDMA_SERVER=${CONFIG_SUNRPC_XPRT_RDMA_SERVER:-''}
CONFIG_SCSI_SRP_ATTRS=${CONFIG_SCSI_SRP_ATTRS:-''}
CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=${CONFIG_INFINIBAND_IPOIB_DEBUG_DATA:-''}
CONFIG_INFINIBAND_SDP_SEND_ZCOPY=${CONFIG_INFINIBAND_SDP_SEND_ZCOPY:-''}
CONFIG_INFINIBAND_SDP_RECV_ZCOPY=${CONFIG_INFINIBAND_SDP_RECV_ZCOPY:-''}
CONFIG_INFINIBAND_SDP_DEBUG=${CONFIG_INFINIBAND_SDP_DEBUG:-''}
CONFIG_INFINIBAND_SDP_DEBUG_DATA=${CONFIG_INFINIBAND_SDP_DEBUG_DATA:-''}
CONFIG_INFINIBAND_IPATH=${CONFIG_INFINIBAND_IPATH:-''}
CONFIG_NET_9P_RDMA=${CONFIG_NET_9P_RDMA:-''}
CONFIG_9P_FS=${CONFIG_9P_FS:-''}
CONFIG_INFINIBAND_QIB=${CONFIG_INFINIBAND_QIB:-''}
CONFIG_INFINIBAND_MTHCA_DEBUG=${CONFIG_INFINIBAND_MTHCA_DEBUG:-''}
CONFIG_INFINIBAND_QLGC_VNIC_STATS=${CONFIG_INFINIBAND_QLGC_VNIC_STATS:-''}
CONFIG_INFINIBAND_CXGB3_DEBUG=${CONFIG_INFINIBAND_CXGB3_DEBUG:-''}
CONFIG_INFINIBAND_NES_DEBUG=${CONFIG_INFINIBAND_NES_DEBUG:-''}
CONFIG_INFINIBAND_AMSO1100=${CONFIG_INFINIBAND_AMSO1100:-''}
CONFIG_MLX4_EN_DCB=''
CONFIG_MLX4_IB_DEBUG_FS=''
CONFIG_INFINIBAND_ON_DEMAND_PAGING=${CONFIG_INFINIBAND_ON_DEMAND_PAGING:-'y'}
CONFIG_INFINIBAND_WQE_FORMAT=${CONFIG_INFINIBAND_WQE_FORMAT:-''}
CONFIG_INFINIBAND_PA_MR=${CONFIG_INFINIBAND_PA_MR:-''}

main()
{
        ofed_patch_params=
        # Parsing parameters
        while [ ! -z "$1" ]
        do
                case $1 in
                        -prefix | --prefix | --prefi | --pref | --pre | --pr | --p | -p)
                                shift
                                prefix=$1
                                PREFIX="--prefix ${prefix}"
                        ;;
                        -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=* | -p=*)
                                prefix=`expr "x$1" : 'x[^=]*=\(.*\)'`
                                PREFIX="--prefix ${prefix}"
                        ;;
                        -kernel-version | --kernel-version | --kern-ver | --ker-ver)
                                ofed_patch_params="$ofed_patch_params $1"
                                shift
                                ofed_patch_params="$ofed_patch_params $1"
                                KVERSION=$1
                        ;;
                        -kernel-version=* | --kernel-version=* | --kern-ver=* | --ker-ver=*)
                                ofed_patch_params="$ofed_patch_params $1"
                                KVERSION=`expr "x$1" : 'x[^=]*=\(.*\)'`
                        ;;

                        -modules-dir | --modules-dir | --mod-dir)
                                shift
                                MODULES_DIR=$1
                        ;;
                        -modules-dir=* | --modules-dir=* | --mod-dir=*)
                                MODULES_DIR=`expr "x$1" : 'x[^=]*=\(.*\)'`
                        ;;
                        --skip-autoconf)
                        SKIP_AUTOCONF=1
                        ;;
                        --build-dummy-mods)
                            BUILD_DUMMY_MODS=1
                        ;;
                        -j[0-9]*)
	                        NJOBS=`expr "x$1" : 'x\-j\(.*\)'`
                        ;;
                        --with-njobs=*)
	                        NJOBS=`expr "x$1" : 'x[^=]*=\(.*\)'`
                        ;;
                        -j |--with-njobs)
				if [[ $2 =~ ^[0-9]+ ]]; then
					shift
		                        NJOBS=$1
				else
		                        NJOBS=
				fi
                        ;;
                        --force-autogen)
                        FORCE_AUTOGEN=1
                        ;;
                        -kernel-sources | --kernel-sources | --kernel-src | --kern-src | --ker-src)
                                shift
                                KSRC=$1
                        ;;
                        -kernel-sources=* | --kernel-sources=* | --kernel-src=* | --kern-src=* | --ker-src=*)
                                KSRC=`expr "x$1" : 'x[^=]*=\(.*\)'`
                        ;;
                        -with-git | --with-git)
                                WITH_GIT="yes"
                                if [ ! -z "$2" ] && [ "`echo -n $2 | cut -c 1`" != '-' ]; then
                                        shift
                                        GIT_BRANCH=$1
                                fi
                                ofed_patch_params="$ofed_patch_params $1 $GIT_BRANCH"
                        ;;
                        -with-git=* | --with-git=*)
                                ofed_patch_params="$ofed_patch_params $1"
                        ;;
                        --without-git)
                                WITH_GIT="no"
                                ofed_patch_params="$ofed_patch_params $1"
                        ;;
                        -with-quilt | --with-quilt)
                                ofed_patch_params="$ofed_patch_params $1"
                                if [ ! -z "$2" ] && [ "`echo -n $2 | cut -c 1`" != '-' ]; then
                                        shift
                                        ofed_patch_params="$ofed_patch_params $1"
                                fi
                        ;;
                        -with-quilt=* | --with-quilt=*)
                                ofed_patch_params="$ofed_patch_params $1"
                        ;;
                        --without-quilt)
                                ofed_patch_params="$ofed_patch_params $1"
                        ;;
                        -with-patchdir | --with-patchdir)
                                ofed_patch_params="$ofed_patch_params $1"
                                shift
                                ofed_patch_params="$ofed_patch_params $1"
                        ;;
                        -with-patchdir=* | --with-patchdir=*)
                                ofed_patch_params="$ofed_patch_params $1"
                        ;;
                        --without-patch)
                                ofed_patch_params="$ofed_patch_params $1"
                        ;;
                        --with-kernel-fixes)
                                ofed_patch_params="$ofed_patch_params $1"
                        ;;
                        --without-kernel-fixes)
                                ofed_patch_params="$ofed_patch_params $1"
                        ;;
                        --with-hpage-patch)
                                ofed_patch_params="$ofed_patch_params $1"
                        ;;
                        --without-hpage-patch)
                                ofed_patch_params="$ofed_patch_params $1"
                        ;;
                        --with-backport-patches)
                                ofed_patch_params="$ofed_patch_params $1"
                        ;;
                        --without-backport-patches)
                                ofed_patch_params="$ofed_patch_params $1"
                        ;;
                        --with-memtrack)
                            CONFIG_MEMTRACK="m"
                        ;;
                        --without-memtrack)
                            CONFIG_MEMTRACK=
                        ;;
                        --with-debug-info)
                            CONFIG_DEBUG_INFO="y"
                        ;;
                        --without-debug-info)
                            CONFIG_DEBUG_INFO=
                        ;;
                        --with-core-mod)
                            CONFIG_INFINIBAND="m"
                        ;;
                        --without-core-mod)
                            CONFIG_INFINIBAND=
                        ;;
                        --with-ipoib-mod)
                            CONFIG_INFINIBAND_IPOIB="m"
                            CONFIG_INFINIBAND_IPOIB_CM="y"
                            CONFIG_INFINIBAND_IPOIB_DEBUG="y"
                            CONFIG_BACKPORT_LRO="m"
                            add_conf "# Load IPoIB" "IPOIB_LOAD=yes"
                            add_conf "# Enable IPoIB Connected Mode" "SET_IPOIB_CM=auto"
                        ;;
                        --without-ipoib-mod)
                            CONFIG_INFINIBAND_IPOIB=
                        ;;
                        --with-ipoib-cm)
                            CONFIG_INFINIBAND_IPOIB_CM="y"
                            CONFIG_BACKPORT_LRO="m"
                        ;;
                        --without-ipoib-cm)
                            CONFIG_INFINIBAND_IPOIB_CM=
                        ;;
                        --with-ipoib-allmulti)
                            CONFIG_IPOIB_ALL_MULTI="y"
                        ;;
                        --without-ipoib-allmulti)
                            CONFIG_IPOIB_ALL_MULTI=
                        ;;
                        --with-ipoib_debug-mod)
                            CONFIG_INFINIBAND_IPOIB_DEBUG="y"
                            CONFIG_BACKPORT_LRO="m"
                        ;;
                        --without-ipoib_debug-mod)
                            CONFIG_INFINIBAND_IPOIB_DEBUG=
                        ;;
                        --with-ipoib_debug_data-mod)
                            CONFIG_INFINIBAND_IPOIB_DEBUG_DATA="y"
                        ;;
                        --without-ipoib_debug_data-mod)
                            CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=
                        ;;
                        --with-e_ipoib-mod)
                            CONFIG_E_IPOIB="m"
                            add_conf "# Load E_IPoIB" "E_IPOIB_LOAD=no"
                        ;;
                        --without-e_ipoib-mod)
                            CONFIG_E_IPOIB=
                        ;;
                       --with-sdp-mod)
                            CONFIG_INFINIBAND_SDP="m"
                            CONFIG_INFINIBAND_SDP_DEBUG="y"
                            add_conf "# Load SDP module" "SDP_LOAD=no"
                        ;;
                        --without-sdp-mod)
                            CONFIG_INFINIBAND_SDP=
                        ;;
                        --with-sdp-zcopy)
                            CONFIG_INFINIBAND_SDP_SEND_ZCOPY="y"
                            CONFIG_INFINIBAND_SDP_RECV_ZCOPY="y"
                        ;;
                        --without-sdp-zcopy)
                            CONFIG_INFINIBAND_SDP_SEND_ZCOPY=
                            CONFIG_INFINIBAND_SDP_RECV_ZCOPY=
                        ;;
                        --with-sdp_debug-mod)
                            CONFIG_INFINIBAND_SDP_DEBUG="y"
                        ;;
                        --without-sdp_debug-mod)
                            CONFIG_INFINIBAND_SDP_DEBUG=
                        ;;
                        --with-sdp_debug_data-mod)
                            CONFIG_INFINIBAND_SDP_DEBUG_DATA="y"
                        ;;
                        --without-sdp_debug_data-mod)
                            CONFIG_INFINIBAND_SDP_DEBUG_DATA=
                        ;;
                        --with-srp-mod)
                            CONFIG_INFINIBAND_SRP="m"
                            CONFIG_SCSI_SRP_ATTRS="m"
                            add_conf "# Load SRP module" "SRP_LOAD=no"
                        ;;
                        --without-srp-mod)
                            CONFIG_INFINIBAND_SRP=
                            CONFIG_SCSI_SRP_ATTRS=
                        ;;
                        --with-user_mad-mod)
                            CONFIG_INFINIBAND_USER_MAD="m"
                            add_conf "# Load UMAD module" "UMAD_LOAD=yes"
                        ;;
                        --without-user_mad-mod)
                            CONFIG_INFINIBAND_USER_MAD=
                        ;;
                        --with-user_access-mod)
                            CONFIG_INFINIBAND_USER_ACCESS="m"
                            CONFIG_INFINIBAND_USER_MEM=y
                            add_conf "# Load UVERBS module" "UVERBS_LOAD=yes"
                            add_conf "# Load UCM module" "UCM_LOAD=yes"
                        ;;
                        --without-user_access-mod)
                            CONFIG_INFINIBAND_USER_ACCESS=
                            CONFIG_INFINIBAND_USER_MEM=
                        ;;
                        --with-user_memory-mod)
                            CONFIG_INFINIBAND_USER_MEM=y
                        ;;
                        --without-user_memory-mod)
                            CONFIG_INFINIBAND_USER_MEM=
                        ;;
                        --with-addr_trans-mod)
                            CONFIG_INFINIBAND_ADDR_TRANS=y
                            add_conf "# Load RDMA_CM module" "RDMA_CM_LOAD=yes"
                            add_conf "# Load RDMA_UCM module" "RDMA_UCM_LOAD=yes"
                        ;;
                        --without-addr_trans-mod)
                            CONFIG_INFINIBAND_ADDR_TRANS=
                        ;;
                        --with-mthca-mod)
                            CONFIG_INFINIBAND_MTHCA="m"
                            CONFIG_INFINIBAND_MTHCA_DEBUG="y"
                            add_conf "# Load MTHCA" "MTHCA_LOAD=no"
                        ;;
                        --without-mthca-mod)
                            CONFIG_INFINIBAND_MTHCA=
                        ;;
                        --with-mthca_debug-mod)
                            CONFIG_INFINIBAND_MTHCA_DEBUG="y"
                        ;;
                        --without-mthca_debug-mod)
                            CONFIG_INFINIBAND_MTHCA_DEBUG=
                        ;;
                        --with-mlx4-mod)
                            CONFIG_MLX4_CORE="m"
                            CONFIG_MLX4_INFINIBAND="m"
                            CONFIG_BACKPORT_LRO="m"
                            CONFIG_MLX4_DEBUG="y"
                            add_conf "# Load MLX4 modules" "MLX4_LOAD=yes"
                        ;;
                        --with-mlx5-mod)
                            CONFIG_MLX5_CORE="m"
                            CONFIG_MLX5_INFINIBAND="m"
                            CONFIG_BACKPORT_LRO="m"
                            CONFIG_MLX5_DEBUG="y"
                            add_conf "# Load MLX5 modules" "MLX5_LOAD=yes"
                        ;;
                        --with-mlx4_core-mod)
                            CONFIG_MLX4_CORE="m"
                        ;;
                        --without-mlx4_core-mod)
                            CONFIG_MLX4_CORE=
                        ;;
                        --with-mlx5_core-mod)
                            CONFIG_MLX5_CORE="m"
                        ;;
                        --without-mlx5_core-mod)
                            CONFIG_MLX5_CORE=
                        ;;
                        --without-mlx4-mod)
                            CONFIG_MLX4_CORE=
                            CONFIG_MLX4_INFINIBAND=
                            CONFIG_MLX4_DEBUG=
                        ;;
                        --without-mlx5-mod)
                            CONFIG_MLX5_CORE=
                            CONFIG_MLX5_INFINIBAND=
                            CONFIG_MLX5_DEBUG=
                        ;;
                        --with-mlx4_en-mod)
                            CONFIG_MLX4_CORE="m"
                            CONFIG_MLX4_EN="m"
                            add_conf "# Load MLX4_EN module" "MLX4_EN_LOAD=yes"
                            CONFIG_MLX4_EN_PERF_STAT=
                        ;;
                        --with-mlx4_vnic-mod)
                            CONFIG_MLX4_CORE="m"
                            CONFIG_MLX4_VNIC="m"
                            CONFIG_BACKPORT_LRO="m"
                            add_conf "# Load MLX4_VNIC module" "MLX4_VNIC_LOAD=no"
                        ;;
                        --without-mlx4_en-mod)
                            CONFIG_MLX4_EN=
                            CONFIG_MLX4_EN_PERF_STAT=
                        ;;
                        --without-mlx4_vnic-mod)
                            CONFIG_MLX4_VNIC=
                        ;;
			--with-mlx4_en-perf-stat)
				CONFIG_MLX4_EN_PERF_STAT="y"
			;;
			--without-mlx4_en-perf-stat)
				CONFIG_MLX4_EN_PERF_STAT=
			;;
                        --with-mlx4_vnic_debug-mod)
                            CONFIG_MLX4_VNIC_DEBUG="y"
                        ;;
                        --without-mlx4_vnic_debug-mod)
                            CONFIG_MLX4_VNIC_DEBUG=
                        ;;
                        --with-mlx4_inf-mod)
                            CONFIG_MLX4_CORE="m"
                            CONFIG_MLX4_INFINIBAND="m"
                        ;;
                        --without-mlx4_inf-mod)
                            CONFIG_MLX4_INFINIBAND=
                        ;;
                        --with-mlx5_inf-mod)
                            CONFIG_MLX5_CORE="m"
                            CONFIG_MLX5_INFINIBAND="m"
                        ;;
                        --without-mlx5_inf-mod)
                            CONFIG_MLX5_INFINIBAND=
                        ;;
                        --with-mlx4_fc-mod)
                            CONFIG_MLX4_CORE="m"
                            CONFIG_MLX4_EN="m"
                            CONFIG_MLX4_INFINIBAND="m"
                            CONFIG_MLX4_FC="m"
                        ;;
                        --without-mlx4_fc-mod)
                            CONFIG_MLX4_FC=
                        ;;
                        --with-mlx4_debug-mod)
                            CONFIG_MLX4_DEBUG="y"
                        ;;
                        --without-mlx4_debug-mod)
                            CONFIG_MLX4_DEBUG=
                        ;;
                        --with-mlx5_debug-mod)
                            CONFIG_MLX5_DEBUG="y"
                        ;;
                        --without-mlx5_debug-mod)
                            CONFIG_MLX5_DEBUG=
                        ;;
                        --with-ipath_inf-mod)
                            CONFIG_INFINIBAND_IPATH="m"
                            add_conf "# Load IPATH" "IPATH_LOAD=no"
                        ;;
                        --without-ipath_inf-mod)
                            CONFIG_INFINIBAND_IPATH=
                        ;;
                        --with-9pnet_rdma-mod)
                            CONFIG_NET_9P_RDMA="m"
                        ;;
                        --without-9pnet_rdma-mod)
                            CONFIG_NET_9P_RDMA=
                        ;;
                        --with-9p-mod)
                            CONFIG_9P_FS="m"
                        ;;
                        --without-9p-mod)
                            CONFIG_9P_FS=
                        ;;
                        --with-qib-mod)
                            CONFIG_INFINIBAND_QIB="m"
                            add_conf "# Load QIB" "QIB_LOAD=no"
                            add_conf "# QIB QME BP VER" "QIB_QME_BPVER=1"
                        ;;
                        --without-qib-mod)
                            CONFIG_INFINIBAND_QIB=
                        ;;
                        --with-iser-mod)
                            CONFIG_INFINIBAND_ISER="m"
                        ;;
                        --with-isert-mod)
                            CONFIG_INFINIBAND_ISERT="m"
                        ;;
                        --with-iscsi-mod)
                            CONFIG_SCSI_ISCSI_ATTRS="m"
                            CONFIG_ISCSI_TCP="m"
                        ;;
                        --without-iser-mod)
                            CONFIG_INFINIBAND_ISER=
                            CONFIG_SCSI_ISCSI_ATTRS=
                            CONFIG_ISCSI_TCP=
                        ;;
                        --without-isert-mod)
                            CONFIG_INFINIBAND_ISERT=
                        ;;
                        --with-ehca-mod)
                            CONFIG_INFINIBAND_EHCA="m"
                            CONFIG_INFINIBAND_EHCA_SCALING="y"
                        ;;
                        --without-ehca-mod)
                            CONFIG_INFINIBAND_EHCA=
                            CONFIG_INFINIBAND_EHCA_SCALING=
                        ;;
                        --with-rds-mod)
                            CONFIG_RDS="m"
                            CONFIG_RDS_RDMA="m"
                            CONFIG_RDS_TCP="m"
                            add_conf "# Load RDS module" "RDS_LOAD=no"
                        ;;
                        --without-rds-mod)
                            CONFIG_RDS=
                            CONFIG_RDS_RDMA=
                            CONFIG_RDS_TCP=
                        ;;
                        --with-rds_debug-mod)
                            CONFIG_RDS_DEBUG="y"
                        ;;
                        --without-rds_debug-mod)
                            CONFIG_RDS_DEBUG=
                        ;;
                        --with-madeye-mod)
                            CONFIG_INFINIBAND_MADEYE=m
                        ;;
                        --without-madeye-mod)
                            CONFIG_INFINIBAND_MADEYE=
                        ;;
                        --with-qlgc_vnic-mod)
                            CONFIG_INFINIBAND_QLGC_VNIC="m"
                            add_conf "# Load QLogic VNIC module" "QLGC_VNIC_LOAD=no"
                        ;;
                        --without-qlgc_vnic-mod)
                            CONFIG_INFINIBAND_QLGC_VNIC=
                        ;;
                        --with-qlgc_vnic_stats-mod)
                            CONFIG_INFINIBAND_QLGC_VNIC_STATS="y"
                        ;;
                        --without-qlgc_vnic_stats-mod)
                            CONFIG_INFINIBAND_QLGC_VNIC_STATS=
                        ;;
                        --with-cxgb3-mod)
                            CONFIG_INFINIBAND_CXGB3="m"
                            CONFIG_CHELSIO_T3="m"
                            add_conf "# Load CXGB3 modules" "CXGB3_LOAD=no"
                        ;;
                        --without-cxgb3-mod)
                            CONFIG_INFINIBAND_CXGB3=
                            CONFIG_CHELSIO_T3=
                        ;;
                        --with-cxgb3_debug-mod)
                            CONFIG_INFINIBAND_CXGB3_DEBUG="y"
                        ;;
                        --without-cxgb3_debug-mod)
                            CONFIG_INFINIBAND_CXGB3_DEBUG=
                        ;;
                        --with-cxgb4-mod)
                            CONFIG_INFINIBAND_CXGB4="m"
                            CONFIG_CHELSIO_T4="m"
                            add_conf "# Load CXGB4 modules" "CXGB4_LOAD=no"
                        ;;
                        --without-cxgb4-mod)
                            CONFIG_INFINIBAND_CXGB4=
                            CONFIG_CHELSIO_T4=
                        ;;
                        --with-cxgb3i-mod)
                            CONFIG_SCSI_CXGB3_ISCSI="m"
                        ;;
                        --without-cxgb3i-mod)
                            CONFIG_SCSI_CXGB3_ISCSI=
                        ;;
                        --with-cxgb4i-mod)
                            CONFIG_SCSI_CXGB4_ISCSI="m"
                        ;;
                        --without-cxgb4i-mod)
                            CONFIG_SCSI_CXGB4_ISCSI=
                        ;;
                        --with-nvmf_host-mod)
                            CONFIG_NVMF_HOST="m"
                        ;;
                        --without-nvmf_host-mod)
                            CONFIG_NVMF_HOST=
                        ;;
                        --with-nvmf_target-mod)
                            CONFIG_NVMF_TARGET="m"
                        ;;
                        --without-nvmf_target-mod)
                            CONFIG_NVMF_TARGET=
                        ;;
                        --with-nes-mod)
                            CONFIG_INFINIBAND_NES="m"
                            add_conf "# Load NES modules" "NES_LOAD=no"
                        ;;
                        --without-nes-mod)
                            CONFIG_INFINIBAND_NES=
                        ;;
                        --with-nes_debug-mod)
                            CONFIG_INFINIBAND_NES_DEBUG="y"
                        ;;
                        --without-nes_debug-mod)
                            CONFIG_INFINIBAND_NES_DEBUG=
                        ;;
                        --with-ocrdma-mod)
                            CONFIG_INFINIBAND_OCRDMA="m"
                            add_conf "# Load OCRDMA modules" "OCRDMA_LOAD=no"
                        ;;
                        --without-ocrdma-mod)
                            CONFIG_INFINIBAND_OCRDMA=
                        ;;
                        --with-nfsrdma-mod)
                            CONFIG_SUNRPC_XPRT_RDMA="m"
                            CONFIG_SUNRPC_XPRT_RDMA_CLIENT="m"
                            CONFIG_SUNRPC_XPRT_RDMA_SERVER="m"
                        ;;
                        --without-nfsrdma-mod)
                            CONFIG_SUNRPC_XPRT_RDMA=
                            CONFIG_SUNRPC_XPRT_RDMA_CLIENT=
                            CONFIG_SUNRPC_XPRT_RDMA_SERVER=
                        ;;
                        --with-scsi_transport_srp-mod)
                            CONFIG_SCSI_SRP_ATTRS="m"
                        ;;
                        --without-scsi_transport_srp-mod)
                            CONFIG_SCSI_SRP_ATTRS=
                        ;;
                        --with-modprobe|--without-modprobe)
                        ;;
                        --with-amso1100-mod)
                        CONFIG_INFINIBAND_AMSO1100="m"
                        ;;
                        --without-amso1100-mod)
                        CONFIG_INFINIBAND_AMSO1100=
                        ;;
                        --with-odp)
                        CONFIG_INFINIBAND_ON_DEMAND_PAGING="y"
                        ;;
                        --without-odp)
                        CONFIG_INFINIBAND_ON_DEMAND_PAGING=
                        ;;
                        --with-wqe-format)
                        CONFIG_INFINIBAND_WQE_FORMAT="y"
                        ;;
                        --without-wqe-format)
                        CONFIG_INFINIBAND_WQE_FORMAT=
                        ;;
                        --with-pa-mr)
                        CONFIG_INFINIBAND_PA_MR="y"
                        ;;
                        --without-pa-mr)
                        CONFIG_INFINIBAND_PA_MR=
                        ;;

                        -h | --help)
                                usage
                                exit 0
                        ;;
                        --with*)
                                echo
                                echo "Unsupported or unused parameter: $1"
                                echo
                        ;;
                        *)
                                echo
                                echo "Unsupported parameter $1"
                                echo
                        ;;
                esac
                shift

        done

#Set default values
KVERSION=${KVERSION:-$(uname -r)}
MIN_KVERSION="2.6.16"
SRP_1_5_3_SUPPORTED_KVERSION="3.7.0"
ODP_SUPPORTED_KVERSION="3.7.0"
MODULES_DIR=${MODULES_DIR:-/lib/modules/${KVERSION}/updates}
KSRC=${KSRC:-/lib/modules/${KVERSION}/build}
prefix=${prefix:-/usr}

ARCH=${ARCH:-$(uname -m)}

case $ARCH in
	ppc*)
	ARCH=powerpc
	;;
	i?86)
	ARCH=i386
	;;
esac

# Additional parameters to be passed to configure command
cd `dirname $0`
CWD=$(pwd)
# W/A for Debian 6 dkms issue
if [ -f "/etc/debian_version" ]; then
    case "$CWD" in
        /var/lib/dkms/*source*)
        CWD=${CWD/source/build}
        cd $CWD
        ;;
    esac
fi

CONFIG="configure.mk.kernel"

if (/bin/ls -1 $KSRC/include/*/autoconf.h 2>/dev/null | head -1 | grep -q generated); then
    AUTOCONF_PREFIX=generated
else
    AUTOCONF_PREFIX=linux
fi
mkdir -p ${CWD}/include/${AUTOCONF_PREFIX}
AUTOCONF_H="${CWD}/include/${AUTOCONF_PREFIX}/autoconf.h"

case $KVERSION in
	2.6.16*)
	BACKPORT_INCLUDES="-I$CWD/backport_includes/2.6.16_sles10_sp3/include"
	CONFIG_COMPAT_VERSION="-2.6.16"
	CONFIG_IPOIB_VERSION="_1.5.3"
	CONFIG_COMPAT_KOBJECT_BACKPORT=y
	;;
	2.6.18*)
	BACKPORT_INCLUDES="-I$CWD/backport_includes/2.6.18-EL5.2/include"
	CONFIG_COMPAT_VERSION="-2.6.18"
	CONFIG_COMPAT_KOBJECT_BACKPORT=y
	;;
	*)
	;;
esac

#
################### disable/enable features/modules  ###########################
#
# disable unsupported modules on 32bit
case $ARCH in
    i?86)
    CONFIG_INFINIBAND_IPATH=
    CONFIG_INFINIBAND_QIB=
esac

if [ "X${CONFIG_MLX4_EN}" == "Xm" ]; then
    check_autofconf CONFIG_DCB
    if [ X${CONFIG_DCB} == "X1" ]; then
        CONFIG_MLX4_EN_DCB=y
    fi
fi

if [ "X${CONFIG_MLX4_INFINIBAND}" == "Xm" ]; then
    check_autofconf CONFIG_DEBUG_FS
    if [ X${CONFIG_DEBUG_FS} == "X1" ] && ! [[ $KVERSION =~ 2.6.16 ]]; then
        CONFIG_MLX4_IB_DEBUG_FS=y
    fi
fi

check_autofconf CONFIG_MMU_NOTIFIER
if ! check_kerver ${KVERSION} ${ODP_SUPPORTED_KVERSION} || [ "X${CONFIG_MMU_NOTIFIER}" != "X1" ]; then
	CONFIG_INFINIBAND_ON_DEMAND_PAGING=
fi

CONFIG_INFINIBAND_SRP_DUMMY=''
if [ "X${CONFIG_INFINIBAND_SRP}" == "Xm" ]; then
    check_autofconf CONFIG_PPC_PSERIES
    if [ X${CONFIG_PPC_PSERIES} == "X1" ]; then
        CONFIG_INFINIBAND_SRP_DUMMY=m
        CONFIG_INFINIBAND_SRP=
        CONFIG_SCSI_SRP_ATTRS=
    fi
fi

#
# Dummy modules for ULPs and storage:
# Used for ofa_kernel RPM build, the actual drivers will be
# shipped in a standalone RPMs
#
if [ "X$BUILD_DUMMY_MODS" == "X1" ]; then
    echo
    # iser
    CONFIG_INFINIBAND_ISER_DUMMY="m"
    CONFIG_INFINIBAND_ISER=
    CONFIG_SCSI_ISCSI_ATTRS=
    CONFIG_ISCSI_TCP=

    # isert
    CONFIG_INFINIBAND_ISERT_DUMMY="m"
    CONFIG_INFINIBAND_ISERT=

    # srp
    CONFIG_INFINIBAND_SRP_DUMMY="m"
    CONFIG_INFINIBAND_SRP=
    CONFIG_SCSI_SRP_ATTRS=

    # sdp
    CONFIG_INFINIBAND_SDP_DUMMY="m"
    CONFIG_INFINIBAND_SDP=
    CONFIG_INFINIBAND_SDP_DEBUG=

    # rds
    CONFIG_RDS_DUMMY="m"
    CONFIG_RDS=
    CONFIG_RDS_RDMA=
    CONFIG_RDS_TCP=

    # NFS RDMA
    CONFIG_SUNRPC_XPRT_RDMA_DUMMY="m"
    CONFIG_SUNRPC_XPRT_RDMA="m"
    CONFIG_SUNRPC_XPRT_RDMA_CLIENT=
    CONFIG_SUNRPC_XPRT_RDMA_SERVER=

   # nvmf host
   CONFIG_NVMF_HOST_DUMMY="m"
   CONFIG_NVMF_HOST=

   # nvmf target
   CONFIG_NVMF_TARGET_DUMMY="m"
   CONFIG_NVMF_TARGET=
fi

#
# END of disable/enable features/modules  ###########################
#

# Check for minimal supported kernel version
if ! check_kerver ${KVERSION} ${MIN_KVERSION}; then
    echo "Kernel version ${KVERSION} is less then supported kernel ${MIN_KVERSION}. Exiting..."
    exit 1
fi

if [ ! -e backports_applied ]; then
	echo "backports_applied does not exist. running ofed_patch.sh"
	ex ${CWD}/ofed_scripts/ofed_patch.sh ${ofed_patch_params}
	if [ ! -z "$CONFIG_COMPAT_VERSION" ]; then
		# if it's SLES10, then apply 2.6.18 backport patches first
		if [ "X$CONFIG_COMPAT_VERSION" == "X-2.6.16" ]; then
			ex ${CWD}/ofed_scripts/ofed_patch.sh --with-patchdir=backports-2.6.18 ${ofed_patch_params}
		fi
		ex ${CWD}/ofed_scripts/ofed_patch.sh --with-patchdir=backports${CONFIG_COMPAT_VERSION} ${ofed_patch_params}
	fi
fi

#check if for current kernel version should be used srp code from 1.5.3
#if ! check_kerver ${KVERSION} ${SRP_1_5_3_SUPPORTED_KVERSION}; then
#    echo "Kernel version ${KVERSION} is less then basic kernel ${SRP_1_5_3_SUPPORTED_KVERSION}."
#    echo "Will be used srp code from mofed 1.5.3. Create symbolic link."
#    echo "Original srp code will be moved to srp_2.0"
#    SRP_WORK_DIR="srp_1.5.3"
#    SRP_MV_DIR="srp_2.0"
#    # check if symbolic link exist - remove it and build a new one
#    # check if stmbolic link exist. If exist - remove it
#    SRP_LINK_WORK_DIR="${CWD}/drivers/infiniband/ulp/${SRP_WORK_DIR}"
#    SRP_MV_DIR="${CWD}/drivers/infiniband/ulp/${SRP_MV_DIR}"
#    SRP_WORK_DIR="${CWD}/drivers/infiniband/ulp/srp"
#    [ -L "$SRP_WORK_DIR" ] && { echo "Unlink ${SRP_WORK_DIR}"; unlink "$SRP_WORK_DIR"; }
#    # mv original srp code to srp_2.0 directory
#    [ -d "$SRP_WORK_DIR" ] && { echo "Move ${SRP_WORK_DIR} to ${SRP_MV_DIR}"; mv ${SRP_WORK_DIR} ${SRP_MV_DIR}; }
#    # create apropriate symbolic link
#    ln -s ${SRP_LINK_WORK_DIR} ${SRP_WORK_DIR}
#fi

# Create configure.mk
/bin/rm -f ${CWD}/${CONFIG}
cat >> ${CWD}/${CONFIG} << EOFCONFIG
# Current working directory
CWD=${CWD}
BACKPORT_INCLUDES=${BACKPORT_INCLUDES}

# Kernel level
KVERSION=${KVERSION}
ARCH=${ARCH}
MODULES_DIR=${MODULES_DIR}
KSRC=${KSRC}
KLIB_BUILD=${KSRC}
prefix=${prefix}

AUTOCONF_H=${AUTOCONF_H}

WITH_MAKE_PARAMS=${WITH_MAKE_PARAMS}

CONFIG_COMPAT_VERSION=${CONFIG_COMPAT_VERSION}
CONFIG_COMPAT_KOBJECT_BACKPORT=${CONFIG_COMPAT_KOBJECT_BACKPORT}
CONFIG_MEMTRACK=${CONFIG_MEMTRACK}
CONFIG_DEBUG_INFO=${CONFIG_DEBUG_INFO}
CONFIG_INFINIBAND=${CONFIG_INFINIBAND}
CONFIG_INFINIBAND_IPOIB=${CONFIG_INFINIBAND_IPOIB}
CONFIG_INFINIBAND_IPOIB_CM=${CONFIG_INFINIBAND_IPOIB_CM}
CONFIG_IPOIB_ALL_MULTI=${CONFIG_IPOIB_ALL_MULTI}
CONFIG_IPOIB_VERSION=${CONFIG_IPOIB_VERSION}
CONFIG_INFINIBAND_SDP=${CONFIG_INFINIBAND_SDP}
CONFIG_INFINIBAND_SDP_DUMMY=${CONFIG_INFINIBAND_SDP_DUMMY}
CONFIG_INFINIBAND_SRP=${CONFIG_INFINIBAND_SRP}
CONFIG_INFINIBAND_SRP_DUMMY=${CONFIG_INFINIBAND_SRP_DUMMY}

CONFIG_INFINIBAND_USER_MAD=${CONFIG_INFINIBAND_USER_MAD}
CONFIG_INFINIBAND_USER_ACCESS=${CONFIG_INFINIBAND_USER_ACCESS}
CONFIG_INFINIBAND_ADDR_TRANS=${CONFIG_INFINIBAND_ADDR_TRANS}
CONFIG_INFINIBAND_USER_MEM=${CONFIG_INFINIBAND_USER_MEM}
CONFIG_INFINIBAND_MTHCA=${CONFIG_INFINIBAND_MTHCA}

CONFIG_MLX4_CORE=${CONFIG_MLX4_CORE}
CONFIG_MLX5_CORE=${CONFIG_MLX5_CORE}
CONFIG_MLX4_EN=${CONFIG_MLX4_EN}
CONFIG_MLX4_EN_DCB=${CONFIG_MLX4_EN_DCB}
CONFIG_MLX4_IB_DEBUG_FS=${CONFIG_MLX4_IB_DEBUG_FS}
CONFIG_MLX4_VNIC=${CONFIG_MLX4_VNIC}
CONFIG_MLX4_INFINIBAND=${CONFIG_MLX4_INFINIBAND}
CONFIG_MLX5_INFINIBAND=${CONFIG_MLX5_INFINIBAND}
CONFIG_MLX4_DEBUG=${CONFIG_MLX4_DEBUG}
CONFIG_MLX5_DEBUG=${CONFIG_MLX5_DEBUG}
CONFIG_BACKPORT_LRO=${CONFIG_BACKPORT_LRO}
CONFIG_MLX4_EN_PERF_STAT=${CONFIG_MLX4_EN_PERF_STAT:-''}

CONFIG_MLX4_FC=${CONFIG_MLX4_FC}

CONFIG_INFINIBAND_IPOIB_DEBUG=${CONFIG_INFINIBAND_IPOIB_DEBUG}
CONFIG_INFINIBAND_ISERT=${CONFIG_INFINIBAND_ISERT}
CONFIG_INFINIBAND_ISERT_DUMMY=${CONFIG_INFINIBAND_ISERT_DUMMY}
CONFIG_INFINIBAND_ISER=${CONFIG_INFINIBAND_ISER}
CONFIG_INFINIBAND_ISER_DUMMY=${CONFIG_INFINIBAND_ISER_DUMMY}
CONFIG_SCSI_ISCSI_ATTRS=${CONFIG_SCSI_ISCSI_ATTRS}
CONFIG_ISCSI_TCP=${CONFIG_ISCSI_TCP}
CONFIG_INFINIBAND_EHCA=${CONFIG_INFINIBAND_EHCA}
CONFIG_INFINIBAND_EHCA_SCALING=${CONFIG_INFINIBAND_EHCA_SCALING}
CONFIG_E_IPOIB=${CONFIG_E_IPOIB}
CONFIG_RDS=${CONFIG_RDS}
CONFIG_RDS_DUMMY=${CONFIG_RDS_DUMMY}
CONFIG_RDS_RDMA=${CONFIG_RDS_RDMA}
CONFIG_RDS_TCP=${CONFIG_RDS_TCP}
CONFIG_RDS_DEBUG=${CONFIG_RDS_DEBUG}
CONFIG_INFINIBAND_MADEYE=${CONFIG_INFINIBAND_MADEYE}
CONFIG_INFINIBAND_QLGC_VNIC=${CONFIG_INFINIBAND_QLGC_VNIC}
CONFIG_INFINIBAND_CXGB3=${CONFIG_INFINIBAND_CXGB3}
CONFIG_CHELSIO_T3=${CONFIG_CHELSIO_T3}
CONFIG_INFINIBAND_CXGB4=${CONFIG_INFINIBAND_CXGB4}
CONFIG_CHELSIO_T4=${CONFIG_CHELSIO_T4}
CONFIG_SCSI_CXGB3_ISCSI=${CONFIG_SCSI_CXGB3_ISCSI}
CONFIG_SCSI_CXGB4_ISCSI=${CONFIG_SCSI_CXGB4_ISCSI}
CONFIG_NVMF_HOST=${CONFIG_NVMF_HOST}
CONFIG_NVMF_HOST_DUMMY=${CONFIG_NVMF_HOST_DUMMY}
CONFIG_NVMF_TARGET=${CONFIG_NVMF_TARGET}
CONFIG_NVMF_TARGET_DUMMY=${CONFIG_NVMF_TARGET_DUMMY}
CONFIG_INFINIBAND_NES=${CONFIG_INFINIBAND_NES}
CONFIG_INFINIBAND_OCRDMA=${CONFIG_INFINIBAND_OCRDMA}

CONFIG_SUNRPC_XPRT_RDMA=${CONFIG_SUNRPC_XPRT_RDMA}
CONFIG_SUNRPC_XPRT_RDMA_DUMMY=${CONFIG_SUNRPC_XPRT_RDMA_DUMMY}
CONFIG_SUNRPC_XPRT_RDMA_CLIENT=${CONFIG_SUNRPC_XPRT_RDMA_CLIENT}
CONFIG_SUNRPC_XPRT_RDMA_SERVER=${CONFIG_SUNRPC_XPRT_RDMA_SERVER}

CONFIG_SCSI_SRP_ATTRS=${CONFIG_SCSI_SRP_ATTRS}

CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=${CONFIG_INFINIBAND_IPOIB_DEBUG_DATA}
CONFIG_INFINIBAND_SDP_SEND_ZCOPY=${CONFIG_INFINIBAND_SDP_SEND_ZCOPY}
CONFIG_INFINIBAND_SDP_RECV_ZCOPY=${CONFIG_INFINIBAND_SDP_RECV_ZCOPY}
CONFIG_INFINIBAND_SDP_DEBUG=${CONFIG_INFINIBAND_SDP_DEBUG}
CONFIG_INFINIBAND_SDP_DEBUG_DATA=${CONFIG_INFINIBAND_SDP_DEBUG_DATA}
CONFIG_INFINIBAND_IPATH=${CONFIG_INFINIBAND_IPATH}
CONFIG_NET_9P_RDMA=${CONFIG_NET_9P_RDMA}
CONFIG_9P_FS=${CONFIG_9P_FS}
CONFIG_INFINIBAND_QIB=${CONFIG_INFINIBAND_QIB}
CONFIG_INFINIBAND_MTHCA_DEBUG=${CONFIG_INFINIBAND_MTHCA_DEBUG}
CONFIG_INFINIBAND_QLGC_VNIC_STATS=${CONFIG_INFINIBAND_QLGC_VNIC_STATS}
CONFIG_INFINIBAND_CXGB3_DEBUG=${CONFIG_INFINIBAND_CXGB3_DEBUG}
CONFIG_INFINIBAND_NES_DEBUG=${CONFIG_INFINIBAND_NES_DEBUG}
CONFIG_INFINIBAND_AMSO1100=${CONFIG_INFINIBAND_AMSO1100}
CONFIG_MLX4_EN_DCB=${CONFIG_MLX4_EN_DCB}
CONFIG_MLX4_IB_DEBUG_FS=${CONFIG_MLX4_IB_DEBUG_FS}
CONFIG_INFINIBAND_ON_DEMAND_PAGING=${CONFIG_INFINIBAND_ON_DEMAND_PAGING}
CONFIG_INFINIBAND_WQE_FORMAT=${CONFIG_INFINIBAND_WQE_FORMAT}
CONFIG_INFINIBAND_PA_MR=${CONFIG_INFINIBAND_PA_MR}

EOFCONFIG
        echo "Created ${CONFIG}:"
        cat ${CWD}/${CONFIG}

# Create autoconf.h
if [ "X${CONFIG_MEMTRACK}" == "Xm" ]; then
        DEFINE_MEMTRACK="#undef CONFIG_MEMTRACK\n#define CONFIG_MEMTRACK 1"
else
        DEFINE_MEMTRACK="#undef CONFIG_MEMTRACK"
fi
if [ "X${CONFIG_DEBUG_INFO}" == "Xy" ]; then
        DEFINE_DEBUG_INFO="#undef CONFIG_DEBUG_INFO\n#define CONFIG_DEBUG_INFO 1"
else
        DEFINE_DEBUG_INFO="#undef CONFIG_DEBUG_INFO"
fi
if [ "X${CONFIG_INFINIBAND}" == "Xm" ]; then
        DEFINE_INFINIBAND="#undef CONFIG_INFINIBAND\n#define CONFIG_INFINIBAND 1"
else
        DEFINE_INFINIBAND="#undef CONFIG_INFINIBAND"
fi
if [ "X${CONFIG_INFINIBAND_IPOIB}" == "Xm" ]; then
        DEFINE_INFINIBAND_IPOIB="#undef CONFIG_INFINIBAND_IPOIB\n#define CONFIG_INFINIBAND_IPOIB 1"
else
        DEFINE_INFINIBAND_IPOIB="#undef CONFIG_INFINIBAND_IPOIB"
fi
if [ "X${CONFIG_INFINIBAND_IPOIB_CM}" == "Xy" ]; then
        DEFINE_INFINIBAND_IPOIB_CM="#undef CONFIG_INFINIBAND_IPOIB_CM\n#define CONFIG_INFINIBAND_IPOIB_CM 1"
else
        DEFINE_INFINIBAND_IPOIB_CM="#undef CONFIG_INFINIBAND_IPOIB_CM"
fi
if [ "X${CONFIG_IPOIB_ALL_MULTI}" == "Xy" ]; then
        DEFINE_IPOIB_ALL_MULTI="#undef CONFIG_IPOIB_ALL_MULTI\n#define CONFIG_IPOIB_ALL_MULTI 1"
else
        DEFINE_IPOIB_ALL_MULTI="#undef CONFIG_IPOIB_ALL_MULTI"
fi
if [ "X${CONFIG_INFINIBAND_SDP}" == "Xm" ]; then
        DEFINE_INFINIBAND_SDP="#undef CONFIG_INFINIBAND_SDP\n#define CONFIG_INFINIBAND_SDP 1"
else
        DEFINE_INFINIBAND_SDP="#undef CONFIG_INFINIBAND_SDP"
fi
if [ "X${CONFIG_INFINIBAND_SDP_DUMMY}" == "Xm" ]; then
        DEFINE_INFINIBAND_SDP_DUMMY="#undef CONFIG_INFINIBAND_SDP_DUMMY\n#define CONFIG_INFINIBAND_SDP_DUMMY 1"
else
        DEFINE_INFINIBAND_SDP_DUMMY="#undef CONFIG_INFINIBAND_SDP_DUMMY"
fi
if [ "X${CONFIG_INFINIBAND_SRP}" == "Xm" ]; then
        DEFINE_INFINIBAND_SRP="#undef CONFIG_INFINIBAND_SRP\n#define CONFIG_INFINIBAND_SRP 1"
else
        DEFINE_INFINIBAND_SRP="#undef CONFIG_INFINIBAND_SRP"
fi
if [ "X${CONFIG_INFINIBAND_SRP_DUMMY}" == "Xm" ]; then
        DEFINE_INFINIBAND_SRP_DUMMY="#undef CONFIG_INFINIBAND_SRP_DUMMY\n#define CONFIG_INFINIBAND_SRP_DUMMY 1"
else
        DEFINE_INFINIBAND_SRP_DUMMY="#undef CONFIG_INFINIBAND_SRP_DUMMY"
fi
if [ "X${CONFIG_INFINIBAND_USER_MAD}" == "Xm" ]; then
        DEFINE_INFINIBAND_USER_MAD="#undef CONFIG_INFINIBAND_USER_MAD\n#define CONFIG_INFINIBAND_USER_MAD 1"
else
        DEFINE_INFINIBAND_USER_MAD="#undef CONFIG_INFINIBAND_USER_MAD"
fi
if [ "X${CONFIG_INFINIBAND_USER_ACCESS}" == "Xm" ]; then
        DEFINE_INFINIBAND_USER_ACCESS="#undef CONFIG_INFINIBAND_USER_ACCESS\n#define CONFIG_INFINIBAND_USER_ACCESS 1"
else
        DEFINE_INFINIBAND_USER_ACCESS="#undef CONFIG_INFINIBAND_USER_ACCESS"
fi
if [ "X${CONFIG_INFINIBAND_ADDR_TRANS}" == "Xy" ]; then
        DEFINE_INFINIBAND_ADDR_TRANS="#undef CONFIG_INFINIBAND_ADDR_TRANS\n#define CONFIG_INFINIBAND_ADDR_TRANS 1"
else
        DEFINE_INFINIBAND_ADDR_TRANS="#undef CONFIG_INFINIBAND_ADDR_TRANS"
fi
if [ "X${CONFIG_INFINIBAND_USER_MEM}" == "Xy" ]; then
        DEFINE_INFINIBAND_USER_MEM="#undef CONFIG_INFINIBAND_USER_MEM\n#define CONFIG_INFINIBAND_USER_MEM 1"
else
        DEFINE_INFINIBAND_USER_MEM="#undef CONFIG_INFINIBAND_USER_MEM"
fi
if [ "X${CONFIG_INFINIBAND_MTHCA}" == "Xm" ]; then
        DEFINE_INFINIBAND_MTHCA="#undef CONFIG_INFINIBAND_MTHCA\n#define CONFIG_INFINIBAND_MTHCA 1"
else
        DEFINE_INFINIBAND_MTHCA="#undef CONFIG_INFINIBAND_MTHCA"
fi
if [ "X${CONFIG_MLX4_CORE}" == "Xm" ]; then
        DEFINE_MLX4_CORE="#undef CONFIG_MLX4_CORE\n#define CONFIG_MLX4_CORE 1"
else
        DEFINE_MLX4_CORE="#undef CONFIG_MLX4_CORE"
fi
if [ "X${CONFIG_MLX5_CORE}" == "Xm" ]; then
        DEFINE_MLX5_CORE="#undef CONFIG_MLX5_CORE\n#define CONFIG_MLX5_CORE 1"
else
        DEFINE_MLX5_CORE="#undef CONFIG_MLX5_CORE"
fi
if [ "X${CONFIG_MLX4_EN}" == "Xm" ]; then
        DEFINE_MLX4_EN="#undef CONFIG_MLX4_EN\n#define CONFIG_MLX4_EN 1"
else
        DEFINE_MLX4_EN="#undef CONFIG_MLX4_EN"
fi
if [ "X${CONFIG_MLX4_IB_DEBUG_FS}" == "Xy" ]; then
        DEFINE_MLX4_IB_DEBUG_FS="#undef CONFIG_MLX4_IB_DEBUG_FS\n#define CONFIG_MLX4_IB_DEBUG_FS 1"
else
        DEFINE_MLX4_IB_DEBUG_FS="#undef CONFIG_MLX4_IB_DEBUG_FS"
fi
if [ "X${CONFIG_MLX4_VNIC}" == "Xm" ]; then
        DEFINE_MLX4_VNIC="#define CONFIG_MLX4_VNIC 1"
else
        DEFINE_MLX4_VNIC="#undef CONFIG_MLX4_VNIC"
fi
if [ "X${CONFIG_MLX4_VNIC_DEBUG}" == "Xy" ]; then
        DEFINE_MLX4_VNIC_DEBUG="#undef CONFIG_MLX4_VNIC_DEBUG\n#define CONFIG_MLX4_VNIC_DEBUG 1"
else
        DEFINE_MLX4_VNIC_DEBUG="#undef CONFIG_MLX4_VNIC_DEBUG"
fi
if [ "X${CONFIG_MLX4_INFINIBAND}" == "Xm" ]; then
        DEFINE_MLX4_INFINIBAND="#undef CONFIG_MLX4_INFINIBAND\n#define CONFIG_MLX4_INFINIBAND 1"
else
        DEFINE_MLX4_INFINIBAND="#undef CONFIG_MLX4_INFINIBAND"
fi
if [ "X${CONFIG_MLX5_INFINIBAND}" == "Xm" ]; then
        DEFINE_MLX5_INFINIBAND="#undef CONFIG_MLX5_INFINIBAND\n#define CONFIG_MLX5_INFINIBAND 1"
else
        DEFINE_MLX5_INFINIBAND="#undef CONFIG_MLX5_INFINIBAND"
fi
if [ "X${CONFIG_MLX4_FC}" == "Xm" ]; then
        DEFINE_MLX4_FC="#undef CONFIG_MLX4_FC\n#define CONFIG_MLX4_FC 1"
else
        DEFINE_MLX4_FC="#undef CONFIG_MLX4_FC"
fi
if [ "X${CONFIG_MLX4_DEBUG}" == "Xy" ]; then
        DEFINE_MLX4_DEBUG="#undef CONFIG_MLX4_DEBUG\n#define CONFIG_MLX4_DEBUG 1"
else
        DEFINE_MLX4_DEBUG="#undef CONFIG_MLX4_DEBUG"
fi
if [ "X${CONFIG_MLX5_DEBUG}" == "Xy" ]; then
        DEFINE_MLX5_DEBUG="#undef CONFIG_MLX5_DEBUG\n#define CONFIG_MLX5_DEBUG 1"
else
        DEFINE_MLX5_DEBUG="#undef CONFIG_MLX5_DEBUG"
fi
if [ "X${CONFIG_BACKPORT_LRO}" == "Xm" ]; then
        DEFINE_BACKPORT_LRO="#define CONFIG_BACKPORT_LRO 1"
else
        DEFINE_BACKPORT_LRO="#undef CONFIG_BACKPORT_LRO"
fi

if [ "X${CONFIG_INFINIBAND_IPOIB_DEBUG}" == "Xy" ]; then
        DEFINE_INFINIBAND_IPOIB_DEBUG="#undef CONFIG_INFINIBAND_IPOIB_DEBUG\n#define CONFIG_INFINIBAND_IPOIB_DEBUG 1"
else
        DEFINE_INFINIBAND_IPOIB_DEBUG="#undef CONFIG_INFINIBAND_IPOIB_DEBUG"
fi
if [ "X${CONFIG_INFINIBAND_ISER}" == "Xm" ]; then
        DEFINE_INFINIBAND_ISER="#undef CONFIG_INFINIBAND_ISER\n#define CONFIG_INFINIBAND_ISER 1"
        DEFINE_SCSI_ISCSI_ATTRS="#undef CONFIG_SCSI_ISCSI_ATTRS\n#define CONFIG_SCSI_ISCSI_ATTRS 1"
        DEFINE_ISCSI_TCP="#undef CONFIG_ISCSI_TCP\n#define CONFIG_ISCSI_TCP 1"
else
        DEFINE_INFINIBAND_ISER="#undef CONFIG_INFINIBAND_ISER"
        DEFINE_SCSI_ISCSI_ATTRS="#undef CONFIG_SCSI_ISCSI_ATTRS"
        DEFINE_ISCSI_TCP="#undef CONFIG_ISCSI_TCP"
fi
if [ "X${CONFIG_INFINIBAND_ISER_DUMMY}" == "Xm" ]; then
        DEFINE_INFINIBAND_ISER_DUMMY="#undef CONFIG_INFINIBAND_ISER_DUMMY\n#define CONFIG_INFINIBAND_ISER_DUMMY 1"
else
        DEFINE_INFINIBAND_ISER_DUMMY="#undef CONFIG_INFINIBAND_ISER_DUMMY"
fi
if [ "X${CONFIG_INFINIBAND_ISERT}" == "Xm" ]; then
        DEFINE_INFINIBAND_ISERT="#undef CONFIG_INFINIBAND_ISERT\n#define CONFIG_INFINIBAND_ISERT 1"
else
        DEFINE_INFINIBAND_ISERT="#undef CONFIG_INFINIBAND_ISERT"
fi
if [ "X${CONFIG_INFINIBAND_ISERT_DUMMY}" == "Xm" ]; then
        DEFINE_INFINIBAND_ISERT_DUMMY="#undef CONFIG_INFINIBAND_ISERT_DUMMY\n#define CONFIG_INFINIBAND_ISERT_DUMMY 1"
else
        DEFINE_INFINIBAND_ISERT_DUMMY="#undef CONFIG_INFINIBAND_ISERT_DUMMY"
fi
if [ "X${CONFIG_INFINIBAND_EHCA}" == "Xm" ]; then
        DEFINE_INFINIBAND_EHCA="#undef CONFIG_INFINIBAND_EHCA\n#define CONFIG_INFINIBAND_EHCA 1"
else
        DEFINE_INFINIBAND_EHCA="#undef CONFIG_INFINIBAND_EHCA"
fi
if [ "X${CONFIG_INFINIBAND_EHCA_SCALING}" == "Xy" ]; then
        DEFINE_INFINIBAND_EHCA_SCALING="#undef CONFIG_INFINIBAND_EHCA_SCALING\n#define CONFIG_INFINIBAND_EHCA_SCALING 1"
else
        DEFINE_INFINIBAND_EHCA_SCALING="#undef CONFIG_INFINIBAND_EHCA_SCALING"
fi
if [ "X${CONFIG_E_IPOIB}" == "Xm" ]; then
        DEFINE_E_IPOIB="#undef CONFIG_E_IPOIB\n#define CONFIG_E_IPOIB 1"
else
        DEFINE_E_IPOIB="#undef CONFIG_E_IPOIB"
fi
if [ "X${CONFIG_RDS}" == "Xm" ]; then
        DEFINE_RDS="#undef CONFIG_RDS\n#define CONFIG_RDS 1"
        DEFINE_RDS_RDMA="#undef CONFIG_RDS_RDMA\n#define CONFIG_RDS_RDMA 1"
        DEFINE_RDS_TCP="#undef CONFIG_RDS_TCP\n#define CONFIG_RDS_TCP 1"
else
        DEFINE_RDS="#undef CONFIG_RDS"
        DEFINE_RDS_RDMA="#undef CONFIG_RDS_RDMA"
        DEFINE_RDS_TCP="#undef CONFIG_RDS_TCP"
fi
if [ "X${CONFIG_RDS_DUMMY}" == "Xm" ]; then
        DEFINE_RDS_DUMMY="#undef CONFIG_RDS_DUMMY\n#define CONFIG_RDS_DUMMY 1"
else
        DEFINE_RDS_DUMMY="#undef CONFIG_RDS_DUMMY"
fi
if [ "X${CONFIG_RDS_DEBUG}" == "Xy" ]; then
        DEFINE_RDS_DEBUG="#undef CONFIG_RDS_DEBUG\n#define CONFIG_RDS_DEBUG 1"
else
        DEFINE_RDS_DEBUG="#undef CONFIG_RDS_DEBUG"
fi
if [ "X${CONFIG_INFINIBAND_MADEYE}" == "Xm" ]; then
        DEFINE_INFINIBAND_MADEYE="#undef CONFIG_INFINIBAND_MADEYE\n#define CONFIG_INFINIBAND_MADEYE 1"
else
        DEFINE_INFINIBAND_MADEYE="#undef CONFIG_INFINIBAND_MADEYE"
fi
if [ "X${CONFIG_INFINIBAND_IPOIB_DEBUG_DATA}" == "Xy" ]; then
        DEFINE_INFINIBAND_IPOIB_DEBUG_DATA="#undef CONFIG_INFINIBAND_IPOIB_DEBUG_DATA\n#define CONFIG_INFINIBAND_IPOIB_DEBUG_DATA 1"
else
        DEFINE_INFINIBAND_IPOIB_DEBUG_DATA="#undef CONFIG_INFINIBAND_IPOIB_DEBUG_DATA"
fi
if [ "X${CONFIG_INFINIBAND_SDP_SEND_ZCOPY}" == "Xy" ]; then
        DEFINE_INFINIBAND_SDP_SEND_ZCOPY="#undef CONFIG_INFINIBAND_SDP_SEND_ZCOPY\n#define CONFIG_INFINIBAND_SDP_SEND_ZCOPY 1"
else
        DEFINE_INFINIBAND_SDP_SEND_ZCOPY="#undef CONFIG_INFINIBAND_SDP_SEND_ZCOPY"
fi
if [ "X${CONFIG_INFINIBAND_SDP_RECV_ZCOPY}" == "Xy" ]; then
        DEFINE_INFINIBAND_SDP_RECV_ZCOPY="#undef CONFIG_INFINIBAND_SDP_RECV_ZCOPY\n#define CONFIG_INFINIBAND_SDP_RECV_ZCOPY 1"
else
        DEFINE_INFINIBAND_SDP_RECV_ZCOPY="#undef CONFIG_INFINIBAND_SDP_RECV_ZCOPY"
fi
if [ "X${CONFIG_INFINIBAND_SDP_DEBUG}" == "Xy" ]; then
        DEFINE_INFINIBAND_SDP_DEBUG="#undef CONFIG_INFINIBAND_SDP_DEBUG\n#define CONFIG_INFINIBAND_SDP_DEBUG 1"
else
        DEFINE_INFINIBAND_SDP_DEBUG="#undef CONFIG_INFINIBAND_SDP_DEBUG"
fi
if [ "X${CONFIG_INFINIBAND_SDP_DEBUG_DATA}" == "Xy" ]; then
        DEFINE_INFINIBAND_SDP_DEBUG_DATA="#undef CONFIG_INFINIBAND_SDP_DEBUG_DATA\n#define CONFIG_INFINIBAND_SDP_DEBUG_DATA 1"
else
        DEFINE_INFINIBAND_SDP_DEBUG_DATA="#undef CONFIG_INFINIBAND_SDP_DEBUG_DATA"
fi
if [ "X${CONFIG_INFINIBAND_IPATH}" == "Xm" ]; then
        DEFINE_INFINIBAND_IPATH="#undef CONFIG_INFINIBAND_IPATH\n#define CONFIG_INFINIBAND_IPATH 1"
else
        DEFINE_INFINIBAND_IPATH="#undef CONFIG_INFINIBAND_IPATH"
fi
if [ "X${CONFIG_NET_9P_RDMA}" == "Xm" ]; then
        DEFINE_INFINIBAND_9PNET_RDMA="#undef CONFIG_NET_9P_RDMA\n#define CONFIG_NET_9P_RDMA 1"
else
        DEFINE_INFINIBAND_9PNET_RDMA="#undef CONFIG_NET_9P_RDMA"
fi
if [ "X${CONFIG_9P_FS}" == "Xm" ]; then
        DEFINE_INFINIBAND_9P="#undef CONFIG_9P_FS\n#define CONFIG_9P_FS 1"
else
        DEFINE_INFINIBAND_9P="#undef CONFIG_9P_FS"
fi
if [ "X${CONFIG_INFINIBAND_QIB}" == "Xm" ]; then
        DEFINE_INFINIBAND_QIB="#undef CONFIG_INFINIBAND_QIB\n#define CONFIG_INFINIBAND_QIB 1"
else
        DEFINE_INFINIBAND_QIB="#undef CONFIG_INFINIBAND_QIB"
fi
if [ "X${CONFIG_INFINIBAND_MTHCA_DEBUG}" == "Xy" ]; then
        DEFINE_INFINIBAND_MTHCA_DEBUG="#undef CONFIG_INFINIBAND_MTHCA_DEBUG\n#define CONFIG_INFINIBAND_MTHCA_DEBUG 1"
else
        DEFINE_INFINIBAND_MTHCA_DEBUG="#undef CONFIG_INFINIBAND_MTHCA_DEBUG"
fi
if [ "X${CONFIG_INFINIBAND_QLGC_VNIC}" == "Xm" ]; then
        DEFINE_INFINIBAND_QLGC_VNIC="#undef CONFIG_INFINIBAND_QLGC_VNIC\n#define CONFIG_INFINIBAND_QLGC_VNIC 1"
else
        DEFINE_INFINIBAND_QLGC_VNIC="#undef CONFIG_INFINIBAND_QLGC_VNIC"
fi
if [ "X${CONFIG_INFINIBAND_QLGC_VNIC_STATS}" == "Xy" ]; then
        DEFINE_INFINIBAND_QLGC_VNIC_STATS="#undef CONFIG_INFINIBAND_QLGC_VNIC_STATS\n#define CONFIG_INFINIBAND_QLGC_VNIC_STATS 1"
else
        DEFINE_INFINIBAND_QLGC_VNIC_STATS="#undef CONFIG_INFINIBAND_QLGC_VNIC_STATS"
fi
if [ "X${CONFIG_INFINIBAND_CXGB3}" == "Xm" ]; then
        DEFINE_INFINIBAND_CXGB3="#undef CONFIG_INFINIBAND_CXGB3\n#define CONFIG_INFINIBAND_CXGB3 1"
else
        DEFINE_INFINIBAND_CXGB3="#undef CONFIG_INFINIBAND_CXGB3"
fi
if [ "X${CONFIG_INFINIBAND_CXGB3_DEBUG}" == "Xy" ]; then
        DEFINE_INFINIBAND_CXGB3_DEBUG="#undef CONFIG_INFINIBAND_CXGB3_DEBUG\n#define CONFIG_INFINIBAND_CXGB3_DEBUG 1"
else
        DEFINE_INFINIBAND_CXGB3_DEBUG="#undef CONFIG_INFINIBAND_CXGB3_DEBUG"
fi
if [ "X${CONFIG_CHELSIO_T3}" == "Xm" ]; then
        DEFINE_CHELSIO_T3="#undef CONFIG_CHELSIO_T3\n#define CONFIG_CHELSIO_T3 1"
else
        DEFINE_CHELSIO_T3="#undef CONFIG_CHELSIO_T3"
fi
if [ "X${CONFIG_INFINIBAND_CXGB4}" == "Xm" ]; then
        DEFINE_INFINIBAND_CXGB4="#undef CONFIG_INFINIBAND_CXGB4\n#define CONFIG_INFINIBAND_CXGB4 1"
else
        DEFINE_INFINIBAND_CXGB4="#undef CONFIG_INFINIBAND_CXGB4"
fi
if [ "X${CONFIG_CHELSIO_T4}" == "Xm" ]; then
        DEFINE_CHELSIO_T4="#undef CONFIG_CHELSIO_T4\n#define CONFIG_CHELSIO_T4 1"
else
        DEFINE_CHELSIO_T4="#undef CONFIG_CHELSIO_T4"
fi
if [ "X${CONFIG_SCSI_CXGB3_ISCSI}" == "Xm" ]; then
        DEFINE_SCSI_CXGB3_ISCSI="#undef CONFIG_SCSI_CXGB3_ISCSI\n#define CONFIG_SCSI_CXGB3_ISCSI 1"
else
        DEFINE_SCSI_CXGB3_ISCSI="#undef CONFIG_SCSI_CXGB3_ISCSI"
fi
if [ "X${CONFIG_SCSI_CXGB4_ISCSI}" == "Xm" ]; then
        DEFINE_SCSI_CXGB4_ISCSI="#undef CONFIG_SCSI_CXGB4_ISCSI\n#define CONFIG_SCSI_CXGB4_ISCSI 1"
else
        DEFINE_SCSI_CXGB4_ISCSI="#undef CONFIG_SCSI_CXGB4_ISCSI"
fi
if [ "X${CONFIG_NVMF_HOST}" == "Xm" ]; then
        DEFINE_NVMF_HOST="#undef CONFIG_NVMF_HOST\n#define CONFIG_NVMF_HOST 1"
else
        DEFINE_NVMF_HOST="#undef CONFIG_NVMF_HOST"
fi
if [ "X${CONFIG_NVMF_HOST_DUMMY}" == "Xm" ]; then
        DEFINE_NVMF_HOST_DUMMY="#undef CONFIG_NVMF_HOST_DUMMY\n#define CONFIG_NVMF_HOST_DUMMY 1"
else
        DEFINE_NVMF_HOST_DUMMY="#undef CONFIG_NVMF_HOST_DUMMY"
fi
if [ "X${CONFIG_NVMF_TARGET}" == "Xm" ]; then
        DEFINE_NVMF_TARGET="#undef CONFIG_NVMF_TARGET\n#define CONFIG_NVMF_TARGET 1"
else
        DEFINE_NVMF_TARGET="#undef CONFIG_NVMF_TARGET"
fi
if [ "X${CONFIG_NVMF_TARGET_DUMMY}" == "Xm" ]; then
        DEFINE_NVMF_TARGET="#undef CONFIG_NVMF_TARGET_DUMMY\n#define CONFIG_NVMF_TARGET_DUMMY 1"
else
        DEFINE_NVMF_TARGET_DUMMY="#undef CONFIG_NVMF_TARGET_DUMMY"
fi
if [ "X${CONFIG_INFINIBAND_NES}" == "Xm" ]; then
        DEFINE_INFINIBAND_NES="#undef CONFIG_INFINIBAND_NES\n#define CONFIG_INFINIBAND_NES 1"
else
        DEFINE_INFINIBAND_NES="#undef CONFIG_INFINIBAND_NES"
fi
if [ "X${CONFIG_INFINIBAND_OCRDMA}" == "Xm" ]; then
        DEFINE_INFINIBAND_OCRDMA="#undef CONFIG_INFINIBAND_OCRDMA\n#define CONFIG_INFINIBAND_OCRDMA 1"
else
        DEFINE_INFINIBAND_OCRDMA="#undef CONFIG_INFINIBAND_OCRDMA"
fi
if [ "X${CONFIG_INFINIBAND_NES_DEBUG}" == "Xy" ]; then
        DEFINE_INFINIBAND_NES_DEBUG="#undef CONFIG_INFINIBAND_NES_DEBUG\n#define CONFIG_INFINIBAND_NES_DEBUG 1"
else
        DEFINE_INFINIBAND_NES_DEBUG="#undef CONFIG_INFINIBAND_NES_DEBUG"
fi
if [ "X${CONFIG_INFINIBAND_AMSO1100}" == "Xm" ]; then
        DEFINE_INFINIBAND_AMSO1100="#undef CONFIG_INFINIBAND_AMSO1100\n#define CONFIG_INFINIBAND_AMSO1100 1"
else
        DEFINE_INFINIBAND_AMSO1100="#undef CONFIG_INFINIBAND_AMSO1100"
fi
if [ "X${CONFIG_MLX4_EN_DCB}" == "Xy" ]; then
        DEFINE_MLX4_EN_DCB="#undef CONFIG_MLX4_EN_DCB\n#define CONFIG_MLX4_EN_DCB 1"
else
        DEFINE_MLX4_EN_DCB="#undef CONFIG_MLX4_EN_DCB"
fi
if [ "X${CONFIG_MLX4_EN_PERF_STAT}" == "Xy" ]; then
	DEFINE_MLX4_EN_PERF_STAT="#undef CONFIG_MLX4_EN_PERF_STAT\n#define CONFIG_MLX4_EN_PERF_STAT 1"
else
	DEFINE_MLX4_EN_PERF_STAT="#undef CONFIG_MLX4_EN_PERF_STAT"
fi
if [ "X${CONFIG_MLX4_IB_DEBUG_FS}" == "Xy" ]; then
        DEFINE_MLX4_IB_DEBUG_FS="#undef CONFIG_MLX4_IB_DEBUG_FS\n#define CONFIG_MLX4_IB_DEBUG_FS 1"
else
        DEFINE_MLX4_IB_DEBUG_FS="#undef CONFIG_MLX4_IB_DEBUG_FS"
fi
if [ "X${CONFIG_SUNRPC_XPRT_RDMA}" == "Xm" ]; then
        DEFINE_SUNRPC_XPRT_RDMA="#undef CONFIG_SUNRPC_XPRT_RDMA\n#define CONFIG_SUNRPC_XPRT_RDMA 1"
else
        DEFINE_SUNRPC_XPRT_RDMA="/* CONFIG_SUNRPC_XPRT_RDMA is not set */"
fi
if [ "X${CONFIG_SUNRPC_XPRT_RDMA_DUMMY}" == "Xm" ]; then
        DEFINE_SUNRPC_XPRT_RDMA_DUMMY="#undef CONFIG_SUNRPC_XPRT_RDMA_DUMMY\n#define CONFIG_SUNRPC_XPRT_RDMA_DUMMY 1"
else
        DEFINE_SUNRPC_XPRT_RDMA="/* CONFIG_SUNRPC_XPRT_RDMA is not set */"
fi
if [ "X${CONFIG_SUNRPC_XPRT_RDMA_CLIENT}" == "Xm" ]; then
        DEFINE_SUNRPC_XPRT_RDMA_CLIENT="#undef CONFIG_SUNRPC_XPRT_RDMA_CLIENT\n#define CONFIG_SUNRPC_XPRT_RDMA_CLIENT 1"
else
        DEFINE_SUNRPC_XPRT_RDMA_CLIENT="/* CONFIG_SUNRPC_XPRT_RDMA_CLIENT is not set */"
fi
if [ "X${CONFIG_SUNRPC_XPRT_RDMA_SERVER}" == "Xm" ]; then
        DEFINE_SUNRPC_XPRT_RDMA_SERVER="#undef CONFIG_SUNRPC_XPRT_RDMA_SERVER\n#define CONFIG_SUNRPC_XPRT_RDMA_SERVER 1"
else
        DEFINE_SUNRPC_XPRT_RDMA_SERVER="/* CONFIG_SUNRPC_XPRT_RDMA_SERVER is not set */"
fi
if [ "X${CONFIG_SCSI_SRP_ATTRS}" == "Xm" ]; then
        DEFINE_SCSI_SRP_ATTRS="#undef CONFIG_SCSI_SRP_ATTRS\n#define CONFIG_SCSI_SRP_ATTRS 1"
else
        DEFINE_SCSI_SRP_ATTRS="/* CONFIG_SCSI_SRP_ATTRS is not set */"
fi

if [ ! -z "${CONFIG_IPOIB_VERSION}" ]; then
	DEFINE_IPOIB_VERSION="#define CONFIG_IPOIB_VERSION ${CONFIG_IPOIB_VERSION}"
fi

if [ ! -z "${CONFIG_COMPAT_VERSION}" ]; then
	DEFINE_COMPAT_OLD_VERSION="#define CONFIG_COMPAT_VERSION ${CONFIG_COMPAT_VERSION}"
fi

if [ "X${CONFIG_COMPAT_KOBJECT_BACKPORT}" == "Xy" ]; then
	DEFINE_COMPAT_KOBJECT_BACKPORT="#define CONFIG_COMPAT_KOBJECT_BACKPORT ${CONFIG_COMPAT_KOBJECT_BACKPORT}"
fi

if [ "X${CONFIG_INFINIBAND_ON_DEMAND_PAGING}" == "Xy" ]; then
        DEFINE_INFINIBAND_ON_DEMAND_PAGING="#undef CONFIG_INFINIBAND_ON_DEMAND_PAGING\n#define CONFIG_INFINIBAND_ON_DEMAND_PAGING 1"
else
        DEFINE_INFINIBAND_ON_DEMAND_PAGING="#undef CONFIG_INFINIBAND_ON_DEMAND_PAGING"
fi

if [ "X${CONFIG_INFINIBAND_WQE_FORMAT}" == "Xy" ]; then
        DEFINE_INFINIBAND_ON_WQE_FORMAT="#undef CONFIG_INFINIBAND_WQE_FORMAT\n#define CONFIG_INFINIBAND_WQE_FORMAT 1"
else
        DEFINE_INFINIBAND_ON_WQE_FORMAT="#undef CONFIG_INFINIBAND_WQE_FORMAT"
fi

if [ "X${CONFIG_INFINIBAND_PA_MR}" == "Xy" ]; then
        DEFINE_INFINIBAND_PA_MR="#undef CONFIG_INFINIBAND_PA_MR\n#define CONFIG_INFINIBAND_PA_MR 1"
else
        DEFINE_INFINIBAND_PA_MR="#undef CONFIG_INFINIBAND_PA_MR"
fi


cat > ${AUTOCONF_H} << EOFAUTOCONF
#ifndef __OFED_BUILD__
#include_next <$AUTOCONF_PREFIX/autoconf.h>
$(echo -e "${DEFINE_INFINIBAND}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_IPOIB}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_IPOIB_CM}" | grep -v undef)
$(echo -e "${DEFINE_IPOIB_ALL_MULTI}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_SDP}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_SDP_DUMMY}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_SRP}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_SRP_DUMMY}" | grep -v undef)

$(echo -e "${DEFINE_INFINIBAND_USER_MAD}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_USER_ACCESS}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_ADDR_TRANS}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_USER_MEM}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_MTHCA}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_QLGC_VNIC}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_CXGB3}" | grep -v undef)
$(echo -e "${DEFINE_CHELSIO_T3}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_CXGB4}" | grep -v undef)
$(echo -e "${DEFINE_CHELSIO_T4}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_NES}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_OCRDMA}" | grep -v undef)

$(echo -e "${DEFINE_SUNRPC_XPRT_RDMA}" | grep -v undef)
$(echo -e "${DEFINE_SUNRPC_XPRT_RDMA_DUMMY}" | grep -v undef)
$(echo -e "${DEFINE_SUNRPC_XPRT_RDMA_CLIENT}" | grep -v undef)
$(echo -e "${DEFINE_SUNRPC_XPRT_RDMA_SERVER}" | grep -v undef)

$(echo -e "${DEFINE_INFINIBAND_IPOIB_DEBUG}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_ISERT}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_ISERT_DUMMY}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_ISER}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_ISER_DUMMY}" | grep -v undef)
$(echo -e "${DEFINE_SCSI_ISCSI_ATTRS}" | grep -v undef)
$(echo -e "${DEFINE_ISCSI_TCP}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_EHCA}" | grep -v undef)
$(echo -e "${DEFINE_E_IPOIB}" | grep -v undef)
$(echo -e "${DEFINE_RDS}" | grep -v undef)
$(echo -e "${DEFINE_RDS_DUMMY}" | grep -v undef)
$(echo -e "${DEFINE_RDS_RDMA}" | grep -v undef)
$(echo -e "${DEFINE_RDS_TCP}" | grep -v undef)
$(echo -e "${DEFINE_RDS_DEBUG}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_QLGC_VNIC_STATS}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_CXGB3_DEBUG}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_NES_DEBUG}" | grep -v undef)

$(echo -e "${DEFINE_MLX4_CORE}" | grep -v undef)
$(echo -e "${DEFINE_MLX5_CORE}" | grep -v undef)
$(echo -e "${DEFINE_MLX4_EN}" | grep -v undef)
$(echo -e "${DEFINE_MLX4_IB_DEBUG_FS}" | grep -v undef)
$(echo -e "${DEFINE_MLX4_INFINIBAND}" | grep -v undef)
$(echo -e "${DEFINE_MLX5_INFINIBAND}" | grep -v undef)
$(echo -e "${DEFINE_MLX4_ETHERNET}" | grep -v undef)
$(echo -e "${DEFINE_MLX4_DEBUG}" | grep -v undef)
$(echo -e "${DEFINE_MLX5_DEBUG}" | grep -v undef)
$(echo -e "${DEFINE_MLX4_EN_PERF_STAT}" | grep -v undef)

$(echo -e "${DEFINE_INFINIBAND_IPOIB_DEBUG_DATA}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_SDP_SEND_ZCOPY}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_SDP_RECV_ZCOPY}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_SDP_DEBUG}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_SDP_DEBUG_DATA}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_IPATH}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_9PNET_RDMA}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_9P}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_QIB}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_MTHCA_DEBUG}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_MADEYE}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_AMSO1100}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_ON_DEMAND_PAGING}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_ON_WQE_FORMAT}" | grep -v undef)
$(echo -e "${DEFINE_INFINIBAND_PA_MR}" | grep -v undef)

#else
#undef CONFIG_COMPAT_VERSION
#undef CONFIG_MEMTRACK
#undef CONFIG_DEBUG_INFO
#undef CONFIG_INFINIBAND
#undef CONFIG_INFINIBAND_IPOIB
#undef CONFIG_INFINIBAND_IPOIB_CM
#undef CONFIG_IPOIB_ALL_MULTI
#undef CONFIG_INFINIBAND_SDP
#undef CONFIG_INFINIBAND_SDP_DUMMY
#undef CONFIG_INFINIBAND_SRP
#undef CONFIG_INFINIBAND_SRP_DUMMY

#undef CONFIG_INFINIBAND_USER_MAD
#undef CONFIG_INFINIBAND_USER_ACCESS
#undef CONFIG_INFINIBAND_ADDR_TRANS
#undef CONFIG_INFINIBAND_USER_MEM
#undef CONFIG_INFINIBAND_MTHCA

#undef CONFIG_MLX4_CORE
#undef CONFIG_MLX5_CORE
#undef CONFIG_MLX4_DEBUG
#undef CONFIG_MLX5_DEBUG
#undef CONFIG_MLX4_EN
#undef CONFIG_MLX4_EN_DCB
#undef CONFIG_MLX4_IB_DEBUG_FS
#undef CONFIG_MLX4_VNIC
#undef CONFIG_MLX4_VNIC_DEBUG
#undef CONFIG_MLX4_INFINIBAND
#undef CONFIG_MLX5_INFINIBAND
#undef CONFIG_BACKPORT_LRO

#undef CONFIG_MLX4_FC

#undef CONFIG_INFINIBAND_IPOIB_DEBUG
#undef CONFIG_INFINIBAND_ISER
#undef CONFIG_INFINIBAND_ISER_DUMMY
#undef CONFIG_INFINIBAND_ISERT
#undef CONFIG_INFINIBAND_ISERT_DUMMY
#undef CONFIG_INFINIBAND_EHCA
#undef CONFIG_INFINIBAND_EHCA_SCALING
#undef CONFIG_E_IPOIB
#undef CONFIG_RDS
#undef CONFIG_RDS_DUMMY
#undef CONFIG_RDS_RDMA
#undef CONFIG_RDS_TCP
#undef CONFIG_RDS_DEBUG
#undef CONFIG_INFINIBAND_MADEYE
#undef CONFIG_INFINIBAND_QLGC_VNIC
#undef CONFIG_INFINIBAND_QLGC_VNIC_STATS
#undef CONFIG_INFINIBAND_CXGB3
#undef CONFIG_INFINIBAND_CXGB3_DEBUG
#undef CONFIG_CHELSIO_T3
#undef CONFIG_INFINIBAND_CXGB4
#undef CONFIG_CHELSIO_T4
#undef CONFIG_SCSI_CXGB3_ISCSI
#undef CONFIG_SCSI_CXGB4_ISCSI
#undef CONFIG_NVMF_HOST
#undef CONFIG_NVMF_HOST_DUMMY
#undef CONFIG_NVMF_TARGET
#undef CONFIG_NVMF_TARGET_DUMMY
#undef CONFIG_INFINIBAND_NES
#undef CONFIG_INFINIBAND_NES_DEBUG
#undef CONFIG_INFINIBAND_OCRDMA
#undef CONFIG_MLX4_EN_PERF_STAT

#undef CONFIG_SUNRPC_XPRT_RDMA
#undef CONFIG_SUNRPC_XPRT_RDMA_DUMMY
#undef CONFIG_SUNRPC_XPRT_RDMA_CLIENT
#undef CONFIG_SUNRPC_XPRT_RDMA_SERVER

#undef CONFIG_SCSI_SRP_ATTRS

#undef CONFIG_INFINIBAND_IPOIB_DEBUG_DATA
#undef CONFIG_INFINIBAND_SDP_SEND_ZCOPY
#undef CONFIG_INFINIBAND_SDP_RECV_ZCOPY
#undef CONFIG_INFINIBAND_SDP_DEBUG
#undef CONFIG_INFINIBAND_SDP_DEBUG_DATA
#undef CONFIG_INFINIBAND_IPATH
#undef CONFIG_NET_9P_RDMA
#undef CONFIG_9P_FS
#undef CONFIG_INFINIBAND_QIB
#undef CONFIG_INFINIBAND_MTHCA_DEBUG
#undef CONFIG_INFINIBAND_AMSO1100
#undef CONFIG_MLX4_EN_DCB
#undef CONFIG_MLX4_EN_PERF_STAT
#undef CONFIG_MLX4_IB_DEBUG_FS

$(echo -e "${DEFINE_INFINIBAND}")
$(echo -e "${DEFINE_INFINIBAND_IPOIB}")
$(echo -e "${DEFINE_INFINIBAND_IPOIB_CM}")
$(echo -e "${DEFINE_IPOIB_ALL_MULTI}")
$(echo -e "${DEFINE_INFINIBAND_SDP}")
$(echo -e "${DEFINE_INFINIBAND_SDP_DUMMY}")
$(echo -e "${DEFINE_INFINIBAND_SRP}")
$(echo -e "${DEFINE_INFINIBAND_SRP_DUMMY}")

$(echo -e "${DEFINE_INFINIBAND_USER_MAD}")
$(echo -e "${DEFINE_INFINIBAND_USER_ACCESS}")
$(echo -e "${DEFINE_INFINIBAND_ADDR_TRANS}")
$(echo -e "${DEFINE_INFINIBAND_USER_MEM}")
$(echo -e "${DEFINE_INFINIBAND_MTHCA}")
$(echo -e "${DEFINE_INFINIBAND_QLGC_VNIC}")
$(echo -e "${DEFINE_INFINIBAND_CXGB3}")
$(echo -e "${DEFINE_CHELSIO_T3}")
$(echo -e "${DEFINE_INFINIBAND_CXGB4}")
$(echo -e "${DEFINE_CHELSIO_T4}")
$(echo -e "${DEFINE_INFINIBAND_NES}")
$(echo -e "${DEFINE_INFINIBAND_OCRDMA}")

$(echo -e "${DEFINE_SUNRPC_XPRT_RDMA}")
$(echo -e "${DEFINE_SUNRPC_XPRT_RDMA_DUMMY}")
$(echo -e "${DEFINE_SUNRPC_XPRT_RDMA_CLIENT}")
$(echo -e "${DEFINE_SUNRPC_XPRT_RDMA_SERVER}")

$(echo -e "${DEFINE_INFINIBAND_IPOIB_DEBUG}")
$(echo -e "${DEFINE_INFINIBAND_ISERT}")
$(echo -e "${DEFINE_INFINIBAND_ISERT_DUMMY}")
$(echo -e "${DEFINE_INFINIBAND_ISER}")
$(echo -e "${DEFINE_INFINIBAND_ISER_DUMMY}")
$(echo -e "${DEFINE_SCSI_ISCSI_ATTRS}")
$(echo -e "${DEFINE_ISCSI_TCP}")
$(echo -e "${DEFINE_INFINIBAND_EHCA}")
$(echo -e "${DEFINE_E_IPOIB}")
$(echo -e "${DEFINE_RDS}")
$(echo -e "${DEFINE_RDS_DUMMY}")
$(echo -e "${DEFINE_RDS_RDMA}")
$(echo -e "${DEFINE_RDS_TCP}")
$(echo -e "${DEFINE_RDS_DEBUG}")
$(echo -e "${DEFINE_INFINIBAND_QLGC_VNIC_STATS}")
$(echo -e "${DEFINE_INFINIBAND_CXGB3_DEBUG}")
$(echo -e "${DEFINE_INFINIBAND_NES_DEBUG}")

$(echo -e "${DEFINE_MLX4_CORE}")
$(echo -e "${DEFINE_MLX5_CORE}")
$(echo -e "${DEFINE_MLX4_EN}")
$(echo -e "${DEFINE_MLX4_IB_DEBUG_FS}")
$(echo -e "${DEFINE_MLX4_INFINIBAND}")
$(echo -e "${DEFINE_MLX5_INFINIBAND}")
$(echo -e "${DEFINE_MLX4_ETHERNET}")
$(echo -e "${DEFINE_MLX4_DEBUG}")
$(echo -e "${DEFINE_MLX5_DEBUG}")
$(echo -e "${DEFINE_MLX4_VNIC}")
$(echo -e "${DEFINE_MLX4_VNIC_DEBUG}")
$(echo -e "${DEFINE_MLX4_EN_PERF_STAT}")

$(echo -e "${DEFINE_MLX4_FC}")

$(echo -e "${DEFINE_INFINIBAND_IPOIB_DEBUG_DATA}")
$(echo -e "${DEFINE_INFINIBAND_SDP_SEND_ZCOPY}")
$(echo -e "${DEFINE_INFINIBAND_SDP_RECV_ZCOPY}")
$(echo -e "${DEFINE_INFINIBAND_SDP_DEBUG}")
$(echo -e "${DEFINE_INFINIBAND_SDP_DEBUG_DATA}")
$(echo -e "${DEFINE_INFINIBAND_IPATH}")
$(echo -e "${DEFINE_INFINIBAND_9PNET_RDMA}")
$(echo -e "${DEFINE_INFINIBAND_9P}")
$(echo -e "${DEFINE_INFINIBAND_QIB}")
$(echo -e "${DEFINE_INFINIBAND_MTHCA_DEBUG}")
$(echo -e "${DEFINE_INFINIBAND_MADEYE}")
$(echo -e "${DEFINE_INFINIBAND_AMSO1100}")
$(echo -e "${DEFINE_MLX4_EN_DCB}")
$(echo -e "${DEFINE_IPOIB_VERSION}")
$(echo -e "${DEFINE_COMPAT_OLD_VERSION}")
$(echo -e "${DEFINE_COMPAT_KOBJECT_BACKPORT}")
$(echo -e "${DEFINE_INFINIBAND_ON_DEMAND_PAGING}")
$(echo -e "${DEFINE_INFINIBAND_ON_WQE_FORMAT}")
$(echo -e "${DEFINE_INFINIBAND_PA_MR}")
#endif

EOFAUTOCONF

        echo "Created ${AUTOCONF_H}:"
        cat ${AUTOCONF_H}

    if [ $SKIP_AUTOCONF -eq 0 ]; then
        cd compat

        if [[ ! -x configure || $FORCE_AUTOGEN -eq 1 ]]; then
            ex ./autogen.sh
        fi

	/bin/cp -f Makefile.real Makefile
	/bin/cp -f Makefile.real Makefile.in

        if [[ -e "/etc/SuSE-release" && "$KSRC" =~ "build" && -d ${KSRC/build/source} ]] ||
           [[ "$KSRC" =~ "build" && -d ${KSRC/build/source} &&
               "X$(readlink -f $KSRC)" != "X$(readlink -f ${KSRC/build/source})" ]]; then
            ex ./configure --with-linux-obj=$KSRC --with-linux=${KSRC/build/source} --with-njobs=$NJOBS
        elif [[ -e "/etc/SuSE-release" && "$KSRC" =~ "linux-obj" ]]; then
            sources_dir=$(readlink -f $KSRC 2>/dev/null | sed -e 's/-obj.*//g')
            ex ./configure --with-linux-obj=$KSRC --with-linux=${sources_dir} --with-njobs=$NJOBS
        else
            ex ./configure --with-linux-obj=$KSRC --with-linux=$KSRC --with-njobs=$NJOBS
        fi
    fi
}

main $@
if [ "X$BUILD_DUMMY_MODS" == "X1" ]; then
    echo
    echo "Going to build dummy modules for ULPs and storage drivers..."
    echo
fi
