File: RELNOTES

package info (click to toggle)
jam 2.6.1-2.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,220 kB
  • sloc: ansic: 9,035; yacc: 443; sh: 121; makefile: 45
file content (1920 lines) | stat: -rw-r--r-- 64,406 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
===============================================================================
===============================================================================

Release notes for Jam 2.6.1
(aka Jam - make(1) redux)

1.  Release info:

	Jam 2.6.1
	June, 2019
	VERSION 2.6.1

2.  Changes since 2.6.1

	A ctrl-c will interrupt the build faster than before.

	VS2015+ build improvements.

	The Jambase date has been updated to match the last functional change.

===============================================================================
===============================================================================


Release notes for Jam 2.6
(aka Jam - make(1) redux)

1.  Release info:

	Jam 2.6
	August 7, 2014
	VERSION 2.6

	n.b. Jam 2.6 was updated from changes in our production jam which were
             transferred over to the workshop jam using the ptransfer.py tool.
             Since p4transfer.py retains the original change date/time, the new 
             changes are identified as those in the range of 9855 through 9953.

2.  Changes since 2.5

Change 9953 2003/06/11 

	var_string memory leak fix by Matt Armstrong.
	
	Bug fix to be documented in RELNOTES.
	
Change 9952 2006/04/11 

	Path handling fix for NT: use the delimiter (/ or \) that was found
	in the path to rebuild the path, rather than parsing at / and rebuilding
	at \.
	
Change 9951 2007/09/17 

	jam -j now builds all command line arguments concurrently,
	rather than doing one at a time.  From Craig Allsop.
	
Change 9950 2003/12/15 

	Jam's message "warning: foo depends on itself" now uses the
	current target name (t->name) rather than the target it is
	considering recursing towards (c->target->name).  This just gets
	the end of the loop rather than the beginning, which in the
	tricky case of loops caused by HdrRule's include file scanning,
	can be more accurate.  
	
Change 9949 2013/11/25 

	Build rules for jam on Darwin 9.0.
	
Change 9948 2013/11/15 

	Update build rules for AIX53.
	
Change 9947 2011/09/14 

	On a Windows debug build the /MT flag was used in addition to
	the /MTd flag.  Basically harmless except the compiler issued
	a warning for every file compiled.
	
	Removed the use of the /MT flag in the jambase arena.  This
	allows the Jamrules to properly set this flag as required.
	
	Also when doing a Smart Heap debug build, duplicate symbols
	in the Smart Heap library conflicted with the standard
	Windows CRT library.  Adding a /FORCE to the link line solves
	this problem.  This is a very narrow case and should not effect
	builds without Smart Heap.
	
	Jam must be rebuilt to remove the /MT and /MTd warning.
	
Change 9946 2011/08/30 

	Remove hard coded paths to the Visual Studio SDK libraries.
	
	As of Visual Studio 2008 and including 2010 the SDK libraries,
	like kernel32.lib, have been moved out of the VC directory
	structure.  These hard coded paths prevented jam from building.
	
	Test built jam with VS2005 x64 and x86, VS2010 x64 and x86
	with these new settings.
	
	Test built main/p4 in these combinations as well.

Change 9944 2007/09/06 

	Move the /MT flag for NET 2005 into jam's Jamfile and out
	of the Jambase file.  This removes the conflict with the
	various TYPE=dyn, TYPE=dyng and so on, yet compiles jam as
	multi threaded.
	
Change 9943 2007/09/05 

	Build jam on Windows using NET 2005 in X86 mode.
	This is the counter part to NET 2005 in X64 mode.
	
Change 9941 2006/11/06 

	New jambase.c to follow new Jambase.
	
Change 9940 2005/07/29 

	Fix jam HdrRule change 79346 -- it has horrible combinatoric
	behavior when you have system include files that go like this:
	
		arpa/something includes
		sys/something includes
		machine/something includes
		sys/something-else
	
	Now HdrRule tries to be as conservative as possible to avoid
	building monster SEARCH lists.
	
	This is needed for AIX 5.3, where they apparently have such wild
	include mazes.
	
Change 9939 2005/07/29 

	An attempt at sorting out the various 64bit Windows builds.
	
	IA64 indicates the Intel Itanium 64bit Windows build.
	X64 indicates the AMD64 and the Intel EM64T 64bit Windows build.
	
	It should not be necessary to set MSVCVer or OSPLAT for these builds.
	
	Hopefully these changes didn't break the AMD64 Linux build.
	
Change 9938 2005/06/23 

	Jam changes for building on the AMD64 platform.  The .NET 2005
	beta2 compiler requires several flags.  First it is necessary
	to turn off the depreciation stuff, CRT functions like strcpy
	sprintf and so on are now viewed as insecure by MS.  For now it
	is still possible to use them with the correct application of
	compile flags.  MS is making noises in line with taking these
	functions away for good.
	
	The "Win64" token was used for 64 bit builds.  This is now a
	bit ambiguous since it covers x64, ia64 and em64t.  With this
	change Win64 has been retired and we use x64 for amd64, ia64
	for the Itanium and em64t for the extended memory processors.
	Set MSVCVer accordingly.  MSVCNT is set as always, to the
	location of the VC directory, VC98, VC7 and now just VC.
	
	For the most part the x64 build works on amd64, the exception
	being a template problem in nettcp.cc.  That problem will not
	be corrected in this change.
	
Change 9937 2005/06/17 

	jam and 2004.2 p4 client for AS/400. Built on AS/400 V5R2 with native 
	ILE C/C++ compiler. Note, this build reports itself as 
	P4/AS400/2004.2/76944 but this change contains porting changes that 
	were required to make the build work so the changelist number is incorrect. 
	This can be resolved with a clean build for 2005.1 at a later date.
	
	p4.sav and jam.sav are AS/400 "Save Files" that can be used to install
	the software on an AS/400 machine. The p4.sav file includes the p4.cmd
	and p4sync.cmd files we distributed with our older AS/400 builds. These
	files define a forms-type interface for supplying the parameters to the
	commands when you run them.
	
Change 9936 2005/05/06 

	Fix to HdrRule to handle '#include "path/file"': if the included
	file has a directory component, then SEARCH and HDRSEARCH are set
	to include the previous HDRSEARCH with 'path' appended. Without
	this, then any files included by "path/file" might not be found
	by jam, as it didn't know to look in the 'path' subdirectory.
	
	This is needed for p4v's central 'windows' include file.
	
Change 9935 2013/11/25 

	Build rules for jam on Darwin 9.0.

Change 9934 2010/07/15 

	Increase generic execcmd buffer to 20kib.

Change 9933 2008/10/02 

	zLinux porting changes. This is Linux running on an s390x platform,
	the x means 64-bit. The only change required was to ensure that 
	jam guessed the OSPLAT correctly.
	
	I left the old (32-bit) OSPLAT alone (390), but chose s390x for this
	one as that's what 'uname -a' reports.
	
	Porting change only.
	
Change 9932 2007/01/05 

	Make jam -dr an alias for jam -d+5 (turn on compile debugging).
	
Change 9931 2006/11/21 

	Bump VMS command line length to 2048 so that we can build
	the p4api.  Don't know the actual limit, but it appears not
	to be 1024 anymore.

Change 9930 2006/09/25 

	Define OSPLAT=SPARC64 if building as a sparcv9 binary.
	
Change 9929 2006/05/18 

	Set OSPLAT to X86_64 on non-windows adm64 platforms.
	Set OSPLAT to X86 even on FreeBSD et al.
	Report OSPLAT with jam -v.
	
	Now jam 2.5.2.

Change 9928 2005/07/29 

	An attempt at sorting out the various 64bit Windows builds.
	
	IA64 indicates the Intel Itanium 64bit Windows build.
	X64 indicates the AMD64 and the Intel EM64T 64bit Windows build.
	
	It should not be necessary to set MSVCVer or OSPLAT for these builds.
	
	Hopefully these changes didn't break the AMD64 Linux build.
	
