void-packages

Void Source Packages
git clone git://ezup.dev/void-packages.git
Log | Files | Refs | README | LICENSE

cmake.sh (3450B)


      1#
      2# This helper is for templates using cmake.
      3#
      4do_configure() {
      5	local cmake_args=
      6	[ ! -d ${cmake_builddir:=build} ] && mkdir -p ${cmake_builddir}
      7	cd ${cmake_builddir}
      8
      9	if [ -z "$CHROOT_READY" ]; then
     10		cat >bootstrap.cmake <<_EOF
     11SET(CMAKE_SYSTEM_NAME Linux)
     12SET(CMAKE_SYSTEM_VERSION 1)
     13
     14SET(CMAKE_C_COMPILER   ${CC})
     15SET(CMAKE_CXX_COMPILER ${CXX})
     16
     17SET(CMAKE_FIND_ROOT_PATH  "${XBPS_MASTERDIR}/usr;${XBPS_MASTERDIR}")
     18
     19SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
     20SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
     21_EOF
     22		configure_args+=" -DCMAKE_TOOLCHAIN_FILE=bootstrap.cmake"
     23	elif [ "$CROSS_BUILD" ]; then
     24		case "$XBPS_TARGET_MACHINE" in
     25			x86_64*) _CMAKE_SYSTEM_PROCESSOR=x86_64 ;;
     26			i686*) _CMAKE_SYSTEM_PROCESSOR=x86 ;;
     27			aarch64*) _CMAKE_SYSTEM_PROCESSOR=aarch64 ;;
     28			arm*) _CMAKE_SYSTEM_PROCESSOR=arm ;;
     29			mips*) _CMAKE_SYSTEM_PROCESSOR=mips ;;
     30			ppc64le*) _CMAKE_SYSTEM_PROCESSOR=ppc64le ;;
     31			ppc64*) _CMAKE_SYSTEM_PROCESSOR=ppc64 ;;
     32			ppcle*) _CMAKE_SYSTEM_PROCESSOR=ppcle ;;
     33			ppc*) _CMAKE_SYSTEM_PROCESSOR=ppc ;;
     34			*) _CMAKE_SYSTEM_PROCESSOR=generic ;;
     35		esac
     36		cat > cross_${XBPS_CROSS_TRIPLET}.cmake <<_EOF
     37SET(CMAKE_SYSTEM_NAME Linux)
     38SET(CMAKE_SYSTEM_VERSION 1)
     39
     40SET(CMAKE_C_COMPILER   ${CC})
     41SET(CMAKE_CXX_COMPILER ${CXX})
     42SET(CMAKE_CROSSCOMPILING TRUE)
     43
     44SET(CMAKE_SYSTEM_PROCESSOR ${_CMAKE_SYSTEM_PROCESSOR})
     45
     46SET(CMAKE_FIND_ROOT_PATH  "${XBPS_CROSS_BASE}/usr;${XBPS_CROSS_BASE}")
     47
     48SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
     49SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
     50SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
     51_EOF
     52		cmake_args+=" -DCMAKE_TOOLCHAIN_FILE=cross_${XBPS_CROSS_TRIPLET}.cmake"
     53	fi
     54	cmake_args+=" -DCMAKE_INSTALL_PREFIX=/usr"
     55	cmake_args+=" -DCMAKE_BUILD_TYPE=None"
     56	cmake_args+=" -DCMAKE_INSTALL_LIBDIR=lib${XBPS_TARGET_WORDSIZE}"
     57
     58	if [[ $build_helper = *"qemu"* ]]; then
     59		echo "SET(CMAKE_CROSSCOMPILING_EMULATOR /usr/bin/qemu-${XBPS_TARGET_QEMU_MACHINE}-static)" \
     60			>> cross_${XBPS_CROSS_TRIPLET}.cmake
     61	fi
     62
     63	cmake_args+=" -DCMAKE_INSTALL_SBINDIR=bin"
     64
     65	export CMAKE_GENERATOR="${CMAKE_GENERATOR:-Ninja}"
     66	# Override flags: https://gitlab.kitware.com/cmake/cmake/issues/19590
     67	CFLAGS="${CFLAGS/ -pipe / }" CXXFLAGS="${CXXFLAGS/ -pipe / }" \
     68		cmake ${cmake_args} ${configure_args} ${wrksrc}/${build_wrksrc}
     69
     70	# Replace -isystem with -I
     71	if [ "$CMAKE_GENERATOR" = "Unix Makefiles" ]; then
     72		find . -name flags.make -exec sed -i -e 's/-isystem/-I/g' "{}" +
     73	elif [ "$CMAKE_GENERATOR" = Ninja ]; then
     74		sed -i -e 's/-isystem/-I/g' build.ninja
     75	fi
     76}
     77
     78do_build() {
     79	: ${make_cmd:=ninja}
     80
     81	cd ${cmake_builddir:=build}
     82	${make_cmd} ${makejobs} ${make_build_args} ${make_build_target}
     83}
     84
     85do_check() {
     86	: ${make_cmd:=ninja}
     87
     88	cd ${cmake_builddir:=build}
     89
     90	if [ -z "$make_check_target" ]; then
     91		case $make_cmd in
     92			make)
     93				if make -q test 2>/dev/null; then
     94					:
     95				else
     96					if [ $? -eq 2 ]; then
     97						msg_warn 'No target to "make test".\n'
     98						return 0
     99					fi
    100				fi
    101				;;
    102			ninja)
    103				if ! ninja -t query test >/dev/null 2>&1; then
    104					msg_warn 'No target to "ninja test".\n'
    105					return 0
    106				fi
    107				;;
    108			*)
    109				msg_warn "Can't run tests with '$make_cmd', define do_check.\n"
    110				;;
    111		esac
    112	fi
    113
    114	: ${make_check_target:=test}
    115
    116	CTEST_OUTPUT_ON_FAILURE=TRUE ${make_cmd} ${make_check_args} ${make_check_target}
    117}
    118
    119do_install() {
    120	: ${make_cmd:=ninja}
    121	: ${make_install_target:=install}
    122
    123	cd ${cmake_builddir:=build}
    124	DESTDIR=${DESTDIR} ${make_cmd} ${make_install_args} ${make_install_target}
    125}