Domanda

So I try to create a script for automated compilation of Boost with Iostream with Zlib support on linux. Currently I have this:

#!/bin/bash

BOOST_DISTRO_SITE=surfnet.dl.sourceforge.net
BOOST_PROJECT_URL=project/boost/boost
BOOST_NAME=boost_1_48_0
BOOST_VERSION=1.48.0
BOOST_DISTRO_NAME="$BOOST_NAME".tar.gz
BOOST_ROOT_DIR=boost_libraries
BOOST_INSTALL_SUBDIR=install-dir
BOOST_COMPILE_SUBDIR=build-dir

 ZLIB_NAME=zlib-1.2.5
 ZLIB_PROJECT_URL=project/libpng/zlib
 ZLIB_VERSION=1.2.5
 ZLIB_DISTRO_NAME="$ZLIB_NAME".tar.gz
 ZLIB_ROOT_DIR=zlib_libraries
 ZLIB_INSTALL_SUBDIR=install-dir
 ZLIB_COMPILE_SUBDIR=build-dir



KEEP_OLD="true"

echo API: boost_net_setup.sh BOOST_ROOT_DIR BOOST_INSTALL_SUBDIR KEEP_OLD BOOST_VERSION BOOST_NAME BOOST_DISTRO_SITE

if [ "$1" != "" ]; then
    BOOST_ROOT_DIR="$1"
fi

if [ "$2" != "" ]; then
    BOOST_INSTALL_SUBDIR="$2"
fi

if [ "$3" != "" ]; then
    KEEP_OLD="$3"
fi

if [ "$4" != "" ]; then
    BOOST_VERSION="$4"
fi

if [ "$5" != "" ]; then
    BOOST_NAME="$5"
fi

if [ "$6" != "" ]; then
    BOOST_DISTRO_SITE="$6"
fi

#-L protects against redirects
CURL_CMD=curl\ -L 

# Run a command, and echo before doing so. Also checks the exit
# status and quits if there was an error.
#
# WARNING : Does *not* work when the command uses the redirection operator (>)
#
echo_run ()
{
    echo "$@"
    "$@"
    r=$?
    if test $r -ne 0 ; then
        exit $r
    fi
}

extract() # 1=DISTRO_NAME 2=ROOT_DIR 3=NAME
{
    echo_run tar -xzf $1
    echo_run rm -rf $2
    echo_run mv $3 $2
}

load() # 1=DISTRO_NAME 2=ROOT_DIR 3=NAME 4=VERSION 5=BOOST_DISTRO_SITE 6=INSTALL_SUBDIR 7=PROJECT_URL
{
    if [ ! -e $1 ]; then
        # get boost
        echo_run ${CURL_CMD} http://$5/$7/$4/$1 -o $1
    fi

    if [ ! -d $2 ]; then
        echo_run mkdir $2
    fi

    # move the boost distro into place
    if [ ! -d $2/$6/lib ]; then
        extract  $1 $2 $3
    else
        if [ ! KEEP_OLD=="true" ]; then
            extract $1 $2 $3
        fi
    fi
}


WD=`pwd`
MACHINE=`uname`
HERE=`dirname $0`

cd $HERE

load $ZLIB_DISTRO_NAME $ZLIB_ROOT_DIR $ZLIB_NAME $ZLIB_VERSION $BOOST_DISTRO_SITE $ZLIB_INSTALL_SUBDIR $ZLIB_PROJECT_URL

cd $ZLIB_ROOT_DIR

if [ ! -d $ZLIB_INSTALL_SUBDIR/lib ]; then
    ./configure --static --prefix=./"$ZLIB_INSTALL_SUBDIR"
    make
    make install
fi

cd ../

load $BOOST_DISTRO_NAME $BOOST_ROOT_DIR $BOOST_NAME $BOOST_VERSION $BOOST_DISTRO_SITE $BOOST_INSTALL_SUBDIR $BOOST_PROJECT_URL
cd $BOOST_ROOT_DIR