Change 9927 2005/06/17 

	jam and 2004.2 p4 client for AS/400. Built on AS/400 V5R2 with native 
	ILE C/C++ compiler. Note, this build reports itself as 
	P4/AS400/2004.2/76944 but this change contains porting changes that 
	were required to make the build work so the changelist number is incorrect. 
	This can be resolved with a clean build for 2005.1 at a later date.
	
	p4.sav and jam.sav are AS/400 "Save Files" that can be used to install
	the software on an AS/400 machine. The p4.sav file includes the p4.cmd
	and p4sync.cmd files we distributed with our older AS/400 builds. These
	files define a forms-type interface for supplying the parameters to the
	commands when you run them.
	
Change 9926 2005/05/06 

	Maximum command line length now determined by execmax() function,
	which still just returns the compiled-in MAXLINE.

Change 9925 2004/09/07 

	Port Jam to Zeta. Zeta is a fork of BeOS so this port is
	broadly the same as the BeOS port.
	
Change 9924 2004/06/23 

	Nonstop unix changes from Kim Hae-Joo.
	
Change 9923 2004/05/06 

	FreeBSD 5/AMD64 porting changes.

Change 9922 2003/06/03 

	OpenBSD porting changes from Michael Champigny.
	
Change 9921 2003/04/19 

	HPUX 11 jam porting: a cast for exec() and include unistd.h.
	
Change 9920 2010/01/06 

	Updated the Copyright to 2010.
	
Change 9919 2007/01/05 

	Make jam -dr an alias for jam -d+5 (turn on compile debugging).
	
Change 9918 2006/05/18 

	Set OSPLAT to X86_64 on non-windows adm64 platforms.
	Set OSPLAT to X86 even on FreeBSD et al.
	Report OSPLAT with jam -v.
	
	Now jam 2.5.2.
	
Change 9917 2014/08/06 

	Take it to 2.6 for all the changes since 2.5 which are going to be rolled out to the workshop (public) site

Change 9916 2013/11/25 

	Build rules for jam on Darwin 9.0.
	
Change 9915 2013/11/15 

	Update build rules for AIX53.
	
Change 9913 2006/03/05 

	Use off_t instead of long for lseek(), as cygwin seems
	to get confused if you use a long.
	
	Bug fix documented in RELNOTES.
	
Change 9912 2005/06/17 

	jam and 2004.2 p4 client for AS/400. Built on AS/400 V5R2 with native 
	ILE C/C++ compiler. Note, this build reports itself as 
	P4/AS400/2004.2/76944 but this change contains porting changes that 
	were required to make the build work so the changelist number is incorrect. 
	This can be resolved with a clean build for 2005.1 at a later date.
	
	p4.sav and jam.sav are AS/400 "Save Files" that can be used to install
	the software on an AS/400 machine. The p4.sav file includes the p4.cmd
	and p4sync.cmd files we distributed with our older AS/400 builds. These
	files define a forms-type interface for supplying the parameters to the
	commands when you run them.
	
	Porting change only. No functional change.
	
Change 9911 2005/05/06 

	Compute max line length on windows by OS type using GetVersionEx()
	call in execmax() function.  Now instead of just 996 for the default,
	Win NT 4.0 and Win 2K get 2047, and Win XP and 2003+ get 8191.
	
	The wheels of progress grind slowly.
	
	Bumped JAMVERSION to 2.5.1.
	
	New feature documented in RELNOTES.

Change 9910 2004/09/07 

	Port Jam to Zeta. Zeta is a fork of BeOS so this port is
	broadly the same as the BeOS port.
	
Change 9909 2006/08/02 

	Header path name generation uses PATH_DELIM and not / on NT now.
	From Craig Allsop.
	
	Bug fix documented in RELNOTES.
	
Change 9908 2003/08/18 

	Better string table support in file_archscan (filent.c),
	to support GHS librarian.
	
	Porting change.
	
Change 9907 2014/04/02 

	Build jam without so many warnings on macosxx86_64.
	
Change 9906 2008/10/02 

	AS/400 Porting changes. Static variable intr wasn't declared on 
	AS/400. This was the only change required to build Jam on that
	platform.
	
Change 9905 2005/06/17 

	jam and 2004.2 p4 client for AS/400. Built on AS/400 V5R2 with native 
	ILE C/C++ compiler. Note, this build reports itself as 
	P4/AS400/2004.2/76944 but this change contains porting changes that 
	were required to make the build work so the changelist number is incorrect. 
	This can be resolved with a clean build for 2005.1 at a later date.
	
	p4.sav and jam.sav are AS/400 "Save Files" that can be used to install
	the software on an AS/400 machine. The p4.sav file includes the p4.cmd
	and p4sync.cmd files we distributed with our older AS/400 builds. These
	files define a forms-type interface for supplying the parameters to the
	commands when you run them.
	
Change 9904 2008/09/10 

	Port 2008.1 P4 to MVS Unix System Services. This is an onsite
	port carried out at Bank of America in Croydon. 
	
	It's not pretty. There are some uglies in here which could 
	probably be taken care of in better ways, but I was pressed
	for time. Here's the background to each of the issues I found:
	
	1. The compiler really didn't like our Zeroconf
	code, and since building Avahi on the mainframe wasn't top of
	my agenda, I disabled it with some heinous ifdef's in client.cc.
	Sorry. The compiler was bitching about types of arguments being
	passed to zeroconf methods, and it wasn't obvious to me what the
	problem was either. I think we could use a -DUSE_ZEROCONF in
	our Jamrules for occasions like this; that would be cleaner than
	a platform ifdef in client.cc. With more time, it might be 
	possible to make the zeroconf code compile on MVS, but getting
	dynamic loading working on that platform is ambitious I think.
	
	2. The mapping code needed ifdefs too (again, sorry!). On MVS,
	C and C++ don't share the same linkage and qsort() is a C function
	so it (apparently) can't take a pointer to a C++ function. So,
	all the qsort() compare functions have to be declared as
	'extern "C"'. See:
	
	http://publib.boulder.ibm.com/infocenter/zos/v1r9/index.jsp?topic=/com.ibm.zos.r9.bpxbd00/qsort.htm
	
	I didn't ifdef these as I don't think they'll do any harm on other
	platforms.
	
	3. support/random.cc needed an ifdef (no big deal)
	
	4. sys/netaddr.cc had to have a (correct) const removed since
	the MVS implementation of inet_addr takes a 'char *' argument
	instead of 'const char *'. I ifdef'd that to keep it clean
	on other platforms.
	
	5. zlib/zconf.h had some old pragmas that no longer apply. 
	
	6. Jamrules: I reinstated the old rules from MVS builds, and
	made EBCDIC optional rather than compulsory. I also 
	documented in it the environment variables we set to persuade
	the compilers on BofA's machine to behave. These may, or may not
	be required on other MVS boxes. No idea.
	
	Building Jam also had a few idiosyncracies:
	
	1. Best to assume the yacc on MVS is broken. It was there, but
	not in great shape. I disabled it in Jambase and I think that's
	a sensible thing to do going forward.
	
	2. yylineno() can't return a 'const int' on MVS. Not sure why
	it's defined that way on other platforms so I changed it to
	just returning an int. Hopefully that won't break elsewhere...
	
	
	There are three binaries being submitted here:
	
		jam			- built from main
		bin.mvs/p4		- EBCDIC client
		bin.mvs/ascii/p4	- Non-EBCDIC client
	
	The ascii client identifies itself as such:
	
		P4/MVS/2008.1.ascii/164042
	
	While unconventional, I thought that was the best plan so that
	if we take support calls on it, we'll get a clue.
	
Change 9903 2007/01/05 

	Jam -dr now reports file/line numbers, at no small effort.
	
Change 9902 2014/04/02 

	Build jam without so many warnings on macosxx86_64.
	
Change 9901 2005/05/06 

	Compute max line length on windows by OS type using GetVersionEx()
	call in execmax() function.  Now instead of just 996 for the default,
	Win NT 4.0 and Win 2K get 2047, and Win XP and 2003+ get 8191.
	
	The wheels of progress grind slowly.
	
	Bumped JAMVERSION to 2.5.1.
	
