On Linux (Kubuntu 16.04) I am trying to pack my program (no cross compiling), and I am running into the following with the Ninja Generator and a custom library (that is also built in the project):

[2/2] Run CPack packaging tool...
CPack: Create package using DEB
CPack: Install projects
CPack: - Install project: Project
CMake Error at /media/Linux/code/applications/mrViewer/BUILD/Linux-4.4.0-31-generic-64/Release/tmp/libACESclip/cmake_install.cmake:36 (file):
  file INSTALL cannot find
"/media/Linux/code/applications/mrViewer/BUILD/Linux-4.4.0-31-generic-64/Release/tmp/libACESclip/CMakeFiles/CMakeRelink.dir/libACESclip.so.0.2.6".
Call Stack (most recent call first):
/media/Linux/code/applications/mrViewer/BUILD/Linux-4.4.0-31-generic-64/Release/tmp/cmake_install.cmake:37 (include)


CPack Error: Error when generating package: Project
FAILED: cd /media/Linux/code/applications/mrViewer/BUILD/Linux-4.4.0-31-generic-64/Release/tmp && /usr/local/bin/cpack --config ./CPackConfig.cmake
ninja: build stopped: subcommand failed.

When run with -G 'Unix Makefiles' the packaging works. It is not a permissions problem.

I am using the attached "mk" bash script to run the compilation.



--
Gonzalo Garramuño
ggarr...@gmail.com

#!/bin/bash --norc


#
# Determine CPU architecture
#
KERNEL=`uname -s`

if [[ $KERNEL == CYGWIN* ]]; then
    KERNEL=Windows
    RELEASE=(`cmd /c 'ver'`)
    RELEASE=${RELEASE[3]%.[0-9]*}
elif [[ $KERNEL == MINGW* ]]; then
    RELEASE=(`cmd /c 'ver'`)
    #RELEASE=${RELEASE[3]%.[0-9]*}
    RELEASE=${RELEASE[3]/]/}
    KERNEL=Windows
else
    RELEASE=`uname -r`
fi


if [[ "$RELEASE" == "" ]]; then
    $RELEASE=`cmd.exe /c 'ver'`
    echo $RELEASE
    echo "Could not determine OS version"
    exit 1
fi

CMAKE_OPTS=${CMAKE_OPTS=""}

export CMAKE_NATIVE_ARCH=32
export CMAKE_BUILD_TYPE=Release
export OS_32_BITS=1
export OS_64_BITS=
export LDFLAGS=
export CXXFLAGS=

if [ $KERNEL == 'Windows' ]; then
    arch=`wmic OS get OSArchitecture`
    if [[ $arch == *64* ]]; then
        CMAKE_NATIVE_ARCH=64
        export OS_64_BITS=1
    fi
else
    arch=`uname -a`
fi

if [[ $arch == *x86_64* ]]; then
    CMAKE_NATIVE_ARCH=64
    export OS_64_BITS=1
else
    if [[ $arch == *ia64* ]]; then
        CMAKE_NATIVE_ARCH=64
        export OS_64_BITS=1
        unset  OS_32_BITS
    fi
fi


export CMAKE_BUILD_ARCH=$CMAKE_NATIVE_ARCH

OS=$KERNEL-$RELEASE


usage()
{
    cat <<EOF
$0

$0 [options] [--] [make options]

Wrapper around CMake to easily create out of source builds
(ie. compilations where everything goes into a directory).

For this platform (default settings):
  BUILD/$OS-$CMAKE_BUILD_ARCH/$CMAKE_BUILD_TYPE

It must be run from a directory with a valid CMakeLists.txt
file outside of the build tree.

Options:

  -q         quiet build (default)
  -v         verbose build
  -j N       number of cpus to use (default: ${CMAKE_PROCS=2})
  -G <name>  use a different cmake generator (default: Ninja)

  debug|release|reldebug|small
  debug    - build a debug build
  release  - build a release build (default)
  reldebug - build a release build with debug information
  small    - build a small release build

  both|32|64
             Builds both 32/64 bit versions, 32-bit only, 
             64-bit only (default: $CMAKE_BUILD_ARCH)

  cache    - Cleans all CMakeCache.txt files

  swig     - Cleans all swig files

  clean    - Cleans BUILD/$OS-$CMAKE_BUILD_ARCH/$CMAKE_BUILD_TYPE

  cmake    - Runs cmake only.

EOF
    exit 1
}

