View Issue Details

IDProjectCategoryView StatusLast Update
0001215OpenFOAM[All Projects] Bugpublic2016-03-21 23:05
Reporteruser588Assigned Tohenry 
PrioritynormalSeveritymajorReproducibilityalways
Status resolvedResolutionfixed 
PlatformLinuxOSRHELOS Version5.5
Product Version 
Fixed in Version 
Summary0001215: conformalVoronoiMesh/foamyHexMesh build ignores ThirdParty boost
DescriptionHello,

The etc/config/CGAL.sh script does not take into account the directory name given to a version of boost installed in ThirdParty, so system version will need to be used by default, which might not exist, or could be too old for CGAL.

When makeCGAL runs, it builds into, for example:

    ThirdParty-2.3.0/platforms/linux64Gcc/boost_1_55_0

but the etc/config/CGAL.sh script has hard coded:

    boost_version=boost-system

I got around this by linking:

    ln -s boost_1_55_0 boost-system

It might be best to build something like this into the makeCGAL script.

Regards,

Graham

    

TagsNo tags attached.

Relationships

related to 0001232 resolvedhenry WM_CC 

Activities

wyldckat

2015-01-27 21:46

updater   ~0003595

Last edited: 2015-01-27 21:48

View 2 revisions

Back in August 2011, I had proposed this feature request: http://www.openfoam.org/mantisbt/view.php?id=278
Although the feature proposition is pretty much deprecated by now, there is an idea that could still be re-used for fixing this issue. I'm referring to the use of a "defaults.sh" file, as exemplified here: https://raw.githubusercontent.com/wyldckat/ThirdParty-2.0.x/get-em/etc/defaults.sh - I'll attach a copy here in the bug report a few seconds...

In other words, the idea is to have a file "etc/config/defaults.sh" that has the version definitions that are currently embedded in "etc/config/settings.sh", "etc/config/CGAL.sh" and so on.
Once such a file exists, it could be used to be sourced from the "make*" scripts in the "ThirdParty-*" folder, for loading the default list of application versions to be used.

A sibling "etc/config/unset_defaults.sh" script could be used to 'unset' these version variables.

edit: Forgot to mention: this "defaults.sh" file could then be used by "settings.sh" and any other shell script files.

wyldckat

2015-01-27 21:46

updater  

defaults.sh (1,889 bytes)

henry

2015-01-27 22:11

manager   ~0003597

I think it would be better to keep the settings for CGAL and other additions in separate files because only some will be needed and defaults.sh would become cluttered and difficult to maintain. However, I see no reason why the make scripts in ThirdParty should not source the relevant etc/config/???.sh files to get the settings.

wyldckat

2016-03-06 10:49

updater  

thirdparty_bash_proposal_v1.tar.gz (4,142 bytes)

wyldckat

2016-03-06 11:00

updater   ~0005997

The attached package "thirdparty_bash_proposal_v1.tar.gz" depends on the proposal "bash_proposal_v1.tar.gz" at #1232 is accepted.

This package provides 3 files, indexed to commit c8904e60d2c97:

  - makeCGAL - Relies on the proposed "etc/config.sh/functions", "config.sh/CGAL" and "config.sh/compiler" files. This will load the OpenFOAM installation default versions for setting the local "*PACKAGE" environment variables, but it will also still use the local default numbers if the global defaults don't exist. In addition, I upper-cased the 1st letters on the comments within the script.

  - makeGcc - Relies on the proposed "etc/config.sh/functions" and "config.sh/compiler" files for loading the OpenFOAM environment default versions, which are for the "*PACKAGE" environment variables, but it will also still use the local default numbers if the global defaults don't exist.

  - makeLLVM - same as done in "makeGcc".

I didn't extend this to "makeCmake" and "makeGperftools", simply because the environment for CMake is currently loaded in a different way from the conventional one and because I'm not yet familiar with gperftools.

henry

2016-03-14 11:16

manager   ~0006035

Thanks Bruno
Resolved in ThirdParty-dev by commit 578f8827fbc5f709595fc5ab5185053aaa8cf678

wyldckat

2016-03-20 22:30