Change 9900 2005/05/06 

	Maximum command line length now determined by execmax() function,
	which still just returns the compiled-in MAXLINE.
	
Change 9899 2004/09/07 

	Port Jam to Zeta. Zeta is a fork of BeOS so this port is
	broadly the same as the BeOS port.
	
Change 9898 2003/04/19 

	HPUX 11 jam porting: a cast for exec() and include unistd.h
	
Change 9897 2011/03/17 

	(make1d): Honor -q flag even when DEBUG_MAKE is 0.
	
Change 9896 2005/05/06 

	Maximum command line length now determined by execmax() function,
	which still just returns the compiled-in MAXLINE.
	
Change 9895 2013/11/25 

	Build rules for jam on Darwin 9.0.

Change 9894 2013/11/15 

	Update build rules for AIX53.
	
Change 9893 2011/09/14 

	On a Windows debug build the /MT flag was used in addition to
	the /MTd flag.  Basically harmless except the compiler issued
	a warning for every file compiled.
	
	Removed the use of the /MT flag in the jambase arena.  This
	allows the Jamrules to properly set this flag as required.
	
	Also when doing a Smart Heap debug build, duplicate symbols
	in the Smart Heap library conflicted with the standard
	Windows CRT library.  Adding a /FORCE to the link line solves
	this problem.  This is a very narrow case and should not effect
	builds without Smart Heap.
	
	Jam must be rebuilt to remove the /MT and /MTd warning.
	
Change 9892 2011/08/17 

	Clarify that Windows VS Net settings work for 2005, 2008 and 2010.
	
Change 9891 2007/09/06 

	Move the /MT flag for NET 2005 into jam's Jamfile and out
	of the Jambase file.  This removes the conflict with the
	various TYPE=dyn, TYPE=dyng and so on, yet compiles jam as
	multi threaded.
	
Change 9887 2005/07/28 

	Add the _M_AMD64 flag to the amd64 build.  The rest does indeed
	produce x64 binaries as verified by dumpbin /headers p4d.exe.
	
	With change 81112, the x64 p4d.exe no longer faults.
	
Change 9886 2005/06/25 

	Change default build back to Unix from NT, correcting a previous mistake.
	
	Related to change 81710, amd64 build changes.
	
Change 9885 2005/06/23 

	Jam changes for building on the AMD64 platform.  The .NET 2005
	beta2 compiler requires several flags.  First it is necessary
	to turn off the depreciation stuff, CRT functions like strcpy
	sprintf and so on are now viewed as insecure by MS.  For now it
	is still possible to use them with the correct application of
	compile flags.  MS is making noises in line with taking these
	functions away for good.
	
	The "Win64" token was used for 64 bit builds.  This is now a
	bit ambiguous since it covers x64, ia64 and em64t.  With this
	change Win64 has been retired and we use x64 for amd64, ia64
	for the Itanium and em64t for the extended memory processors.
	Set MSVCVer accordingly.  MSVCNT is set as always, to the
	location of the VC directory, VC98, VC7 and now just VC.
	
	For the most part the x64 build works on amd64, the exception
	being a template problem in nettcp.cc.  That problem will not
	be corrected in this change.
	
Change 9883 2013/11/25 

	Build rules for jam on Darwin 9.0.
	
Change 9882 2013/11/15 

	Update build rules for AIX53.

Change 9881 2012/10/05 

	Eliminate hateful MSVCNT variable and the need to set it.
	Consolidate all the Visual Studio configuration sections.

Change 9880 2012/10/04 

	Add defaults for NT ARM.
	
Change 9879 2011/09/14 

	On a Windows debug build the /MT flag was used in addition to
	the /MTd flag.  Basically harmless except the compiler issued
	a warning for every file compiled.
	
	Removed the use of the /MT flag in the jambase arena.  This
	allows the Jamrules to properly set this flag as required.
	
	Also when doing a Smart Heap debug build, duplicate symbols
	in the Smart Heap library conflicted with the standard
	Windows CRT library.  Adding a /FORCE to the link line solves
	this problem.  This is a very narrow case and should not effect
	builds without Smart Heap.
	
	Jam must be rebuilt to remove the /MT and /MTd warning.
	
