configure revision c58f1213e628a545081c70e26c6b67a841cff880
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# The purpose of this script is to check for all external tools, headers, and
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# libraries VBox OSE depends on.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# Copyright (C) 2006-2013 Oracle Corporation
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# This file is part of VirtualBox Open Source Edition (OSE), as
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# available from http://www.virtualbox.org. This file is free software;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# you can redistribute it and/or modify it under the terms of the GNU
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# General Public License (GPL) as published by the Free Software
af8d59d05d72f134aeea62712f1286b369807d52vboxsync# Foundation, in version 2 as it comes in the "COPYING" file of the
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# append some extra paths
af8d59d05d72f134aeea62712f1286b369807d52vboxsync# Solaris (order of paths important for tr, echo, grep, sed to work)
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsyncPATH="/usr/xpg4/bin:/usr/ucb:$PATH:/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Wrapper for ancient /usr/bin/which on darwin that always returns 0
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if which /bin/___cErTaINly_a_nOn_eXisTing_fIle___ 2> /dev/null > /dev/null; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsyncOS=`uname -s | sed -e 's/GNU\/Linux/Linux/g' | tr '[:upper:]' '[:lower:]'`
af8d59d05d72f134aeea62712f1286b369807d52vboxsync echo "Cannot determine OS!"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsyncLIBX11="-L/usr/X11R6/lib -L/usr/X11R6/lib64 -L/usr/local/lib -lXext -lX11"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsyncQT4DIR="/usr/lib/qt4 /usr/share/qt4 /usr/lib64/qt4 /usr /usr/local"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# the restricting tool is ar (mri mode).
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsyncif (cd `dirname $0`; pwd)|grep -q "$INVALID_CHARS"; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync echo "Error: VBox base path contains invalid characters!"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# darwin /bin/sh has a builtin echo that doesn't grok -n. gotta love it.
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync rm -f $ODIR.tmp_src.cc $ODIR.tmp_src.c $ODIR.tmp_out $ODIR.test_execute.log
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync echo "$1"|$KBUILD_SED 's|-l\([^ ]\+\)|\1|g; s|^-[^l][^ ]*||g; s| -[^l][^ ]*||g; s|^ ||; s| *$||g'
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync echo "$1"|$KBUILD_SED 's|-L\([^ ]\+\)|\1|g; s|^-[^L][^ ]*||g; s| -[^L][^ ]*||g; s|^ ||; s| *$||g'
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync echo "$1"|$KBUILD_SED 's|-I\([^ ]\+\)|\1|g; s|^-[^I][^ ]*||g; s| -[^I][^ ]*||g; s|^ ||; s| *$||g'
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync elif which_wrapper $1 > /dev/null; then
af8d59d05d72f134aeea62712f1286b369807d52vboxsync# Prepare a test
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Compile a test
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# $2 library name
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# $3 package name
af8d59d05d72f134aeea62712f1286b369807d52vboxsync# $4 if this argument is 'nofatal', don't abort
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync echo "compiling the following source file:" >> $LOG
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync echo "$CXX $CXX_FLAGS -g -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.cc \"$1\"" >> $LOG
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync $CXX $CXX_FLAGS -g -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.cc $1 >> $LOG 2>&1
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if [ $? -ne 0 ]; then
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync echo " Check the file $LOG for detailed error information."
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# Execute a compiled test binary
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if [ $rc -ne 0 ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Execute a compiled test binary
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync echo "executing the binary (LD_LIBRARY_PATH=$1)" >> $LOG
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync LD_LIBRARY_PATH=$1 $ODIR.tmp_out > $ODIR.test_execute.log
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if [ $rc -ne 0 ]; then
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# Check for OS, MACHINE, CPU
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync [ "$OS" = "solaris" ] && BUILD_CPU=`isainfo | cut -f 1 -d ' '`
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync i[3456789]86|x86|i86pc|BePC)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync # on AMD64 systems, 64bit libs are usually located in /usr/lib64
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync # see http://www.pathname.com/fhs/pub/fhs-2.3.html#LIB64
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync # Solaris doesn't seem to subscribe to fhs, libs are usually in
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync # a '64' subdirectory of the standard 'lib' dirs while some 64-bit
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync # alternative binaries can be found in 'amd64' subdirs of the 'bin'
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync # ones. So, in order to find the right stuff (esp. sdl-config) we'll
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync # have to make sure the */bin/amd64 dirs are searched before the */bin
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync # ones. (The sed has some sideeffects, but they shouldn't harm us...)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync echo "64-bit Solaris detected, hacking the PATH" >> $LOG
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync PATH=`echo ":$PATH:" | sed -e 's,\(:[^:]*/bin\):,\1/amd64:\1:,g' \
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync [ -z "$TARGET_MACHINE" ] && TARGET_MACHINE=$BUILD_MACHINE
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync log_success "Determined build machine: $OS.$BUILD_MACHINE, target machine: $OS.$TARGET_MACHINE"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync echo "BUILD_PLATFORM_ARCH=\"$BUILD_MACHINE\"" >> $ENV
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync echo "BUILD_TARGET_ARCH=\"$TARGET_MACHINE\"" >> $ENV
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Check for gcc with version >= 3.2.
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# We depend on a working gcc, if we fail terminate in every case.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if [ $? -ne 0 ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if [ $? -ne 0 ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync log_failure "gcc version $cc_ver does not match g++ version $cxx_ver"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync elif [ $cc_maj -eq 4 -a $cc_min -eq 0 -a "$OS" = "darwin" ]; then
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync -o \( $cc_maj -eq 4 -a $cc_min -lt 1 -a "$OS" != "darwin" \) \
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync -o $cc_maj -gt 4 ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync log_failure "gcc version $cc_ver found, expected gcc 3.x with x>1 or gcc 4.x with 0<x<8"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if [ "$BUILD_MACHINE" = "x86" -a "$TARGET_MACHINE" = "amd64" ]; then
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if [ "$TARGET_MACHINE" = "amd64" -a $WITH_VMMRAW -eq 0 ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if [ "$CC32" != "gcc -m32" -a "$CC32" != "undefined" ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if [ "$CXX32" != "g++ -m32" -a "$CXX32" != "undefined" ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync # this isn't not necessary, there is not such tool.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if [ "$OS" = "solaris" -a "$BUILD_MACHINE" = "amd64" ]; then
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# Check for the OpenWatcom compiler, needed for compiling the BIOS
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# If the system has Open Watcom installed, WATCOM will be set in the
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# environment. If the user has her/his own Open Watcom install it will be
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# pointed to by on the command line, which will set the WATCOM variable.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# The only exception is detecting OpenWatcom in tools/common/openwatcom.
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync WATCOM=`/bin/ls -rd1 $PWD/tools/common/openwatcom/* 2> /dev/null | head -1`
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync log_failure "$WATCOM/$wc_bin/$prog does not exist or is not a regular file."
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wasm_ver=`$WATCOM/$wc_bin/wasm -? 2>&1 | sed -e '1!d' -e 's/Open Watcom Assembler Version *//'`
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync log_failure "$WATCOM/$wc_bin/wasm -? did not produce the expected response"
af8d59d05d72f134aeea62712f1286b369807d52vboxsync# Check for yasm, needed to compile assembler files
af8d59d05d72f134aeea62712f1286b369807d52vboxsync yasm_ver=`$YASM --version|grep "^yasm"|sed 's+^yasm \(.*\)+\1+'`
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if [ $? -ne 0 ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync yasm_ver_mul=`expr $yasm_maj \* 10000 + $yasm_min \* 100 + $yasm_rev`
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if [ $yasm_ver_mul -lt 501 ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync log_failure "found version $yasm_ver, expected at least 0.5.1"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Check for the iasl ACPI compiler, needed to compile vbox.dsl
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync iasl_ver=`$IASL|grep version|sed 's+^ASL.*version \([0-9]*\).*+\1+'`
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if [ $? -ne 0 ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Check for xsltproc, needed by Main
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if [ $? -ne 0 ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync cnf_append "VBOX_XSLTPROC" "`which_wrapper $XSLTPROC`"
af8d59d05d72f134aeea62712f1286b369807d52vboxsync# Check for mkisofs, needed to build the CDROM image containing the additions
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if [ $? -ne 0 ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync cnf_append "VBOX_MKISOFS" "`which_wrapper $GENISOIMAGE`"
af8d59d05d72f134aeea62712f1286b369807d52vboxsync if [ $? -ne 0 ]; then
af8d59d05d72f134aeea62712f1286b369807d52vboxsync cnf_append "VBOX_MKISOFS" "`which_wrapper $MKISOFS`"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# Check for libxml2, needed by VBoxSettings and Runtime.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# 2.6.24 is known to NOT work, 2.6.26 is known to work (there is no 2.6.25 release)
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync libxml2_ver=`pkg-config libxml-2.0 --modversion 2>> $LOG`
af8d59d05d72f134aeea62712f1286b369807d52vboxsync if [ $? -ne 0 ]; then
af8d59d05d72f134aeea62712f1286b369807d52vboxsync#include <cstdio>
af8d59d05d72f134aeea62712f1286b369807d52vboxsync#include <libxml/xmlversion.h>
af8d59d05d72f134aeea62712f1286b369807d52vboxsyncextern "C" int main(void)
af8d59d05d72f134aeea62712f1286b369807d52vboxsync printf("found version %s", LIBXML_DOTTED_VERSION);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#if LIBXML_VERSION >= 20626
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf(", OK.\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf(", expected version 2.6.26 or higher\n");
af8d59d05d72f134aeea62712f1286b369807d52vboxsync [ -n "$INCXML2" ] && I_INCXML2=`prefix_I "$INCXML2"`
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if test_compile "$LIBXML2 $LIBPTHREAD $I_INCXML2" xml2 xml2; then
af8d59d05d72f134aeea62712f1286b369807d52vboxsync cnf_append "SDK_VBOX_LIBXML2_LIBS" "`strip_l "$LIBXML2"`"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if [ $? -ne 0 ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#include <cstdio>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <libxml/xmlversion.h>
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsyncextern "C" int main(void)
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf("found version %s", LIBXML_DOTTED_VERSION);
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#if LIBXML_VERSION >= 20626
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf(", OK.\n");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync printf(", expected version 2.6.26 or higher\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync [ -n "$INCXML2" ] && I_INCXML2=`prefix_I "$INCXML2"`
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if test_compile "$LIBXML2 $LIBPTHREAD $I_INCXML2" xml2 xml2; then
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync cnf_append "SDK_VBOX_LIBXML2_LIBS" "`strip_l "$LIBXML2"`"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync log_failure "neither pkg-config nor xml2-config found"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Check for libIDL, needed by xpcom
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if [ $? -ne 0 ]; then
af8d59d05d72f134aeea62712f1286b369807d52vboxsync "PKG_CONFIG_PATH=`libIDL-config-2 --prefix`/$LIB/pkgconfig `which_wrapper libIDL-config-2`"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync elif check_avail "libIDL-config" libIDL-config; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if [ $? -ne 0 ]; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync cnf_append "VBOX_LIBIDL_CONFIG" "`which_wrapper libIDL-config`"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Check for libdevmapper, needed by the VBoxVolInfo
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#include <cstdio>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define private
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <libdevmapper.h>
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync char version[80];
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if (!dm_get_library_version(version, sizeof(version)))
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf("dm_get_library_version() failed.\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync const char* v=version;
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync unsigned int major = 0, minor = 0, micro = 0;
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync for (; *v !='.' && *v != '\0'; v++) major = major*10 + *v-'0';
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if (*v == '.') v++;
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync for (; *v !='.' && *v != '\0'; v++) minor = minor*10 + *v-'0';
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if (*v == '.') v++;
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync for (; *v !='.' && *v != '\0'; v++) micro = micro*10 + *v-'0';
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf("found version %s", version);
af8d59d05d72f134aeea62712f1286b369807d52vboxsync if (major*10000 + minor*100 + micro >= 10200)
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf(", OK.\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf(", expected version 1.02 or higher\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if test_compile "$LIBDEVMAPPER $INCDEVMAPPER" libdevmapper libdevmapper; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Check for openssl, needed for RDP and S3
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#include <cstdio>
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#include <openssl/opensslv.h>
af8d59d05d72f134aeea62712f1286b369807d52vboxsync#include <openssl/ssl.h>
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsyncextern "C" int main(void)
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf("found version %s", OPENSSL_VERSION_TEXT);
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync SSL_library_init();
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#if OPENSSL_VERSION_NUMBER >= 0x00908000
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf(", OK.\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf(", expected version 0.9.8 or higher\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if test_compile "$INCCRYPTO $LIBCRYPTO" libcrypto openssl; then
af8d59d05d72f134aeea62712f1286b369807d52vboxsync cnf_append "SDK_VBOX_OPENSSL_INCS" "`strip_I "$INCCRYPTO"`"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync cnf_append "SDK_VBOX_OPENSSL_LIBS" "`strip_l "$LIBCRYPTO"`"
af8d59d05d72f134aeea62712f1286b369807d52vboxsync cnf_append "SDK_VBOX_BLD_OPENSSL_LIBS" "`strip_l "$LIBCRYPTO"`"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Check for pthread, needed by VBoxSVC, frontends, ...
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#include <cstdio>
af8d59d05d72f134aeea62712f1286b369807d52vboxsync#include <pthread.h>
af8d59d05d72f134aeea62712f1286b369807d52vboxsyncextern "C" int main(void)
af8d59d05d72f134aeea62712f1286b369807d52vboxsync pthread_mutex_t mutex;
af8d59d05d72f134aeea62712f1286b369807d52vboxsync if (pthread_mutex_init(&mutex, NULL)) {
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf("pthread_mutex_init() failed\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if (pthread_mutex_lock(&mutex)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync printf("pthread_mutex_lock() failed\n");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (pthread_mutex_unlock(&mutex)) {
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf("pthread_mutex_unlock() failed\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf("found, OK.\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Check for zlib, needed by VBoxSVC, Runtime, ...
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#include <cstdio>
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#include <zlib.h>
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsyncextern "C" int main(void)
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf("found version %s", ZLIB_VERSION);
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#if ZLIB_VERNUM >= 0x1210
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf(", OK.\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf(", expected version 1.2.1 or higher\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync echo "if1of (\$(KBUILD_TARGET),darwin freebsd haiku linux solaris)" >> $CNF
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync cnf_append " SDK_VBOX_ZLIB_LIBS" "`strip_l "$LIBZ"`"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Check for libpng, needed by kchmviewer
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#include <cstdio>
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#include <png.h>
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsyncextern "C" int main(void)
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf("found version %s", PNG_LIBPNG_VER_STRING);
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#if PNG_LIBPNG_VER >= 10205
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf(", OK.\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf(", expected version 1.2.5 or higher\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if test_compile "$LIBPNG $I_INCPNG" libpng libpng; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync cnf_append "SDK_VBOX_LIBPNG_LIBS" "`strip_l "$LIBPNG"`"
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Check for libvncserver, needed for VNC in OSE
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#include <cstdio>
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#include <rfb/rfbconfig.h>
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsyncextern "C" int main()
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const char* v=LIBVNCSERVER_VERSION;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync unsigned int major = 0, minor = 0, micro = 0;
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync for (; *v !='.' && *v != '\0'; v++) major = major*10 + *v-'0';
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if (*v == '.') v++;
af8d59d05d72f134aeea62712f1286b369807d52vboxsync for (; *v !='.' && *v != '\0'; v++) minor = minor*10 + *v-'0';
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if (*v == '.') v++;
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync for (; *v !='.' && *v != '\0'; v++) micro = micro*10 + *v-'0';
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf("found version %s", LIBVNCSERVER_PACKAGE_VERSION);
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if (major*10000 + minor*100 + micro >= 900)
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf(", OK.\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf(", expected version 0.9 or higher\n");
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync if test_compile "$LIBVNCSERVER $INCVNCSERVER" libvncserver libvncserver; then
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync# Check for libcurl, needed by S3
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#include <cstdio>
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync#include <curl/curl.h>
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsyncextern "C" int main(void)
9f1a94506942e4ab23af71aa51b29c15b9c74ad4vboxsync printf("found version %s", LIBCURL_VERSION);
af8d59d05d72f134aeea62712f1286b369807d52vboxsync#if 10000*LIBCURL_VERSION_MAJOR + 100*LIBCURL_VERSION_MINOR + LIBCURL_VERSION_PATCH >= 71901
af8d59d05d72f134aeea62712f1286b369807d52vboxsync printf(", OK.\n");
af8d59d05d72f134aeea62712f1286b369807d52vboxsync printf(", expected version 7.19.1 or higher\n");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync [ -n "$INCCURL" ] && I_INCCURL=`prefix_I "$INCCURL"`
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if test_compile "$LIBCURL $I_INCCURL" libcurl libcurl; then
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync cnf_append "SDK_VBOX_LIBCURL_LIBS" "`strip_l "$LIBCURL"`"
cbeeed305f198ba6d488f51aa8659c90f2043c13vboxsync# Check for pam, needed by VRDPAuth
cbeeed305f198ba6d488f51aa8659c90f2043c13vboxsync# Version 79 was introduced in 9/2005, do we support older versions?
cbeeed305f198ba6d488f51aa8659c90f2043c13vboxsync# OpenSUSE comes with 0.99.xxx where they changed the versioning scheme.
cat > $ODIR.tmp_src.cc << EOF
if test_execute nofatal; then
cat > $ODIR.tmp_src.cc << EOF
foundsdl=1
if which_wrapper sdl-config > /dev/null; then
foundsdl=1
cat > $ODIR.tmp_src.cc << EOF
if test_execute; then
cat > $ODIR.tmp_src.cc << EOF
if ! test_execute nofatal; then
cat > $ODIR.tmp_src.cc << EOF
cat > $ODIR.tmp_src.cc << EOF
cat > $ODIR.tmp_src.cc << EOF
cat > $ODIR.tmp_src.cc << EOF
cat > $ODIR.tmp_src.cc << EOF
cat > $ODIR.tmp_src.cc << EOF
cat > $ODIR.tmp_src.cc << EOF
cat > $ODIR.tmp_src.cc << EOF
[ $PASSIVE_MESA -eq 1 ] && unset DISPLAY
for t in $QT_INTERNAL; do
foundqt4=1
if [ $QT4DIR_PKGCONFIG -eq 1 ]; then
if which_wrapper pkg-config > /dev/null; then
pkg-config QtCore --modversion 2>> $LOG`
if [ $? -ne 0 ]; then
foundqt4=1
cat > $ODIR.tmp_src.cc << EOF
foundqt4=2
foundqt4=1
cat > $ODIR.tmp_src.cc << EOF
if [ $? -ne 0 ]; then
if [ $? -ne 0 ]; then
cat > $ODIR.tmp_src.cc << EOF
cat > $ODIR.tmp_src.c << EOF
if [ $? -ne 0 ]; then
if test_execute; then
if [ $? -ne 0 ]; then
echo "echo \"\$PATH\" | /usr/sfw/bin/ggrep -q \"\$path_kbuild_bin\" || PATH=\"\$path_kbuild_bin:\$PATH\"" >> $ENV
echo "echo \"\$PATH\" | /usr/sfw/bin/ggrep -q \"\$path_dev_bin\" || PATH=\"\$path_dev_bin:\$PATH\"" >> $ENV
# Check for compiler.h
# Some Linux distributions include "compiler.h" in their libc linux
cat > $ODIR.tmp_src.cc << EOF
if test_compile $LIBCAP libcap libcap; then
if test_execute; then
cat > $ODIR.tmp_src.c << EOF
if [ $? -ne 0 ]; then
rc=$?
cat > $ODIR.tmp_src.cc << EOF
for p in $PYTHONDIR; do
for d in $SUPPYTHONLIBS; do
if [ $? -eq 0 ]; then
found=1
if test_execute; then
if ! which_wrapper wine > /dev/null; then
if ! which_wrapper wine > /dev/null; then
if ! which_wrapper wineprefixcreate > /dev/null; then
mkdir -p $WINEPREFIX
if ! wineprefixcreate -q > /dev/null 2>&1; then
echo "\"PATH\"=\"c:\\\\\\\\windows\\\\\\\\system32;c:\\\\\\\\windows;z:$DEVDIR/win.x86/vcc/v8/bin/Microsoft.VC80.CRT;z:$DEVDIR/win.x86/HTML_Help_Workshop/v1.3\"" >> $tmp
if which_wrapper pkg-config > /dev/null; then
if [ $? -eq 0 ]; then
if [ $? -ne 0 ]; then
# is around to prevent confusion when the build fails in src/recompiler.
# Note. Keep the which order in sync with the $(which ) in src/recompiler/Makefile.kmk.
cat << EOF
cat << EOF
cat << EOF
[ $WITH_GSOAP -eq 1 ] && echo " --with-gsoap-dir=PATH directory for gSOAP compiler/headers/libraries"
[ $WITH_GSOAP -eq 1 ] && echo " --with-gsoap-import=PATH directory for gSOAP import files (stlvector.h)"
cat << EOF
--nofatal)
--with-g++=*)
--ose)
--odir=*)
if [ -d $out_path ]; then
cd $out_path
cd $saved_path
echo "Unrecognized option \"$option\""
if [ -n "$NOT_OSE" ]; then
echo >> $LOG
export PATH
echo >> $CNF
if [ -n "$HEADLESS" ]; then
# TODO check for xcomposite-dev (X11/extensions/Xcomposite.h, additions only)
# TODO check for libxdamange-dev (X11/extensions/Xdamage.h, additions only)
echo "Source '$ENV' once before you start to build VBox:"
echo " source $ENV"
echo " cd $vbox_out_path/$OS.$TARGET_MACHINE/$BUILD_TYPE/bin/src"