Skip to content

Commit

Permalink
dev-util/cmake: add patch to ensure the correct version of Qt is alwa…
Browse files Browse the repository at this point in the history
…ys used

Gentoo-bug: 547222

Package-Manager: portage-2.2.20.1
  • Loading branch information
Michael Palimaka committed Oct 10, 2015
1 parent 689d3fc commit 0ee1361
Show file tree
Hide file tree
Showing 2 changed files with 245 additions and 0 deletions.
200 changes: 200 additions & 0 deletions dev-util/cmake/cmake-3.3.2-r1.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=5

CMAKE_REMOVE_MODULES="no"
inherit bash-completion-r1 elisp-common toolchain-funcs eutils versionator cmake-utils virtualx

MY_P="${P/_/-}"

DESCRIPTION="Cross platform Make"
HOMEPAGE="http://www.cmake.org/"
SRC_URI="http://www.cmake.org/files/v$(get_version_component_range 1-2)/${MY_P}.tar.gz
http://www.cmake.org/gitweb?p=cmake.git;a=patch;h=b9ec9392da21a3421e48c6961976060d872faffb -> ${PN}-3.3.1-FindPkgConfig_remove_variable_dereference.patch"

LICENSE="CMake"
SLOT="0"
KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd ~hppa-hpux ~ia64-hpux ~x86-interix ~amd64-linux ~arm-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x64-solaris ~x86-solaris"
IUSE="doc emacs system-jsoncpp ncurses qt4 qt5"

RDEPEND="
>=app-arch/libarchive-3.0.0:=
>=dev-libs/expat-2.0.1
>=net-misc/curl-7.20.0-r1[ssl]
sys-libs/zlib
virtual/pkgconfig
emacs? ( virtual/emacs )
ncurses? ( sys-libs/ncurses:0= )
qt4? (
dev-qt/qtcore:4
dev-qt/qtgui:4
)
qt5? (
dev-qt/qtcore:5
dev-qt/qtgui:5
dev-qt/qtwidgets:5
)
system-jsoncpp? ( >=dev-libs/jsoncpp-0.6.0_rc2:0= )
"
DEPEND="${RDEPEND}
doc? ( dev-python/sphinx )
"

S="${WORKDIR}/${MY_P}"

SITEFILE="50${PN}-gentoo.el"

CMAKE_BINARY="${S}/Bootstrap.cmk/cmake"

PATCHES=(
# prefix
"${FILESDIR}"/${PN}-2.8.10-darwin-bundle.patch
"${FILESDIR}"/${PN}-3.0.0-prefix-dirs.patch
"${FILESDIR}"/${PN}-3.1.0-darwin-isysroot.patch

# handle gentoo packaging in find modules
"${FILESDIR}"/${PN}-2.8.12.1-FindImageMagick.patch
"${FILESDIR}"/${PN}-3.0.0-FindBLAS.patch
"${FILESDIR}"/${PN}-3.0.0-FindBoost-python.patch
"${FILESDIR}"/${PN}-3.0.2-FindLAPACK.patch
"${FILESDIR}"/${PN}-3.3.2-FindQt4.patch

# respect python eclasses
"${FILESDIR}"/${PN}-2.8.10.2-FindPythonLibs.patch
"${FILESDIR}"/${PN}-3.1.0-FindPythonInterp.patch

# upstream fixes (can usually be removed with a version bump)
"${DISTDIR}"/${PN}-3.3.1-FindPkgConfig_remove_variable_dereference.patch
)

cmake_src_bootstrap() {
# Cleanup args to extract only JOBS.
# Because bootstrap does not know anything else.
echo ${MAKEOPTS} | egrep -o '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' > /dev/null
if [ $? -eq 0 ]; then
par_arg=$(echo ${MAKEOPTS} | egrep -o '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' | tail -n1 | egrep -o '[[:digit:]]+')
par_arg="--parallel=${par_arg}"
else
par_arg="--parallel=1"
fi

# execinfo.h on Solaris isn't quite what it is on Darwin
if [[ ${CHOST} == *-solaris* ]] ; then
sed -i -e 's/execinfo\.h/blablabla.h/' Source/kwsys/CMakeLists.txt || die
fi

tc-export CC CXX LD

# bootstrap script isn't exactly /bin/sh compatible
${CONFIG_SHELL:-sh} ./bootstrap \
--prefix="${T}/cmakestrap/" \
${par_arg} \
|| die "Bootstrap failed"
}

cmake_src_test() {
# fix OutDir and SelectLibraryConfigurations tests
# these are altered thanks to our eclass
sed -i -e 's:#IGNORE ::g' \
"${S}"/Tests/{OutDir,CMakeOnly/SelectLibraryConfigurations}/CMakeLists.txt \
|| die

pushd "${BUILD_DIR}" > /dev/null

local ctestargs
[[ -n ${TEST_VERBOSE} ]] && ctestargs="--extra-verbose --output-on-failure"

# Excluded tests:
# BootstrapTest: we actualy bootstrap it every time so why test it.
# BundleUtilities: bundle creation broken
# CTest.updatecvs: which fails to commit as root
# Fortran: requires fortran
# Qt4Deploy, which tries to break sandbox and ignores prefix
# TestUpload, which requires network access
"${BUILD_DIR}"/bin/ctest ${ctestargs} \
-E "(BootstrapTest|BundleUtilities|CTest.UpdateCVS|Fortran|Qt4Deploy|TestUpload)" \
|| die "Tests failed"

popd > /dev/null
}