Change 9877 2011/05/07 

	*Significant* MD5 speedups
	
	This change requires a new Jambase, so, a new Jam, to take full
	advantage.
	
	Jambase: Now we handle local variables OPTIM, SUBDIRC++FLAGS, and
	SUBDIRCCFLAGS on targets correctly.  This was a change contemplated
	ages ago on the jamming@ mailing list but never committed.
	
	md5.cc: We no longer do byte-swabbing on temporary buffers,
	we use a union to treat buffers as char * or uint32 *. We have
	re-ordered the MD5STEP macros to be faster slightly based on
	Wei Dai's "Public Domain" crypto++ 5.6.1 routines.
	
	md5.h: We now align our buffers (per Wittenberg's recommendation) for
	those machines both where it's faster to do so. Windows will be next?
	
	Mostly reviewed by development.
	
	Infrastructure change.
	
Change 9876 2011/01/17 

	Add shell command definitions for MINGW.

Change 9875 2010/01/04 

	Added Objective-C and Objective-C++ support to the Jambase.
	
Change 9873 2008/06/12 

	Don't hardcode paths to SDK libraries on ia64.
	The LIB search path should come from the environment.
	
Change 9872 2008/06/12 

	Remove -D_CRT_SECURE_NO_DEPRECATE for ntia64.
	Not supported.
	
Change 9871 2008/02/01 

	Add settings for IA64 VS2005.
	
	Add /MT flags to other VS2005 sections and change libc.lib to libcmt.lib.
	VS2005 doesn't have libc.lib anymore.
	
	Remove \\$(I) ia64 hack from VS6 section and from the other sections in
	which it appears uninitialized.
	
Change 9869 2007/09/06 

	Move the /MT flag for NET 2005 into jam's Jamfile and out
	of the Jambase file.  This removes the conflict with the
	various TYPE=dyn, TYPE=dyng and so on, yet compiles jam as
	multi threaded.
	
Change 9866 2007/07/12 

	Use $(MSVCNT:J=" ") and $(MSVC:J=" ") when constructing paths, since
	spaces in the inherited environment variable are part of a scalar
	value (a file name), not separators within an array.
	
	This is probably still going to blow chunks if MSVCNT contains a
	path where there are two or more adjacent spaces somewhere (since
	the join will result in a nonexistent filename), but that's an
	unlikely case whereas single spaces in NT filenames are pervasive.
	To really do this right, Jam needs a way to treat variables
	inherited from the environment as a single value without any array
	tokenization.  At least sometimes.
	
	For the MSVC/MSVCNT special case actions Cc, C++, and Link: put quotes
	around the expansion of $(STDHDRS) and $(LINKLIBS) so the batch
	interpreter won't split space-embedded pathnames into multiple
	arguments.  Note that it's the operating system's command interpreter,
	not Jam, which needs the quoting against whitespace this time.
	Multiple values within these variables are still expanded correctly
	at the Jam level.
	
Change 9865 2006/10/09 

	* Build.com: Compile jamgram.c with /NOOPTIMIZE.
	  The V7.2-021 cxx compiler on VMS8.2/IA64 has trouble with the parser
	  produced by either (b)yacc or bison: when jamgram.c is compiled with
	  optimization levels at or above /OPTIMIZE=(LEVEL=2), jam.exe crashes
	  as soon as it begins to parse its internal copy of Jambase.  (The
	  default optmization level is /OPTIMIZE=(LEVEL=4), by the way.)
	
	* Build.com: Display commands in build.com as they are executed, since
	  there is no other progress notification.
	
	* Jambase ($(VMS)): Remove special cases for OS=OPENVMS and OS=VMS;
	  Newer compilers do not accept "vaxc" as a C dialect, and vaxcrtl.olb
	  does not exist on IA64.
	
	  There is no real difference between VMS and OPENVMS; the latter is
	  just marketingspeak.  Having both OS=VMS and OS=OPENVMS switches is
	  probably more confusing than helpful; if in the future these flags
	  need to be restored, consider using some combination of OSPLAT and/or
	  OSVER also.
	
Change 9863 2005/07/29 

	Fix jam HdrRule change 79346 -- it has horrible combinatoric
	behavior when you have system include files that go like this:
	
		arpa/something includes
		sys/something includes
		machine/something includes
		sys/something-else
	
	Now HdrRule tries to be as conservative as possible to avoid
	building monster SEARCH lists.
	
	This is needed for AIX 5.3, where they apparently have such wild
	include mazes.
	
Change 9859 2005/06/23 

	Jam changes for building on the AMD64 platform.  The .NET 2005
	beta2 compiler requires several flags.  First it is necessary
	to turn off the depreciation stuff, CRT functions like strcpy
	sprintf and so on are now viewed as insecure by MS.  For now it
	is still possible to use them with the correct application of
	compile flags.  MS is making noises in line with taking these
	functions away for good.
	
	The "Win64" token was used for 64 bit builds.  This is now a
	bit ambiguous since it covers x64, ia64 and em64t.  With this
	change Win64 has been retired and we use x64 for amd64, ia64
	for the Itanium and em64t for the extended memory processors.
	Set MSVCVer accordingly.  MSVCNT is set as always, to the
	location of the VC directory, VC98, VC7 and now just VC.
	
	For the most part the x64 build works on amd64, the exception
	being a template problem in nettcp.cc.  That problem will not
	be corrected in this change.
	
Change 9858 2005/06/17 

	Porting changes to support AS/400
	
Change 9857 2005/05/06 

	Fix to HdrRule to handle '#include "path/file"': if the included
	file has a directory component, then SEARCH and HDRSEARCH are set
	to include the previous HDRSEARCH with 'path' appended. Without
	this, then any files included by "path/file" might not be found
	by jam, as it didn't know to look in the 'path' subdirectory.
	
	This is needed for p4v's central 'windows' include file.
	

Change 9856 2003/12/09 

	Jam's Yacc rule now puts include dependencies on the generated
	.c rather than on the .y.
	
	Bug fix documented in RELNOTES.
	

Change 9855 2006/10/09 

	* Build.com: Compile jamgram.c with /NOOPTIMIZE.
	  The V7.2-021 cxx compiler on VMS8.2/IA64 has trouble with the parser
	  produced by either (b)yacc or bison: when jamgram.c is compiled with
	  optimization levels at or above /OPTIMIZE=(LEVEL=2), jam.exe crashes
	  as soon as it begins to parse its internal copy of Jambase.  (The
	  default optmization level is /OPTIMIZE=(LEVEL=4), by the way.)
	
	* Build.com: Display commands in build.com as they are executed, since
	  there is no other progress notification.
	
	* Jambase ($(VMS)): Remove special cases for OS=OPENVMS and OS=VMS;
	  Newer compilers do not accept "vaxc" as a C dialect, and vaxcrtl.olb
	  does not exist on IA64.
	
	  There is no real difference between VMS and OPENVMS; the latter is
	  just marketingspeak.  Having both OS=VMS and OS=OPENVMS switches is
	  probably more confusing than helpful; if in the future these flags
	  need to be restored, consider using some combination of OSPLAT and/or
	  OSVER also.


===============================================================================
===============================================================================


Release notes for Jam 2.5
(aka Jam - make(1) redux)

1.  Release info:

	Jam 2.5
	August 19, 2004
	VERSION 2.5

	(n.b. Jam 2.5 is merely Jam 2.5rc3 of April 2003 with the rc3
	moniker removed.)

2.  Compatibility

	Jam 2.5 is upward compatible with Jam 2.4

	The Jam 2.5 language is a superset of the 2.4 language;
	Jamfiles, Jambase, and other rulesets used in 2.4 can be used
	with the 2.5 language support.

3.  Changes since 2.4.

3.1.  Changes to Jam Language

	The 'return' statement now actually returns, and there are now
	break & continue statements for for & while loops.

3.2.  Jambase Changes

	MkDir now grists directories with 'dir', so that directory
	targets can be distinguished from other targets.

	SubDir now allows multiple overlapping roots (top level
	directories): the first SubDir of a new root uses the CWD of
	jam to set that root; subsquent SubDirs use the current SUBDIR
	to set the new root.  New FSubDirPath to compute a path (given
	SubDir arguments) and SubRules to include another root's
	Jamrules.  Jamrules only included if present; no error issued
	if no Jamrules file.

	Using SubDir to include a subpart of an SubDir tree now works.
	Previously, you could only include the root of another SubDir
	tree.  This example includes the ../server/support/Jamfile,
	without getting confused as to the current directory:

		SubDir ALL src builds ;
		SubInclude ALL src server support ;

	$(RMDIR) has been defined for NT and defaulted to $(RM) 
	everwhere else.  Not much tested.  For Michael Champigny.

	GenFile actions (on UNIX) now put . in the PATH for the execution
	of the command, so that (at least) when jam builds itself . does 
	not need to be in the global path.  It is the rare case where a
	target bound in the current directory can't be used directly,
	so we fudge it by setting PATH.

	Undocumented support for SUBDIRRULES, user-provided rules
	to invoke at the end of the SubDir rule, and SUBDIRRESET,
	SUBDIR variables to reset (like SUBDIRC++FLAGS, SUBDIRHDRS, etc)
	for each new SubDir.

3.3   'jam' Changes (See Jam.html)

	The whole /MR of Jam's name has been dropped.  It was intended
	to avoid trademark infringement of JYACC's JAM, but as far as
	we can tell (a) it wasn't enough to avoid infringement and (b)
	the trademark has lapsed anyhow.

	If header dependencies cause an object to be recompiled and
	the source file is a temporary, the temporary is now
	reconstructed.  Previously, headers weren't considered when
	deciding when to reconstruct a temporary.

	-d has been reworked to make it easier to display more useful
	tracing information separate from the debugging gunk:

		-da - show all actions (formerly -d2)
		-dc - show 'causes' for rebuilding (new output)
		-dd - show dependencies (new output)
		-dm - show make graph (aka -d3)
		-dx - show executable text (formerly -d2)

	-dd is new, and more display options are anticipated.

	-n now implies -dax.

	The message "...using xxx..." now only shows up with -da.

	Jam.html was extensively updated, in an attempt at lucidity.

3.4.  Jam internal code changes

	Removed spurious search() in 'on' statement handling, thanks
	(again) to Ingo Weinhold.

	Fix 'includes' support so that included files aren't treated
	as direct dependencies during the command execution phase.  If
	an included file failed to build, make1() would bypass the
	including file.  Now make0() appends each child's 'includes'
	onto its own 'depends' list, eliminating 'includes'-specific
	code in make0() and make1().

	Rewrite of the past: updated all jam's source with comments to
	reflect changes since about 2.3, very early 2001.


4.  Fixed bugs

	Fixed the description of the :E modifier in Jam.html.

	Setting target-specific variables while under the influence of
	the target's target-specific variables caused the _global_ values
	to be modified.  This happened both during header file scanning
	(HdrRule is called when target-specific variables are in effect)
	and with the "on target statement" syntax.  Now setting
	target-specific variables works again.  Thanks to Matt Armstrong.

	Setting "var on target ?= value" now works as expected: if the
	variable is already set on the target, it is left unchanged.
	Previously, ?= was ignored and the variable was set anyway.
	Thanks to Chris Antos.

	Variable expansion in actions has always put an extra blank
	space after the last list element, but the expansion is described
	in the code as "space separated".  Now the last blank is suppressed
	to match.  From Miklos Fazekas.

	The temp file name used by jam for .bat files on NT now contains
	jam's pid, so that multiple jams can run on the same system (with
	the same $TEMP).  Thanks to Steve Anichini.

	Several uninitialized memory accesses have been corrected in
	var_expand() and file_archscan(), thanks to Matt Armstrong.