clean_cache()
{
    if [ $CMAKE_BUILD_ARCH == 'Both' ]; then
        CMAKE_BUILD_ARCH=32
        clean_cache
        CMAKE_BUILD_ARCH=64
        clean_cache
        CMAKE_BUILD_ARCH=Both
        return
    fi

    builddir=BUILD/$OS-$CMAKE_BUILD_ARCH/$CMAKE_BUILD_TYPE
    if [ ! -d $builddir ]; then
        return
    fi
    echo
    echo "Removing old cmake caches $builddir..."
    echo
    # Remove cache files
    find $builddir -name CMakeCache.txt -exec rm {} \;
    # Remove makefiles
    find $builddir -name Makefile -exec rm {} \;
}


clean_swig() 
{
    if [ $CMAKE_BUILD_ARCH == 'Both' ]; then
        CMAKE_BUILD_ARCH=32
        clean_swig
        CMAKE_BUILD_ARCH=64
        clean_swig
        CMAKE_BUILD_ARCH=Both
        return
    fi

    # Remove swig wrappers
    builddir=BUILD/$OS-$CMAKE_BUILD_ARCH/$CMAKE_BUILD_TYPE
    echo
    echo "Removing old swig wrappers $builddir..."
    echo
    find $builddir -name '*_wrap.*' -exec rm {} \;
}

#
# Parse command-line options
#
clean=0
cache=0


if [[ $OS == Windows* ]]; then
    cmake_generator=Ninja
    #cmake_generator="NMake Makefiles"
else
    cmake_generator=Ninja
fi

opts=''
RUN_MAKE=1
while [ $# -gt 0 ]; do
    case $1 in
        64)
            shift
            CMAKE_BUILD_ARCH=64
            ;;
        32)
            shift
            CMAKE_BUILD_ARCH=32
            ;;
        both)
            shift
            CMAKE_BUILD_ARCH='Both'
            ;;
        cache)
            shift
            cache=1
            ;;
        clean)
            if [ -r CMakeLists.txt ]; then
                shift
                if [ -d BUILD ]; then
                    clean=1
                fi
            else
                break
            fi
            ;;
        cmake)
            shift
            RUN_MAKE=0
            ;;
        debug)
            shift
            export CMAKE_BUILD_TYPE=Debug
            ;;
        release)
            shift
            export CMAKE_BUILD_TYPE=Release
            ;;
        small)
            shift
            export CMAKE_BUILD_TYPE=MinSizeRel
            ;;
        swig)
            shift
            clean_swig
            ;;
        -h)
            shift
            usage
            ;;
        --help)
            shift
            usage
            ;;
        -j)
            shift
            if [ $# == 0 ]; then
                echo "Missing parameter for -j!"
                usage
            fi
            CMAKE_PROCS=$1
            shift
            ;;
        -q)
            shift
            opts=""
            ;;
        -v)
            shift
            opts="VERBOSE=1"
            ;;
        -G)
            shift
            cmake_generator=$1
            shift
            ;;
        --)
            shift
            break
            ;;
        *)
            break
            ;;
    esac
done


#
# Simple function to run a command and print it out
#
run_cmd()
{
    echo
    echo "> $*"
    echo
    eval command $*
}

#
# Function to just run make on a dir with a Makefile
#
run_make()
{
    if [ $RUN_MAKE == 0 ]; then
        return
    fi

    cmd=''
    if [[ $cmake_generator == NMake* ]]; then
        cmd="nmake $@"
    elif [[ $cmake_generator == Visual* ]]; then
        return
    else
        cmd="ninja -j ${CMAKE_PROCS=2} $@"
    fi
    run_cmd $cmd
    status=$?
    if [ $status != 0 ]; then
        cd ../../../..
        exit $status
    fi
    cd ../../../..
}