updater   ~0006051

Sorry, I'm reopening this report due to a tiny typo I made in the previous file package.

I'm attaching the file "makeCGAL" which fixes the typo (I wrote "scotch" instead of "boost") and it also breaks the line for the "_foamEval" call, so that it doesn't go over the 80 characters per line.

As for the original bug report, I missed an important detail that I'll provide the fix for it in issue #1232 in a few minutes.

wyldckat

2016-03-20 22:30

updater  

makeCGAL (8,368 bytes)
#!/bin/sh
#------------------------------------------------------------------------------
# =========                 |
# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
#  \\    /   O peration     |
#   \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
#    \\/     M anipulation  |
#------------------------------------------------------------------------------
# License
#     This file is part of OpenFOAM.
#
#     OpenFOAM is free software: you can redistribute it and/or modify it
#     under the terms of the GNU General Public License as published by
#     the Free Software Foundation, either version 3 of the License, or
#     (at your option) any later version.
#
#     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
#     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
#     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
#     for more details.
#
#     You should have received a copy of the GNU General Public License
#     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
#
# Script
#     makeCGAL
#
# Description
#     Build script for CGAL
#
# Note
#     Normally builds against ThirdParty boost and gmp/mpfr when possible.
#     To override this behaviour (and use the system boost and/or gmp/mpfr),
#     simply specify a 'system' version. For example,
#         makeCGAL boost-system gmp-system
#
#     Mixing system and ThirdParty for gmp/mpfr is not supported.
#
#------------------------------------------------------------------------------

# Get CGAL, boost and gmp/mpfr versions
. $WM_PROJECT_DIR/etc/config.sh/functions
_foamEval SOURCE_CGAL_VERSIONS_ONLY=yes \
          $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/CGAL)
_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/compiler)

set -x

cgalPACKAGE=${cgal_version:-CGAL-4.7}
boostPACKAGE=${boost_version:-boost-system}
gmpPACKAGE=${gmp_version:-gmp-system}
mpfrPACKAGE=${mpfr_version:-mpfr-system}

#------------------------------------------------------------------------------
# Run from third-party directory only
wmakeCheckPwd "$WM_THIRD_PARTY_DIR" || {
    echo "Error: Current directory is not \$WM_THIRD_PARTY_DIR"
    echo "    The environment variables are inconsistent with the installation."
    echo "    Check the OpenFOAM entries in your dot-files and source them."
    exit 1
}
. etc/tools/ThirdPartyFunctions
#------------------------------------------------------------------------------

usage() {
    exec 1>&2
    while [ "$#" -ge 1 ]; do echo "$1"; shift; done
    cat<<USAGE

usage: ${0##*/} [OPTION] [CGAL-VERSION] [boost-VERSION] [gmp-VERSION] [mpfr-VERSION]
options:
  -gcc              force g++ instead of the value from \$WM_CXX
  -help

* build CGAL with
      $cgalPACKAGE
      $boostPACKAGE
      $gmpPACKAGE
      $mpfrPACKAGE

Normally builds against ThirdParty boost and gmp/mpfr when possible.
To override this behaviour (and use the system boost and/o gmp/mpfr),
simply specify a 'system' version. For example,
    ${0##*/} boost-system gmp-system

Note: mixing system and ThirdParty for gmp/mpfr is not supported.

USAGE
    exit 1
}


# Ensure CMake gets the correct C++ compiler
[ -n "$WM_CXX" ] && export CXX="$WM_CXX"


# Parse options
while [ "$#" -gt 0 ]
do
    case "$1" in
    -h | -help)
        usage
        ;;
    -gcc)
        export CXX=g++   # use g++
        shift
        ;;
    gmp-[4-9]* | gmp-sys*)
        gmpPACKAGE="${1%%/}"
        shift
        ;;
    mpfr-[2-9]* | mpfr-sys*)
        mpfrPACKAGE="${1%%/}"
        shift
        ;;
    CGAL-[0-9]*)
        cgalPACKAGE="${1%%/}"
        shift
        ;;
    boost-[0-9]* | boost_[0-9]* | boost-sys* )
        boostPACKAGE="${1%%/}"
        shift
        ;;
    *)
        usage "unknown option/argument: '$*'"
        ;;
    esac
