Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 670060 | Differences between
and this patch

Collapse All | Expand All

(-)a/eclass/qt5-build.eclass (-26 / +121 lines)
Lines 34-39 Link Here
34
# Array variable containing the source directories that should be built.
34
# Array variable containing the source directories that should be built.
35
# All paths must be relative to ${S}.
35
# All paths must be relative to ${S}.
36
36
37
# @ECLASS-VARIABLE: QT5_COMPILE_FOR_HOST_SUBDIR
38
# @DEFAULT_UNSET
39
# @DESCRIPTION:
40
# Variable containing a source directory that should be built for the host in
41
# case of cross-compilation.
42
37
# @ECLASS-VARIABLE: QT5_GENTOO_CONFIG
43
# @ECLASS-VARIABLE: QT5_GENTOO_CONFIG
38
# @DEFAULT_UNSET
44
# @DEFAULT_UNSET
39
# @DESCRIPTION:
45
# @DESCRIPTION:
Lines 197-202 Link Here
197
		sed -i -e "/^QMAKE_CONF_COMPILER=/ s:=.*:=\"$(tc-getCXX)\":" \
203
		sed -i -e "/^QMAKE_CONF_COMPILER=/ s:=.*:=\"$(tc-getCXX)\":" \
198
			configure || die "sed failed (QMAKE_CONF_COMPILER)"
204
			configure || die "sed failed (QMAKE_CONF_COMPILER)"
199
205
206
		if tc-is-cross-compiler; then
207
			# Don't take the host into account in configure tests, since we build everything for the target
208
			sed -i -e 's/\"host": true/"host": false/' configure.json || die
209
210
			# Use tools of the host machine
211
			sed -i -e 's|\$\$\[QT_HOST_BINS]|/usr/lib/qt5/bin|' mkspecs/features/qt_functions.prf || die
212
213
			# Avoid applying -before to all the subsequent qmake arguments
214
			sed -i -e 's/-early "\\\"CONFIG += cross_compile\\\""/& -before/' mkspecs/features/qt_configure.prf || die
215
216
			# Make qtdbus cross-compile
217
			sed -i -e 's/CONFIG += force_bootstrap/CONFIG +=/' mkspecs/features/qt_build_config.prf || die
218
		fi
219
200
		if [[ ${QT5_MINOR_VERSION} -le 7 ]]; then
220
		if [[ ${QT5_MINOR_VERSION} -le 7 ]]; then
201
			# Respect toolchain and flags in config.tests
221
			# Respect toolchain and flags in config.tests
202
			find config.tests/unix -name '*.test' -type f -execdir \
222
			find config.tests/unix -name '*.test' -type f -execdir \
Lines 213-220 Link Here
213
			src/{corelib/corelib,gui/gui}.pro || die "sed failed (optimize_full)"
233
			src/{corelib/corelib,gui/gui}.pro || die "sed failed (optimize_full)"
214
234
215
		# Respect build variables in configure tests (bug #639494)
235
		# Respect build variables in configure tests (bug #639494)
216
		if [[ ${QT5_MINOR_VERSION} -ge 9 ]]; then
236
		local mkspec=
217
			sed -i -e "s|\"\$outpath/bin/qmake\" \"\$relpathMangled\" -- \"\$@\"|& $(qt5_qmake_args) |" configure || die
237
		if use kernel_FreeBSD; then
238
			if tc-is-gcc; then
239
				mkspec=freebsd-g++
240
			elif tc-is-clang; then
241
				mkspec=freebsd-clang
242
			fi
243
		elif use kernel_linux; then
244
			if tc-is-gcc; then
245
				mkspec=linux-g++
246
			elif tc-is-clang; then
247
				mkspec=linux-clang
248
			fi
249
		fi
250
		if [[ -n ${mkspec} ]]; then
251
			sed -i -e "/load(qt_config)/i\\$(qt5_qmake_vars)" mkspecs/${mkspec}/qmake.conf || die
218
		fi
252
		fi
219
	fi
253
	fi
220
254
Lines 229-234 Link Here
229
	if [[ ${QT5_MODULE} == qtbase ]]; then
263
	if [[ ${QT5_MODULE} == qtbase ]]; then
230
		qt5_base_configure
264
		qt5_base_configure
231
	fi
265
	fi
266
	if [[ ${PN} == qtcore ]]; then
267
		emake -C ${QT5_BUILD_DIR} sub-qmake-qmake-aux-pro-qmake_all || die
268
	fi
232
269
233
	qt5_foreach_target_subdir qt5_qmake
270
	qt5_foreach_target_subdir qt5_qmake