#
# Function to run cmake and then run make on generated Makefile
#
run_cmake()
{
    builddir=$PWD/BUILD/$OS-$CMAKE_BUILD_ARCH/$CMAKE_BUILD_TYPE
    installdir=$builddir/install

    if [[ $OS == Windows* ]]; then
        installdir="F:/code/lib/Windows_${CMAKE_BUILD_ARCH}"
    fi

    if [ ! -d $installdir ]; then
        cmd="mkdir -p $installdir"
        run_cmd $cmd
    fi

    echo "Buildir ${builddir}"
    if [ ! -d $builddir ]; then
        cmd="mkdir -p $builddir $builddir/bin $builddir/lib $builddir/tmp"
        run_cmd $cmd
    fi

    cmd="cd $builddir/tmp"
    run_cmd $cmd

    if [ -r Makefile ]; then
        run_make $@
        return
    fi


    pwd=$PWD

    if [[ $cmake_generator == *Makefile* ]]; then
        cmake_opts="-DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE"
    else
        cmake_opts="-DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE 
-DCMAKE_CFG_INTDIR=/$CMAKE_BUILD_TYPE"
    fi

    cmd="cmake ../../../.. -DCMAKE_INSTALL_PREFIX=$installdir 
-DEXECUTABLE_OUTPUT_PATH=$builddir/bin -DLIBRARY_OUTPUT_PATH=$builddir/lib 
-DCMAKE_LIBRARY_PATH=$builddir/lib -DCMAKE_NATIVE_ARCH=$CMAKE_NATIVE_ARCH 
-DCMAKE_BUILD_ARCH=$CMAKE_BUILD_ARCH ${cmake_opts} -G '${cmake_generator}'"


    run_cmd  $cmd
    status=$?
    if [ $status != 0 ]; then
        cd ../../../..
        exit $status
    fi

    run_make $@
}

#
# Function used to clean the build directory and exit
#
run_clean()
{
    if [ $CMAKE_BUILD_ARCH == "Both" ]; then
        if [ "$OS_64_BITS" == "1" ]; then
            CMAKE_BUILD_ARCH=64
            run_clean 
        fi
        if [ "$OS_32_BITS" == "1" ]; then
            CMAKE_BUILD_ARCH=32
            run_clean 
        fi
        CMAKE_BUILD_ARCH=Both
        return
    fi

    builddir=BUILD/$OS-$CMAKE_BUILD_ARCH/$CMAKE_BUILD_TYPE/tmp
    if [ -d $builddir ]; then
        if [ -e ninja.build ]; then
            run_make clean
        fi
        rm -rf $builddir/*
        echo "-------------------------------"
        echo "Cleaned $builddir"
        echo "-------------------------------"
        clean_cache
    fi
}


#
# Main routine
#
if [ $clean == 1 ]; then
    run_clean
    exit 0
elif [ $cache == 1 ]; then
    clean_cache
fi

if [ -r Makefile ]; then
    run_make $opts $@
else

    if [ ! -r CMakeLists.txt ]; then
        echo "No Makefile or CMakeLists.txt in current directory!"
        exit 1
    fi

    if [ ! -d BUILD ]; then
        mkdir BUILD
    fi

    if [ $CMAKE_BUILD_ARCH == 'Both' ]; then
        if [ "$OS_32_BITS" == "1" ]; then
            export CMAKE_BUILD_ARCH=32
            if [ "$OS_64_BITS" == "1" ]; then
                export LDFLAGS=-m32
                export CXXFLAGS=-m32
                export CFLAGS=-m32
            fi
            run_cmake $opts $@
        fi

        if [ "$OS_64_BITS" == "1" ]; then
            export CMAKE_BUILD_ARCH=64
            export LDFLAGS=
            export CXXFLAGS=
            export CFLAGS=
            run_cmake $opts $@
        fi
    else
        run_cmake $opts $@
    fi
fi


-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

Reply via email to