5.  Porting

	The Makefile now uses $(EXENAME) (./jam0 on UNIX, .\jam0.exe
	on NT) instead of just "jam0", so that . doesn't need to be in
	your PATH to bootstrap.

	MACOSX updates: use 'ar' instead of libtool, as libtool can't
	update a library and we archive too many things to do it in
	one go; add piles of code to file_archscan() to handle new
	BSD4.4 style "#1/nnnn" archive entry names, where the real
	entry name follows the header and nnnn is the length of the
	name.

	The jam code underwent a const-ing, to work with compilers
	that don't like "" being passed as a non-const char *.

	Compiling on solaris w/ sparc now sets OSPLAT to "sparc".
	Previously, it suppressed this, assuming (wrongly) that sparc
	was the only solaris platform.  Thanks to Michael Champigny
	<michael.champigny@intel.com>.

	Jambase no longer announces the compiler it is using on
	Windows.  It doesn't announce anything else, so why?

	Jambase no longer refers to advapi32.lib on NT, as it isn't
	needed for linking jam itself and it seems to move from
	release to release (of MS Visual Studio).

	Makefile/Jambase: BEOS updates from "Ingo Weinhold"
	<bonefish@cs.tu-berlin.de>.

	The NoCare rule can be used to suppress error messages when
	an 'include' file can't be found.

	AIX "big" archives are now supported, thanks to suggestions
	from Randy Roesler.

	MSVCDIR now works as well as MSVCNT for the Microsoft Visual C
	compiler directory.  It changed names in VC 6.0.  Thanks to
	Matt Armstrong.

	Allow jam to build with BorlandC 5.5

	For WinXP IA64; set MSVCNT to the root of the SDK and MSVCVer
	to Win64; change handle type to long long (too much to include
	windows.h?); bury IA64 in the library path in Jambase.

	Mac classic MPW Codewarrior 7 upgrades: minor compiling
	issues, new paths in Jambase for libraries and includes, and
	separate out GenFile1 that sets PATH for UNIX only, as it
	does't work under MPW (or anything other than with sh).

	Minor Cray porting: make hashitem()'s key value unsigned so
	we're guaranteed no integer overflows.

	Remove NT FQuote rule, as, \" is required to pass quotes on
	the command line.

	Remove temp .bat files created on NT.  They used to all have
	the same name and get reused, but with 2.5 the names were salted
	with the PID and they would litter $TEMP.  Now they get removed
	after being used.

===============================================================================
===============================================================================


Release notes for Jam 2.4
(aka Jam - make(1) redux)

1.  Release info:

	Jam 2.4
	March, 21, 2002
	VERSION 2.4

2.  Compatibility

	Jam 2.4 is upward compatible with Jam 2.3

	The Jam 2.4 language is a superset of the 2.3 language;
	Jamfiles, Jambase, and other rulesets used in 2.3 can be used
	with the 2.4 language support.

3.  Changes since 2.3.

3.1.  Changes to Jam Language

	The mechanism for calling rules that return values - "[ rule
	args ...]", (and 'return' in the rule body), is now a
	documented part of the language.

	Add "on <target> <rulename> <field1> ..." syntax, to invoke a
	rule under the influence of a target's specific variables.

        Add "[ on targ rule ... ]" to call a rule returning a value,
        under the influence of a target's specific variables.

	New 'Glob' builtin that returns a list of files, given a list
	of directories, and a list of filename patterns.

	New 'while expr { block }' construct.

	New :E=value modifier provides default value if variable unset.

	New :J=joinval modifier concatenates list elements into single
		element, separated by joinval.

	\ can now be used to escape a space (or any single whitespace
	character), so that you don't have to resort to quotes. 

	New 'Match regexp : string' rule matches regexp against string
	and returns list of results.

	Rules can now be invoked indirectly, through variable names.
	If the variable expands to an empty list, no rule is run.
	If the variable expands to multiple entries, each rule is
	run with the same arguments.  The result of the rule invocation
	is the concatenation of the results of the rules invoked.

	'Echo' and 'Exit' now have aliases 'echo' and 'exit', since it
	is really hard to tell that these are built-in rules and not
	part of the language, like 'include'.  Real rules continue to
	start with a capital.

3.2.  Jambase Changes

	Support for YACCGEN, the suffix used on generated yacc output.

        Fix ups to have jam and p4 build with borland C 5.5,
        and minor win98 jam support for jam clean

	SubDirHdrs now takes directory names in the same format as
	SubInclude : one directory element per word.

	More portable support for specifying includes and #defines:
	New ASHDRS, CCHDRS, CCDEFS, DEFINES, ObjectDefines, FQuote,
	FIncludes, FDefines.  Ordering of cc and c++ flags grossly
	rearranged.

	Jambase has been compacted by applying the new E: and J:
	expansion modifiers.

	New SoftLink rule, courtesy of David Lindes.  It currently
	assumes you can pass a -s flag to $(LN).

3.3   'jam' Changes (See Jam.html)

	Added '-q' (quit quick) option; jam will exit promptly (as if it
	received an interrupt), as soon as any target fails.

	Added experimental '-g' (build newest sources first) option:
	all things being equal, normally targets are simply built in
	the order they appear in the Jamfiles.  With this flag, targets
	with the newest sources are built first.   From an idea by Arnt
	Gulbrandsen.  Undocumented (outside this note).

3.4.  Jam internal code changes

	jamgram.yy now defines YYMAXDEPTH to 10000, what it is on 
	FreeBSD, for older yaccs that left it at 150 or so.  This is
	needed for the right-recursion now used in the grammar.

	Optimize rule compilation, with right-recursion instead of left.

        Split jam's built-in rules out to builtins.c from compile.c,
        so that compile.c only deals with the language.

        Split jam's pathsys.h from filesys.h, since they are really
        two different pieces.

	evaluate_if(), which evaluated the condition tree for 'if' and
	returned an int, has been replaced with compile_eval(), which does
	essentially the same but returns a LIST.

4.  Fixed bugs

	Missing TEMPORARY targets with multiple parents no longer spoil one
	parent's time with another.  The parents' time is used for comparison
	with dependents, but no longer taken on as the target's own time.

	'actions updated', not 'actions together', now protects targets
	from being deleted on failed/interrupted updates.

	Fixed broken $(v[1-]), which always returned an empty expansion.
	Thanks to Ian Godin <ian@sgrail.com>.

	Defining a rule within another rule, and invoking the enclosing
	rule more than once, would result in giving the first rule a
	null definition.  Fixed.

	$(d:P) now works properly on the mac, climbing up directories.
	Thanks to Miklos Fazekas <boga@mac.com>.

        No longer (sometimes) treat \ as a directory separator on
        UNIX.  It isn't supposed to be, but was due to bungled ifdefs.
        
        Applying just :U or :D (or :E, :J) mods no longer causes the
        variable value to be treated as a filename (parsed and rebuilt
        using the OS specific pathsys routines). Previously, if _any_
        mods were present then the value was parsed and rebuilt as if
        a filename, and that could in certain cases munge the value.
        Only the file modifiers (:GDBSM) treat the value as a
        filename.

	Four rules makeCommon, makeGrist, makeString, makeSubDir from
	jam 2.2 missing in 2.3 have been re-added, with apologies to
	dtb@cisco.com.

	Return status more likely to be correct when using -d0, now that 
	targets are could as being built even with no debugging output.
	Thanks to Miklos Fazekas <boga@mac.com>.

	yyacc now suffixes all terminals it defines with _t, so that they
	don't conflict with other symbols (like RULE with the typedef
	in rules.h).  Thanks to Michael Allard.

	InstallInto now handles multiple sources properly, rather than
	acting as if each installed target depended on all sources to
	be installed.  $(INSTALLGRIST) is now the default grist for
	installed targets, rather than the hardcoded 'installed'.  Thanks
	to Stephen Goodson.

