On Wednesday 16 June 2010 11:02:38 Alberto Villa wrote:
> ok, i think i'll fix this, also thanks to a contribution from clang folks
> unfortunately, it really means adding more qmake.conf's, but after 
all
> there aren't so many compilers
> 
> and, of course, it will respect CC

here's (attached) what i've made so far: please , have a look
i'm not able to test it at the moment because i am at the university 
(which means that i could have written all sort of stupid things)... will 
do some tests later. meanwhile, if you have suggestions or 
complaints, send them (pay attention: the patch was made against qt 
4.7 in area 51... after the tests prove successful, i'll backport it to qt 
4.6 (it requires just a couple of modifications))

i've added support for all the c++ compilers i've found in the ports: 
gcc(34|42|43|44|45|46), icc, llvm and clang. pcc is not a c++ compiler 
as far as i know. if something (even if exotic) is still missing, let me 
know. chances are you won't be able to build qt with them (in qt 4.7 
there is at least one test which requires gcc or icc... i've already sent 
my complaints to qt developers, and i'll soon patch it), but at least 
you'll be able to try

to make things even more tasty, bsd.qt.mk is able to understand if 
`c++` is actually g++ or clang++. yes, clang people, i'm talking to 
you :)
-- 
Alberto Villa, FreeBSD committer <avi...@freebsd.org>
http://people.FreeBSD.org/~avilla

Tact in audacity is knowing how far you can go without going too far.
                -- Jean Cocteau
Index: devel/qmake4/pkg-plist
===================================================================
--- devel/qmake4/pkg-plist	(revision 6305)
+++ devel/qmake4/pkg-plist	(working copy)
@@ -9,6 +9,7 @@
 share/qt4/mkspecs/aix-xlc/qplatformdefs.h
 share/qt4/mkspecs/common/aix/qplatformdefs.h
 share/qt4/mkspecs/common/armcc.conf
+share/qt4/mkspecs/common/clang.conf
 share/qt4/mkspecs/common/c89/qplatformdefs.h
 share/qt4/mkspecs/common/g++.conf
 share/qt4/mkspecs/common/linux.conf
@@ -141,14 +142,26 @@
 share/qt4/mkspecs/features/win32/thread_off.prf
 share/qt4/mkspecs/features/win32/windows.prf
 share/qt4/mkspecs/features/yacc.prf
+share/qt4/mkspecs/freebsd-clang/qmake.conf
+share/qt4/mkspecs/freebsd-clang/qplatformdefs.h
 share/qt4/mkspecs/freebsd-g++/qmake.conf
 share/qt4/mkspecs/freebsd-g++/qplatformdefs.h
 share/qt4/mkspecs/freebsd-g++34/qmake.conf
 share/qt4/mkspecs/freebsd-g++34/qplatformdefs.h
-share/qt4/mkspecs/freebsd-g++40/qmake.conf
-share/qt4/mkspecs/freebsd-g++40/qplatformdefs.h
+share/qt4/mkspecs/freebsd-g++42/qmake.conf
+share/qt4/mkspecs/freebsd-g++42/qplatformdefs.h
+share/qt4/mkspecs/freebsd-g++43/qmake.conf
+share/qt4/mkspecs/freebsd-g++43/qplatformdefs.h
+share/qt4/mkspecs/freebsd-g++44/qmake.conf
+share/qt4/mkspecs/freebsd-g++44/qplatformdefs.h
+share/qt4/mkspecs/freebsd-g++45/qmake.conf
+share/qt4/mkspecs/freebsd-g++45/qplatformdefs.h
+share/qt4/mkspecs/freebsd-g++46/qmake.conf
+share/qt4/mkspecs/freebsd-g++46/qplatformdefs.h
 share/qt4/mkspecs/freebsd-icc/qmake.conf
 share/qt4/mkspecs/freebsd-icc/qplatformdefs.h
