summaryrefslogtreecommitdiff
path: root/README
diff options
context:
space:
mode:
Diffstat (limited to 'README')
-rw-r--r--README91
1 files changed, 79 insertions, 12 deletions
diff --git a/README b/README
index b7eafdf..70810ce 100644
--- a/README
+++ b/README
@@ -67,33 +67,100 @@ application, then any functions that you define that are
intended to be called via pthread_cleanup_push() must be
__cdecl.
-Note 3: the intention is to also name either the VC or GC
+Note 3: the intention was to also name either the VC or GC
version (it should be arbitrary) as pthread.dll, including
-pthread.lib and libpthread.a as appropriate.
+pthread.lib and libpthread.a as appropriate. This is no longer
+likely to happen.
+
+Note 4: the compatibility number was added so that applications
+can differentiate between binary incompatible versions of the
+libs and dlls.
In general:
- pthread[VG]{SE,CE,C}.dll
- pthread[VG]{SE,CE,C}.lib
+ pthread[VG]{SE,CE,C}c.dll
+ pthread[VG]{SE,CE,C}c.lib
where:
[VG] indicates the compiler
- V - MS VC
+ V - MS VC, or
G - GNU C
{SE,CE,C} indicates the exception handling scheme
- SE - Structured EH
- CE - C++ EH
+ SE - Structured EH, or
+ CE - C++ EH, or
C - no exceptions - uses setjmp/longjmp
+ c - DLL compatibility number indicating ABI and API
+ compatibility with applications built against
+ any snapshot with the same compatibility number.
+ See 'Version numbering' below.
+
For example:
pthreadVSE.dll (MSVC/SEH)
pthreadGCE.dll (GNUC/C++ EH)
pthreadGC.dll (GNUC/not dependent on exceptions)
+ pthreadVC1.dll (MSVC/not dependent on exceptions - not binary
+ compatible with pthreadVC.dll)
+
+The GNU library archive file names have correspondingly changed to:
+
+ libpthreadGCEc.a
+ libpthreadGCc.a
+
+
+Versioning numbering
+--------------------
+
+Version numbering is separate from the snapshot dating system, and
+is the canonical version identification system embedded within the
+DLL using the Microsoft version resource system. The versioning
+system chosen follows the GNU Libtool system. See
+http://www.gnu.org/software/libtool/manual.html section 6.2.
+
+See the resource file 'version.rc'.
+
+Microsoft version numbers use 4 integers:
+
+ 0.0.0.0
+
+Pthreads-win32 uses the first 3 following the Libtool convention.
+The fourth is commonly used for the build number, but will be reserved
+for future use.
+
+ current.revision.age.0
+
+The numbers are changed as follows:
+
+1. Start with version information of '0.0.0.0'.
+2. If the library source code has changed at all since the last update,
+ then increment revision (`c:r:a' becomes `c:r+1:a').
+3. If any interfaces have been added, removed, or changed since the last
+ update, increment current, and set revision to 0.
+4. If any interfaces have been added since the last public release, then
+ increment age.
+5. If any interfaces have been removed since the last public release, then
+ set age to 0.
+
+
+DLL compatibility numbering is an attempt to ensure that applications
+always load a compatible pthreads-win32 DLL by using a DLL naming system
+that is consistent with the version numbering system. It also allows
+older and newer DLLs to coexist in the same filesystem so that older
+applications can continue to be used. For pre .NET Windows systems,
+this inevitably requires incompatible versions of the same DLLs to have
+different names.
+
+Pthreads-win32 has adopted the Cygwin convention of appending a single
+integer number to the DLL name. The number used is based on the library
+version number and is computed as 'current' - 'age'.
-The GNU library archive file names have changed to:
+(See http://home.att.net/~perlspinr/libversioning.html for a nicely
+detailed explanation.)
- libpthreadGCE.a
- libpthreadGC.a
+Using this method, DLL name/s will only change when the DLL's
+backwards compatibility changes. Note that the addition of new
+'interfaces' will not change the DLL's compatibility for older
+applications.
Which of the several dll versions to use?
@@ -103,8 +170,8 @@ or,
What are all these pthread*.dll and pthread*.lib files?
-------------------------------------------------------
-Simple, use either pthreadGC.* if you use GCC, or pthreadVC.* if you
-use MSVC.
+Simple, use either pthreadGCv.* if you use GCC, or pthreadVCv.* if you
+use MSVC - where 'v' is the DLL versioning (compatibility) number.
Otherwise, you need to choose carefully and know WHY.