5.  Porting

	[MACINTOSH] Paths are now downshifted (internally) so as to
	handle its case insensitivity.  Thanks to Miklos Fazekas
	<boga@mac.com>.

        [NT] MS changed the macro for the IA64 Windows NT 64bit
        compiler.

	[CYGWIN] Cygwin jam porting: dance around bison and yyacc.
	Use bison's -y flag to use yacc's output file naming
	conventions, and don't use yyacc on systems whose SUFEXE is
	set.

	[VMS] The Jambase itself was not formatting the CCHDRS and
        CCDEFS properly: on VMS they can't be appended to, because
        multiple /define or /include directives don't work.  Instead
        now CCHDRS and CCDEFS is reformatted from HDRS and DEFINES
        anytime those latter two change.  This requires the recent
        change to jam to allow access to target-specific variables
        when setting other variables.

        [VMS] Remove exception call when file_dirscan() can't, for
        some reason, scan a directory.  Use a better set of #ifdefs to
        determine if we're on a vax, rather than relying on the C
        compiler being a specific version: we're able to build with
        the C++ compiler now.

	[VMS] Port new jam to run with just cxx compiler.
        (The C compiler being a extra-cost item).

        [NT] Add entry for DevStudio when the settings are already in the
        system environment.

        [NT] default $(MV) to "move /y" in Jambase.

	[MINGW] Mingw port by Max Blagai.

===============================================================================
===============================================================================


Release notes for Jam 2.3
(aka Jam - make(1) redux)

0.  Bugs fixed since 2.3.1

	PATCHLEVEL 2 - 3/12/2001

	NOCARE changed back: it once again does not applies to targets
	with sources and/or actions.  In 2.3 it was changed to apply to
	such targets, but that broke header file builds: files that are
	#included get marked with NOCARE, but if they have source or
	actions, they still should get built.

1.  Release info:

	Jam 2.3
	November 16, 2000
	VERSION 2.3
	PATCHLEVEL 1

2.  Compatibility

	Jam 2.3 is upward compatible with Jam 2.2.

	The Jam 2.3 language is a superset of the 2.2 language;
	Jamfiles, Jambase, and other rulesets used in 2.2 can be used
	with the 2.3 language support.

3.  Changes since 2.2

3.1.  Changes to Jam Language

	Rules now can have values, which can expanded into a list with
	the new "[ rule args ... ]" syntax.  A rule's value is the value
	of its last statement, though only the following statements have
	values: if (value of the leg chosen), switch (ditto), set (value
	of the resulting variable), return (its arguments).  Note that
	'return' doesn't actually return.  This support is EXPERIEMENTAL
	and otherwise undocumented.  (2.3.1)

	Because of the new way lists are processed, if a rule has no
	targets a warning message is no longer issued.

	NOCARE now applies to targets with sources and/or actions,
	rather than just those without.

3.2.  Jambase Changes

	The HDRPATTERN variable now allows for leading blanks before
	the #include, to keep up with ANSI.  By john@nanaon-sha.co.jp
	(John Belmonte) (2.2.3).

	HDRPATTERN has been adjusted to avoid mistaking cases like:

		# include <time.h> /* could be <sys/time.h> */

	MkDir now NOUPDATE's $(DOT), so that there are no dependencies
	on the current directory's timestamp.  By john@nanaon-sha.co.jp
	(John Belmonte).

	The old mock functions like makeDirName, which assigned their
	results to the variable named as their first argument, have
	been replaced with real functions using the new [] syntax.
	E.g. "makeDirName foo : bar ola" is now "foo = [ fDirName bar ]"

	Install now always does a cp/chmod/etc, rather than using
	the system's install(1), which invariably seems broken.

3.3.  Jam internal code changes

	$JAMUNAME is set on UNIX.  (2.2.4).

	Jam ANSI-fied (2.3.0).

	jam.h now defines a bunch of symbols used by the other source
	files, so as minimize compiler- and platform-specific ifdefs.

	OSVER is no longer set by jam.h (it was only set for AIX).
	Jam does not depend on this variable at all, except to set
	$(OSFULL), which is used to determine jam's build directory.
	If the user needs to distinguish between various revs of 
	OSs, he must set OSVER in the environment.

4.  Fixed bugs

	Redefining a rule while it was executing could cause jam to
	crash.  Reference counts are now used to prevent that, thanks
	to Matt Armstrong.

	Logic for computing chunk size when executing PIECEMEAL rules
	has been reworked to be a little more accurate, without danger
	of overflow, at the cost of being a little more compute intensive.
	Instead of computing an estimate chunksize in the (now gone)
	make1chunk(), make1cmds() now just goes full bore and tries to
	use all args.  When that fails, it backs off by 10% of the source
	args until the command fits.  It takes a little bit more compute
	time compared to the old logic, but when you're executing actions
	to build all of Shinola it's still pretty small in the scheme
	of things.

	The NT handle leak in execunix.c has been fixed, thanks to
	Gurusamy Sarathy.  (2.2.1).

5.  Porting

	Platforms newly supported or updated:

	    AmigaOS (with gcc), courtesy of Alain Penders (2.2.2).

	    Beos

	    CYGWIN 1.1.4, courtesy of John Belmonte <john@nanaon-sha.co.jp>.

	    IBM AS400 via Visual Age on NT (primitive)

	    IBM OS/390 Unix System Services

	    Linux SuSE on OS390

	    Linux Mips, ARM

	    Lynx

	    HPUX 11, IA64

	    Mac OS X Server, courtesy of Jeff_Sickel@sickel.com (2.2.5).

	    Mac Rhapsody

	    MPE IX 6.0

	    NetBSD

	    QNX RTP (QNX 6.0)

	    Siemens Sinix

	    UNICOS

	    VMS 6.2, 7.1

	    Windows NT IA64

