[61258] trunk/dports/devel
blb at macports.org
blb at macports.org
Mon Dec 7 00:29:34 PST 2009
Revision: 61258
http://trac.macports.org/changeset/61258
Author: blb at macports.org
Date: 2009-12-07 00:29:32 -0800 (Mon, 07 Dec 2009)
Log Message:
-----------
New port - devel/quickfix, FIX engine implementation
Added Paths:
-----------
trunk/dports/devel/quickfix/
trunk/dports/devel/quickfix/Portfile
trunk/dports/devel/quickfix/files/
trunk/dports/devel/quickfix/files/patch-configure.diff
trunk/dports/devel/quickfix/files/patch-destdir.diff
trunk/dports/devel/quickfix/files/patch-postgresql84.diff
trunk/dports/devel/quickfix/files/patch-src_python_QuickfixPython.cpp.diff
trunk/dports/devel/quickfix/files/patch-threadfix.diff
Added: trunk/dports/devel/quickfix/Portfile
===================================================================
--- trunk/dports/devel/quickfix/Portfile (rev 0)
+++ trunk/dports/devel/quickfix/Portfile 2009-12-07 08:29:32 UTC (rev 61258)
@@ -0,0 +1,44 @@
+# $Id$
+
+PortSystem 1.0
+name quickfix
+version 1.12.4
+categories devel finance
+maintainers blb openmaintainer
+description FIX engine implementation
+long_description \
+ QuickFIX is a full-featured open source FIX engine, currently compatible \
+ with the FIX 4.0-4.4 spec.
+
+platforms darwin
+
+homepage http://www.quickfixengine.org/
+master_sites sourceforge
+worksrcdir ${name}
+
+checksums md5 359fd12942d7e876275a116787fdd284 \
+ sha1 367a035bae39062da6dd01f1f3c2254165bac061 \
+ rmd160 c03fd64e13bfbffcf02b60936010cbc9fd6c9b09
+
+depends_lib port:libxml2
+
+patchfiles patch-configure.diff patch-threadfix.diff \
+ patch-destdir.diff patch-src_python_QuickfixPython.cpp.diff
+post-patch {
+ reinplace "s|@@PREFIX@@|${prefix}|g" ${worksrcpath}/configure
+}
+
+configure.args --with-java
+configure.env "JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home"
+
+variant python description {Include python support} {
+ depends_lib-append port:python26
+ configure.args-append --with-python=${prefix}
+}
+
+variant postgresql84 description {Include PostGreSQL 8.4 support} {
+ depends_lib-append port:postgresql84
+ configure.args-append --with-postgresql=${prefix}
+ patchfiles-append patch-postgresql84.diff
+}
+
Property changes on: trunk/dports/devel/quickfix/Portfile
___________________________________________________________________
Added: svn:keywords
+ Id
Added: svn:eol-style
+ native
Added: trunk/dports/devel/quickfix/files/patch-configure.diff
===================================================================
--- trunk/dports/devel/quickfix/files/patch-configure.diff (rev 0)
+++ trunk/dports/devel/quickfix/files/patch-configure.diff 2009-12-07 08:29:32 UTC (rev 61258)
@@ -0,0 +1,62 @@
+--- configure.orig 2006-09-14 07:53:46.000000000 -0600
++++ configure 2009-12-07 00:25:04.000000000 -0700
+@@ -19098,9 +19098,9 @@
+ BOOST_CFLAGS="-I${BOOST_PREFIX}"
+
+
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_BOOST 1
+-_ACEOF
++#cat >>confdefs.h <<\_ACEOF
++##define HAVE_BOOST 1
++#_ACEOF
+
+ fi
+ ########################################
+@@ -19183,9 +19183,9 @@
+
+ if test $has_python = true
+ then
+- PYTHON_CFLAGS="-I${PYTHON_PREFIX}"
++ PYTHON_CFLAGS="-I`@@PREFIX@@/bin/python2.6 -c 'from distutils import sysconfig; print sysconfig.get_python_inc()'`"
+
+- PYTHON_SITE_PACKAGES=`python -c 'from distutils import sysconfig; print sysconfig.get_python_lib()'`
++ PYTHON_SITE_PACKAGES=`@@PREFIX@@/bin/python2.6 -c 'from distutils import sysconfig; print sysconfig.get_python_lib()'`
+
+
+ cat >>confdefs.h <<\_ACEOF
+@@ -19267,7 +19267,7 @@
+ case $build_os in
+ linux-*) jni_mt=linux;;
+ solaris*.*) jni_mt=solaris;;
+- darwin*) jarlib=/Library/Java/Extensions;;
++ darwin*) jarlib=@@PREFIX@@/share/java;;
+ esac
+
+
+@@ -20882,9 +20882,9 @@
+ echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_BOOST_POOL_ALLOCATOR 1
+-_ACEOF
++#cat >>confdefs.h <<\_ACEOF
++##define HAVE_BOOST_POOL_ALLOCATOR 1
++#_ACEOF
+
+ else
+ echo "$as_me: failed program was:" >&5
+@@ -20930,9 +20930,9 @@
+ echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_BOOST_FAST_POOL_ALLOCATOR 1
+-_ACEOF
++#cat >>confdefs.h <<\_ACEOF
++##define HAVE_BOOST_FAST_POOL_ALLOCATOR 1
++#_ACEOF
+
+ else
+ echo "$as_me: failed program was:" >&5
Added: trunk/dports/devel/quickfix/files/patch-destdir.diff
===================================================================
--- trunk/dports/devel/quickfix/files/patch-destdir.diff (rev 0)
+++ trunk/dports/devel/quickfix/files/patch-destdir.diff 2009-12-07 08:29:32 UTC (rev 61258)
@@ -0,0 +1,69 @@
+--- src/C++/Makefile.in.orig 2006-09-14 07:53:38.000000000 -0600
++++ src/C++/Makefile.in 2009-12-03 00:01:44.000000000 -0700
+@@ -793,20 +793,20 @@
+ rm -f $(top_builddir)/include/quickfix/*.h
+
+ install-exec-local: *.h
+- rm -rf $(pkgincludedir)
+- mkdir -p $(pkgincludedir)
+- mkdir $(pkgincludedir)/fix40
+- mkdir $(pkgincludedir)/fix41
+- mkdir $(pkgincludedir)/fix42
+- mkdir $(pkgincludedir)/fix43
+- mkdir $(pkgincludedir)/fix44
+- cp *.h $(pkgincludedir)
+- cp $(top_builddir)/config.h $(pkgincludedir)
+- cp fix40/*.h $(pkgincludedir)/fix40
+- cp fix41/*.h $(pkgincludedir)/fix41
+- cp fix42/*.h $(pkgincludedir)/fix42
+- cp fix43/*.h $(pkgincludedir)/fix43
+- cp fix44/*.h $(pkgincludedir)/fix44
++ rm -rf $(DESTDIR)$(pkgincludedir)
++ mkdir -p $(DESTDIR)$(pkgincludedir)
++ mkdir $(DESTDIR)$(pkgincludedir)/fix40
++ mkdir $(DESTDIR)$(pkgincludedir)/fix41
++ mkdir $(DESTDIR)$(pkgincludedir)/fix42
++ mkdir $(DESTDIR)$(pkgincludedir)/fix43
++ mkdir $(DESTDIR)$(pkgincludedir)/fix44
++ cp *.h $(DESTDIR)$(pkgincludedir)
++ cp $(top_builddir)/config.h $(DESTDIR)$(pkgincludedir)
++ cp fix40/*.h $(DESTDIR)$(pkgincludedir)/fix40
++ cp fix41/*.h $(DESTDIR)$(pkgincludedir)/fix41
++ cp fix42/*.h $(DESTDIR)$(pkgincludedir)/fix42
++ cp fix43/*.h $(DESTDIR)$(pkgincludedir)/fix43
++ cp fix44/*.h $(DESTDIR)$(pkgincludedir)/fix44
+
+ uninstall-local:
+ rm -rf $(pkgincludedir)
+--- src/python/Makefile.in.orig 2006-09-14 07:53:41.000000000 -0600
++++ src/python/Makefile.in 2009-12-06 18:46:36.000000000 -0700
+@@ -516,17 +516,18 @@
+ rm -rf $(top_builddir)/lib/python
+
+ install-exec-local:
+- rm -rf $(PYTHON_SITE_PACKAGES)/python/_quickfix.so
+- rm -rf $(PYTHON_SITE_PACKAGES)/python/_quickfix.dylib
+- rm -rf $(PYTHON_SITE_PACKAGES)/python/quickfix.py
+- rm -rf $(PYTHON_SITE_PACKAGES)/python/quickfix40.py
+- rm -rf $(PYTHON_SITE_PACKAGES)/python/quickfix41.py
+- rm -rf $(PYTHON_SITE_PACKAGES)/python/quickfix42.py
+- rm -rf $(PYTHON_SITE_PACKAGES)/python/quickfix43.py
+- rm -rf $(PYTHON_SITE_PACKAGES)/python/quickfix44.py
+- ln -sf $(prefix)/lib/python/_quickfix.so $(PYTHON_SITE_PACKAGES)/_quickfix.so
+- ln -sf $(prefix)/lib/python/_quickfix.dylib $(PYTHON_SITE_PACKAGES)/_quickfix.dylib
+- cp $(top_builddir)/lib/python/*.py $(PYTHON_SITE_PACKAGES)
++ rm -rf $(DESTDIR)$(PYTHON_SITE_PACKAGES)/python/_quickfix.so
++ rm -rf $(DESTDIR)$(PYTHON_SITE_PACKAGES)/python/_quickfix.dylib
++ rm -rf $(DESTDIR)$(PYTHON_SITE_PACKAGES)/python/quickfix.py
++ rm -rf $(DESTDIR)$(PYTHON_SITE_PACKAGES)/python/quickfix40.py
++ rm -rf $(DESTDIR)$(PYTHON_SITE_PACKAGES)/python/quickfix41.py
++ rm -rf $(DESTDIR)$(PYTHON_SITE_PACKAGES)/python/quickfix42.py
++ rm -rf $(DESTDIR)$(PYTHON_SITE_PACKAGES)/python/quickfix43.py
++ rm -rf $(DESTDIR)$(PYTHON_SITE_PACKAGES)/python/quickfix44.py
++ $(mkinstalldirs) $(DESTDIR)$(PYTHON_SITE_PACKAGES)
++ cp $(top_builddir)/lib/python/*.py $(DESTDIR)$(PYTHON_SITE_PACKAGES)
++ cp $(top_builddir)/lib/python/_quickfix.dylib $(DESTDIR)$(PYTHON_SITE_PACKAGES)
++ ln -sf $(PYTHON_SITE_PACKAGES)/_quickfix.dylib $(DESTDIR)$(PYTHON_SITE_PACKAGES)/_quickfix.so
+
+ uninstall-local:
+ rm -rf $(PYTHON_SITE_PACKAGES)/_quickfix.so
Added: trunk/dports/devel/quickfix/files/patch-postgresql84.diff
===================================================================
--- trunk/dports/devel/quickfix/files/patch-postgresql84.diff (rev 0)
+++ trunk/dports/devel/quickfix/files/patch-postgresql84.diff 2009-12-07 08:29:32 UTC (rev 61258)
@@ -0,0 +1,14 @@
+--- configure.orig 2006-09-14 07:53:46.000000000 -0600
++++ configure 2009-12-06 23:30:49.000000000 -0700
+@@ -19153,9 +19153,9 @@
+
+ if test $has_postgresql = true
+ then
+- POSTGRESQL_CFLAGS="-I${POSTGRESQL_PREFIX}/include"
++ POSTGRESQL_CFLAGS="-I${POSTGRESQL_PREFIX}/include/postgresql84"
+
+- POSTGRESQL_LIBS="-L${POSTGRESQL_PREFIX}/lib -lpq"
++ POSTGRESQL_LIBS="-L${POSTGRESQL_PREFIX}/lib/postgresql84 -lpq"
+
+
+ cat >>confdefs.h <<\_ACEOF
Added: trunk/dports/devel/quickfix/files/patch-src_python_QuickfixPython.cpp.diff
===================================================================
--- trunk/dports/devel/quickfix/files/patch-src_python_QuickfixPython.cpp.diff (rev 0)
+++ trunk/dports/devel/quickfix/files/patch-src_python_QuickfixPython.cpp.diff 2009-12-07 08:29:32 UTC (rev 61258)
@@ -0,0 +1,34 @@
+--- src/python/QuickfixPython.cpp.orig 2006-09-13 18:28:43.000000000 -0600
++++ src/python/QuickfixPython.cpp 2009-12-03 01:02:55.000000000 -0700
+@@ -2049,7 +2049,7 @@
+ void *vptr = 0;
+
+ /* here we get the method pointer for callbacks */
+- char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc);
++ const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc);
+ const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0;
+ if (desc) {
+ desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0;
+@@ -3914,7 +3914,7 @@
+ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
+ {
+ if (PyString_Check(obj)) {
+- char *cstr; int len;
++ char *cstr; Py_ssize_t len;
+ PyString_AsStringAndSize(obj, &cstr, &len);
+ if (cptr) {
+ if (alloc) {
+@@ -165889,11 +165889,11 @@
+ swig_type_info **types_initial) {
+ size_t i;
+ for (i = 0; methods[i].ml_name; ++i) {
+- char *c = methods[i].ml_doc;
++ const char *c = methods[i].ml_doc;
+ if (c && (c = strstr(c, "swig_ptr: "))) {
+ int j;
+ swig_const_info *ci = 0;
+- char *name = c + 10;
++ const char *name = c + 10;
+ for (j = 0; const_table[j].type; ++j) {
+ if (strncmp(const_table[j].name, name,
+ strlen(const_table[j].name)) == 0) {
Added: trunk/dports/devel/quickfix/files/patch-threadfix.diff
===================================================================
--- trunk/dports/devel/quickfix/files/patch-threadfix.diff (rev 0)
+++ trunk/dports/devel/quickfix/files/patch-threadfix.diff 2009-12-07 08:29:32 UTC (rev 61258)
@@ -0,0 +1,242 @@
+--- src/C++/Acceptor.h.orig 2006-08-25 13:45:57.000000000 -0600
++++ src/C++/Acceptor.h 2009-12-01 23:44:00.000000000 -0700
+@@ -110,7 +110,7 @@
+ typedef std::set < SessionID > SessionIDs;
+ typedef std::map < SessionID, Session* > Sessions;
+
+- unsigned m_threadid;
++ pthread_t m_threadid;
+ Sessions m_sessions;
+ SessionIDs m_sessionIDs;
+ Application& m_application;
+--- src/C++/HttpServer.h.orig 2006-08-09 16:13:09.000000000 -0600
++++ src/C++/HttpServer.h 2009-12-01 23:44:23.000000000 -0700
+@@ -64,7 +64,7 @@
+
+ SocketServer* m_pServer;
+ SessionSettings m_settings;
+- unsigned m_threadid;
++ pthread_t m_threadid;
+ int m_port;
+ bool m_stop;
+
+--- src/C++/Initiator.h.orig 2006-08-25 13:45:57.000000000 -0600
++++ src/C++/Initiator.h 2009-12-01 23:44:43.000000000 -0700
+@@ -133,7 +133,7 @@
+ SessionIDs m_disconnected;
+ SessionState m_sessionState;
+
+- unsigned m_threadid;
++ pthread_t m_threadid;
+ Application& m_application;
+ MessageStoreFactory& m_messageStoreFactory;
+ SessionSettings m_settings;
+--- src/C++/ThreadedSocketAcceptor.cpp.orig 2006-09-13 14:47:22.000000000 -0600
++++ src/C++/ThreadedSocketAcceptor.cpp 2009-12-01 23:46:08.000000000 -0700
+@@ -126,7 +126,7 @@
+ Locker l( m_mutex );
+ int port = m_socketToPort[*i];
+ AcceptorThreadInfo* info = new AcceptorThreadInfo( this, *i, port );
+- unsigned thread;
++ pthread_t thread;
+ thread_spawn( &socketAcceptorThread, info, thread );
+ addThread( *i, thread );
+ }
+@@ -170,7 +170,7 @@
+ QF_STACK_POP
+ }
+
+-void ThreadedSocketAcceptor::addThread( int s, int t )
++void ThreadedSocketAcceptor::addThread( int s, pthread_t t )
+ { QF_STACK_PUSH(ThreadedSocketAcceptor::addThread)
+
+ Locker l(m_mutex);
+@@ -228,7 +228,7 @@
+ stream << "Accepted connection from " << socket_peername( socket ) << " on port " << port;
+ pAcceptor->onEvent( stream.str() );
+
+- unsigned thread;
++ pthread_t thread;
+ if ( !thread_spawn( &socketConnectionThread, info, thread ) )
+ delete info;
+ pAcceptor->addThread( socket, thread );
+--- src/C++/ThreadedSocketAcceptor.h.orig 2006-04-27 08:45:34.000000000 -0600
++++ src/C++/ThreadedSocketAcceptor.h 2009-12-01 23:54:10.000000000 -0700
+@@ -72,7 +72,7 @@
+ typedef std::set < SessionID > Sessions;
+ typedef std::map < int, Sessions > PortToSessions;
+ typedef std::map < int, int > SocketToPort;
+- typedef std::map < int, int > SocketToThread;
++ typedef std::map < int, pthread_t > SocketToThread;
+
+ void onConfigure( const SessionSettings& ) throw ( ConfigError );
+ void onInitialize( const SessionSettings& ) throw ( RuntimeError );
+@@ -81,7 +81,7 @@
+ bool onPoll();
+ void onStop();
+
+- void addThread( int s, int t );
++ void addThread( int s, pthread_t t );
+ void removeThread( int s );
+ static THREAD_PROC socketAcceptorThread( void* p );
+ static THREAD_PROC socketConnectionThread( void* p );
+--- src/C++/ThreadedSocketInitiator.cpp.orig 2006-09-13 14:47:22.000000000 -0600
++++ src/C++/ThreadedSocketInitiator.cpp 2009-12-01 23:55:30.000000000 -0700
+@@ -162,7 +162,7 @@
+
+ {
+ Locker l( m_mutex );
+- unsigned thread;
++ pthread_t thread;
+ if ( !thread_spawn( &socketThread, pair, thread ) )
+ delete pair;
+ addThread( socket, thread );
+@@ -174,7 +174,7 @@
+ QF_STACK_POP
+ }
+
+-void ThreadedSocketInitiator::addThread( int s, int t )
++void ThreadedSocketInitiator::addThread( int s, pthread_t t )
+ { QF_STACK_PUSH(ThreadedSocketInitiator::addThread)
+
+ Locker l(m_mutex);
+--- src/C++/ThreadedSocketInitiator.h.orig 2006-01-26 11:33:35.000000000 -0700
++++ src/C++/ThreadedSocketInitiator.h 2009-12-01 23:56:12.000000000 -0700
+@@ -48,7 +48,7 @@
+ virtual ~ThreadedSocketInitiator();
+
+ private:
+- typedef std::map < int, int > SocketToThread;
++ typedef std::map < int, pthread_t > SocketToThread;
+ typedef std::map < SessionID, int > SessionToHostNum;
+ typedef std::pair < ThreadedSocketInitiator*, ThreadedSocketConnection* > ThreadPair;
+
+@@ -61,7 +61,7 @@
+
+ bool doConnect( const SessionID& s, const Dictionary& d );
+
+- void addThread( int s, int t );
++ void addThread( int s, pthread_t t );
+ void removeThread( int s );
+ static THREAD_PROC socketThread( void* p );
+
+--- src/C++/Utility.h.orig 2006-09-13 17:23:18.000000000 -0600
++++ src/C++/Utility.h 2009-12-02 00:03:14.000000000 -0700
+@@ -136,11 +136,11 @@
+ #define THREAD_PROC void *
+ #endif
+
+-bool thread_spawn( THREAD_START_ROUTINE func, void* var, unsigned& thread );
++bool thread_spawn( THREAD_START_ROUTINE func, void* var, pthread_t& thread );
+ bool thread_spawn( THREAD_START_ROUTINE func, void* var );
+-void thread_join( unsigned thread );
+-void thread_detach( unsigned thread );
+-unsigned thread_self();
++void thread_join( pthread_t thread );
++void thread_detach( pthread_t thread );
++pthread_t thread_self();
+
+ void process_sleep( double s );
+
+--- src/C++/Utility.cpp.orig 2006-08-23 16:32:42.000000000 -0600
++++ src/C++/Utility.cpp 2009-12-02 00:03:03.000000000 -0700
+@@ -442,7 +442,7 @@
+ QF_STACK_POP
+ }
+
+-bool thread_spawn( THREAD_START_ROUTINE func, void* var, unsigned& thread )
++bool thread_spawn( THREAD_START_ROUTINE func, void* var, pthread_t& thread )
+ {
+ #ifdef _MSC_VER
+ unsigned int result = 0;
+@@ -453,47 +453,46 @@
+ pthread_t result = 0;
+ if( pthread_create( &result, 0, func, var ) != 0 ) return false;
+ #endif
+- thread = (unsigned)result;
++ thread = result;
+ return true;
+ }
+
+ bool thread_spawn( THREAD_START_ROUTINE func, void* var )
+-{ unsigned thread = 0;
++{ pthread_t thread = 0;
+ return thread_spawn( func, var, thread );
+ }
+
+-void thread_join( unsigned thread )
++void thread_join( pthread_t thread )
+ { QF_STACK_PUSH(thread_join)
+
+ #ifdef _MSC_VER
+ WaitForSingleObject( ( void* ) thread, INFINITE );
+ CloseHandle((HANDLE)thread);
+ #else
+- pthread_join( ( pthread_t ) thread, 0 );
++ pthread_join( thread, 0 );
+ #endif
+
+ QF_STACK_POP
+ }
+
+-void thread_detach( unsigned thread )
++void thread_detach( pthread_t thread )
+ { QF_STACK_PUSH(thread_detach)
+
+ #ifdef _MSC_VER
+ CloseHandle((HANDLE)thread);
+ #else
+- pthread_t t = (pthread_t)thread;
+- pthread_detach( t );
++ pthread_detach( thread );
+ #endif
+
+ QF_STACK_POP
+ }
+
+-unsigned thread_self()
++pthread_t thread_self()
+ {
+ #ifdef _MSC_VER
+ return ( unsigned ) GetCurrentThread();
+ #else
+- return ( unsigned ) pthread_self();
++ return pthread_self();
+ #endif
+ }
+
+--- src/C++/CallStack.h.orig 2006-07-09 18:12:46.000000000 -0600
++++ src/C++/CallStack.h 2009-12-02 00:08:00.000000000 -0700
+@@ -105,8 +105,8 @@
+ static Context& getContext();
+ static Context& getErrorContext();
+
+- static std::map<unsigned, Context> s_stack;
+- static std::map<unsigned, Context> s_error;
++ static std::map<pthread_t, Context> s_stack;
++ static std::map<pthread_t, Context> s_error;
+ static Mutex s_mutex;
+ };
+
+--- src/C++/CallStack.cpp.orig 2006-01-26 11:33:35.000000000 -0700
++++ src/C++/CallStack.cpp 2009-12-02 00:10:59.000000000 -0700
+@@ -29,8 +29,8 @@
+
+ namespace FIX
+ {
+- std::map<unsigned, CallStack::Context> CallStack::s_stack;
+- std::map<unsigned, CallStack::Context> CallStack::s_error;
++ std::map<pthread_t, CallStack::Context> CallStack::s_stack;
++ std::map<pthread_t, CallStack::Context> CallStack::s_error;
+ Mutex CallStack::s_mutex;
+ int CallStack::Ignore::s_count = 0;
+
+@@ -63,7 +63,7 @@
+ void CallStack::output()
+ {
+ Locker locker(s_mutex);
+- std::map<unsigned, CallStack::Context>::iterator i;
++ std::map<pthread_t, CallStack::Context>::iterator i;
+ for( i = s_error.begin(); i != s_error.end(); ++i )
+ {
+ Context& c = i->second;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20091207/ddeafbff/attachment-0001.html>
More information about the macports-changes
mailing list