234
}
271
}
Lines 272-277 Link Here
272
# @DESCRIPTION:
309
# @DESCRIPTION:
273
# Runs emake install in the target directories.
310
# Runs emake install in the target directories.
274
qt5-build_src_install() {
311
qt5-build_src_install() {
312
	find . -name 'Makefile*' -type f -execdir \
313
		sed -i -e "s|\\\$(INSTALL_ROOT)${SYSROOT}|\\\$(INSTALL_ROOT)|g" '{}' + || die
314
275
	qt5_foreach_target_subdir emake INSTALL_ROOT="${D}" install
315
	qt5_foreach_target_subdir emake INSTALL_ROOT="${D}" install
276
316
277
	if [[ ${PN} == qtcore ]]; then
317
	if [[ ${PN} == qtcore ]]; then
Lines 456-462 Link Here
456
496
457
	if [[ ${QT5_MODULE} == qtbase ]]; then
497
	if [[ ${QT5_MODULE} == qtbase ]]; then
458
		# see mkspecs/features/qt_config.prf
498
		# see mkspecs/features/qt_config.prf
459
		export QMAKEMODULES="${QT5_BUILD_DIR}/mkspecs/modules:${S}/mkspecs/modules:${QT5_ARCHDATADIR}/mkspecs/modules"
499
		export QMAKEMODULES="${QT5_BUILD_DIR}/mkspecs/modules:${S}/mkspecs/modules:${SYSROOT}${QT5_ARCHDATADIR}/mkspecs/modules"
460
	fi
500
	fi
461
}
501
}
462
502
Lines 544-549 Link Here
544
		-examplesdir "${QT5_EXAMPLESDIR}"
584
		-examplesdir "${QT5_EXAMPLESDIR}"
545
		-testsdir "${QT5_TESTSDIR}"
585
		-testsdir "${QT5_TESTSDIR}"
546
586
587
		$(tc-is-cross-compiler && echo -sysroot "${SYSROOT}" -external-hostbindir /usr/lib/qt5/bin)
588
547
		# force appropriate compiler
589
		# force appropriate compiler
