OSDN Git Service

Implement POSIX.1-2004 Monotonic Clock.
[pf3gnuchains/sourceware.git] / winsup / cygwin / include / cygwin / version.h
1 /* version.h -- Cygwin version numbers and accompanying documentation.
2
3    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
4    2005, 2006, 2007, 2008, 2009, 2010 Red Hat, Inc.
5
6 This file is part of Cygwin.
7
8 This software is a copyrighted work licensed under the terms of the
9 Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
10 details. */
11
12 /* Cygwin versioning is relatively complicated because of its status
13    as a shared library.  Let's start with how versioning used to be done.
14
15    Historical versioning in Cygwin 16.0 to 19.5:
16
17    In the olden days of Cygwin, we had a dll major and minor version
18    and a registry version.  The major number started at 16 because the
19    "b15" GNU-Win32 release of the compiler tools was out when this
20    scheme was started.  We incremented the DLL name frequently (for
21    every official release) and towards the end of this period every
22    release used a different shared memory area to prevent DLLs from
23    interfering with each other (embedding a build timestamp into the
24    name of the shared memory area).  This turned out to be a Bad Idea
25    (tm) because people needed to mingle separate releases and have
26    them work together more than we thought they would.  This was
27    especially problematic when tty info needed to be retained when an
28    old Cygwin executable executed a newer one.
29
30    In the old scheme, we incremented the major number whenever a
31    change to the dll invalidated existing executables.  This can
32    happen for a number of reasons, including when functions are
33    removed from the export list of the dll.  The minor number was
34    incremented when a change was made that we wanted to record, but
35    that didn't invalidate existing executables.  Both numbers were
36    recorded in the executable and in the dll.
37
38    In October 1998 (starting with Cygwin 19.6), we started a new method
39    of Cygwin versioning: */
40
41       /* The DLL major and minor numbers correspond to the "version of
42          the Cygwin shared library".  This version is used to track important
43          changes to the DLL and is mainly informative in nature. */
44
45 #define CYGWIN_VERSION_DLL_MAJOR 1007
46 #define CYGWIN_VERSION_DLL_MINOR 5
47
48       /* Major numbers before CYGWIN_VERSION_DLL_EPOCH are
49          incompatible. */
50
51 #define CYGWIN_VERSION_DLL_EPOCH 19
52
53       /* CYGWIN_VERSION_DLL_COMBINED gives us a single number
54          representing the combined DLL major and minor numbers. */
55
56       /* WATCH OUT FOR OCTAL!  Don't use, say, "00020" for 0.20 */
57
58 #define CYGWIN_VERSION_DLL_MAKE_COMBINED(maj, min) (((maj) * 1000) + min)
59 #define CYGWIN_VERSION_DLL_COMBINED \
60   CYGWIN_VERSION_DLL_MAKE_COMBINED (CYGWIN_VERSION_DLL_MAJOR, CYGWIN_VERSION_DLL_MINOR)
61
62      /* Every version of cygwin <= this uses an old, incorrect method
63         to determine signal masks. */
64
65 #define CYGWIN_VERSION_PER_PROCESS_API_VERSION_COMBINED(u) \
66   CYGWIN_VERSION_DLL_MAKE_COMBINED ((u)->api_major, (u)->api_minor)
67
68 #define CYGWIN_VERSION_USER_API_VERSION_COMBINED \
69   CYGWIN_VERSION_PER_PROCESS_API_VERSION_COMBINED (user_data)
70
71     /* API versions <= this had a termios structure whose members were
72        too small to accomodate modern settings. */
73 #define CYGWIN_VERSION_DLL_OLD_TERMIOS          5
74 #define CYGWIN_VERSION_DLL_IS_OLD_TERMIOS \
75   (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= CYGWIN_VERSION_DLL_OLD_TERMIOS)
76
77 #define CYGWIN_VERSION_DLL_MALLOC_ENV           28
78      /* Old APIs had getc/putc macros that conflict with new CR/LF
79         handling in the stdio buffers */
80 #define CYGWIN_VERSION_OLD_STDIO_CRLF_HANDLING \
81   (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 20)
82
83 #define CYGWIN_VERSION_CHECK_FOR_S_IEXEC \
84   (CYGWIN_VERSION_USER_API_VERSION_COMBINED >= 36)
85
86 #define CYGWIN_VERSION_CHECK_FOR_OLD_O_NONBLOCK \
87   (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 28)
88
89 #define CYGWIN_VERSION_CHECK_FOR_USING_BIG_TYPES \
90   (CYGWIN_VERSION_USER_API_VERSION_COMBINED >= 79)
91
92 #define CYGWIN_VERSION_CHECK_FOR_USING_ANCIENT_MSGHDR \
93   (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 138)
94
95 #define CYGWIN_VERSION_CHECK_FOR_USING_WINSOCK1_VALUES \
96   (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 138)
97
98 #define CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ \
99   (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 161)
100
101 #define CYGWIN_VERSION_CHECK_FOR_OLD_CTYPE \
102   (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 209)
103
104 #define CYGWIN_VERSION_USE_PSEUDO_RELOC_IN_DLL(u) \
105   (CYGWIN_VERSION_PER_PROCESS_API_VERSION_COMBINED (u) >= 227)
106
107 #define CYGWIN_VERSION_CYGWIN_CONV 181
108
109      /* API_MAJOR 0.0: Initial version.  API_MINOR changes:
110         1: Export cygwin32_ calls as cygwin_ as well.
111         2: Export j1, jn, y1, yn.
112         3: Export dll_noncygwin_dllcrt0.
113         4: New socket ioctls, revamped ifconf support.
114         5: Thread support/exports.
115         6: Change in termios handling.
116         7: Export scandir and alphasort.
117         8: Export _ctype_, _sys_errlist, _sys_nerr.
118         9: Mount-related changes, new cygwin_umount export.
119            Raw device support (tape, floppies).
120        10: Fast math routine support added.
121        11: Export seekdir, telldir.
122        12: Export pthread_join, pthread_detach.
123        13: Export math funcs gamma and friends, also _j0, _j1, etc.
124        14: Export snprintf and vnsprintf.
125        15: Export glob
126        16: Export cygwin_stackdump
127        17: Export fast math stuff
128        18: Stop exporting _strace_wm
129        19: Export fchown, lchown, lacl
130        20: regsub, inet_network
131        21: incompatible change to stdio cr/lf and buffering
132        22: Export cygwin_logon_user, cygwin_set_impersonation_token.
133            geteuid, getegid return effective uid/gid.
134            getuid, getgid return real uid/gid.
135            seteuid, setegid set only effective uid/gid.
136            setuid, setgid set effective and real uid/gid.
137        23: Export new dll_crt0 interface and cygwin_user_data for use
138            with crt0 startup code.
139        24: Export poll and _poll.
140        25: Export getmode and _getmode.
141        26: CW_GET_CYGDRIVE_PREFIXES addition to external.cc
142        27: CW_GETPINFO_FULL addition to external.cc
143        28: Accidentally bumped by cgf
144        29: Export hstrerror
145        30: CW_GET_CYGDRIVE_INFO addition to external.cc
146        31: Export inet_aton
147        32: Export getrlimit/setrlimit
148        33: Export setlogmask
149        34: Separated out mount table
150        35: Export drand48, erand48, jrand48, lcong48, lrand48,
151            mrand48, nrand48, seed48, and srand48.
152        36: Added _cygwin_S_IEXEC, et al
153        37: [f]pathconv support _PC_POSIX_PERMISSIONS and _PC_POSIX_SECURITY
154        38: vscanf, vscanf_r, and random pthread functions
155        39: asctime_r, ctime_r, gmtime_r, localtime_r
156        40: fchdir
157        41: __signgam
158        42: sys_errlist, sys_nerr
159        43: sigsetjmp, siglongjmp fixed
160        44: Export dirfd
161        45: perprocess change, gamma_r, gammaf_r, lgamma_r, lgammaf_r
162        46: Remove cygwin_getshared
163        47: Report EOTWarningZoneSize in struct mtget.
164        48: Export "posix" regex functions
165        49: Export setutent, endutent, utmpname, getutent, getutid, getutline.
166        50: Export fnmatch.
167        51: Export recvmsg, sendmsg.
168        52: Export strptime
169        53: Export strlcat, strlcpy.
170        54: Export __fpclassifyd, __fpclassifyf, __signbitd, __signbitf.
171        55: Export fcloseall, fcloseall_r.
172        56: Make ntsec on by default.
173        57: Export setgroups.
174        58: Export memalign, valloc, malloc_trim, malloc_usable_size, mallopt,
175            malloc_stats
176        59: getsid
177        60: MSG_NOSIGNAL
178        61: Export getc_unlocked, getchar_unlocked, putc_unlocked,
179            putchar_unlocked
180        62: Erroneously bumped
181        63: Export pututline
182        64: Export fseeko, ftello
183        65: Export siginterrupt
184        66: Export nl_langinfo
185        67: Export pthread_getsequence_np
186        68: Export netdb stuff
187        69: Export strtof
188        70: Export asprintf, _asprintf_r, vasprintf, _vasprintf_r
189        71: Export strerror_r
190        72: Export nanosleep
191        73: Export setreuid32, setreuid, setregid32, setregid
192        74: Export _strtold a64l hcreate hcreate_r hdestroy hdestroy_r hsearch
193                   hsearch_r isblank iswalnum iswalpha iswblank iswcntrl iswctype
194                   iswdigit iswgraph iswlower iswprint iswpunct iswspace iswupper
195                   iswxdigit l64a mbrlen mbrtowc mbsinit mbsrtowcs mempcpy
196                   on_exit setbuffer setlinebuf strndup strnlen tdelete tdestroy
197                   tfind towctrans towlower towupper tsearch twalk wcrtomb wcscat
198                   wcschr wcscpy wcscspn wcslcat wcslcpy wcsncat wcsncmp wcsncpy
199                   wcspbrk wcsrchr wcsrtombs wcsspn wcsstr wctob wctob wctrans
200                   wctype wmemchr wmemcmp wmemcpy wmemmove wmemset
201        75: Export exp2 exp2f fdim fdimf fma fmaf fmax fmaxf fmin fminf lrint
202                   lrintf lround lroundf nearbyint nearbyintf remquo remquof
203                   round roundf scalbln scalblnf sincos sincosf tgamma tgammaf
204                   truncf
205        76: mallinfo
206        77: thread-safe exit/at_exit
207        78: Use stat and fstat rather than _stat, and _fstat.
208            Export btowc and trunc.
209        79: Export acl32 aclcheck32 aclfrommode32 aclfrompbits32 aclfromtext32
210                   aclsort32 acltomode32 acltopbits32 acltotext32 facl32
211                   fgetpos64 fopen64 freopen64 fseeko64 fsetpos64 ftello64
212                   _open64 _lseek64 _fstat64 _stat64 mknod32
213        80: Export pthread_rwlock stuff
214        81: CW_CHECK_NTSEC addition to external.cc
215        82: Export wcscoll wcswidth wcwidth
216        83: Export gethostid
217        84: Pty open allocates invisible console.  64 bit interface
218        85: Export new 32/64 functions from API 0.79 only with leading
219            underscore.  No problems with backward compatibility since no
220            official release has been made so far.  This change removes
221            exported symbols like fopen64, which might confuse configure.
222        86: Export ftok
223        87: Export vsyslog
224        88: Export _getreent
225        89: Export __mempcpy
226        90: Export _fopen64
227        91: Export argz_add argz_add_sep argz_append argz_count argz_create
228            argz_create_sep argz_delete argz_extract argz_insert
229            argz_next argz_replace argz_stringify envz_add envz_entry
230            envz_get envz_merge envz_remove envz_strip
231        92: Export getusershell, setusershell, endusershell
232        93: Export daemon, forkpty, openpty, iruserok, ruserok, login_tty,
233            openpty, forkpty, revoke, logwtmp, updwtmp
234        94: Export getopt, getopt_long, optarg, opterr, optind, optopt,
235            optreset, __check_rhosts_file, __rcmd_errstr.
236        95: Export shmat, shmctl, shmdt, shmget.
237        96: CW_GET_ERRNO_FROM_WINERROR addition to external.cc
238        97: Export sem_open, sem_close, sem_timedwait, sem_getvalue.
239        98: Export _tmpfile64.
240        99: CW_GET_POSIX_SECURITY_ATTRIBUTE addition to external.cc.
241       100: CW_GET_SHMLBA addition to external.cc.
242       101: Export err, errx, verr, verrx, warn, warnx, vwarn, vwarnx.
243       102: CW_GET_UID_FROM_SID and CW_GET_GID_FROM_SID addition to external.cc.
244       103: Export getprogname, setprogname.
245       104: Export msgctl, msgget, msgrcv, msgsnd, semctl, semget, semop.
246       105: Export sigwait.
247       106: Export flock.
248       107: Export fcntl64.
249       108: Remove unused (hopefully) reent_data export.
250       109: Oh well.  Someone uses reent_data.
251       110: Export clock_gettime, sigwaitinfo, timer_create, timer_delete,
252            timer_settime
253       111: Export sigqueue, sighold.
254       112: Redefine some mtget fields.
255       113: Again redefine some mtget fields.  Use mt_fileno and mt_blkno as
256            on Linux.
257       114: Export rand_r, ttyname_r.
258       115: Export flockfile, ftrylockfile, funlockfile, getgrgid_r, getgrnam_r,
259            getlogin_r.
260       116: Export atoll.
261       117: Export utmpx functions, Return utmp * from pututent.
262       118: Export getpriority, setpriority.
263       119: Export fdatasync.
264       120: Export basename, dirname.
265       122: Export statvfs, fstatvfs.
266       123: Export utmpxname.
267       124: Add MAP_AUTOGROW flag to mmap.
268       125: LD_PRELOAD/CW_HOOK available.
269       126: Export lsearch, lfind, timer_gettime.
270       127: Export sigrelese.
271       128: Export pselect.
272       129: Export mkdtemp.
273       130: Export strtoimax, strtoumax, llabs, imaxabs, lldiv, imaxdiv.
274       131: Export inet_ntop, inet_pton.
275       132: Add GLOB_LIMIT flag to glob.
276       133: Export __getline, __getdelim.
277       134: Export getline, getdelim.
278       135: Export pread, pwrite
279       136: Add TIOCMBIS/TIOCMBIC ioctl codes.
280       137: fts_children, fts_close, fts_get_clientptr, fts_get_stream,
281            fts_open, fts_read, fts_set, fts_set_clientptr, ftw, nftw.
282       138: Export readdir_r.
283       139: Start using POSIX definition of struct msghdr and WinSock2
284            IPPROTO_IP values.
285       140: Export mlock, munlock.
286       141: Export futimes, lutimes.
287       142: Export memmem
288       143: Export clock_getres, clock_setres
289       144: Export timelocal, timegm.
290       145: Add MAP_NORESERVE flag to mmap.
291       146: Change SI_USER definition.  FIXME: Need to develop compatibility
292            macro for this?
293       147: Eliminate problematic d_ino from dirent structure.  unsetenv now
294            returns int, as per linux.
295       148: Add open(2) flags O_SYNC, O_RSYNC, O_DSYNC and O_DIRECT.
296       149: Add open(2) flag O_NOFOLLOW.
297       150: Export getsubopt.
298       151: Export __opendir_with_d_ino
299       152: Revert to having d_ino in dirent unconditionally.
300       153: Export updwtmpx, Implement CW_SETUP_WINENV.
301       154: Export sigset, sigignore.
302       155: Export __isinff, __isinfd, __isnanf, __isnand.
303       156: Export __srbuf_r, __swget_r.
304       157: Export gai_strerror, getaddrinfo, getnameinfo, freeaddrinfo,
305            in6addr_any, in6addr_loopback.
306       158: Export bindresvport, bindresvport_sa, iruserok_sa, rcmd_af,
307            rresvport_af.
308       159: Export posix_openpt.
309       160: Export posix_fadvise, posix_fallocate.
310       161: Export resolver functions.
311       162: New struct ifreq.  Export if_nametoindex, if_indextoname,
312            if_nameindex, if_freenameindex.
313       163: Export posix_madvise, posix_memalign.
314       164: Export shm_open, shm_unlink.
315       165: Export mq_close, mq_getattr, mq_notify, mq_open, mq_receive,
316            mq_send, mq_setattr, mq_timedreceive, mq_timedsend, mq_unlink.
317       166: Export sem_unlink.
318       167: Add st_birthtim to struct stat.
319       168: Export asnprintf, dprintf, _Exit, vasnprintf, vdprintf.
320       169: Export confstr.
321       170: Export insque, remque.
322       171: Export exp10, exp10f, pow10, pow10f, strcasestr, funopen,
323            fopencookie.
324       172: Export getifaddrs, freeifaddrs.
325       173: Export __assert_func.
326       174: Export stpcpy, stpncpy.
327       175: Export fdopendir.
328       176: Export wcstol, wcstoll, wcstoul, wcstoull, wcsxfrm.
329       177: Export sys_sigabbrev
330       178: Export wcpcpy, wcpncpy.
331       179: Export _f_llrint, _f_llrintf, _f_llrintl, _f_lrint, _f_lrintf,
332            _f_lrintl, _f_rint, _f_rintf, _f_rintl, llrint, llrintf, llrintl,
333            rintl, lrintl, and redirect exports of lrint, lrintf, rint, rintf.
334       180: Export getxattr, lgetxattr, fgetxattr, listxattr, llistxattr,
335            flistxattr, setxattr, lsetxattr, fsetxattr, removexattr,
336            lremovexattr, fremovexattr.
337       181: Export cygwin_conv_path, cygwin_create_path, cygwin_conv_path_list.
338       182: Export lockf.
339       FIXME: Removed 12 year old and entirely wrong wprintf function at
340            this point.  We need a working implementation soon.
341       183: Export open_memstream, fmemopen.
342       184: Export openat, faccessat, fchmodat, fchownat, fstatat, futimesat,
343            linkat, mkdirat, mkfifoat, mknodat, readlinkat, renameat, symlinkat,
344            unlinkat.
345       185: Export futimens, utimensat.
346       186: Remove ancient V8 regexp functions.  Also eliminate old crt0 interface
347            which provided its own user_data structure.
348       187: Export cfmakeraw.
349       188: Export CW_SET_PRIV_KEY.
350       189: Implement dirent.d_type.
351       190: Export fgetwc, fgetws, fputwc, fputws, fwide, getwc, getwchar,
352            putwc, putwchar, ungetwc.
353       191: Export glob_pattern_p
354       192: CW_SETERRNO added
355       193: Export wcstok.
356       194: fcntl.h flags O_DIRECTORY, O_EXEC and O_SEARCH added.
357       195: Export wcstod, wcstof.
358       196: Export wcsnlen.
359       197: Export wcstoimax, wcstoumax.
360       198: Export reallocf.
361       199: Export open_wmemstream.
362       200: Export mbsnrtowcs, wcsnrtombs.
363       201: Export wprintf, fwprintf, swprintf, vwprintf, vfwprintf, vswprintf.
364       202: Export gethostbyname2.
365       203: Export wcsftime.
366       204: recv/send flag MSG_DONTWAIT added.
367       205: Export wscanf, fwscanf, swscanf, vwscanf, vfwscanf, vswscanf.
368       206: Export wcscasecmp, wcsncasecmp.
369       207: Export wcsdup.
370       208: Export log2, log2f.
371       209: Export wordexp, wordfree.
372       210: New ctype layout using variable ctype pointer.  Export __ctype_ptr__.
373       211: Export fpurge, mkstemps.
374       212: Add and export libstdc++ malloc wrappers.
375       213: Export canonicalize_file_name, eaccess, euidaccess.
376       214: Export execvpe, fexecve.
377       215: CW_EXIT_PROCESS added.
378       216: CW_SET_EXTERNAL_TOKEN added.
379       217: CW_GET_INSTKEY added.
380       218: Export get_nprocs, get_nprocs_conf, get_phys_pages, get_avphys_pages.
381       219: Export dup3, pipe2, O_CLOEXEC, F_DUPFD_CLOEXEC.
382       220: Export accept4, SOCK_CLOEXEC, SOCK_NONBLOCK.
383       221: Export strfmon.
384       222: CW_INT_SETLOCALE added.
385       223: SIGPWR added.
386       224: Export xdr* functions.
387       225: Export __xdr* functions.
388       226: Export __locale_mb_cur_max.
389       227: Add pseudo_reloc_start, pseudo_reloc_end, image_base to per_process.
390       228: CW_STRERROR added.
391       229: Add mkostemp, mkostemps.
392       230: Add CLOCK_MONOTONIC.
393      */
394
395      /* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
396
397 #define CYGWIN_VERSION_API_MAJOR 0
398 #define CYGWIN_VERSION_API_MINOR 230
399
400      /* There is also a compatibity version number associated with the
401         shared memory regions.  It is incremented when incompatible
402         changes are made to the shared memory region *or* to any named
403         shared mutexes, semaphores, etc.   The arbitrary starting
404         version was 0 (cygwin release 98r2).
405         Bump to 4 since this hasn't been rigorously updated in a
406         while.  */
407
408 #define CYGWIN_VERSION_SHARED_DATA 5
409
410      /* An identifier used in the names used to create shared objects.
411         The full names include the CYGWIN_VERSION_SHARED_DATA version
412         as well as this identifier. */
413
414 #define CYGWIN_VERSION_DLL_IDENTIFIER   "cygwin1"
415
416      /* The Cygwin mount table interface in the Win32 registry also
417         has a version number associated with it in case that is
418         changed in a non-backwards compatible fashion.  Increment this
419         version number whenever incompatible changes in mount table
420         registry usage are made.
421
422         1: Original number version.
423         2: New mount registry layout, system-wide mount accessibility.
424         3: The mount table is not in the registry anymore, but in /etc/fstab.
425      */
426
427 #define CYGWIN_VERSION_MOUNT_REGISTRY 3
428
429      /* Identifiers used in the Win32 registry. */
430
431 #define CYGWIN_INFO_CYGWIN_REGISTRY_NAME "Cygwin"
432 #define CYGWIN_INFO_PROGRAM_OPTIONS_NAME "Program Options"
433 #define CYGWIN_INFO_INSTALLATIONS_NAME   "Installations"
434
435      /* The default cygdrive prefix. */
436
437 #define CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX "/cygdrive"
438
439      /* In addition to the above version number strings, the build
440         process adds some strings that may be useful in
441         debugging/identifying a particular Cygwin DLL:
442
443         The mkvers.sh script at the top level produces a .cc file
444         which initializes a cygwin_version structure based on the
445         above version information and creates a string table for
446         grepping via "fgrep '%%%' cygwinwhatever.dll" if you are
447         using GNU grep.  Otherwise you may want to do a
448         "strings cygwinwhatever.dll | fgrep '%%%'" instead.
449
450         This will produce output such as:
451
452         %%% Cygwin dll_identifier: cygwin
453         %%% Cygwin api_major: 0
454         %%% Cygwin api_minor: 0
455         %%% Cygwin dll_major: 19
456         %%% Cygwin dll_minor: 6
457         %%% Cygwin shared_data: 1
458         %%% Cygwin registry: b15
459         %%% Cygwin build date: Wed Oct 14 16:26:51 EDT 1998
460         %%% Cygwin shared id: cygwinS1
461
462         This information can also be obtained through a call to
463         cygwin_internal (CW_GETVERSIONINFO).
464      */
465
466 #define CYGWIN_VERSION_MAGIC(a, b) ((unsigned) ((((unsigned short) a) << 16) | (unsigned short) b))
467 #define CYGWIN_VERSION_MAGIC_VERSION(a) ((unsigned) ((unsigned)a & 0xffff))