# This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # u++ # u++/Makefile # u++/distinfo # u++/pkg-descr # u++/pkg-plist # u++/files # u++/files/patch-src__kernel__uSignal.cc # u++/files/patch-src__library__pthread.cc # u++/files/patch-src__kernel__uC++.cc # u++/files/patch-src__kernel__uProcessor.cc # u++/files/patch-Makefile # u++/files/patch-src__kernel__uAbortExit.cc # u++/files/patch-src__kernel__uNBIO.cc # echo c - u++ mkdir -p u++ > /dev/null 2>&1 echo x - u++/Makefile sed 's/^X//' >u++/Makefile << 'a316afc82bb934318f3171d7df51b723' X# New ports collection makefile for: u++ X# Date created: 5 Dec 2009 X# Whom: bms X# X# $FreeBSD: ports/lang/u++/Makefile,v 1.1 2009/12/06 16:17:29 bms Exp $ X# X XPORTNAME= u++ XPORTVERSION= 5.7.0 XCATEGORIES= lang XMASTER_SITES= http://plg.uwaterloo.ca/~usystem/pub/uSystem/ XEXTRACT_SUFX= .sh X XMAINTAINER= bms@FreeBSD.org XCOMMENT= The uSystem uC++ Compiler, a concurrent C++ extension language X XEXTRACT_CMD= ${SH} XEXTRACT_BEFORE_ARGS= XEXTRACT_AFTER_ARGS= -b -e && \ X ${TAR} xfz ${WRKDIR}/${PORTNAME}-${PORTVERSION}.tar.gz X XONLY_FOR_ARCHS= i386 amd64 XONLY_FOR_ARCHS_REASON= Has not yet been ported to other arches X XUSE_GMAKE= yes XUSE_GCC= 4.2+ XMAKE_JOBS_SAFE= no X XCONFIGURE_TARGET= configure XMAKE_ARGS= VENDOR=pc OS=freebsd TVENDOR=pc TOS=freebsd \ X CCBUILD=${CXX} \ X CCAPP=${CXX} \ X INSTALLPREFIX="${PREFIX}" \ X INSTALLINCDIR="${PREFIX}/include/u++" \ X INSTALLLIBDIR="${PREFIX}/lib/u++" \ X INSTALLBINDIR="${PREFIX}/bin" \ X INSTALLMANDIR="${PREFIX}/man" \ X INSTALLDOCDIR="${PREFIX}/share/doc" X XMAN1= u++.1 X Xdo-configure: X @(cd ${CONFIGURE_WRKSRC}; ${SETENV} ${CONFIGURE_ENV} ${GMAKE} ${MAKE_ARGS} ${CONFIGURE_ARGS} ${CONFIGURE_TARGET}) X X.include X X.if ${ARCH} == amd64 X# XXX amd64 seems to want MULTI=FALSE for now. (TLS behaviour) XMAKE_ARGS+= MULTI=TRUE \ X CPU=x86_64 \ X TCPU=x86_64 X.else XMAKE_ARGS+= MULTI=TRUE \ X CPU=${MACHINE_ARCH} \ X TCPU=${MACHINE_ARCH} X.endif X X# u++'s configure target baulks if CXX does not start with g++. X# Force it to be defined this way if USE_GCC did nothing. X.if ${CXX} == "c++" XCXX= g++ X.endif X X.include a316afc82bb934318f3171d7df51b723 echo x - u++/distinfo sed 's/^X//' >u++/distinfo << '48a3bb1c8343d883afbfb58ce5c88af0' XMD5 (u++-5.7.0.sh) = 2c7dc30e1b5e636b8434992d54b0c0e5 XSHA256 (u++-5.7.0.sh) = cd3c1728dd2848e159f9e4110abe95f2e1917c8f5bfa9489c800b87d974d7cb0 XSIZE (u++-5.7.0.sh) = 593435 48a3bb1c8343d883afbfb58ce5c88af0 echo x - u++/pkg-descr sed 's/^X//' >u++/pkg-descr << 'd3b24cee73898c2e800ca6214c83270d' XThe uC++ project extends C++ with new constructs providing advanced Xcontrol-flow including light-weight concurrency on shared-memory uni- Xand multi-processor computers running UNIX and Linux operating systems. X XWWW: http://plg.uwaterloo.ca/~usystem/uC++.html d3b24cee73898c2e800ca6214c83270d echo x - u++/pkg-plist sed 's/^X//' >u++/pkg-plist << '7d70fdc55a69e7a23cdd32718db500bc' Xbin/u++ Xinclude/u++/fstream Xinclude/u++/fstream.h Xinclude/u++/ostream Xinclude/u++/ostream.h Xinclude/u++/uAdaptiveLock.h Xinclude/u++/uAlarm.h Xinclude/u++/uAlign.h Xinclude/u++/uAtomic.h Xinclude/u++/uBarrier.h Xinclude/u++/uBaseSelector.h Xinclude/u++/uBitSet.h Xinclude/u++/uBoundedBuffer.h Xinclude/u++/uC++.h Xinclude/u++/uCalendar.h Xinclude/u++/uCeilingQ.h Xinclude/u++/uCollection.h Xinclude/u++/uDeadlineMonotonic.h Xinclude/u++/uDeadlineMonotonic1.h Xinclude/u++/uDeadlineMonotonicStatic.h Xinclude/u++/uDebug.h Xinclude/u++/uDebuggerAPI.h Xinclude/u++/uDefault.h Xinclude/u++/uEHM.h Xinclude/u++/uFile.h Xinclude/u++/uFilebuf.h Xinclude/u++/uFlexArray.h Xinclude/u++/uFuture.h Xinclude/u++/uHeap.h Xinclude/u++/uHeapQ.h Xinclude/u++/uIOcntl.h Xinclude/u++/uKernelThreads.h Xinclude/u++/uLifoScheduler.h Xinclude/u++/uLocalDebugger.h Xinclude/u++/uPIHeap.h Xinclude/u++/uPoll.h Xinclude/u++/uProfiler.h Xinclude/u++/uQueue.h Xinclude/u++/uRWLock.h Xinclude/u++/uRealTime.h Xinclude/u++/uSelector.h Xinclude/u++/uSemaphore.h Xinclude/u++/uSequence.h Xinclude/u++/uSocket.h Xinclude/u++/uStack.h Xinclude/u++/uStaticAssert.h Xinclude/u++/uStaticPIQ.h Xinclude/u++/uStaticPriorityQ.h Xinclude/u++/uSystemTask.h Xinclude/u++/uWaitQueue.h Xinclude/u++/unwind-cxx.h Xinclude/u++/unwind.h Xlib/u++/cc1plus Xlib/u++/u++-cpp Xlib/u++/uDefaultProcessors-OpenMP.o Xlib/u++/uKernel-d.a Xlib/u++/uKernel-m-d.a Xlib/u++/uKernel-m.a Xlib/u++/uKernel.a Xlib/u++/uLibrary-d.a Xlib/u++/uLibrary-m-d.a Xlib/u++/uLibrary-m.a Xlib/u++/uLibrary.a Xlib/u++/uLocalDebugger-d.a Xlib/u++/uLocalDebugger-m-d.a Xlib/u++/uProfilerFunctionPointers.o Xlib/u++/uScheduler-d.a Xlib/u++/uScheduler-m-d.a Xlib/u++/uScheduler-m.a Xlib/u++/uScheduler.a 7d70fdc55a69e7a23cdd32718db500bc echo c - u++/files mkdir -p u++/files > /dev/null 2>&1 echo x - u++/files/patch-src__kernel__uSignal.cc sed 's/^X//' >u++/files/patch-src__kernel__uSignal.cc << '87edd0ff33720d78d284ccacadc60852' X--- src/kernel/uSignal.cc.orig 2009-05-01 02:47:35.000000000 +0100 X+++ src/kernel/uSignal.cc 2009-12-07 16:27:24.000000000 +0000 X@@ -116,7 +116,11 @@ X #error uC++ : internal error, unsupported architecture X #endif // OS X #elif defined( __x86_64__ ) X+#if defined( __freebsd__ ) X+ return (void *)(cxt->uc_mcontext.mc_rip); X+#else X return (void *)(cxt->uc_mcontext.gregs[REG_RIP]); X+#endif X #elif defined( __ia64__ ) X return (void *)(cxt->uc_mcontext.sc_ip); X #elif defined( __sparc__ ) 87edd0ff33720d78d284ccacadc60852 echo x - u++/files/patch-src__library__pthread.cc sed 's/^X//' >u++/files/patch-src__library__pthread.cc << '4c2d82b7bd2c7ab057e65fb25b4ffd41' X--- src/library/pthread.cc.orig 2009-10-06 03:06:27.000000000 +0100 X+++ src/library/pthread.cc 2009-12-07 16:27:24.000000000 +0000 X@@ -46,6 +46,16 @@ X X #define NOT_A_PTHREAD ((pthread_t)-2) // used as return from pthread_self for non-pthread tasks X X+template X+static inline To bitwise_cast(From from) { X+ union { X+ From f; X+ To t; X+ } u; X+ u.f = from; X+ return u.t; X+} X+ X namespace UPP { X struct Pthread_values : public uSeqable { // thread specific data X bool in_use; X@@ -205,13 +215,13 @@ X X static void recycle( pthread_t threadID ) { X pthread_mutex_lock( &create_lock ); X- free( (unsigned)threadID ); X+ free( bitwise_cast(threadID) ); X size -= 1; X pthread_mutex_unlock( &create_lock ); X } // PthreadPid::Impl::recycle X X static uPthreadable *lookup( pthread_t pid ) { X- return directory[ (unsigned)pid >> U_PID_DIRECTORY_SIZE ][ (unsigned)pid & (U_POWER(U_PID_NODE_SIZE) - 1) ]; X+ return directory[ bitwise_cast(pid) >> U_PID_DIRECTORY_SIZE ][ bitwise_cast(pid) & (U_POWER(U_PID_NODE_SIZE) - 1) ]; X } // PthreadPid::lookup X X static pthread_t rev_lookup( uPthreadable *addr ) { 4c2d82b7bd2c7ab057e65fb25b4ffd41 echo x - u++/files/patch-src__kernel__uC++.cc sed 's/^X//' >u++/files/patch-src__kernel__uC++.cc << '5f1026aea917fc07671047a8b05d3324' X--- src/kernel/uC++.cc.orig 2009-09-13 04:03:31.000000000 +0100 X+++ src/kernel/uC++.cc 2009-12-07 16:27:24.000000000 +0000 X@@ -963,6 +963,11 @@ X #elif defined( __i386__ ) && defined( __freebsd__ ) X km = &uKernelModule::uKernelModuleBoot; X km->threadPointer = (unsigned long)km; X+#elif defined( __x86_64__ ) && defined( __freebsd__ ) && defined( __U_MULTI__ ) X+# warning bar X+ asm volatile ("movq %%fs:0,%0\n" X+ "leaq _ZN13uKernelModule17uKernelModuleBootE@tpoff(%0),%0" X+ : "=r" (km) ); X #else X // use statically allocated kernel module X km = &uKernelModule::uKernelModuleBoot; X@@ -1054,9 +1059,13 @@ X } // if X ldtValue = (ldtIndex << 3) | 7; X asm ( "mov %0, %%gs" : : "rm" (ldtValue) ); X+ X+#elif defined( __x86_64__ ) X+ // assume TLS -- nothing to do X+ X #else X #error uC++ : internal error, unsupported architecture X-#endif // __i386__ X+#endif X X #elif defined( __solaris__ ) X #if ! defined( __U_TLS__ ) 5f1026aea917fc07671047a8b05d3324 echo x - u++/files/patch-src__kernel__uProcessor.cc sed 's/^X//' >u++/files/patch-src__kernel__uProcessor.cc << 'df2ee806896c64e2e01793ef6064c2fb' X--- src/kernel/uProcessor.cc.orig 2009-09-13 04:07:22.000000000 +0100 X+++ src/kernel/uProcessor.cc 2009-12-07 16:27:24.000000000 +0000 X@@ -961,7 +961,7 @@ X X uThisCluster().makeProcessorActive(); X X-#if defined( __freebsd__ ) && defined( __U_MULTI__ ) X+#if defined( __freebsd__ ) && defined( __i386__ ) && defined( __U_MULTI__ ) X // return the ldt index to the pool of available ones for re-use X i386_set_ldt( THREAD_GETMEM( ldtValue ) >> 3, NULL, 1 ); X #endif // __freebsd__ && __U_MULTI__ df2ee806896c64e2e01793ef6064c2fb echo x - u++/files/patch-Makefile sed 's/^X//' >u++/files/patch-Makefile << '3a302420b4d2cab85e3c8b614a9f2cd0' X--- Makefile.orig 2009-06-19 16:27:51.000000000 +0100 X+++ Makefile 2009-12-07 17:05:48.000000000 +0000 X@@ -155,6 +155,8 @@ X X freebsd-x86 freebsd-i386 : ; @${MAKE} configure VENDOR=pc OS=freebsd CPU=i386 TVENDOR=pc TOS=freebsd TCPU=i386 MULTI=TRUE X X+freebsd-x86_64 freebsd-amd64 : ; @${MAKE} configure VENDOR=pc OS=freebsd CPU=x86_64 TVENDOR=pc TOS=freebsd TCPU=x86_64 MULTI=TRUE X+ X #gizmo : ; @${MAKE} configure VENDOR=sun OS=svr4 CPU=sparc TVENDOR=gizmo TOS=bsd TCPU=m68k MULTI=FALSE X X .SILENT : configure X@@ -248,6 +250,32 @@ X echo "AFFINITY := FALSE" >> ${CONFIG}; \ X fi; \ X rm /tmp/t$$$$.cc; \ X+ elif [ ${TOS} = freebsd ] ; then \ X+ printf "Checking for TLS support in libc..."; \ X+ echo '__thread int x = 1; int main() { if ( x == 1 ) return 0; else return 1; }' > /tmp/t$$$$.cc; \ X+ if ${CCAPP} /tmp/t$$$$.cc > /dev/null 2>&1 && ./a.out > /dev/null 2>&1; then \ X+ echo yes; \ X+ echo "TLS := TRUE" >> ${CONFIG}; \ X+ rm a.out; \ X+ else \ X+ echo no; \ X+ echo "TLS := FALSE" >> ${CONFIG}; \ X+ fi; \ X+ rm /tmp/t$$$$.cc; \ X+ printf "Checking for pthreads affinity support in libc..."; \ X+ echo '#include ' > /tmp/t$$$$.cc; \ X+ echo '#include ' >> /tmp/t$$$$.cc; \ X+ echo '#define cpu_set_t cpuset_t' >> /tmp/t$$$$.cc; \ X+ echo 'int main() { pthread_setaffinity_np( 0, sizeof(cpu_set_t), NULL ); }' >> /tmp/t$$$$.cc; \ X+ if ${CCAPP} /tmp/t$$$$.cc -lpthread > /dev/null 2>&1; then \ X+ echo yes; \ X+ echo "AFFINITY := TRUE" >> ${CONFIG}; \ X+ rm a.out; \ X+ else \ X+ echo no; \ X+ echo "AFFINITY := FALSE" >> ${CONFIG}; \ X+ fi; \ X+ rm /tmp/t$$$$.cc; \ X elif [ ${TOS} = solaris ] ; then \ X version=`uname -r`; \ X printf "SunOS version $$version: "; \ 3a302420b4d2cab85e3c8b614a9f2cd0 echo x - u++/files/patch-src__kernel__uAbortExit.cc sed 's/^X//' >u++/files/patch-src__kernel__uAbortExit.cc << '48eeb2e12320b63dacb784748fcf2e4e' X--- src/kernel/uAbortExit.cc.orig 2009-12-07 16:29:18.000000000 +0000 X+++ src/kernel/uAbortExit.cc 2009-12-07 16:49:29.000000000 +0000 X@@ -60,7 +60,11 @@ X // cannot call uDebugPrt because spinlocks cause termination after globalSpinAbort is set. X fprintf( stderr, "abortExit(), killing processor %p / process %d\n", &(pr->processor()), pr->processor().getPid() ); X #endif // __U_DEBUG_H__ X+#if defined( __freebsd__ ) && defined( __U_MULTI__ ) && defined( __U_PTHREAD__ ) X+ pthread_kill( pr->processor().getPid(), SIGKILL ); X+#else X kill( pr->processor().getPid(), SIGKILL ); X+#endif X } // if X } // for X } // uKernelModule::abortExit 48eeb2e12320b63dacb784748fcf2e4e echo x - u++/files/patch-src__kernel__uNBIO.cc sed 's/^X//' >u++/files/patch-src__kernel__uNBIO.cc << '42c6f45cf7c41ae683a8c860daf7a843' X--- src/kernel/uNBIO.cc.orig 2009-12-07 16:41:00.000000000 +0000 X+++ src/kernel/uNBIO.cc 2009-12-07 16:42:24.000000000 +0000 X@@ -327,7 +327,7 @@ X ! efdsUsed ? NULL : X &mEFDs, notimeout ? NULL : &timeout_, &mask ); X int terrno = errno; X- IOPollerPid = -1; X+ IOPollerPid = INVALID_UPID; X X #ifdef __U_MULTI__ X if ( uThisProcessor().idle() ) X@@ -831,7 +831,7 @@ X pendingIOSfds[fd].addTail( &node ); // node is removed by IOPoller X } // if X X- if ( IOPollerPid != (uPid_t)-1 ) { uThisCluster().wakeProcessor( IOPollerPid ); IOPollerPid = -1; } X+ if ( IOPollerPid != INVALID_UPID ) { uThisCluster().wakeProcessor( IOPollerPid ); IOPollerPid = INVALID_UPID; } X pending += 1; X return checkPoller(); X } // uNBIO::initSfd X@@ -871,7 +871,7 @@ X X pendingIOMfds.addTail( &node ); // node is removed by IOPoller X X- if ( IOPollerPid != (uPid_t)-1 ) { uThisCluster().wakeProcessor( IOPollerPid ); IOPollerPid = -1; } X+ if ( IOPollerPid != INVALID_UPID ) { uThisCluster().wakeProcessor( IOPollerPid ); IOPollerPid = INVALID_UPID; } X pending += 1; X return checkPoller(); X } // uNBIO::initMfds 42c6f45cf7c41ae683a8c860daf7a843 exit