src_prepare() {
cmake-utils_src_prepare

# disable running of cmake in boostrap command
sed -i \
-e '/"${cmake_bootstrap_dir}\/cmake"/s/^/#DONOTRUN /' \
bootstrap || die "sed failed"

# Add gcc libs to the default link paths
sed -i \
-e "s|@GENTOO_PORTAGE_GCCLIBDIR@|${EPREFIX}/usr/${CHOST}/lib/|g" \
-e "s|@GENTOO_PORTAGE_EPREFIX@|${EPREFIX}/|g" \
Modules/Platform/{UnixPaths,Darwin}.cmake || die "sed failed"

cmake_src_bootstrap
}

src_configure() {
local mycmakeargs=(
-DCMAKE_USE_SYSTEM_LIBRARIES=ON
-DCMAKE_USE_SYSTEM_LIBRARY_JSONCPP=$(usex system-jsoncpp)
-DCMAKE_INSTALL_PREFIX="${EPREFIX}"/usr
-DCMAKE_DOC_DIR=/share/doc/${PF}
-DCMAKE_MAN_DIR=/share/man
-DCMAKE_DATA_DIR=/share/${PN}
-DSPHINX_MAN=$(usex doc)
-DSPHINX_HTML=$(usex doc)
$(cmake-utils_use_build ncurses CursesDialog)
)

if use qt4 || use qt5 ; then
mycmakeargs+=(
-DBUILD_QtDialog=ON
$(cmake-utils_use_find_package qt5 Qt5Widgets)
)
fi

cmake-utils_src_configure
}

src_compile() {
cmake-utils_src_compile
use emacs && elisp-compile Auxiliary/cmake-mode.el
}

src_test() {
VIRTUALX_COMMAND="cmake_src_test" virtualmake
}

src_install() {
cmake-utils_src_install

if use emacs; then
elisp-install ${PN} Auxiliary/cmake-mode.el Auxiliary/cmake-mode.elc
elisp-site-file-install "${FILESDIR}/${SITEFILE}"
fi

insinto /usr/share/vim/vimfiles/syntax
doins Auxiliary/cmake-syntax.vim

insinto /usr/share/vim/vimfiles/indent
doins Auxiliary/cmake-indent.vim

insinto /usr/share/vim/vimfiles/ftdetect
doins "${FILESDIR}/${PN}.vim"

dobashcomp Auxiliary/bash-completion/{${PN},ctest,cpack}

rm -rf "${D}"/usr/share/cmake/{completions,editors} || die
}

pkg_postinst() {
use emacs && elisp-site-regen
}

pkg_postrm() {
use emacs && elisp-site-regen
}
45 changes: 45 additions & 0 deletions dev-util/cmake/files/cmake-3.3.2-FindQt4.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
Ensure that the correct version of Qt is always used.

With the introduction qt-4.8.6, Qt binaries were moved from /usr/bin to
/usr/$(get_libdir)/qt4/bin, leaving behind in their place symlinks to qtchooser.

There is no guarantee to which version of Qt these symlinks might point, so it
is necessary to find the correct version explicitly.

Once qmake is found, it is queried for the correct location of all other items.

Gentoo-bug: 547222

--- Modules/FindQt4.cmake
+++ Modules/FindQt4.cmake
@@ -482,13 +482,23 @@

get_filename_component(qt_install_version "[HKEY_CURRENT_USER\\Software\\trolltech\\Versions;DefaultQtVersion]" NAME)

- find_program(QT_QMAKE_EXECUTABLE NAMES ${QMAKE_NAME}
- PATHS
- ENV QTDIR
- "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\${qt_install_version};InstallDir]"
- PATH_SUFFIXES bin
- DOC "The qmake executable for the Qt installation to use"
- )
+ if(CMAKE_BUILD_TYPE STREQUAL Gentoo)
+ find_program(QT_QMAKE_EXECUTABLE NAMES ${QMAKE_NAME}
+ PATHS
+ /usr/${CMAKE_INSTALL_LIBDIR}/qt4/bin
+ /usr/bin
+ NO_DEFAULT_PATH
+ DOC "The qmake executable for the Qt installation to use"
+ )
+ else()
+ find_program(QT_QMAKE_EXECUTABLE NAMES ${QMAKE_NAME}
+ PATHS
+ ENV QTDIR
+ "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\${qt_install_version};InstallDir]"
+ PATH_SUFFIXES bin
+ DOC "The qmake executable for the Qt installation to use"
+ )
+ endif()

set(major 0)
if (QT_QMAKE_EXECUTABLE)

0 comments on commit 0ee1361

Please sign in to comment.