done


#------------------------------------------------------------------------------

#
# Build Boost
#
#   BOOST_SOURCE_DIR : location of the original sources

BOOST_ARCH_PATH=$installBASE/$boostPACKAGE
BOOST_SOURCE_DIR=$WM_THIRD_PARTY_DIR/$boostPACKAGE

if [ -d "$BOOST_ARCH_PATH" ]
then
    boostInc="$BOOST_ARCH_PATH/include"
    boostLib="$BOOST_ARCH_PATH/lib"
elif [ -d "$BOOST_SOURCE_DIR" ]
then
    boostInc="$BOOST_ARCH_PATH/include"
    boostLib="$BOOST_ARCH_PATH/lib"

    echo "Starting build: boost"
    (
        cd $BOOST_SOURCE_DIR || exit 1

        rm -rf $BOOST_ARCH_PATH

        ./bootstrap.sh \
            --prefix=$BOOST_ARCH_PATH \
            --with-libraries=thread \
            --with-libraries=system \
        && ./bjam toolset=$WM_CC -j $WM_NCOMPPROCS install \
        && echo "Built: boost"
    ) || {
        echo "Error building: boost"
        exit 1
    }
else
    boostInc="/usr/include"

    # For completeness:
    # 64-bit needs lib64, but 32-bit needs lib (not lib32)
    if [ "$WM_ARCH_OPTION" = 64 ]
    then
        boostLib="/usr/lib$WM_ARCH_OPTION"
    else
        boostLib="/usr/lib"
    fi
fi


# Retrieve boost version:
if [ -f "$boostInc/boost/version.hpp" ]
then
    BOOST_VERSION_NO=`sed -ne 's/^#define *BOOST_VERSION *\([0-9][0-9]*\).*$/\1/p' $boostInc/boost/version.hpp`
else
    echo "Boost does not appear to be installed"
    echo "stopping build"
    exit 1
fi


#
# Build CGAL
#
#   CGAL_SOURCE_DIR : location of the original sources
#   CGAL_BINARY_DIR : location of the build
#   CGAL_DIR        : location of the installed program

CGAL_SOURCE_DIR=$WM_THIRD_PARTY_DIR/$cgalPACKAGE
CGAL_BINARY_DIR=$buildBASE/$cgalPACKAGE
CGAL_ARCH_PATH=$installBASE/$cgalPACKAGE
CGAL_DIR=$CGAL_ARCH_PATH

#
# gmp/mpfr installed without compiler name
installBASE=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH

GMP_ARCH_PATH=$installBASE/$gmpPACKAGE
MPFR_ARCH_PATH=$installBASE/$mpfrPACKAGE

