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
signature.asc
Description: This is a digitally signed message part.