5.1.  NT Porting Notes

	Always create tmp .bat file for actions if JAMSHELL is set.
	That way, if JAMSHELL is a .bat file itself, it can handle
	single-command actions with more than 9 cmd line args.

	COMSPEC is no longer examined: cmd.exe is always used
	instead.  Only cmd.exe can execute the Jambase rules anyhow.

	Jam can be built with Borland C++ 5.5.

	OS2 fixes: InstallBin now works.  Filenames are now downshifted,
	so mixed case works better there, too.  file_dirscan() can now scan 
	the root ("c:\" or "\") directory, which it couldn't handle before.

	var_defines now ignores OS=Windows_NT, because it conflicts
	with Jam's setting of OS (to NT).

5.2. Mac OS 8/9 Notes

	The support for Mac is curious at best.  It runs under MPW.

	It requires CodeWarrior Pro 5, but no longer requires GUSI.

	Use Build.mpw to bootstrap the build.

	The Mac specific definitions in the Jambase are not intended
	to be of general purpose, but are sufficient to have Jam build
	itself.

===============================================================================
===============================================================================


Release Notes for Jam 2.2

1.  Release info:

	Jam 2.2
	October 22, 1997
	VERSION 2.2
	PATCHLEVEL 1

2. Compatibility

	Jam 2.2 is a roll-up of 'Jam - make(1) redux' release 2.1+.
	Most of the changes described below were available before this,
	in the jam.2.1.plus.tar ball.

	The Jam 2.2 language is a superset of the 2.1 language;
	Jamfiles, Jambase, and other rulesets used in 2.1 can be used
	with the 2.2 language support.

	See 'Jambase Changes', below, to see if your Jamfiles need any
	changes to work with the 2.2 Jambase.


3. Changes Since 2.1

	New product name: Jam. (Executable program is still named 'jam'.)

	Documentation rewritten; HTML versions supplied.


3.1 Changes to Jam Language 

	Rules may now have more fields than just $(<) and $(>).

	Local variables are now supported.

	The expression 'if $(A) in $(B)' is now supported.

	New variable modifiers :U and :L result in uppercased or lowercased
	values.

	New variable modifier :P reliably results in parent directory
	of either a file or directory. (Previously, :D was used, but on VMS
	:D of a directory name is just the directory name.)

	The :S variable modifier now results in the _last_ suffix if a 
	filename has more than one dot (.) in it.

	New predefined $(JAMDATE) variable is initialized at runtime for 
	simple date stamping.

	New predefined variables $(OSVER) and $(OSPLAT) are used to 
	distinguish among operating system versions and hardware platforms,
	when possible.

	New 'bind' qualifier on action definitions allows variables
	other than $(<) and $(>) to be bound with SEARCH and LOCATE paths.

	Action buffer size is no longer limited by MAXCMD. Instead, each 
	line in an action is limited by MAXLINE, defined for each OS, and 
	the entire action size is limited by CMDBUF.


3.2 Jambase Changes (See Jamfile.html)

	Jambase has been reworked to incorporate new language features.

	A handful of new utility rules has been added: makeString,
	makeDirName, etc.

	New HDRGRIST variable in Jambase allows for headers with the same
	name to be distinguished.

	LOCATE_TARGET now has a new flavor, LOCATE_SOURCE, that is used by
	rules that generate source files (e.g., Yacc and Lex).

	Header file includes now happen in the proper order. The limit of
	10 include files has been eliminated.

	The old "Install" rule is no longer available.  Use InstallBin, 
	InstallFile, InstallLib, InstallMan, or InstallShell instead.


3.3 'jam' Changes (See Jam.html)

	'jam' can now be built as a stand-alone program, with Jambase 
	compiled into the executable. An external or alternate Jambase can 
	still be referenced explicitly with -f.

	On command failure, 'jam' now emits the text of the command that 
	failed.  This is a compromise between the normal -d1 behavior (where 
	commands were never seen) and -d2 (where commands are always seen).

	'jam' now exits non-zero if it doesn't have a total success.  A parse
	error, sources that can't be found, and targets that can't be built
	all generate non-zero exit status.
	
	The debugging levels (-d flags) have been slightly redefined.

	The supplied Jamfile now builds 'jam' into a platform specific 
	subdirectory. This lets you use the same source directory to
	build 'jam' for more than one platform.

	The supplied Jamfile does not rebuild generated source files by 
	default. (They are supplied with the distribution.) See Jamfile
	for more information.


4.  Fixed Bugs

	The 'include' bug has finally been fixed, so that include
	statements take effect exactly when they are executed,
	rather than after the current statement block.  This also
	corrects the problem where an 'include' within an 'if'
	block would wind up including the file one token after the
	'if' block's closing brace.  Credit goes to Thomas Woods
	for suggesting that the parse tree generation and parse
	tree execution be paired in their own loop, rather than
	having the parser execute the tree directly.

	The setting and extracting of grist has been regularized:
	normally, if you set a component of a filename (using the
	:DBSMG= modifiers), you are supposed to include the delimiters
	that set off the component:  that is, you say "$(x:S=.suffix)",
	including the ".".  But with grist it was inconsistent
	between setting and getting: setting grist required no
	<>'s, while getting grist included them.   Getting grist
	continues to return the <>'s, but now setting grist can
	either include them (the new way) or not (the old way).

	'actions together' now suppresses duplicate sources from
	showing up in $(>).

	Accessing variables whose names contained ['s (as happens with
	MkDir on VMS) wasn't working, because it treated the [ as an
	array subscript. Now [ and ] are, like :, handled specially so 
	that they can appear in variable values.

	The 'if' statement now compares all elements in expressions;
	previously, it only compared the first element of each list.

	If a command line in an action is longer than MAXLINE (formerly
	MAXCMD), 'jam' now issues an error and exits rather than dumping 
	core.

	If a Jamfile ended without a trailing newline, jam dumped core.
	This has been fixed.


5.  Porting

	See jam.h for the definitive list of supported platforms.
	Since 2.1, support has been added for:

	    Macintosh MPW
	    Alpha VMS
	    Alpha NT
	    NT PowerPC
	    BeOS
	    MVS OE
	    UNIXWARE
	    QNX
	    SINIX (Nixdorf)
	    OS/2
	    Interactive UNIX (ISC), courtesy of Matthew Newhook


5.1 NT Support Fixes

	The NT command executor now handles multiple line actions, by writing
	multi-line actions to a batch file and executing that.
	
	Targets are universally lowercased on NT. (Matthew Newhook)

	Concurrent process support is fully enabled for NT.
	(Gurusamy Sarathy <gsar@engin.umich.edu>)
	
	Path handling: Jam now knows that the directory component of "D:\"
	is "D:\", just as on unix it knows that the directory component of
	"/" is "/".  It also now successfully gets the timestamp for "D:\"
	or just plain "\".


5.2 VMS Support Fixes

	VMS support is much, much better now.  The path name manipulation
	routines (in pathvms.c) were more or less rewritten, and they now
	handle the vagaries of combining directory and file names properly.

	Targets are universally lowercased on VMS.

	Multi-line command blocks on VMS are now executed in a single system()
	call rather than separate ones for each line, so that actions can
	be DCL scripts.

===============================================================================
===============================================================================


Release notes for Jam 2.1.

1.  Release info:
	Jam 2.1
	February 1, 1996
	VERSION 2.1
	PATCHLEVEL 0

2.  Porting

	Linux is now supported.

	FREEBSD is now supported.

	SCO ("M_XENIX") now supported.

	NCR now supported.

	NEXT support from karthy@dannug.dk (Karsten Thygesen)

	DECC support from zinser@axp614.gsi.de (Martin P.J. Zinser)

	I have changes for OS/2, but no way to test them.  Volunteers?
	I have VMS multiprocess support, but no way to test it.  Volunteers?

2.1.  NT Support fixes.

	The NT support is considerably more real than it was in 2.0.
	Filent.c had its syntax error corrected, it no longer skips the
	first entry when scanning directories, and it handles string
	tables in archives (for long object file names).

	The Jambase was changed a bit to support the various C/C++
	compilers on NT, although it has only been thorougly tested
	with MSVC20.

	You still need to set MSVCNT or BCCROOT to the root of the 
	the compiler's directory tree, and you'll get an error if you
	don't set it (rather than getting a pile of mysterious errors).

2.2.  Other porting fixes.

	SPLITPATH now set up for UNIX (:), NT (;), VMS (,)

	Jambase support for Solaris works better now: the location of
	AR is hardwired to /usr/ccs/bin/ar and it knowns "install"
	doesn't take -c.  Solaris -- how the mighty have fallen.

	To handle Linux's wacko yacc, jamgram.h is now included after
	scan.h so that YYSTYPE is define.

3.  Jambase Changes (see Jamfile.html)

	SubDir now computes the root directory for the source tree, if
	the variable naming the root directory isn't set in the environment.
	It counts the number of directory elements leading from the root
	to the current directory (as passed to SubDir) and uses that many
	"../"'s to identify the root.  This means that to use SubDir you
	no longer have to have anything special set in the environment.

	InstallFile is now an alias for InstallLib.

	'first' is now dependency of all pseudo-targets (all, files, 
	exe, lib, shell), so that jamming any of these pseudo-targets
	also builds any dependencies of 'first'.

	The File rule definition in the Jambase was missing an &.

	The File rule now calls the Clean rule, so that installed files
	get cleaned.

4.  Jam changes (see Jam.html)

	Variables may now be set on the command line with -svar=value.

	Targets marked with NOUPDATE are now immune to the -a (anyhow) 
	flag.  Previously, the MkDir rule would try to recreate directories
	that already exist when jam was invoked with -a.

	A new variable, $(JAMVERSION), joins the small list of built-in 
	variables.  It it set to the release of jam, currently "2.1".

	If an actions fails, jam now deletes the target(s).  It won't
	delete libraries or other targets that are composites.  This is
	now consistent with jam's behavior on interrupts (it deletes the
	targets).

	Jam had a nasty bug when setting multiple variables to the same
	value:  if the first two variable names were the same, the variable
	value got trashed.  This also affected "on target" variables if
	the first two targets were the same.  For example:

		FOO on bar.c bar.c foo.c = a b c ;

	This would mangle the value of FOO for bar.c and foo.c.  This has
	been fixed.

	Jam would generate bogus numbers when reporting the number of
	targets updated after an interrupt.  It now is more careful about
	counting.

	The debugging flag -d has been extended.  In addition to supporting
	-dx (turn on debugging for all levels up to x) there is also now
	-d+x (turn on debugging at only level x).  The default output
	level is -d1 (-or d2 if -n is given); this can be turned off with
	-d0.   The debug levels are listed in jam.1 and jam.h.

	The parsing debug output now uses indenting to indicate when
	one rule invokes another.