(
    # Remove any existing build folder and recreate
    if [ -d $CGAL_BINARY_DIR ]
    then
        echo "removing old build directory"
        echo "    $CGAL_BINARY_DIR"
        rm -rf $CGAL_BINARY_DIR
    fi
    mkdir -p $CGAL_BINARY_DIR

    cd $CGAL_BINARY_DIR || exit 1

    unset configBoost configGmpMpfr
    echo "----"
    echo "Configuring $cgalPACKAGE with boost $BOOST_VERSION_NO"
    echo "    Source         : $CGAL_SOURCE_DIR"
    echo "    Build          : $CGAL_BINARY_DIR"
    echo "    Target         : $CGAL_DIR"


    if [ -d "$BOOST_ARCH_PATH" ]
    then
        echo "    ThirdParty     : boost"
        configBoost=$(cat <<CMAKE_OPTIONS
 -DBoost_INCLUDE_DIR=$boostInc
 -DBoost_LIBRARY_DIRS=$boostLib
 -DBoost_THREAD_LIBRARY=$boostLib/libboost_thread.so
 -DBoost_THREAD_LIBRARY_RELEASE=$boostLib/libboost_thread.so
 -DBoost_SYSTEM_LIBRARY=$boostLib/libboost_system.so
 -DBoost_SYSTEM_LIBRARY_RELEASE=$boostLib/libboost_system.so
 -DBoost_VERSION=$BOOST_VERSION_NO
CMAKE_OPTIONS
)
    else
        echo "    system         : boost"
        configBoost=$(cat <<CMAKE_OPTIONS
 -DBOOST_LIBRARYDIR=$boostLib
CMAKE_OPTIONS
)
    fi

    if [ -d "$GMP_ARCH_PATH" -a -d "$MPFR_ARCH_PATH" ]
    then
        echo "    ThirdParty     : gmp/mpfr"
        configGmpMpfr=$(cat <<CMAKE_OPTIONS
 -DGMP_INCLUDE_DIR=$GMP_ARCH_PATH/include
 -DGMP_LIBRARIES_DIR=$GMP_ARCH_PATH/lib
 -DGMP_LIBRARIES=$GMP_ARCH_PATH/lib/libgmp.so
 -DGMPXX_INCLUDE_DIR=$GMP_ARCH_PATH/include
 -DGMPXX_LIBRARIES=$GMP_ARCH_PATH/lib/libgmpxx.so
 -DMPFR_INCLUDE_DIR=$MPFR_ARCH_PATH/include
 -DMPFR_LIBRARIES_DIR=$MPFR_ARCH_PATH/lib
 -DMPFR_LIBRARIES=$MPFR_ARCH_PATH/lib/libmpfr.so
CMAKE_OPTIONS
)
    else
        echo "    system         : gmp/mpfr"
    fi

    echo "----"
    set -x
    cmake \
        -DCMAKE_INSTALL_PREFIX=$CGAL_ARCH_PATH \
        -DCMAKE_BUILD_TYPE=Release \
        $configBoost $configGmpMpfr \
        $CGAL_SOURCE_DIR \
    && make -j $WM_NCOMPPROCS \
    && make install || exit 1

    echo "----"
    echo "create '\$CGAL_ARCH_PATH/share/files'"
    echo "----"
    mkdir -p $CGAL_ARCH_PATH/share/src
    rm -f $CGAL_ARCH_PATH/share/files

    for i in assertions.cpp io.cpp MP_Float.cpp Random.cpp
    do
        if [ -e "$CGAL_SOURCE_DIR/src/CGAL/$i" ]
        then
            \cp $CGAL_SOURCE_DIR/src/CGAL/$i $CGAL_ARCH_PATH/share/src/
            echo "\${CGAL_ARCH_PATH}/share/src/$i" >> $CGAL_ARCH_PATH/share/files
        fi
    done

    echo "Done CGAL"
)

#------------------------------------------------------------------------------
makeCGAL (8,368 bytes)

henry

2016-03-21 23:05

manager   ~0006053

Resolved by commit d88b4ea88db7d35c7b7fe8d869d59be32a224144

Issue History

Date Modified Username Field Change
2014-03-12 09:34 user588 New Issue
2015-01-27 21:46 wyldckat Note Added: 0003595
2015-01-27 21:46 wyldckat File Added: defaults.sh
2015-01-27 21:48 wyldckat Note Edited: 0003595 View Revisions
2015-01-27 22:11 henry Note Added: 0003597
2016-02-21 20:24 wyldckat Relationship added related to 0001232
2016-03-06 10:49 wyldckat File Added: thirdparty_bash_proposal_v1.tar.gz
2016-03-06 11:00 wyldckat Note Added: 0005997
2016-03-06 11:01 wyldckat Assigned To => henry
2016-03-06 11:01 wyldckat Status new => assigned
2016-03-14 11:16 henry Note Added: 0006035
2016-03-14 11:16 henry Status assigned => resolved
2016-03-14 11:16 henry Resolution open => fixed
2016-03-20 22:30 wyldckat Note Added: 0006051
2016-03-20 22:30 wyldckat Status resolved => feedback
2016-03-20 22:30 wyldckat Resolution fixed => reopened
2016-03-20 22:30 wyldckat File Added: makeCGAL
2016-03-21 23:05 henry Note Added: 0006053
2016-03-21 23:05 henry Status feedback => resolved
2016-03-21 23:05 henry Resolution reopened => fixed