+share/qt4/mkspecs/freebsd-llvm/qmake.conf
+share/qt4/mkspecs/freebsd-llvm/qplatformdefs.h
 share/qt4/mkspecs/hpux-acc-64/qmake.conf
 share/qt4/mkspecs/hpux-acc-64/qplatformdefs.h
 share/qt4/mkspecs/hpux-acc-o64/qmake.conf
@@ -533,10 +546,16 @@
 @dirrm share/qt4/mkspecs/hpux-acc-o64
 @dirrm share/qt4/mkspecs/hpux-acc-64
 @dirrm share/qt4/mkspecs/hpux-acc
+...@dirrm share/qt4/mkspecs/freebsd-llvm
 @dirrm share/qt4/mkspecs/freebsd-icc
-...@dirrm share/qt4/mkspecs/freebsd-g++40
+...@dirrm share/qt4/mkspecs/freebsd-g++46
+...@dirrm share/qt4/mkspecs/freebsd-g++45
+...@dirrm share/qt4/mkspecs/freebsd-g++44
+...@dirrm share/qt4/mkspecs/freebsd-g++43
+...@dirrm share/qt4/mkspecs/freebsd-g++42
 @dirrm share/qt4/mkspecs/freebsd-g++34
 @dirrm share/qt4/mkspecs/freebsd-g++
+...@dirrm share/qt4/mkspecs/freebsd-clang
 @dirrm share/qt4/mkspecs/features/win32
 @dirrm share/qt4/mkspecs/features/unix
 @dirrm share/qt4/mkspecs/features/symbian
Index: devel/qmake4/Makefile
===================================================================
--- devel/qmake4/Makefile	(revision 6305)
+++ devel/qmake4/Makefile	(working copy)
@@ -49,11 +49,24 @@
 		-e 's|-pthread|${PTHREAD_LIBS}|' \
 		-e 's|uic|uic-qt4|' \
 		-e 's|moc|moc-qt4|' \
-		${WRKSRC}/../mkspecs/freebsd-g++/qmake.conf \
-		${WRKSRC}/../mkspecs/freebsd-g++34/qmake.conf \
-		${WRKSRC}/../mkspecs/freebsd-g++40/qmake.conf \
-		${WRKSRC}/../mkspecs/freebsd-icc/qmake.conf
+		${WRKSRC}/../mkspecs/freebsd-*/qmake.conf
 	@${REINPLACE_CMD} -e 's|@QMAKE_QTOBJS@||g' ${WRKSRC}/Makefile.unix
+	# Add mkspecs for all the available compilers.
+	@${CP} -a ${WRKSRC}/../mkspecs/freebsd-g++ ${WRKSRC}/../mkspecs/freebsd-clang
+	@${CP} -a ${WRKSRC}/../mkspecs/freebsd-g++ ${WRKSRC}/../mkspecs/freebsd-llvm
+.for c in clang llvm
+	@${REINPLACE_CMD} -e 's|g++|${c}|g' \
+		${WRKSRC}/../mkspecs/freebsd-${c}/qmake.conf
+.endfor
+	@${CP} ${WRKSRC}/../mkspecs/common/g++.conf ${WRKSRC}/../mkspecs/common/clang.conf
+	@${REINPLACE_CMD} -e 's|gcc|clang|g' -e 's|g++|clang++|g' \
+		${WRKSRC}/../mkspecs/common/clang.conf
+.for v in 42 43 44 45 46
+		@${CP} -a ${WRKSRC}/../mkspecs/freebsd-g++40 ${WRKSRC}/../mkspecs/freebsd-g++${v}
+		@${REINPLACE_CMD} -e 's|40|${v}|g' \
+			${WRKSRC}/../mkspecs/freebsd-g++${v}
+.endfor
+	@${RM} -r ${WRKSRC}/../mkspecs/freebsd-g++40
 
 do-configure:
 	${SED} -e 's|/usr/local|${PREFIX}|g' \
@@ -75,6 +88,6 @@
 .endif
 
 post-install:
-	${LN} -sf ${PREFIX}/share/qt4/mkspecs/freebsd-g++ ${PREFIX}/share/qt4/mkspecs/default
+	${LN} -sf ${PREFIX}/share/qt4/mkspecs/freebsd-${QMAKE_BASE_COMPILER} ${PREFIX}/share/qt4/mkspecs/default
 
 .include <bsd.port.post.mk>
Index: Mk/bsd.qt.mk
===================================================================
--- Mk/bsd.qt.mk	(revision 6305)
+++ Mk/bsd.qt.mk	(working copy)
@@ -37,8 +37,8 @@
 DIST_SUBDIR=	KDE
 #CONFLICTS+=	Currently there are no conflicts \o/
 
-# The configure tests don't support cc and c++ as the names for gcc and
-# g++, so just retrieve them from the mkspec.
+# Let configure handle its well known compilers defined in the mkspecs
+# (i.e. `cc` and `c++` are not supported by configure tests).
 CONFIGURE_ENV+=	CC="" CXX=""
 
 CONFIGURE_ARGS+=-fast -platform ${QMAKESPEC} \
@@ -99,13 +99,40 @@
 UIC?=		${QT_PREFIX}/bin/uic-qt4
 RCC?=		${QT_PREFIX}/bin/rcc
 QMAKE?=		${QT_PREFIX}/bin/qmake-qt4
-QMAKESPEC?=	${QT_PREFIX}/share/qt4/mkspecs/freebsd-g++
-QMAKEFLAGS+=	QMAKE_CC="${CC}" QMAKE_CXX="${CXX}" QMAKE_LINK_SHLIB="${CXX}" \
-		QMAKE_LINK="${CXX}" QMAKE_CFLAGS="${CFLAGS}" \
-		QMAKE_CXXFLAGS="${CXXFLAGS}" \
+QMAKEFLAGS+=	QMAKE_CC="${CC}" QMAKE_CXX="${CXX}" \
+		QMAKE_LINK="${CXX}" QMAKE_LINK_SHLIB="${CXX}" \
+		QMAKE_LINK_C="${CC}" QMAKE_LINK_C_SHLIB="${CC}" \
+		QMAKE_CFLAGS="${CFLAGS}" QMAKE_CXXFLAGS="${CXXFLAGS}" \
 		QMAKE_CFLAGS_THREAD="${PTHREAD_CFLAGS}" \
 		QMAKE_LFLAGS_THREAD="${PTHREAD_LIBS}"
 
+#
+# Translate `c++` to its real name and select the appropriate mkspec.
+#
+QMAKE_BASE_COMPILER!=	cc --version | head -1 | sed -E 's/.+\(([^)]+)\).+/\1/' | cut -d " " -f 1
+.if ${QMAKE_BASE_COMPILER:L} == "gcc"
+QMAKE_BASE_COMPILER=	g++
+.endif
+.if ${CXX} == "c++"
+# Why CXX instead of CXX:T? Because if you're setting the full path of
+# `c++` you probably want to define QMAKESPEC by hand too.
+QMAKE_COMPILER=	${QMAKE_BASE_COMPILER}
+.elif ${CXX:T} == "clang++"
+QMAKE_COMPILER=	clang
+.elif ${CXX:C/c++/g++/:T} == "llvm-g++"
+QMAKE_COMPILER=	llvm
+.elif ${CXX:T} == "icpc"
+QMAKE_COMPILER=	icc
+.else
+# Handle all the other cases (mainly g++*).
+QMAKE_COMPILER=	${CXX:C/c++/g++/:T}
+.endif
+QMAKESPEC?=	${QT_PREFIX}/share/qt4/mkspecs/freebsd-${QMAKE_COMPILER}
+.if !exists(${QMAKESPEC})
+# If something went wrong, default to the base configuration.
+QMAKESPEC?=	${QT_PREFIX}/share/qt4/mkspecs/freebsd-${QMAKE_BASE_COMPILER}
+.endif
+
 .if ${OSVERSION} < 700042 && ${ARCH} == "amd64"
 QTCPPFLAGS?=	-fno-gcse
 .else

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to