===============================================================================
===============================================================================


Release notes for Jam 2.0.

1.  Release info:
	Jam 2.0 
	March 10, 1994
	VERSION 2.0
	PATCHLEVEL 5

2.  Porting

	Windows/NT is now (crudely) supported, courtesy of Brett Taylor
	and Laura Wingerd.  

	COHERENT/386 is now supported, courtesy of Fred Smith.

	Solaris archive string table for long archive names is now
	supported, thanks to Mike Matrigali.

3.  Compatibility

	Jam 2.0 syntax is a superset of Jam 1.0 syntax, and thus it can
	interpret a Jam 1.0 Jambase.

	The Jam 2.0 Jambase is a superset of the Jam 1.0 Jambase, and
	thus it can include a Jamfile written for Jam 1.0.

4.  Changes from Jam 1.0 to Jam 2.0

4.1.  Documentation changes

	New Jamfile.5 manual page, with lots of examples and easy
	reading.  It replaces both the old "Examples" file as well as
	the old Jambase.5 manual page.

	jam.1 edited by Stephen W. Liddle and Diane Holt.

4.2.  Jambase Changes (see Jamfile.5)

4.2.1.  New rules:

	There are new rules to make handling subdirectories easier:
	SubDir, SubInclude, SubDirCcFlags, SubDirHdrs.

	There are new rules to handle file-specific CCFLAGS and HDRS:
	ObjectCcFlags and ObjectHdrs.

	Misc new rules: HardLink, InstallShell, MkDir.

	New rule "clean" that deletes exactly what jam has built, and
	"uninstall" that deletes exactly what was installed.

	New rules for handling suffixes .s, .f, .cc, .cpp, .C.

4.2.2.  Old rules:

	The InstallBin, Lib, Man, and the new Shell rules now take the
	destination directory as the target and the files to be copied
	as sources.  These rules formerly took the files to be copied
	as targets, and used built-in destination directories of
	$(BINDIR), $(LIBDIR), $(MANDIR), and $(BINDIR).

	The InstallBin, Lib, Man, and Shell rules use the install(1)
	program now, instead of doing their own copying.

	The Cc rule now uses -o when possible, rather than moving the
	result.  Some platforms (Pyramid?) have a broken -o.

	Jambase rules taking libraries, objects, and executables now
	all ignore the suffixes provided and use the one defined in the
	Jambase for the platform.

	Stupid yyacc support moved out of Jambase, as jam is its only
	likely user.

	Jambase now purturbs library sources with a "grist" of
	SOURCE_GRIST.

4.2.3.  Misc:

	The names of the default rules defined in Jambase have been
	lowercased and un-abbreviated, to be more imake(1) like.

	The Jambase has been reorganized and sorted, with VMS and NT
	support moved in from their own files.

	The Jambase has been relocated on UNIX from /usr/local/lib/jam
	to /usr/local/lib.

4.3.  Jam changes (see jam.1)

4.3.1.   Flags:

	New -a (anyhow) flag: means build everything.

	New -j<x> flag: run jobs in parallel.

	Old -t now rebuilds the touched target, rather that just the
	target's parents.

	-n now implies -d2, so that you see what's happening.  The
	debug level can be subsequently overridden.

	New -v to dump version.

4.3.2.  Rules:

	New ALWAYS rule behaves like -t: always builds target.

	New EXIT rule makes it possible to raise a fatal error.

	New LEAVES rule which say target depends only on the update
	times of the leaf sources.

	New NOUPDATE rule says built targets only if they don't exist.

	NOTIME has been renamed NOTFILE, to more accurately reflect its
	meaning (it says a target is not to be bound to a file).

4.3.3.  Variables:

	New special variable JAMSHELL: argv template for command execution 
	shell.

	Variables, both normal and target-specific, can have their
	value appended with the syntax "var += value" or "var on target
	+= value".

	"?=" is now synonymous with "default =".

	Imported enviroment variable values are now split at blanks
	(:'s if the variable name ends in PATH), so that they become
	proper list values.

4.3.4.  Misc:

	Files to be sourced with "include" are now bound first, so
	$(SEARCH) and $(LOCATE) affect them.  They still can't be
	built, though.

	New modifier on "actions": "existing" causes $(>) to expand
	only those files that currently exist.

4.3.5.  Bug fixes:

	When scanning tokens known to be argument lists (such as the
	arguments to rule invocations and variable assignment), the
	parser now tells the scanner to ignore alphabetic keywords, as
	all such lists terminate with punctuation keywords (like : or
	;).  This way, alphabetic keywords don't need to be quoted when
	they appear as arguments.

	The scanner has been fixed to handle oversized tokens,
	unterminated quotes, unterminated action blocks, and tokens
	abutting EOF (i.e. a token with no white space before EOF).

	The progress report "...on xth target..." used to count all
	targets, rather than just those with updating actions.  Since
	the original pronouncement of targets to be udpated included
	only those with updating actions, the progress report has been
	changed to match.

	'If' conditionals now must be single arguments.  Previously,
	they could be zero or more arguments, which didn't make much
	sense, and made things like 'foo == bar' true.  The comparison
	operator is '=', and '==' just looked like the second of three
	arguments in the unary "non-empty argument list" conditional.

	Header files indirectly including themselves were mistakenly
	reported as being dependent on themselves.  Recursing through
	header file dependencies is now done after determining the fate
	of the target.

	The variable expansion support was expanding $(X)$(UNDEF) as if
	it were $(X).  It now expands to an empty list, like it
	should.

	The UNIX version of file_build() didn't handle "dir/.suffix"
	right.  Now it does.

	The VMS command buffer was assumed to be as large as 1024 bytes,
	which isn't the case everywhere as it is related to some weird
	quota.  It has been lowered to 256.

	$(>) and $(<) wouldn't expand in action blocks if the targets
	were marked with NOTIME.  Now they expand properly.

	Malloc() return values are now checked.

	The variable expansion routine var_expand() is now a little
	faster, by taking a few often needed shortcuts.

	The VMS version of file_build() used the wrong length when
	re-rooting file names that already had directory compoents.
	This was fixed.

	Various tracing adjustments were made.

5.  Limitations/Known Bugs

	The new Windows/NT support has only been marginally tested.  It
	is dependent on certain variables being set depending on which
	compiler you are using.  You'll need to look in the file
	Jambase and see what variables are expected to be set.

	The VMS support has been tested, courtesy of the DEC guest
	machine, but has not been hammered fully in release 2.0.  It
	was used quite a bit in Jam 1.0.

	Jam clean when there is nothing to clean claims it is updating
	a target.

	Because the include statement works by pushing a new file in
	the input stream of the scanner rather than recursively
	invoking the parser on the new file, multiple include
	statements in a rule's procedure causes the files to be
	included in reverse order.

	If the include statement appears inside an if block, the
	parser's attempt to find the else will cause the text of the
	included file to appear after the first token following the
	statement block.  This is rarely what is intended.

	In a rule's actions, only $(<) and $(>) refer to the bound file
	names:  all other variable references get the unbound names.
	This is a pain for $(NEEDLIBS), because it means that library
	path can't be bound using $(SEARCH) and $(LOCATE).

	With the -j flag, errors from failed commands can get
	staggeringly mixed up.  Also, because targets tend to get built
	in a quickest-first ordering, dependency information must be
	quite exact.  Finally, beware of parallelizing commands that
	drop fixed-named files into the current directory, like yacc(1)
	does.

	A poorly set $(JAMSHELL) is likely to result in silent
	failure.