548
		$(if use kernel_FreeBSD; then
590
		$(if use kernel_FreeBSD; then
549
			if tc-is-gcc; then
591
			if tc-is-gcc; then
Lines 717-747 Link Here
717
759
718
}
760
}
719
761
720
# @FUNCTION: qt5_qmake_args
762
# @FUNCTION: qt5_qmake_vars
721
# @INTERNAL
763
# @INTERNAL
722
# @DESCRIPTION:
764
# @DESCRIPTION:
723
# Helper function to get the various toolchain-related variables.
765
# Helper function to get the various toolchain-related variables.
724
qt5_qmake_args() {
766
qt5_qmake_vars() {
725
	echo \
767
	cat <<- EOF
726
		QMAKE_AR=\"$(tc-getAR)\" \
768
		QMAKE_AR = $(tc-getAR)\\
727
		QMAKE_CC=\"$(tc-getCC)\" \
769
		QMAKE_CC= $(tc-getCC)\\
728
		QMAKE_LINK_C=\"$(tc-getCC)\" \
770
		QMAKE_LINK_C = $(tc-getCC)\\
729
		QMAKE_LINK_C_SHLIB=\"$(tc-getCC)\" \
771
		QMAKE_LINK_C_SHLIB = $(tc-getCC)\\
730
		QMAKE_CXX=\"$(tc-getCXX)\" \
772
		QMAKE_CXX = $(tc-getCXX)\\
731
		QMAKE_LINK=\"$(tc-getCXX)\" \
773
		QMAKE_LINK = $(tc-getCXX)\\
732
		QMAKE_LINK_SHLIB=\"$(tc-getCXX)\" \
774
		QMAKE_LINK_SHLIB = $(tc-getCXX)\\
733
		QMAKE_OBJCOPY=\"$(tc-getOBJCOPY)\" \
775
		QMAKE_OBJCOPY = $(tc-getOBJCOPY)\\
734
		QMAKE_RANLIB= \
776
		QMAKE_RANLIB =\\
735
		QMAKE_STRIP=\"$(tc-getSTRIP)\" \
777
		QMAKE_STRIP = $(tc-getSTRIP)\\
736
		QMAKE_CFLAGS=\"${CFLAGS}\" \
778
		QMAKE_CFLAGS = ${CFLAGS}\\
737
		QMAKE_CFLAGS_RELEASE= \
779
		QMAKE_CFLAGS_RELEASE =\\
738
		QMAKE_CFLAGS_DEBUG= \
780
		QMAKE_CFLAGS_DEBUG =\\
739
		QMAKE_CXXFLAGS=\"${CXXFLAGS}\" \
781
		QMAKE_CXXFLAGS = ${CXXFLAGS}\\
740
		QMAKE_CXXFLAGS_RELEASE= \
782
		QMAKE_CXXFLAGS_RELEASE =\\
741
		QMAKE_CXXFLAGS_DEBUG= \
783
		QMAKE_CXXFLAGS_DEBUG =\\
742
		QMAKE_LFLAGS=\"${LDFLAGS}\" \
784
		QMAKE_LFLAGS = ${LDFLAGS}\\
743
		QMAKE_LFLAGS_RELEASE= \
785
		QMAKE_LFLAGS_RELEASE =\\
744
		QMAKE_LFLAGS_DEBUG=
786
		QMAKE_LFLAGS_DEBUG =
787
		EOF
745
}
788
}
746
789
747
# @FUNCTION: qt5_qmake
790
# @FUNCTION: qt5_qmake
Lines 750-758 Link Here
750
# Helper function that runs qmake in the current target subdir.
793
# Helper function that runs qmake in the current target subdir.
751
# Intended to be called by qt5_foreach_target_subdir().
794
# Intended to be called by qt5_foreach_target_subdir().
752
qt5_qmake() {
795
qt5_qmake() {
796
	if [[ ${PWD#${QT5_BUILD_DIR}/} == ${QT5_COMPILE_FOR_HOST_SUBDIR} ]]; then
797
		qt5_qmake_host
798
		return
799
	fi
800
753
	local projectdir=${PWD/#${QT5_BUILD_DIR}/${S}}
801
	local projectdir=${PWD/#${QT5_BUILD_DIR}/${S}}
754
	local qmakepath=
802
	local qmakepath=
755
	if [[ ${QT5_MODULE} == qtbase ]]; then
803
	if tc-is-cross-compiler; then
804
		qmakepath=/usr/lib/qt5/bin
805
	elif [[ ${QT5_MODULE} == qtbase ]]; then
756
		qmakepath=${QT5_BUILD_DIR}/bin
806
		qmakepath=${QT5_BUILD_DIR}/bin
757
	else
807
	else
758
		qmakepath=${QT5_BINDIR}
808
		qmakepath=${QT5_BINDIR}
Lines 760-765 Link Here
760
810
761
	"${qmakepath}"/qmake \
811
	"${qmakepath}"/qmake \
762
		"${projectdir}" \
812
		"${projectdir}" \
813
		$([[ ${QT5_MODULE} == qtbase ]] && echo -qtconf "${S}"/bin/qt.conf) \
763
		CONFIG+=$(usex debug debug release) \
814
		CONFIG+=$(usex debug debug release) \
764
		CONFIG-=$(usex debug release debug) \
815
		CONFIG-=$(usex debug release debug) \
765
		QMAKE_AR="$(tc-getAR) cqs" \
816
		QMAKE_AR="$(tc-getAR) cqs" \
Lines 782-787 Link Here
782
		QMAKE_LFLAGS_RELEASE= \
833
		QMAKE_LFLAGS_RELEASE= \
783
		QMAKE_LFLAGS_DEBUG= \
834
		QMAKE_LFLAGS_DEBUG= \
784
		"${myqmakeargs[@]}" \
835
		"${myqmakeargs[@]}" \
836
		|| die "qmake failed (${projectdir#${S}/})"
837
}
838
839
840
# @FUNCTION: qt5_qmake_host
841
# @INTERNAL
842
# @DESCRIPTION:
843
# Helper function that runs qmake in the current target subdir.
844
# Code is compiled for the host machine.
845
qt5_qmake_host() {
846
	local projectdir=${PWD/#${QT5_BUILD_DIR}/${S}}
847
	local qmakepath=
848
	if tc-is-cross-compiler; then
849
		qmakepath=/usr/lib/qt5/bin
850
	elif [[ ${QT5_MODULE} == qtbase ]]; then
851
		qmakepath=${QT5_BUILD_DIR}/bin
852
	else
853
		qmakepath=${QT5_BINDIR}
854
	fi
855
856
	"${qmakepath}"/qmake \
857
		"${projectdir}" \
858
		CONFIG+=release \
859
		CONFIG-=debug \
860
		QMAKE_AR="$(tc-getBUILD_AR) cqs" \
861
		QMAKE_CC="$(tc-getBUILD_CC)" \
862
		QMAKE_LINK_C="$(tc-getBUILD_CC)" \
863
		QMAKE_LINK_C_SHLIB="$(tc-getBUILD_CC)" \
864
		QMAKE_CXX="$(tc-getBUILD_CXX)" \
865
		QMAKE_LINK="$(tc-getBUILD_CXX)" \
866
		QMAKE_LINK_SHLIB="$(tc-getBUILD_CXX)" \
867
		QMAKE_OBJCOPY="$(tc-getBUILD_OBJCOPY)" \
868
		QMAKE_RANLIB= \
869
		QMAKE_STRIP="$(tc-getBUILD_STRIP)" \
870
		QMAKE_CFLAGS="${BUILD_CFLAGS}" \
871
		QMAKE_CFLAGS_RELEASE= \
872
		QMAKE_CFLAGS_DEBUG= \
873
		QMAKE_CXXFLAGS="${BUILD_CXXFLAGS}" \
874
		QMAKE_CXXFLAGS_RELEASE= \
875
		QMAKE_CXXFLAGS_DEBUG= \
876
		QMAKE_LFLAGS="${BUILD_LDFLAGS}" \
877
		QMAKE_LFLAGS_RELEASE= \
878
		QMAKE_LFLAGS_DEBUG= \
879
		"${myqmakeargs[@]}" \
785
		|| die "qmake failed (${projectdir#${S}/})"
880
		|| die "qmake failed (${projectdir#${S}/})"
786
}
881
}
787
882

Return to bug 670060