echo_run ./bootstrap.sh

echo_run ./b2 -j4 -d0 --with-thread --with-system --with-filesystem --with-program_options --with-regex --with-date_time --with-iostreams -sZLIB_INCLUDE="$WD"/"$ZLIB_ROOT_DIR"/ -sZLIB_BINARY="$WD"/"$ZLIB_ROOT_DIR"/"$ZLIB_INSTALL_SUBDIR"/lib -sNO_BZIP2=1 link=static runtime-link=static --prefix=./$BOOST_INSTALL_SUBDIR release --builddir=./$BOOST_COMPILE_SUBDIR install

echo Done!

exit 0;

But as soon as my script starts to run boost build command I get:

./b2 -j4 -d0 --with-thread --with-system --with-filesystem --with-program_options --with-regex --with-date_time --with-iostreams -sZLIB_INCLUDE=/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/zlib_libraries/ -sZLIB_BINARY=/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/zlib_libraries/install-dir/lib -sNO_BZIP2=1 link=static runtime-link=static --prefix=./install-dir release --builddir=./build-dir install
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/kernel/class.jam:88: in new
*** argument error
* rule object(searched-lib-target)@1055.__init__ ( name : project : shared ? : search * : action )
* called with: ( /home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/zlib_libraries/install-dir/lib : object(project-target)@294 :  :  : object(null-action)@1054 :  :  :  :  )
* extra argument стол/mask-viewer-standalone/MaskLoader/zlib_libraries/install-dir/lib
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/tools/builtin.jam:406:see definition of rule '__init__' being called
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/tools/builtin.jam:574: in searched-lib-generator.run
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/tools/unix.jam:113: in object(unix-searched-lib-generator)@28.run
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1004: in try-one-generator-really
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1066: in try-one-generator
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1282: in construct-really
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1366: in generators.construct
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/tools/builtin.jam:477: in object(lib-generator)@5.run
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1004: in try-one-generator-really
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1066: in try-one-generator
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1282: in construct-really
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1366: in generators.construct
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1495: in construct
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1297: in object(typed-target)@299.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:732: in generate-really
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:704: in object(main-target)@1040.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:258: in object(project-target)@294.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:848: in targets.generate-from-reference
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1217: in generate-dependencies
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1268: in object(install-target-class)@114.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:732: in generate-really
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:704: in object(main-target)@874.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:848: in targets.generate-from-reference
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1217: in generate-dependencies
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1268: in object(alias-target-class)@108.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:732: in generate-really
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:704: in object(main-target)@873.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:848: in targets.generate-from-reference
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1217: in generate-dependencies
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1268: in object(alias-target-class)@107.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:732: in generate-really
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:704: in object(main-target)@872.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:848: in targets.generate-from-reference
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1217: in generate-dependencies
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1268: in object(alias-target-class)@124.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:732: in generate-really
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:704: in object(main-target)@878.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:848: in targets.generate-from-reference
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1217: in generate-dependencies
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1268: in alias-target-class.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/boostcpp.jam:409: in build-multiple
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/boostcpp.jam:373: in object(top-level-target)@130.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:732: in generate-really
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:704: in object(main-target)@882.generate
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build-system.jam:736: in load
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/kernel/modules.jam:283: in import
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/kernel/bootstrap.jam:142: in boost-build
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/boost-build.jam:17: in module scope
tim@tim-desktop:~/Рабочий стол/mask-viewer-standalone/MaskLoader$ 

You can test this script on practically any linux and it shall give same result. I tested on Ubuntu 10.04 LTS (latest Boost 1.48)

Any help or Ideas how to fix such problem?

È stato utile?

Soluzione

(Just recording an official answer so this can be marked answered)

Many build scripts have problems with paths containing either non-ASCII characters (such as Рабочий) or spaces. If you have problems building, it's often worth a try moving the build to a directory whose path contains only ASCII characters, and no spaces. Also try to avoid characters such as $!"' that might also have special meaning in a shell.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top