summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/util
diff options
context:
space:
mode:
authorbeck <>2000-03-19 11:13:58 +0000
committerbeck <>2000-03-19 11:13:58 +0000
commit796d609550df3a33fc11468741c5d2f6d3df4c11 (patch)
tree6c6d539061caa20372dad0ac4ddb1dfae2fbe7fe /src/lib/libcrypto/util
parent5be3114c1fd7e0dfea1e38d3abb4cbba75244419 (diff)
downloadopenbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.gz
openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.bz2
openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.zip
OpenSSL 0.9.5 merge
*warning* this bumps shared lib minors for libssl and libcrypto from 2.1 to 2.2 if you are using the ssl26 packages for ssh and other things to work you will need to get new ones (see ~beck/libsslsnap/<arch>) on cvs or ~beck/src-patent.tar.gz on cvs
Diffstat (limited to 'src/lib/libcrypto/util')
-rw-r--r--src/lib/libcrypto/util/domd2
-rw-r--r--src/lib/libcrypto/util/libeay.num403
-rw-r--r--src/lib/libcrypto/util/mkdef.pl139
-rw-r--r--src/lib/libcrypto/util/mkerr.pl2
-rw-r--r--src/lib/libcrypto/util/pl/BC-32.pl2
-rw-r--r--src/lib/libcrypto/util/pl/Mingw32.pl2
-rw-r--r--src/lib/libcrypto/util/pl/VC-32.pl2
-rw-r--r--src/lib/libcrypto/util/pod2man.pl1181
-rw-r--r--src/lib/libcrypto/util/selftest.pl174
-rw-r--r--src/lib/libcrypto/util/ssleay.num10
10 files changed, 1883 insertions, 34 deletions
diff --git a/src/lib/libcrypto/util/domd b/src/lib/libcrypto/util/domd
index 324051f60b..9f75131f22 100644
--- a/src/lib/libcrypto/util/domd
+++ b/src/lib/libcrypto/util/domd
@@ -7,5 +7,5 @@ shift
7 7
8cp Makefile.ssl Makefile.save 8cp Makefile.ssl Makefile.save
9makedepend -f Makefile.ssl $@ 9makedepend -f Makefile.ssl $@
10$TOP/util/clean-depend.pl < Makefile.ssl > Makefile.new 10perl $TOP/util/clean-depend.pl < Makefile.ssl > Makefile.new
11mv Makefile.new Makefile.ssl 11mv Makefile.new Makefile.ssl
diff --git a/src/lib/libcrypto/util/libeay.num b/src/lib/libcrypto/util/libeay.num
index 59c2040a29..e3818ef6e4 100644
--- a/src/lib/libcrypto/util/libeay.num
+++ b/src/lib/libcrypto/util/libeay.num
@@ -499,9 +499,9 @@ SHA1_Update 504
499SHA_Final 505 499SHA_Final 505
500SHA_Init 506 500SHA_Init 506
501SHA_Update 507 501SHA_Update 507
502SSLeay_add_all_algorithms 508 502OpenSSL_add_all_algorithms 508
503SSLeay_add_all_ciphers 509 503OpenSSL_add_all_ciphers 509
504SSLeay_add_all_digests 510 504OpenSSL_add_all_digests 510
505TXT_DB_create_index 511 505TXT_DB_create_index 511
506TXT_DB_free 512 506TXT_DB_free 512
507TXT_DB_get_by_index 513 507TXT_DB_get_by_index 513
@@ -1304,13 +1304,12 @@ i2d_SXNETID 1329
1304d2i_SXNETID 1330 1304d2i_SXNETID 1330
1305SXNETID_new 1331 1305SXNETID_new 1331
1306SXNETID_free 1332 1306SXNETID_free 1332
1307DSA_SIG_new 1333 1307DSA_SIG_new 1333
1308DSA_SIG_free 1334 1308DSA_SIG_free 1334
1309DSA_do_sign 1335 1309DSA_do_sign 1335
1310DSA_do_verify 1336 1310DSA_do_verify 1336
1311d2i_DSA_SIG 1337 1311d2i_DSA_SIG 1337
1312i2d_DSA_SIG 1338 1312i2d_DSA_SIG 1338
1313
1314i2d_ASN1_VISIBLESTRING 1339 1313i2d_ASN1_VISIBLESTRING 1339
1315d2i_ASN1_VISIBLESTRING 1340 1314d2i_ASN1_VISIBLESTRING 1340
1316i2d_ASN1_UTF8STRING 1341 1315i2d_ASN1_UTF8STRING 1341
@@ -1844,3 +1843,387 @@ sk_DIST_POINT_sort 1868
1844RSA_check_key 1869 1843RSA_check_key 1869
1845OBJ_obj2txt 1870 1844OBJ_obj2txt 1870
1846DSA_dup_DH 1871 1845DSA_dup_DH 1871
1846X509_REQ_get_extensions 1872
1847X509_REQ_set_extension_nids 1873
1848BIO_nwrite 1874
1849X509_REQ_extension_nid 1875
1850BIO_nread 1876
1851X509_REQ_get_extension_nids 1877
1852BIO_nwrite0 1878
1853X509_REQ_add_extensions_nid 1879
1854BIO_nread0 1880
1855X509_REQ_add_extensions 1881
1856BIO_new_mem_buf 1882
1857DH_set_ex_data 1883
1858DH_set_method 1884
1859DSA_OpenSSL 1885
1860DH_get_ex_data 1886
1861DH_get_ex_new_index 1887
1862DSA_new_method 1888
1863DH_new_method 1889
1864DH_OpenSSL 1890
1865DSA_get_ex_new_index 1891
1866DH_get_default_method 1892
1867DSA_set_ex_data 1893
1868DH_set_default_method 1894
1869DSA_get_ex_data 1895
1870X509V3_EXT_REQ_add_conf 1896
1871NETSCAPE_SPKI_print 1897
1872NETSCAPE_SPKI_set_pubkey 1898
1873NETSCAPE_SPKI_b64_encode 1899
1874NETSCAPE_SPKI_get_pubkey 1900
1875NETSCAPE_SPKI_b64_decode 1901
1876UTF8_putc 1902
1877UTF8_getc 1903
1878RSA_null_method 1904
1879ASN1_tag2str 1905
1880BIO_ctrl_reset_read_request 1906
1881DISPLAYTEXT_new 1907
1882ASN1_GENERALIZEDTIME_free 1908
1883X509_REVOKED_get_ext_d2i 1909
1884X509_set_ex_data 1910
1885X509_reject_set_bit_asc 1911
1886X509_NAME_add_entry_by_txt 1912
1887sk_X509_TRUST_pop 1913
1888X509_NAME_add_entry_by_NID 1914
1889X509_PURPOSE_get0 1915
1890sk_ACCESS_DESCRIPTION_shift 1916
1891PEM_read_X509_AUX 1917
1892d2i_AUTHORITY_INFO_ACCESS 1918
1893sk_X509_TRUST_set_cmp_func 1919
1894sk_X509_TRUST_free 1920
1895PEM_write_PUBKEY 1921
1896sk_X509_TRUST_num 1922
1897sk_ACCESS_DESCRIPTION_delete 1923
1898sk_ASN1_STRING_TABLE_value 1924
1899ACCESS_DESCRIPTION_new 1925
1900X509_CERT_AUX_free 1926
1901d2i_ACCESS_DESCRIPTION 1927
1902X509_trust_clear 1928
1903sk_X509_PURPOSE_value 1929
1904sk_X509_PURPOSE_zero 1930
1905X509_TRUST_add 1931
1906ASN1_VISIBLESTRING_new 1932
1907X509_alias_set1 1933
1908ASN1_PRINTABLESTRING_free 1934
1909EVP_PKEY_get1_DSA 1935
1910ASN1_BMPSTRING_new 1936
1911ASN1_mbstring_copy 1937
1912ASN1_UTF8STRING_new 1938
1913sk_ACCESS_DESCRIPTION_set 1939
1914sk_X509_PURPOSE_pop 1940
1915DSA_get_default_method 1941
1916sk_X509_PURPOSE_push 1942
1917sk_X509_PURPOSE_delete 1943
1918sk_X509_PURPOSE_num 1944
1919i2d_ASN1_SET_OF_ACCESS_DESCRIPTION 1945
1920ASN1_T61STRING_free 1946
1921sk_ACCESS_DESCRIPTION_free 1947
1922sk_ASN1_STRING_TABLE_pop 1948
1923DSA_set_method 1949
1924X509_get_ex_data 1950
1925ASN1_STRING_type 1951
1926X509_PURPOSE_get_by_sname 1952
1927sk_X509_PURPOSE_find 1953
1928ASN1_TIME_free 1954
1929ASN1_OCTET_STRING_cmp 1955
1930sk_ACCESS_DESCRIPTION_value 1956
1931ASN1_BIT_STRING_new 1957
1932X509_get_ext_d2i 1958
1933PEM_read_bio_X509_AUX 1959
1934ASN1_STRING_set_default_mask_asc 1960
1935PEM_write_bio_RSA_PUBKEY 1961
1936sk_ASN1_STRING_TABLE_num 1962
1937ASN1_INTEGER_cmp 1963
1938d2i_RSA_PUBKEY_fp 1964
1939sk_ACCESS_DESCRIPTION_unshift 1965
1940sk_ASN1_STRING_TABLE_delete_ptr 1966
1941X509_trust_set_bit_asc 1967
1942PEM_write_bio_DSA_PUBKEY 1968
1943X509_STORE_CTX_free 1969
1944EVP_PKEY_set1_DSA 1970
1945i2d_DSA_PUBKEY_fp 1971
1946X509_load_cert_crl_file 1972
1947ASN1_TIME_new 1973
1948i2d_RSA_PUBKEY 1974
1949sk_X509_TRUST_pop_free 1975
1950X509_STORE_CTX_purpose_inherit 1976
1951PEM_read_RSA_PUBKEY 1977
1952sk_X509_TRUST_zero 1978
1953sk_ACCESS_DESCRIPTION_pop_free 1979
1954d2i_X509_AUX 1980
1955i2d_DSA_PUBKEY 1981
1956X509_CERT_AUX_print 1982
1957sk_X509_PURPOSE_new_null 1983
1958PEM_read_DSA_PUBKEY 1984
1959i2d_RSA_PUBKEY_bio 1985
1960ASN1_BIT_STRING_num_asc 1986
1961i2d_PUBKEY 1987
1962ASN1_UTCTIME_free 1988
1963DSA_set_default_method 1989
1964X509_PURPOSE_get_by_id 1990
1965sk_X509_TRUST_push 1991
1966sk_ASN1_STRING_TABLE_sort 1992
1967sk_X509_PURPOSE_set_cmp_func 1993
1968ACCESS_DESCRIPTION_free 1994
1969PEM_read_bio_PUBKEY 1995
1970ASN1_STRING_set_by_NID 1996
1971X509_PURPOSE_get_id 1997
1972DISPLAYTEXT_free 1998
1973OTHERNAME_new 1999
1974sk_X509_TRUST_find 2000
1975X509_CERT_AUX_new 2001
1976sk_ACCESS_DESCRIPTION_dup 2002
1977sk_ASN1_STRING_TABLE_pop_free 2003
1978sk_ASN1_STRING_TABLE_unshift 2004
1979sk_X509_TRUST_shift 2005
1980sk_ACCESS_DESCRIPTION_zero 2006
1981X509_TRUST_cleanup 2007
1982X509_NAME_add_entry_by_OBJ 2008
1983X509_CRL_get_ext_d2i 2009
1984sk_X509_TRUST_set 2010
1985X509_PURPOSE_get0_name 2011
1986PEM_read_PUBKEY 2012
1987sk_ACCESS_DESCRIPTION_new 2013
1988i2d_DSA_PUBKEY_bio 2014
1989i2d_OTHERNAME 2015
1990ASN1_OCTET_STRING_free 2016
1991ASN1_BIT_STRING_set_asc 2017
1992sk_ACCESS_DESCRIPTION_push 2018
1993X509_get_ex_new_index 2019
1994ASN1_STRING_TABLE_cleanup 2020
1995X509_TRUST_get_by_id 2021
1996X509_PURPOSE_get_trust 2022
1997ASN1_STRING_length 2023
1998d2i_ASN1_SET_OF_ACCESS_DESCRIPTION 2024
1999ASN1_PRINTABLESTRING_new 2025
2000X509V3_get_d2i 2026
2001ASN1_ENUMERATED_free 2027
2002i2d_X509_CERT_AUX 2028
2003sk_ACCESS_DESCRIPTION_find 2029
2004X509_STORE_CTX_set_trust 2030
2005sk_X509_PURPOSE_unshift 2031
2006ASN1_STRING_set_default_mask 2032
2007X509_STORE_CTX_new 2033
2008EVP_PKEY_get1_RSA 2034
2009sk_X509_PURPOSE_set 2035
2010sk_ASN1_STRING_TABLE_insert 2036
2011sk_X509_PURPOSE_sort 2037
2012DIRECTORYSTRING_free 2038
2013PEM_write_X509_AUX 2039
2014ASN1_OCTET_STRING_set 2040
2015d2i_DSA_PUBKEY_fp 2041
2016sk_ASN1_STRING_TABLE_free 2042
2017sk_X509_TRUST_value 2043
2018d2i_RSA_PUBKEY 2044
2019sk_ASN1_STRING_TABLE_set 2045
2020X509_TRUST_get0_name 2046
2021X509_TRUST_get0 2047
2022AUTHORITY_INFO_ACCESS_free 2048
2023ASN1_IA5STRING_new 2049
2024d2i_DSA_PUBKEY 2050
2025X509_check_purpose 2051
2026ASN1_ENUMERATED_new 2052
2027d2i_RSA_PUBKEY_bio 2053
2028d2i_PUBKEY 2054
2029X509_TRUST_get_trust 2055
2030X509_TRUST_get_flags 2056
2031ASN1_BMPSTRING_free 2057
2032ASN1_T61STRING_new 2058
2033sk_X509_TRUST_unshift 2059
2034ASN1_UTCTIME_new 2060
2035sk_ACCESS_DESCRIPTION_pop 2061
2036i2d_AUTHORITY_INFO_ACCESS 2062
2037EVP_PKEY_set1_RSA 2063
2038X509_STORE_CTX_set_purpose 2064
2039ASN1_IA5STRING_free 2065
2040PEM_write_bio_X509_AUX 2066
2041X509_PURPOSE_get_count 2067
2042CRYPTO_add_info 2068
2043sk_ACCESS_DESCRIPTION_num 2069
2044sk_ASN1_STRING_TABLE_set_cmp_func 2070
2045X509_NAME_ENTRY_create_by_txt 2071
2046ASN1_STRING_get_default_mask 2072
2047sk_X509_TRUST_dup 2073
2048X509_alias_get0 2074
2049ASN1_STRING_data 2075
2050sk_X509_TRUST_insert 2076
2051i2d_ACCESS_DESCRIPTION 2077
2052X509_trust_set_bit 2078
2053sk_X509_PURPOSE_delete_ptr 2079
2054ASN1_BIT_STRING_free 2080
2055PEM_read_bio_RSA_PUBKEY 2081
2056X509_add1_reject_object 2082
2057X509_check_trust 2083
2058sk_X509_TRUST_new_null 2084
2059sk_ACCESS_DESCRIPTION_new_null 2085
2060sk_ACCESS_DESCRIPTION_delete_ptr 2086
2061sk_X509_TRUST_sort 2087
2062PEM_read_bio_DSA_PUBKEY 2088
2063sk_X509_TRUST_new 2089
2064X509_PURPOSE_add 2090
2065ASN1_STRING_TABLE_get 2091
2066ASN1_UTF8STRING_free 2092
2067d2i_DSA_PUBKEY_bio 2093
2068sk_ASN1_STRING_TABLE_delete 2094
2069PEM_write_RSA_PUBKEY 2095
2070d2i_OTHERNAME 2096
2071sk_ACCESS_DESCRIPTION_insert 2097
2072X509_reject_set_bit 2098
2073sk_X509_TRUST_delete_ptr 2099
2074sk_X509_PURPOSE_pop_free 2100
2075PEM_write_DSA_PUBKEY 2101
2076sk_X509_PURPOSE_free 2102
2077sk_X509_PURPOSE_dup 2103
2078sk_ASN1_STRING_TABLE_zero 2104
2079X509_PURPOSE_get0_sname 2105
2080sk_ASN1_STRING_TABLE_shift 2106
2081EVP_PKEY_set1_DH 2107
2082ASN1_OCTET_STRING_dup 2108
2083ASN1_BIT_STRING_set 2109
2084X509_TRUST_get_count 2110
2085ASN1_INTEGER_free 2111
2086OTHERNAME_free 2112
2087i2d_RSA_PUBKEY_fp 2113
2088ASN1_INTEGER_dup 2114
2089d2i_X509_CERT_AUX 2115
2090sk_ASN1_STRING_TABLE_new_null 2116
2091PEM_write_bio_PUBKEY 2117
2092ASN1_VISIBLESTRING_free 2118
2093X509_PURPOSE_cleanup 2119
2094sk_ASN1_STRING_TABLE_push 2120
2095sk_ASN1_STRING_TABLE_dup 2121
2096sk_X509_PURPOSE_shift 2122
2097ASN1_mbstring_ncopy 2123
2098sk_X509_PURPOSE_new 2124
2099sk_X509_PURPOSE_insert 2125
2100ASN1_GENERALIZEDTIME_new 2126
2101sk_ACCESS_DESCRIPTION_sort 2127
2102EVP_PKEY_get1_DH 2128
2103sk_ACCESS_DESCRIPTION_set_cmp_func 2129
2104ASN1_OCTET_STRING_new 2130
2105ASN1_INTEGER_new 2131
2106i2d_X509_AUX 2132
2107sk_ASN1_STRING_TABLE_find 2133
2108ASN1_BIT_STRING_name_print 2134
2109X509_cmp 2135
2110ASN1_STRING_length_set 2136
2111DIRECTORYSTRING_new 2137
2112sk_ASN1_STRING_TABLE_new 2138
2113sk_X509_TRUST_delete 2139
2114X509_add1_trust_object 2140
2115PKCS12_newpass 2141
2116SMIME_write_PKCS7 2142
2117SMIME_read_PKCS7 2143
2118des_set_key_checked 2144
2119PKCS7_verify 2145
2120PKCS7_encrypt 2146
2121des_set_key_unchecked 2147
2122SMIME_crlf_copy 2148
2123i2d_ASN1_PRINTABLESTRING 2149
2124PKCS7_get0_signers 2150
2125PKCS7_decrypt 2151
2126SMIME_text 2152
2127PKCS7_simple_smimecap 2153
2128PKCS7_get_smimecap 2154
2129PKCS7_sign 2155
2130PKCS7_add_attrib_smimecap 2156
2131CRYPTO_dbg_set_options 2157
2132CRYPTO_remove_all_info 2158
2133CRYPTO_get_mem_debug_functions 2159
2134CRYPTO_is_mem_check_on 2160
2135CRYPTO_set_mem_debug_functions 2161
2136CRYPTO_pop_info 2162
2137CRYPTO_push_info_ 2163
2138CRYPTO_set_mem_debug_options 2164
2139PEM_write_PKCS8PrivateKey_nid 2165
2140PEM_write_bio_PKCS8PrivateKey_nid 2166
2141d2i_PKCS8PrivateKey_bio 2167
2142ASN1_NULL_free 2168
2143d2i_ASN1_NULL 2169
2144ASN1_NULL_new 2170
2145i2d_PKCS8PrivateKey_bio 2171
2146i2d_PKCS8PrivateKey_fp 2172
2147i2d_ASN1_NULL 2173
2148i2d_PKCS8PrivateKey_nid_fp 2174
2149d2i_PKCS8PrivateKey_fp 2175
2150i2d_PKCS8PrivateKey_nid_bio 2176
2151i2d_PKCS8PrivateKeyInfo_fp 2177
2152i2d_PKCS8PrivateKeyInfo_bio 2178
2153PEM_cb 2179
2154i2d_PrivateKey_fp 2180
2155d2i_PrivateKey_bio 2181
2156d2i_PrivateKey_fp 2182
2157i2d_PrivateKey_bio 2183
2158X509_reject_clear 2184
2159X509_TRUST_set_default 2185
2160d2i_AutoPrivateKey 2186
2161X509_ATTRIBUTE_get0_type 2187
2162X509_ATTRIBUTE_set1_data 2188
2163X509at_get_attr 2189
2164X509at_get_attr_count 2190
2165X509_ATTRIBUTE_create_by_NID 2191
2166X509_ATTRIBUTE_set1_object 2192
2167X509_ATTRIBUTE_count 2193
2168X509_ATTRIBUTE_create_by_OBJ 2194
2169X509_ATTRIBUTE_get0_object 2195
2170X509at_get_attr_by_NID 2196
2171X509at_add1_attr 2197
2172X509_ATTRIBUTE_get0_data 2198
2173X509at_delete_attr 2199
2174X509at_get_attr_by_OBJ 2200
2175RAND_add 2201
2176BIO_number_written 2202
2177BIO_number_read 2203
2178X509_STORE_CTX_get1_chain 2204
2179ERR_load_RAND_strings 2205
2180RAND_pseudo_bytes 2206
2181X509_REQ_get_attr_by_NID 2207
2182X509_REQ_get_attr 2208
2183X509_REQ_add1_attr_by_NID 2209
2184X509_REQ_get_attr_by_OBJ 2210
2185X509at_add1_attr_by_NID 2211
2186X509_REQ_add1_attr_by_OBJ 2212
2187X509_REQ_get_attr_count 2213
2188X509_REQ_add1_attr 2214
2189X509_REQ_delete_attr 2215
2190X509at_add1_attr_by_OBJ 2216
2191X509_REQ_add1_attr_by_txt 2217
2192X509_ATTRIBUTE_create_by_txt 2218
2193X509at_add1_attr_by_txt 2219
2194sk_CRYPTO_EX_DATA_FUNCS_delete 2220
2195sk_CRYPTO_EX_DATA_FUNCS_set 2221
2196sk_CRYPTO_EX_DATA_FUNCS_unshift 2222
2197sk_CRYPTO_EX_DATA_FUNCS_new_null 2223
2198sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func 2224
2199sk_CRYPTO_EX_DATA_FUNCS_sort 2225
2200sk_CRYPTO_EX_DATA_FUNCS_dup 2226
2201sk_CRYPTO_EX_DATA_FUNCS_shift 2227
2202sk_CRYPTO_EX_DATA_FUNCS_value 2228
2203sk_CRYPTO_EX_DATA_FUNCS_pop 2229
2204sk_CRYPTO_EX_DATA_FUNCS_push 2230
2205sk_CRYPTO_EX_DATA_FUNCS_find 2231
2206sk_CRYPTO_EX_DATA_FUNCS_new 2232
2207sk_CRYPTO_EX_DATA_FUNCS_free 2233
2208sk_CRYPTO_EX_DATA_FUNCS_delete_ptr 2234
2209sk_CRYPTO_EX_DATA_FUNCS_num 2235
2210sk_CRYPTO_EX_DATA_FUNCS_pop_free 2236
2211sk_CRYPTO_EX_DATA_FUNCS_insert 2237
2212sk_CRYPTO_EX_DATA_FUNCS_zero 2238
2213BN_pseudo_rand 2239
2214BN_is_prime_fasttest 2240
2215BN_CTX_end 2241
2216BN_CTX_start 2242
2217BN_CTX_get 2243
2218EVP_PKEY2PKCS8_broken 2244
2219ASN1_STRING_TABLE_add 2245
2220CRYPTO_dbg_get_options 2246
2221AUTHORITY_INFO_ACCESS_new 2247
2222CRYPTO_get_mem_debug_options 2248
2223des_crypt 2249
2224PEM_write_bio_X509_REQ_NEW 2250
2225PEM_write_X509_REQ_NEW 2251
2226BIO_callback_ctrl 2252
2227RAND_egd 2253
2228RAND_status 2254
2229bn_dump1 2255
diff --git a/src/lib/libcrypto/util/mkdef.pl b/src/lib/libcrypto/util/mkdef.pl
index 80384af325..4e2845a4e1 100644
--- a/src/lib/libcrypto/util/mkdef.pl
+++ b/src/lib/libcrypto/util/mkdef.pl
@@ -6,26 +6,34 @@
6# prototyped functions: it then prunes the output. 6# prototyped functions: it then prunes the output.
7# 7#
8 8
9$crypto_num="util/libeay.num"; 9my $crypto_num="util/libeay.num";
10$ssl_num= "util/ssleay.num"; 10my $ssl_num= "util/ssleay.num";
11 11
12my $do_update = 0; 12my $do_update = 0;
13my $do_crypto = 0; 13my $do_crypto = 0;
14my $do_ssl = 0; 14my $do_ssl = 0;
15$rsaref = 0; 15my $do_ctest = 0;
16my $rsaref = 0;
16 17
17$W32=1; 18my $W32=1;
18$NT=0; 19my $NT=0;
19# Set this to make typesafe STACK definitions appear in DEF 20# Set this to make typesafe STACK definitions appear in DEF
20$safe_stack_def = 1; 21my $safe_stack_def = 1;
21 22
22$options=""; 23my $options="";
23open(IN,"<Makefile.ssl") || die "unable to open Makefile.ssl!\n"; 24open(IN,"<Makefile.ssl") || die "unable to open Makefile.ssl!\n";
24while(<IN>) { 25while(<IN>) {
25 $options=$1 if (/^OPTIONS=(.*)$/); 26 $options=$1 if (/^OPTIONS=(.*)$/);
26} 27}
27close(IN); 28close(IN);
28 29
30# The following ciphers may be excluded (by Configure). This means functions
31# defined with ifndef(NO_XXX) are not included in the .def file, and everything
32# in directory xxx is ignored.
33my $no_rc2; my $no_rc4; my $no_rc5; my $no_idea; my $no_des; my $no_bf;
34my $no_cast; my $no_md2; my $no_md5; my $no_sha; my $no_ripemd; my $no_mdc2;
35my $no_rsa; my $no_dsa; my $no_dh; my $no_hmac=0;
36
29foreach (@ARGV, split(/ /, $options)) 37foreach (@ARGV, split(/ /, $options))
30 { 38 {
31 $W32=1 if $_ eq "32"; 39 $W32=1 if $_ eq "32";
@@ -39,6 +47,7 @@ foreach (@ARGV, split(/ /, $options))
39 $do_crypto=1 if $_ eq "libeay"; 47 $do_crypto=1 if $_ eq "libeay";
40 $do_crypto=1 if $_ eq "crypto"; 48 $do_crypto=1 if $_ eq "crypto";
41 $do_update=1 if $_ eq "update"; 49 $do_update=1 if $_ eq "update";
50 $do_ctest=1 if $_ eq "ctest";
42 $rsaref=1 if $_ eq "rsaref"; 51 $rsaref=1 if $_ eq "rsaref";
43 52
44 if (/^no-rc2$/) { $no_rc2=1; } 53 if (/^no-rc2$/) { $no_rc2=1; }
@@ -59,6 +68,7 @@ foreach (@ARGV, split(/ /, $options))
59 elsif (/^no-hmac$/) { $no_hmac=1; } 68 elsif (/^no-hmac$/) { $no_hmac=1; }
60 } 69 }
61 70
71
62if (!$do_ssl && !$do_crypto) 72if (!$do_ssl && !$do_crypto)
63 { 73 {
64 print STDERR "usage: $0 ( ssl | crypto ) [ 16 | 32 | NT ] [rsaref]\n"; 74 print STDERR "usage: $0 ( ssl | crypto ) [ 16 | 32 | NT ] [rsaref]\n";
@@ -70,9 +80,9 @@ $max_ssl = $max_num;
70%crypto_list=&load_numbers($crypto_num); 80%crypto_list=&load_numbers($crypto_num);
71$max_crypto = $max_num; 81$max_crypto = $max_num;
72 82
73$ssl="ssl/ssl.h"; 83my $ssl="ssl/ssl.h";
74 84
75$crypto ="crypto/crypto.h"; 85my $crypto ="crypto/crypto.h";
76$crypto.=" crypto/des/des.h" unless $no_des; 86$crypto.=" crypto/des/des.h" unless $no_des;
77$crypto.=" crypto/idea/idea.h" unless $no_idea; 87$crypto.=" crypto/idea/idea.h" unless $no_idea;
78$crypto.=" crypto/rc4/rc4.h" unless $no_rc4; 88$crypto.=" crypto/rc4/rc4.h" unless $no_rc4;
@@ -115,8 +125,8 @@ $crypto.=" crypto/rand/rand.h";
115$crypto.=" crypto/comp/comp.h"; 125$crypto.=" crypto/comp/comp.h";
116$crypto.=" crypto/tmdiff.h"; 126$crypto.=" crypto/tmdiff.h";
117 127
118@ssl_func = &do_defs("SSLEAY", $ssl); 128my @ssl_func = &do_defs("SSLEAY", $ssl);
119@crypto_func = &do_defs("LIBEAY", $crypto); 129my @crypto_func = &do_defs("LIBEAY", $crypto);
120 130
121 131
122if ($do_update) { 132if ($do_update) {
@@ -131,7 +141,26 @@ if($do_crypto == 1) {
131 open(OUT, ">>$crypto_num"); 141 open(OUT, ">>$crypto_num");
132 &update_numbers(*OUT,"LIBEAY",*crypto_list,$max_crypto, @crypto_func); 142 &update_numbers(*OUT,"LIBEAY",*crypto_list,$max_crypto, @crypto_func);
133 close OUT; 143 close OUT;
134} 144}
145
146} elsif ($do_ctest) {
147
148 print <<"EOF";
149
150/* Test file to check all DEF file symbols are present by trying
151 * to link to all of them. This is *not* intended to be run!
152 */
153
154int main()
155{
156EOF
157 &print_test_file(*STDOUT,"SSLEAY",*ssl_list,@ssl_func)
158 if $do_ssl == 1;
159
160 &print_test_file(*STDOUT,"LIBEAY",*crypto_list,@crypto_func)
161 if $do_crypto == 1;
162
163 print "}\n";
135 164
136} else { 165} else {
137 166
@@ -147,14 +176,15 @@ if($do_crypto == 1) {
147sub do_defs 176sub do_defs
148{ 177{
149 my($name,$files)=@_; 178 my($name,$files)=@_;
179 my $file;
150 my @ret; 180 my @ret;
151 my %funcs; 181 my %funcs;
182 my $cpp;
152 183
153 foreach $file (split(/\s+/,$files)) 184 foreach $file (split(/\s+/,$files))
154 { 185 {
155 open(IN,"<$file") || die "unable to open $file:$!\n"; 186 open(IN,"<$file") || die "unable to open $file:$!\n";
156 187 my $line = "", my $def= "";
157 my $line = "", $def= "";
158 my %tag = ( 188 my %tag = (
159 FreeBSD => 0, 189 FreeBSD => 0,
160 NOPROTO => 0, 190 NOPROTO => 0,
@@ -164,6 +194,22 @@ sub do_defs
164 NO_FP_API => 0, 194 NO_FP_API => 0,
165 CONST_STRICT => 0, 195 CONST_STRICT => 0,
166 TRUE => 1, 196 TRUE => 1,
197 NO_RC2 => 0,
198 NO_RC4 => 0,
199 NO_RC5 => 0,
200 NO_IDEA => 0,
201 NO_DES => 0,
202 NO_BF => 0,
203 NO_CAST => 0,
204 NO_MD2 => 0,
205 NO_MD5 => 0,
206 NO_SHA => 0,
207 NO_RIPEMD => 0,
208 NO_MDC2 => 0,
209 NO_RSA => 0,
210 NO_DSA => 0,
211 NO_DH => 0,
212 NO_HMAC => 0,
167 ); 213 );
168 while(<IN>) { 214 while(<IN>) {
169 last if (/BEGIN ERROR CODES/); 215 last if (/BEGIN ERROR CODES/);
@@ -214,6 +260,11 @@ sub do_defs
214 push(@tag,"TRUE"); 260 push(@tag,"TRUE");
215 $tag{"TRUE"}=1; 261 $tag{"TRUE"}=1;
216 next; 262 next;
263 } elsif (/^\#\s*if\s+0/) {
264 # Dummy tag
265 push(@tag,"TRUE");
266 $tag{"TRUE"}=-1;
267 next;
217 } elsif (/^\#/) { 268 } elsif (/^\#/) {
218 next; 269 next;
219 } 270 }
@@ -250,7 +301,20 @@ sub do_defs
250 } 301 }
251 $funcs{"PEM_read_bio_${1}"} = 1; 302 $funcs{"PEM_read_bio_${1}"} = 1;
252 $funcs{"PEM_write_bio_${1}"} = 1; 303 $funcs{"PEM_write_bio_${1}"} = 1;
253 } elsif ( 304 } elsif (/^DECLARE_PEM_write\s*\(\s*(\w*)\s*,/ ||
305 /^DECLARE_PEM_write_cb\s*\(\s*(\w*)\s*,/ ) {
306 if($W32) {
307 $funcs{"PEM_write_${1}"} = 1;
308 }
309 $funcs{"PEM_write_bio_${1}"} = 1;
310 } elsif (/^DECLARE_PEM_read\s*\(\s*(\w*)\s*,/ ||
311 /^DECLARE_PEM_read_cb\s*\(\s*(\w*)\s*,/ ) {
312 if($W32) {
313 $funcs{"PEM_read_${1}"} = 1;
314 }
315 $funcs{"PEM_read_bio_${1}"} = 1;
316 } elsif (
317 ($tag{'TRUE'} != -1) &&
254 ($tag{'FreeBSD'} != 1) && 318 ($tag{'FreeBSD'} != 1) &&
255 ($tag{'CONST_STRICT'} != 1) && 319 ($tag{'CONST_STRICT'} != 1) &&
256 (($W32 && ($tag{'WIN16'} != 1)) || 320 (($W32 && ($tag{'WIN16'} != 1)) ||
@@ -260,7 +324,23 @@ sub do_defs
260 ((!$W32 && $tag{'_WINDLL'} != -1) || 324 ((!$W32 && $tag{'_WINDLL'} != -1) ||
261 ($W32 && $tag{'_WINDLL'} != 1)) && 325 ($W32 && $tag{'_WINDLL'} != 1)) &&
262 ((($tag{'NO_FP_API'} != 1) && $W32) || 326 ((($tag{'NO_FP_API'} != 1) && $W32) ||
263 (($tag{'NO_FP_API'} != -1) && !$W32))) 327 (($tag{'NO_FP_API'} != -1) && !$W32)) &&
328 ($tag{'NO_RC2'} == 0 || !$no_rc2) &&
329 ($tag{'NO_RC4'} == 0 || !$no_rc4) &&
330 ($tag{'NO_RC5'} == 0 || !$no_rc5) &&
331 ($tag{'NO_IDEA'} == 0 || !$no_idea) &&
332 ($tag{'NO_DES'} == 0 || !$no_des) &&
333 ($tag{'NO_BF'} == 0 || !$no_bf) &&
334 ($tag{'NO_CAST'} == 0 || !$no_cast) &&
335 ($tag{'NO_MD2'} == 0 || !$no_md2) &&
336 ($tag{'NO_MD5'} == 0 || !$no_md5) &&
337 ($tag{'NO_SHA'} == 0 || !$no_sha) &&
338 ($tag{'NO_RIPEMD'} == 0 || !$no_ripemd) &&
339 ($tag{'NO_MDC2'} == 0 || !$no_mdc2) &&
340 ($tag{'NO_RSA'} == 0 || !$no_rsa) &&
341 ($tag{'NO_DSA'} == 0 || !$no_dsa) &&
342 ($tag{'NO_DH'} == 0 || !$no_dh) &&
343 ($tag{'NO_HMAC'} == 0 || !$no_hmac))
264 { 344 {
265 if (/{|\/\*/) { # } 345 if (/{|\/\*/) { # }
266 $line = $_; 346 $line = $_;
@@ -309,8 +389,8 @@ sub do_defs
309 # Prune the returned functions 389 # Prune the returned functions
310 390
311 delete $funcs{"SSL_add_dir_cert_subjects_to_stack"}; 391 delete $funcs{"SSL_add_dir_cert_subjects_to_stack"};
312 delete $funcs{"des_crypt"};
313 delete $funcs{"RSA_PKCS1_RSAref"} unless $rsaref; 392 delete $funcs{"RSA_PKCS1_RSAref"} unless $rsaref;
393 delete $funcs{"bn_dump1"};
314 394
315 if($W32) { 395 if($W32) {
316 delete $funcs{"BIO_s_file_internal"}; 396 delete $funcs{"BIO_s_file_internal"};
@@ -334,10 +414,31 @@ sub do_defs
334 return(@ret); 414 return(@ret);
335} 415}
336 416
417sub print_test_file
418{
419 (*OUT,my $name,*nums,my @functions)=@_;
420 my $n = 1; my @e; my @r;
421 my $func;
422
423 (@e)=grep(/^SSLeay/,@functions);
424 (@r)=grep(!/^SSLeay/,@functions);
425 @functions=((sort @e),(sort @r));
426
427 foreach $func (@functions) {
428 if (!defined($nums{$func})) {
429 printf STDERR "$func does not have a number assigned\n"
430 if(!$do_update);
431 } else {
432 $n=$nums{$func};
433 print OUT "\t$func();\n";
434 }
435 }
436}
437
337sub print_def_file 438sub print_def_file
338{ 439{
339 (*OUT,my $name,*nums,@functions)=@_; 440 (*OUT,my $name,*nums,my @functions)=@_;
340 my $n =1; 441 my $n = 1; my @e; my @r;
341 442
342 if ($W32) 443 if ($W32)
343 { $name.="32"; } 444 { $name.="32"; }
diff --git a/src/lib/libcrypto/util/mkerr.pl b/src/lib/libcrypto/util/mkerr.pl
index 4b3bccb13e..ebc059ef22 100644
--- a/src/lib/libcrypto/util/mkerr.pl
+++ b/src/lib/libcrypto/util/mkerr.pl
@@ -450,7 +450,7 @@ void ERR_load_${lib}_strings(void)
450#ifdef ${lib}_LIB_NAME 450#ifdef ${lib}_LIB_NAME
451 ${lib}_lib_name->error = ERR_PACK(${lib}_lib_error_code,0,0); 451 ${lib}_lib_name->error = ERR_PACK(${lib}_lib_error_code,0,0);
452 ERR_load_strings(0,${lib}_lib_name); 452 ERR_load_strings(0,${lib}_lib_name);
453#endif; 453#endif
454 } 454 }
455 } 455 }
456 456
diff --git a/src/lib/libcrypto/util/pl/BC-32.pl b/src/lib/libcrypto/util/pl/BC-32.pl
index 09c45a21a6..df6e2c742e 100644
--- a/src/lib/libcrypto/util/pl/BC-32.pl
+++ b/src/lib/libcrypto/util/pl/BC-32.pl
@@ -19,7 +19,7 @@ $out_def="out32";
19$tmp_def="tmp32"; 19$tmp_def="tmp32";
20$inc_def="inc32"; 20$inc_def="inc32";
21#enable max error messages, disable most common warnings 21#enable max error messages, disable most common warnings
22$cflags="-DWIN32_LEAN_AND_MEAN -j255 -w-aus -w-par -w-inl -c -tWC -tWM -DWINDOWS -DWIN32 -DL_ENDIAN "; 22$cflags="-DWIN32_LEAN_AND_MEAN -q -w-aus -w-par -w-inl -c -tWC -tWM -DWINDOWS -DWIN32 -DL_ENDIAN ";
23if ($debug) 23if ($debug)
24{ 24{
25 $cflags.="-Od -y -v -vi- -D_DEBUG"; 25 $cflags.="-Od -y -v -vi- -D_DEBUG";
diff --git a/src/lib/libcrypto/util/pl/Mingw32.pl b/src/lib/libcrypto/util/pl/Mingw32.pl
index 84c2a22db3..585cacd820 100644
--- a/src/lib/libcrypto/util/pl/Mingw32.pl
+++ b/src/lib/libcrypto/util/pl/Mingw32.pl
@@ -17,7 +17,7 @@ $mkdir='gmkdir';
17 17
18$cc='gcc'; 18$cc='gcc';
19if ($debug) 19if ($debug)
20 { $cflags="-g2 -ggdb"; } 20 { $cflags="-DL_ENDIAN -g2 -ggdb"; }
21else 21else
22 { $cflags="-DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall"; } 22 { $cflags="-DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall"; }
23 23
diff --git a/src/lib/libcrypto/util/pl/VC-32.pl b/src/lib/libcrypto/util/pl/VC-32.pl
index 6db1c9fe23..046f0e253c 100644
--- a/src/lib/libcrypto/util/pl/VC-32.pl
+++ b/src/lib/libcrypto/util/pl/VC-32.pl
@@ -22,7 +22,7 @@ $inc_def="inc32";
22 22
23if ($debug) 23if ($debug)
24 { 24 {
25 $cflags=" /MDd /W3 /WX /Zi /Yd /Od /nologo -DWINDOWS -DWIN32 -D_DEBUG -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -DDEBUG"; 25 $cflags=" /MDd /W3 /WX /Zi /Yd /Od /nologo -DWIN32 -D_DEBUG -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -DDEBUG";
26 $lflags.=" /debug"; 26 $lflags.=" /debug";
27 $mlflags.=' /debug'; 27 $mlflags.=' /debug';
28 } 28 }
diff --git a/src/lib/libcrypto/util/pod2man.pl b/src/lib/libcrypto/util/pod2man.pl
new file mode 100644
index 0000000000..f5ec0767ed
--- /dev/null
+++ b/src/lib/libcrypto/util/pod2man.pl
@@ -0,0 +1,1181 @@
1: #!/usr/bin/perl-5.005
2 eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
3 if $running_under_some_shell;
4
5$DEF_PM_SECTION = '3pm' || '3';
6
7=head1 NAME
8
9pod2man - translate embedded Perl pod directives into man pages
10
11=head1 SYNOPSIS
12
13B<pod2man>
14[ B<--section=>I<manext> ]
15[ B<--release=>I<relpatch> ]
16[ B<--center=>I<string> ]
17[ B<--date=>I<string> ]
18[ B<--fixed=>I<font> ]
19[ B<--official> ]
20[ B<--lax> ]
21I<inputfile>
22
23=head1 DESCRIPTION
24
25B<pod2man> converts its input file containing embedded pod directives (see
26L<perlpod>) into nroff source suitable for viewing with nroff(1) or
27troff(1) using the man(7) macro set.
28
29Besides the obvious pod conversions, B<pod2man> also takes care of
30func(), func(n), and simple variable references like $foo or @bar so
31you don't have to use code escapes for them; complex expressions like
32C<$fred{'stuff'}> will still need to be escaped, though. Other nagging
33little roffish things that it catches include translating the minus in
34something like foo-bar, making a long dash--like this--into a real em
35dash, fixing up "paired quotes", putting a little space after the
36parens in something like func(), making C++ and PI look right, making
37double underbars have a little tiny space between them, making ALLCAPS
38a teeny bit smaller in troff(1), and escaping backslashes so you don't
39have to.
40
41=head1 OPTIONS
42
43=over 8
44
45=item center
46
47Set the centered header to a specific string. The default is
48"User Contributed Perl Documentation", unless the C<--official> flag is
49given, in which case the default is "Perl Programmers Reference Guide".
50
51=item date
52
53Set the left-hand footer string to this value. By default,
54the modification date of the input file will be used.
55
56=item fixed
57
58The fixed font to use for code refs. Defaults to CW.
59
60=item official
61
62Set the default header to indicate that this page is of
63the standard release in case C<--center> is not given.
64
65=item release
66
67Set the centered footer. By default, this is the current
68perl release.
69
70=item section
71
72Set the section for the C<.TH> macro. The standard conventions on
73sections are to use 1 for user commands, 2 for system calls, 3 for
74functions, 4 for devices, 5 for file formats, 6 for games, 7 for
75miscellaneous information, and 8 for administrator commands. This works
76best if you put your Perl man pages in a separate tree, like
77F</usr/local/perl/man/>. By default, section 1 will be used
78unless the file ends in F<.pm> in which case section 3 will be selected.
79
80=item lax
81
82Don't complain when required sections aren't present.
83
84=back
85
86=head1 Anatomy of a Proper Man Page
87
88For those not sure of the proper layout of a man page, here's
89an example of the skeleton of a proper man page. Head of the
90major headers should be setout as a C<=head1> directive, and
91are historically written in the rather startling ALL UPPER CASE
92format, although this is not mandatory.
93Minor headers may be included using C<=head2>, and are
94typically in mixed case.
95
96=over 10
97
98=item NAME
99
100Mandatory section; should be a comma-separated list of programs or
101functions documented by this podpage, such as:
102
103 foo, bar - programs to do something
104
105=item SYNOPSIS
106
107A short usage summary for programs and functions, which
108may someday be deemed mandatory.
109
110=item DESCRIPTION
111
112Long drawn out discussion of the program. It's a good idea to break this
113up into subsections using the C<=head2> directives, like
114
115 =head2 A Sample Subection
116
117 =head2 Yet Another Sample Subection
118
119=item OPTIONS
120
121Some people make this separate from the description.
122
123=item RETURN VALUE
124
125What the program or function returns if successful.
126
127=item ERRORS
128
129Exceptions, return codes, exit stati, and errno settings.
130
131=item EXAMPLES
132
133Give some example uses of the program.
134
135=item ENVIRONMENT
136
137Envariables this program might care about.
138
139=item FILES
140
141All files used by the program. You should probably use the FE<lt>E<gt>
142for these.
143
144=item SEE ALSO
145
146Other man pages to check out, like man(1), man(7), makewhatis(8), or catman(8).
147
148=item NOTES
149
150Miscellaneous commentary.
151
152=item CAVEATS
153
154Things to take special care with; sometimes called WARNINGS.
155
156=item DIAGNOSTICS
157
158All possible messages the program can print out--and
159what they mean.
160
161=item BUGS
162
163Things that are broken or just don't work quite right.
164
165=item RESTRICTIONS
166
167Bugs you don't plan to fix :-)
168
169=item AUTHOR
170
171Who wrote it (or AUTHORS if multiple).
172
173=item HISTORY
174
175Programs derived from other sources sometimes have this, or
176you might keep a modification log here.
177
178=back
179
180=head1 EXAMPLES
181
182 pod2man program > program.1
183 pod2man some_module.pm > /usr/perl/man/man3/some_module.3
184 pod2man --section=7 note.pod > note.7
185
186=head1 DIAGNOSTICS
187
188The following diagnostics are generated by B<pod2man>. Items
189marked "(W)" are non-fatal, whereas the "(F)" errors will cause
190B<pod2man> to immediately exit with a non-zero status.
191
192=over 4
193
194=item bad option in paragraph %d of %s: ``%s'' should be [%s]<%s>
195
196(W) If you start include an option, you should set it off
197as bold, italic, or code.
198
199=item can't open %s: %s
200
201(F) The input file wasn't available for the given reason.
202
203=item Improper man page - no dash in NAME header in paragraph %d of %s
204
205(W) The NAME header did not have an isolated dash in it. This is
206considered important.
207
208=item Invalid man page - no NAME line in %s
209
210(F) You did not include a NAME header, which is essential.
211
212=item roff font should be 1 or 2 chars, not `%s' (F)
213
214(F) The font specified with the C<--fixed> option was not
215a one- or two-digit roff font.
216
217=item %s is missing required section: %s
218
219(W) Required sections include NAME, DESCRIPTION, and if you're
220using a section starting with a 3, also a SYNOPSIS. Actually,
221not having a NAME is a fatal.
222
223=item Unknown escape: %s in %s
224
225(W) An unknown HTML entity (probably for an 8-bit character) was given via
226a C<EE<lt>E<gt>> directive. Besides amp, lt, gt, and quot, recognized
227entities are Aacute, aacute, Acirc, acirc, AElig, aelig, Agrave, agrave,
228Aring, aring, Atilde, atilde, Auml, auml, Ccedil, ccedil, Eacute, eacute,
229Ecirc, ecirc, Egrave, egrave, ETH, eth, Euml, euml, Iacute, iacute, Icirc,
230icirc, Igrave, igrave, Iuml, iuml, Ntilde, ntilde, Oacute, oacute, Ocirc,
231ocirc, Ograve, ograve, Oslash, oslash, Otilde, otilde, Ouml, ouml, szlig,
232THORN, thorn, Uacute, uacute, Ucirc, ucirc, Ugrave, ugrave, Uuml, uuml,
233Yacute, yacute, and yuml.
234
235=item Unmatched =back
236
237(W) You have a C<=back> without a corresponding C<=over>.
238
239=item Unrecognized pod directive: %s
240
241(W) You specified a pod directive that isn't in the known list of
242C<=head1>, C<=head2>, C<=item>, C<=over>, C<=back>, or C<=cut>.
243
244
245=back
246
247=head1 NOTES
248
249If you would like to print out a lot of man page continuously, you
250probably want to set the C and D registers to set contiguous page
251numbering and even/odd paging, at least on some versions of man(7).
252Settting the F register will get you some additional experimental
253indexing:
254
255 troff -man -rC1 -rD1 -rF1 perl.1 perldata.1 perlsyn.1 ...
256
257The indexing merely outputs messages via C<.tm> for each
258major page, section, subsection, item, and any C<XE<lt>E<gt>>
259directives.
260
261
262=head1 RESTRICTIONS
263
264None at this time.
265
266=head1 BUGS
267
268The =over and =back directives don't really work right. They
269take absolute positions instead of offsets, don't nest well, and
270making people count is suboptimal in any event.
271
272=head1 AUTHORS
273
274Original prototype by Larry Wall, but so massively hacked over by
275Tom Christiansen such that Larry probably doesn't recognize it anymore.
276
277=cut
278
279$/ = "";
280$cutting = 1;
281@Indices = ();
282
283# We try first to get the version number from a local binary, in case we're
284# running an installed version of Perl to produce documentation from an
285# uninstalled newer version's pod files.
286if ($^O ne 'plan9' and $^O ne 'dos' and $^O ne 'os2' and $^O ne 'MSWin32') {
287 my $perl = (-x './perl' && -f './perl' ) ?
288 './perl' :
289 ((-x '../perl' && -f '../perl') ?
290 '../perl' :
291 '');
292 ($version,$patch) = `$perl -e 'print $]'` =~ /^(\d\.\d{3})(\d{2})?/ if $perl;
293}
294# No luck; we'll just go with the running Perl's version
295($version,$patch) = $] =~ /^(.{5})(\d{2})?/ unless $version;
296$DEF_RELEASE = "perl $version";
297$DEF_RELEASE .= ", patch $patch" if $patch;
298
299
300sub makedate {
301 my $secs = shift;
302 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($secs);
303 my $mname = (qw{Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec})[$mon];
304 $year += 1900;
305 return "$mday/$mname/$year";
306}
307
308use Getopt::Long;
309
310$DEF_SECTION = 1;
311$DEF_CENTER = "User Contributed Perl Documentation";
312$STD_CENTER = "Perl Programmers Reference Guide";
313$DEF_FIXED = 'CW';
314$DEF_LAX = 0;
315
316sub usage {
317 warn "$0: @_\n" if @_;
318 die <<EOF;
319usage: $0 [options] podpage
320Options are:
321 --section=manext (default "$DEF_SECTION")
322 --release=relpatch (default "$DEF_RELEASE")
323 --center=string (default "$DEF_CENTER")
324 --date=string (default "$DEF_DATE")
325 --fixed=font (default "$DEF_FIXED")
326 --official (default NOT)
327 --lax (default NOT)
328EOF
329}
330
331$uok = GetOptions( qw(
332 section=s
333 release=s
334 center=s
335 date=s
336 fixed=s
337 official
338 lax
339 help));
340
341$DEF_DATE = makedate((stat($ARGV[0]))[9] || time());
342
343usage("Usage error!") unless $uok;
344usage() if $opt_help;
345usage("Need one and only one podpage argument") unless @ARGV == 1;
346
347$section = $opt_section || ($ARGV[0] =~ /\.pm$/
348 ? $DEF_PM_SECTION : $DEF_SECTION);
349$RP = $opt_release || $DEF_RELEASE;
350$center = $opt_center || ($opt_official ? $STD_CENTER : $DEF_CENTER);
351$lax = $opt_lax || $DEF_LAX;
352
353$CFont = $opt_fixed || $DEF_FIXED;
354
355if (length($CFont) == 2) {
356 $CFont_embed = "\\f($CFont";
357}
358elsif (length($CFont) == 1) {
359 $CFont_embed = "\\f$CFont";
360}
361else {
362 die "roff font should be 1 or 2 chars, not `$CFont_embed'";
363}
364
365$date = $opt_date || $DEF_DATE;
366
367for (qw{NAME DESCRIPTION}) {
368# for (qw{NAME DESCRIPTION AUTHOR}) {
369 $wanna_see{$_}++;
370}
371$wanna_see{SYNOPSIS}++ if $section =~ /^3/;
372
373
374$name = @ARGV ? $ARGV[0] : "<STDIN>";
375$Filename = $name;
376if ($section =~ /^1/) {
377 require File::Basename;
378 $name = uc File::Basename::basename($name);
379}
380$name =~ s/\.(pod|p[lm])$//i;
381
382# Lose everything up to the first of
383# */lib/*perl* standard or site_perl module
384# */*perl*/lib from -D prefix=/opt/perl
385# */*perl*/ random module hierarchy
386# which works.
387$name =~ s-//+-/-g;
388if ($name =~ s-^.*?/lib/[^/]*perl[^/]*/--i
389 or $name =~ s-^.*?/[^/]*perl[^/]*/lib/--i
390 or $name =~ s-^.*?/[^/]*perl[^/]*/--i) {
391 # Lose ^site(_perl)?/.
392 $name =~ s-^site(_perl)?/--;
393 # Lose ^arch/. (XXX should we use Config? Just for archname?)
394 $name =~ s~^(.*-$^O|$^O-.*)/~~o;
395 # Lose ^version/.
396 $name =~ s-^\d+\.\d+/--;
397}
398
399# Translate Getopt/Long to Getopt::Long, etc.
400$name =~ s(/)(::)g;
401
402if ($name ne 'something') {
403 FCHECK: {
404 open(F, "< $ARGV[0]") || die "can't open $ARGV[0]: $!";
405 while (<F>) {
406 next unless /^=\b/;
407 if (/^=head1\s+NAME\s*$/) { # an /m would forgive mistakes
408 $_ = <F>;
409 unless (/\s*-+\s+/) {
410 $oops++;
411 warn "$0: Improper man page - no dash in NAME header in paragraph $. of $ARGV[0]\n"
412 } else {
413 my @n = split /\s+-+\s+/;
414 if (@n != 2) {
415 $oops++;
416 warn "$0: Improper man page - malformed NAME header in paragraph $. of $ARGV[0]\n"
417 }
418 else {
419 %namedesc = @n;
420 }
421 }
422 last FCHECK;
423 }
424 next if /^=cut\b/; # DB_File and Net::Ping have =cut before NAME
425 next if /^=pod\b/; # It is OK to have =pod before NAME
426 die "$0: Invalid man page - 1st pod line is not NAME in $ARGV[0]\n" unless $lax;
427 }
428 die "$0: Invalid man page - no documentation in $ARGV[0]\n" unless $lax;
429 }
430 close F;
431}
432
433print <<"END";
434.rn '' }`
435''' \$RCSfile\$\$Revision\$\$Date\$
436'''
437''' \$Log\$
438'''
439.de Sh
440.br
441.if t .Sp
442.ne 5
443.PP
444\\fB\\\\\$1\\fR
445.PP
446..
447.de Sp
448.if t .sp .5v
449.if n .sp
450..
451.de Ip
452.br
453.ie \\\\n(.\$>=3 .ne \\\\\$3
454.el .ne 3
455.IP "\\\\\$1" \\\\\$2
456..
457.de Vb
458.ft $CFont
459.nf
460.ne \\\\\$1
461..
462.de Ve
463.ft R
464
465.fi
466..
467'''
468'''
469''' Set up \\*(-- to give an unbreakable dash;
470''' string Tr holds user defined translation string.
471''' Bell System Logo is used as a dummy character.
472'''
473.tr \\(*W-|\\(bv\\*(Tr
474.ie n \\{\\
475.ds -- \\(*W-
476.ds PI pi
477.if (\\n(.H=4u)&(1m=24u) .ds -- \\(*W\\h'-12u'\\(*W\\h'-12u'-\\" diablo 10 pitch
478.if (\\n(.H=4u)&(1m=20u) .ds -- \\(*W\\h'-12u'\\(*W\\h'-8u'-\\" diablo 12 pitch
479.ds L" ""
480.ds R" ""
481''' \\*(M", \\*(S", \\*(N" and \\*(T" are the equivalent of
482''' \\*(L" and \\*(R", except that they are used on ".xx" lines,
483''' such as .IP and .SH, which do another additional levels of
484''' double-quote interpretation
485.ds M" """
486.ds S" """
487.ds N" """""
488.ds T" """""
489.ds L' '
490.ds R' '
491.ds M' '
492.ds S' '
493.ds N' '
494.ds T' '
495'br\\}
496.el\\{\\
497.ds -- \\(em\\|
498.tr \\*(Tr
499.ds L" ``
500.ds R" ''
501.ds M" ``
502.ds S" ''
503.ds N" ``
504.ds T" ''
505.ds L' `
506.ds R' '
507.ds M' `
508.ds S' '
509.ds N' `
510.ds T' '
511.ds PI \\(*p
512'br\\}
513END
514
515print <<'END';
516.\" If the F register is turned on, we'll generate
517.\" index entries out stderr for the following things:
518.\" TH Title
519.\" SH Header
520.\" Sh Subsection
521.\" Ip Item
522.\" X<> Xref (embedded
523.\" Of course, you have to process the output yourself
524.\" in some meaninful fashion.
525.if \nF \{
526.de IX
527.tm Index:\\$1\t\\n%\t"\\$2"
528..
529.nr % 0
530.rr F
531.\}
532END
533
534print <<"END";
535.TH $name $section "$RP" "$date" "$center"
536.UC
537END
538
539push(@Indices, qq{.IX Title "$name $section"});
540
541while (($name, $desc) = each %namedesc) {
542 for ($name, $desc) { s/^\s+//; s/\s+$//; }
543 push(@Indices, qq(.IX Name "$name - $desc"\n));
544}
545
546print <<'END';
547.if n .hy 0
548.if n .na
549.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
550.de CQ \" put $1 in typewriter font
551END
552print ".ft $CFont\n";
553print <<'END';
554'if n "\c
555'if t \\&\\$1\c
556'if n \\&\\$1\c
557'if n \&"
558\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
559'.ft R
560..
561.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
562. \" AM - accent mark definitions
563.bd B 3
564. \" fudge factors for nroff and troff
565.if n \{\
566. ds #H 0
567. ds #V .8m
568. ds #F .3m
569. ds #[ \f1
570. ds #] \fP
571.\}
572.if t \{\
573. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
574. ds #V .6m
575. ds #F 0
576. ds #[ \&
577. ds #] \&
578.\}
579. \" simple accents for nroff and troff
580.if n \{\
581. ds ' \&
582. ds ` \&
583. ds ^ \&
584. ds , \&
585. ds ~ ~
586. ds ? ?
587. ds ! !
588. ds /
589. ds q
590.\}
591.if t \{\
592. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
593. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
594. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
595. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
596. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
597. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
598. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
599. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
600. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
601.\}
602. \" troff and (daisy-wheel) nroff accents
603.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
604.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
605.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
606.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
607.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
608.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
609.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
610.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
611.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
612.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
613.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
614.ds ae a\h'-(\w'a'u*4/10)'e
615.ds Ae A\h'-(\w'A'u*4/10)'E
616.ds oe o\h'-(\w'o'u*4/10)'e
617.ds Oe O\h'-(\w'O'u*4/10)'E
618. \" corrections for vroff
619.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
620.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
621. \" for low resolution devices (crt and lpr)
622.if \n(.H>23 .if \n(.V>19 \
623\{\
624. ds : e
625. ds 8 ss
626. ds v \h'-1'\o'\(aa\(ga'
627. ds _ \h'-1'^
628. ds . \h'-1'.
629. ds 3 3
630. ds o a
631. ds d- d\h'-1'\(ga
632. ds D- D\h'-1'\(hy
633. ds th \o'bp'
634. ds Th \o'LP'
635. ds ae ae
636. ds Ae AE
637. ds oe oe
638. ds Oe OE
639.\}
640.rm #[ #] #H #V #F C
641END
642
643$indent = 0;
644
645$begun = "";
646
647# Unrolling [^A-Z>]|[A-Z](?!<) gives: // MRE pp 165.
648my $nonest = '(?:[^A-Z>]*(?:[A-Z](?!<)[^A-Z>]*)*)';
649
650while (<>) {
651 if ($cutting) {
652 next unless /^=/;
653 $cutting = 0;
654 }
655 if ($begun) {
656 if (/^=end\s+$begun/) {
657 $begun = "";
658 }
659 elsif ($begun =~ /^(roff|man)$/) {
660 print STDOUT $_;
661 }
662 next;
663 }
664 chomp;
665
666 # Translate verbatim paragraph
667
668 if (/^\s/) {
669 @lines = split(/\n/);
670 for (@lines) {
671 1 while s
672 {^( [^\t]* ) \t ( \t* ) }
673 { $1 . ' ' x (8 - (length($1)%8) + 8 * (length($2))) }ex;
674 s/\\/\\e/g;
675 s/\A/\\&/s;
676 }
677 $lines = @lines;
678 makespace() unless $verbatim++;
679 print ".Vb $lines\n";
680 print join("\n", @lines), "\n";
681 print ".Ve\n";
682 $needspace = 0;
683 next;
684 }
685
686 $verbatim = 0;
687
688 if (/^=for\s+(\S+)\s*/s) {
689 if ($1 eq "man" or $1 eq "roff") {
690 print STDOUT $',"\n\n";
691 } else {
692 # ignore unknown for
693 }
694 next;
695 }
696 elsif (/^=begin\s+(\S+)\s*/s) {
697 $begun = $1;
698 if ($1 eq "man" or $1 eq "roff") {
699 print STDOUT $'."\n\n";
700 }
701 next;
702 }
703
704 # check for things that'll hosed our noremap scheme; affects $_
705 init_noremap();
706
707 if (!/^=item/) {
708
709 # trofficate backslashes; must do it before what happens below
710 s/\\/noremap('\\e')/ge;
711
712 # protect leading periods and quotes against *roff
713 # mistaking them for directives
714 s/^(?:[A-Z]<)?[.']/\\&$&/gm;
715
716 # first hide the escapes in case we need to
717 # intuit something and get it wrong due to fmting
718
719 1 while s/([A-Z]<$nonest>)/noremap($1)/ge;
720
721 # func() is a reference to a perl function
722 s{
723 \b
724 (
725 [:\w]+ \(\)
726 )
727 } {I<$1>}gx;
728
729 # func(n) is a reference to a perl function or a man page
730 s{
731 ([:\w]+)
732 (
733 \( [^\051]+ \)
734 )
735 } {I<$1>\\|$2}gx;
736
737 # convert simple variable references
738 s/(\s+)([\$\@%][\w:]+)(?!\()/${1}C<$2>/g;
739
740 if (m{ (
741 [\-\w]+
742 \(
743 [^\051]*?
744 [\@\$,]
745 [^\051]*?
746 \)
747 )
748 }x && $` !~ /([LCI]<[^<>]*|-)$/ && !/^=\w/)
749 {
750 warn "$0: bad option in paragraph $. of $ARGV: ``$1'' should be [LCI]<$1>\n";
751 $oops++;
752 }
753
754 while (/(-[a-zA-Z])\b/g && $` !~ /[\w\-]$/) {
755 warn "$0: bad option in paragraph $. of $ARGV: ``$1'' should be [CB]<$1>\n";
756 $oops++;
757 }
758
759 # put it back so we get the <> processed again;
760 clear_noremap(0); # 0 means leave the E's
761
762 } else {
763 # trofficate backslashes
764 s/\\/noremap('\\e')/ge;
765
766 }
767
768 # need to hide E<> first; they're processed in clear_noremap
769 s/(E<[^<>]+>)/noremap($1)/ge;
770
771
772 $maxnest = 10;
773 while ($maxnest-- && /[A-Z]</) {
774
775 # can't do C font here
776 s/([BI])<($nonest)>/font($1) . $2 . font('R')/eg;
777
778 # files and filelike refs in italics
779 s/F<($nonest)>/I<$1>/g;
780
781 # no break -- usually we want C<> for this
782 s/S<($nonest)>/nobreak($1)/eg;
783
784 # LREF: a la HREF L<show this text|man/section>
785 s:L<([^|>]+)\|[^>]+>:$1:g;
786
787 # LREF: a manpage(3f)
788 s:L<([a-zA-Z][^\s\/]+)(\([^\)]+\))?>:the I<$1>$2 manpage:g;
789
790 # LREF: an =item on another manpage
791 s{
792 L<
793 ([^/]+)
794 /
795 (
796 [:\w]+
797 (\(\))?
798 )
799 >
800 } {the C<$2> entry in the I<$1> manpage}gx;
801
802 # LREF: an =item on this manpage
803 s{
804 ((?:
805 L<
806 /
807 (
808 [:\w]+
809 (\(\))?
810 )
811 >
812 (,?\s+(and\s+)?)?
813 )+)
814 } { internal_lrefs($1) }gex;
815
816 # LREF: a =head2 (head1?), maybe on a manpage, maybe right here
817 # the "func" can disambiguate
818 s{
819 L<
820 (?:
821 ([a-zA-Z]\S+?) /
822 )?
823 "?(.*?)"?
824 >
825 }{
826 do {
827 $1 # if no $1, assume it means on this page.
828 ? "the section on I<$2> in the I<$1> manpage"
829 : "the section on I<$2>"
830 }
831 }gesx; # s in case it goes over multiple lines, so . matches \n
832
833 s/Z<>/\\&/g;
834
835 # comes last because not subject to reprocessing
836 s/C<($nonest)>/noremap("${CFont_embed}${1}\\fR")/eg;
837 }
838
839 if (s/^=//) {
840 $needspace = 0; # Assume this.
841
842 s/\n/ /g;
843
844 ($Cmd, $_) = split(' ', $_, 2);
845
846 $dotlevel = 1;
847 if ($Cmd eq 'head1') {
848 $dotlevel = 1;
849 }
850 elsif ($Cmd eq 'head2') {
851 $dotlevel = 1;
852 }
853 elsif ($Cmd eq 'item') {
854 $dotlevel = 2;
855 }
856
857 if (defined $_) {
858 &escapes($dotlevel);
859 s/"/""/g;
860 }
861
862 clear_noremap(1);
863
864 if ($Cmd eq 'cut') {
865 $cutting = 1;
866 }
867 elsif ($Cmd eq 'head1') {
868 s/\s+$//;
869 delete $wanna_see{$_} if exists $wanna_see{$_};
870 print qq{.SH "$_"\n};
871 push(@Indices, qq{.IX Header "$_"\n});
872 }
873 elsif ($Cmd eq 'head2') {
874 print qq{.Sh "$_"\n};
875 push(@Indices, qq{.IX Subsection "$_"\n});
876 }
877 elsif ($Cmd eq 'over') {
878 push(@indent,$indent);
879 $indent += ($_ + 0) || 5;
880 }
881 elsif ($Cmd eq 'back') {
882 $indent = pop(@indent);
883 warn "$0: Unmatched =back in paragraph $. of $ARGV\n" unless defined $indent;
884 $needspace = 1;
885 }
886 elsif ($Cmd eq 'item') {
887 s/^\*( |$)/\\(bu$1/g;
888 # if you know how to get ":s please do
889 s/\\\*\(L"([^"]+?)\\\*\(R"/'$1'/g;
890 s/\\\*\(L"([^"]+?)""/'$1'/g;
891 s/[^"]""([^"]+?)""[^"]/'$1'/g;
892 # here do something about the $" in perlvar?
893 print STDOUT qq{.Ip "$_" $indent\n};
894 push(@Indices, qq{.IX Item "$_"\n});
895 }
896 elsif ($Cmd eq 'pod') {
897 # this is just a comment
898 }
899 else {
900 warn "$0: Unrecognized pod directive in paragraph $. of $ARGV: $Cmd\n";
901 }
902 }
903 else {
904 if ($needspace) {
905 &makespace;
906 }
907 &escapes(0);
908 clear_noremap(1);
909 print $_, "\n";
910 $needspace = 1;
911 }
912}
913
914print <<"END";
915
916.rn }` ''
917END
918
919if (%wanna_see && !$lax) {
920 @missing = keys %wanna_see;
921 warn "$0: $Filename is missing required section"
922 . (@missing > 1 && "s")
923 . ": @missing\n";
924 $oops++;
925}
926
927foreach (@Indices) { print "$_\n"; }
928
929exit;
930#exit ($oops != 0);
931
932#########################################################################
933
934sub nobreak {
935 my $string = shift;
936 $string =~ s/ /\\ /g;
937 $string;
938}
939
940sub escapes {
941 my $indot = shift;
942
943 s/X<(.*?)>/mkindex($1)/ge;
944
945 # translate the minus in foo-bar into foo\-bar for roff
946 s/([^0-9a-z-])-([^-])/$1\\-$2/g;
947
948 # make -- into the string version \*(-- (defined above)
949 s/\b--\b/\\*(--/g;
950 s/"--([^"])/"\\*(--$1/g; # should be a better way
951 s/([^"])--"/$1\\*(--"/g;
952
953 # fix up quotes; this is somewhat tricky
954 my $dotmacroL = 'L';
955 my $dotmacroR = 'R';
956 if ( $indot == 1 ) {
957 $dotmacroL = 'M';
958 $dotmacroR = 'S';
959 }
960 elsif ( $indot >= 2 ) {
961 $dotmacroL = 'N';
962 $dotmacroR = 'T';
963 }
964 if (!/""/) {
965 s/(^|\s)(['"])/noremap("$1\\*($dotmacroL$2")/ge;
966 s/(['"])($|[\-\s,;\\!?.])/noremap("\\*($dotmacroR$1$2")/ge;
967 }
968
969 #s/(?!")(?:.)--(?!")(?:.)/\\*(--/g;
970 #s/(?:(?!")(?:.)--(?:"))|(?:(?:")--(?!")(?:.))/\\*(--/g;
971
972
973 # make sure that func() keeps a bit a space tween the parens
974 ### s/\b\(\)/\\|()/g;
975 ### s/\b\(\)/(\\|)/g;
976
977 # make C++ into \*C+, which is a squinched version (defined above)
978 s/\bC\+\+/\\*(C+/g;
979
980 # make double underbars have a little tiny space between them
981 s/__/_\\|_/g;
982
983 # PI goes to \*(PI (defined above)
984 s/\bPI\b/noremap('\\*(PI')/ge;
985
986 # make all caps a teeny bit smaller, but don't muck with embedded code literals
987 my $hidCFont = font('C');
988 if ($Cmd !~ /^head1/) { # SH already makes smaller
989 # /g isn't enough; 1 while or we'll be off
990
991# 1 while s{
992# (?!$hidCFont)(..|^.|^)
993# \b
994# (
995# [A-Z][\/A-Z+:\-\d_$.]+
996# )
997# (s?)
998# \b
999# } {$1\\s-1$2\\s0}gmox;
1000
1001 1 while s{
1002 (?!$hidCFont)(..|^.|^)
1003 (
1004 \b[A-Z]{2,}[\/A-Z+:\-\d_\$]*\b
1005 )
1006 } {
1007 $1 . noremap( '\\s-1' . $2 . '\\s0' )
1008 }egmox;
1009
1010 }
1011}
1012
1013# make troff just be normal, but make small nroff get quoted
1014# decided to just put the quotes in the text; sigh;
1015sub ccvt {
1016 local($_,$prev) = @_;
1017 noremap(qq{.CQ "$_" \n\\&});
1018}
1019
1020sub makespace {
1021 if ($indent) {
1022 print ".Sp\n";
1023 }
1024 else {
1025 print ".PP\n";
1026 }
1027}
1028
1029sub mkindex {
1030 my ($entry) = @_;
1031 my @entries = split m:\s*/\s*:, $entry;
1032 push @Indices, ".IX Xref " . join ' ', map {qq("$_")} @entries;
1033 return '';
1034}
1035
1036sub font {
1037 local($font) = shift;
1038 return '\\f' . noremap($font);
1039}
1040
1041sub noremap {
1042 local($thing_to_hide) = shift;
1043 $thing_to_hide =~ tr/\000-\177/\200-\377/;
1044 return $thing_to_hide;
1045}
1046
1047sub init_noremap {
1048 # escape high bit characters in input stream
1049 s/([\200-\377])/"E<".ord($1).">"/ge;
1050}
1051
1052sub clear_noremap {
1053 my $ready_to_print = $_[0];
1054
1055 tr/\200-\377/\000-\177/;
1056
1057 # trofficate backslashes
1058 # s/(?!\\e)(?:..|^.|^)\\/\\e/g;
1059
1060 # now for the E<>s, which have been hidden until now
1061 # otherwise the interative \w<> processing would have
1062 # been hosed by the E<gt>
1063 s {
1064 E<
1065 (
1066 ( \d + )
1067 | ( [A-Za-z]+ )
1068 )
1069 >
1070 } {
1071 do {
1072 defined $2
1073 ? chr($2)
1074 :
1075 exists $HTML_Escapes{$3}
1076 ? do { $HTML_Escapes{$3} }
1077 : do {
1078 warn "$0: Unknown escape in paragraph $. of $ARGV: ``$&''\n";
1079 "E<$1>";
1080 }
1081 }
1082 }egx if $ready_to_print;
1083}
1084
1085sub internal_lrefs {
1086 local($_) = shift;
1087 local $trailing_and = s/and\s+$// ? "and " : "";
1088
1089 s{L</([^>]+)>}{$1}g;
1090 my(@items) = split( /(?:,?\s+(?:and\s+)?)/ );
1091 my $retstr = "the ";
1092 my $i;
1093 for ($i = 0; $i <= $#items; $i++) {
1094 $retstr .= "C<$items[$i]>";
1095 $retstr .= ", " if @items > 2 && $i != $#items;
1096 $retstr .= " and " if $i+2 == @items;
1097 }
1098
1099 $retstr .= " entr" . ( @items > 1 ? "ies" : "y" )
1100 . " elsewhere in this document";
1101 # terminal space to avoid words running together (pattern used
1102 # strips terminal spaces)
1103 $retstr .= " " if length $trailing_and;
1104 $retstr .= $trailing_and;
1105
1106 return $retstr;
1107
1108}
1109
1110BEGIN {
1111%HTML_Escapes = (
1112 'amp' => '&', # ampersand
1113 'lt' => '<', # left chevron, less-than
1114 'gt' => '>', # right chevron, greater-than
1115 'quot' => '"', # double quote
1116
1117 "Aacute" => "A\\*'", # capital A, acute accent
1118 "aacute" => "a\\*'", # small a, acute accent
1119 "Acirc" => "A\\*^", # capital A, circumflex accent
1120 "acirc" => "a\\*^", # small a, circumflex accent
1121 "AElig" => '\*(AE', # capital AE diphthong (ligature)
1122 "aelig" => '\*(ae', # small ae diphthong (ligature)
1123 "Agrave" => "A\\*`", # capital A, grave accent
1124 "agrave" => "A\\*`", # small a, grave accent
1125 "Aring" => 'A\\*o', # capital A, ring
1126 "aring" => 'a\\*o', # small a, ring
1127 "Atilde" => 'A\\*~', # capital A, tilde
1128 "atilde" => 'a\\*~', # small a, tilde
1129 "Auml" => 'A\\*:', # capital A, dieresis or umlaut mark
1130 "auml" => 'a\\*:', # small a, dieresis or umlaut mark
1131 "Ccedil" => 'C\\*,', # capital C, cedilla
1132 "ccedil" => 'c\\*,', # small c, cedilla
1133 "Eacute" => "E\\*'", # capital E, acute accent
1134 "eacute" => "e\\*'", # small e, acute accent
1135 "Ecirc" => "E\\*^", # capital E, circumflex accent
1136 "ecirc" => "e\\*^", # small e, circumflex accent
1137 "Egrave" => "E\\*`", # capital E, grave accent
1138 "egrave" => "e\\*`", # small e, grave accent
1139 "ETH" => '\\*(D-', # capital Eth, Icelandic
1140 "eth" => '\\*(d-', # small eth, Icelandic
1141 "Euml" => "E\\*:", # capital E, dieresis or umlaut mark
1142 "euml" => "e\\*:", # small e, dieresis or umlaut mark
1143 "Iacute" => "I\\*'", # capital I, acute accent
1144 "iacute" => "i\\*'", # small i, acute accent
1145 "Icirc" => "I\\*^", # capital I, circumflex accent
1146 "icirc" => "i\\*^", # small i, circumflex accent
1147 "Igrave" => "I\\*`", # capital I, grave accent
1148 "igrave" => "i\\*`", # small i, grave accent
1149 "Iuml" => "I\\*:", # capital I, dieresis or umlaut mark
1150 "iuml" => "i\\*:", # small i, dieresis or umlaut mark
1151 "Ntilde" => 'N\*~', # capital N, tilde
1152 "ntilde" => 'n\*~', # small n, tilde
1153 "Oacute" => "O\\*'", # capital O, acute accent
1154 "oacute" => "o\\*'", # small o, acute accent
1155 "Ocirc" => "O\\*^", # capital O, circumflex accent
1156 "ocirc" => "o\\*^", # small o, circumflex accent
1157 "Ograve" => "O\\*`", # capital O, grave accent
1158 "ograve" => "o\\*`", # small o, grave accent
1159 "Oslash" => "O\\*/", # capital O, slash
1160 "oslash" => "o\\*/", # small o, slash
1161 "Otilde" => "O\\*~", # capital O, tilde
1162 "otilde" => "o\\*~", # small o, tilde
1163 "Ouml" => "O\\*:", # capital O, dieresis or umlaut mark
1164 "ouml" => "o\\*:", # small o, dieresis or umlaut mark
1165 "szlig" => '\*8', # small sharp s, German (sz ligature)
1166 "THORN" => '\\*(Th', # capital THORN, Icelandic
1167 "thorn" => '\\*(th',, # small thorn, Icelandic
1168 "Uacute" => "U\\*'", # capital U, acute accent
1169 "uacute" => "u\\*'", # small u, acute accent
1170 "Ucirc" => "U\\*^", # capital U, circumflex accent
1171 "ucirc" => "u\\*^", # small u, circumflex accent
1172 "Ugrave" => "U\\*`", # capital U, grave accent
1173 "ugrave" => "u\\*`", # small u, grave accent
1174 "Uuml" => "U\\*:", # capital U, dieresis or umlaut mark
1175 "uuml" => "u\\*:", # small u, dieresis or umlaut mark
1176 "Yacute" => "Y\\*'", # capital Y, acute accent
1177 "yacute" => "y\\*'", # small y, acute accent
1178 "yuml" => "y\\*:", # small y, dieresis or umlaut mark
1179);
1180}
1181
diff --git a/src/lib/libcrypto/util/selftest.pl b/src/lib/libcrypto/util/selftest.pl
new file mode 100644
index 0000000000..91e962a312
--- /dev/null
+++ b/src/lib/libcrypto/util/selftest.pl
@@ -0,0 +1,174 @@
1#!/usr/local/bin/perl -w
2#
3# Run the test suite and generate a report
4#
5
6if (! -f "Configure") {
7 print "Please run perl util/selftest.pl in the OpenSSL directory.\n";
8 exit 1;
9}
10
11my $report="testlog";
12my $os="??";
13my $version="??";
14my $platform0="??";
15my $platform="??";
16my $options="??";
17my $last="??";
18my $ok=0;
19my $cc="cc";
20my $cversion="??";
21my $sep="-----------------------------------------------------------------------------\n";
22
23open(OUT,">$report") or die;
24
25print OUT "OpenSSL self-test report:\n\n";
26
27$uname=`uname -a`;
28$uname="??" if $uname eq "";
29
30$c=`sh config -t`;
31foreach $_ (split("\n",$c)) {
32 $os=$1 if (/Operating system: (.*)$/);
33 $platform0=$1 if (/Configuring for (.*)$/);
34}
35
36system "sh config" if (! -f "Makefile.ssl");
37
38if (open(IN,"<Makefile.ssl")) {
39 while (<IN>) {
40 $version=$1 if (/^VERSION=(.*)$/);
41 $platform=$1 if (/^PLATFORM=(.*)$/);
42 $options=$1 if (/^OPTIONS=(.*)$/);
43 $cc=$1 if (/^CC= *(.*)$/);
44 }
45 close(IN);
46} else {
47 print OUT "Error running config!\n";
48}
49
50$cversion=`$cc -v 2>&1`;
51$cversion=`$cc -V 2>&1` if $cversion =~ "usage";
52$cversion=`$cc --version` if $cversion eq "";
53$cversion =~ s/Reading specs.*\n//;
54$cversion =~ s/usage.*\n//;
55chomp $cversion;
56
57if (open(IN,"<CHANGES")) {
58 while(<IN>) {
59 if (/\*\) (.{0,55})/) {
60 $last=$1;
61 last;
62 }
63 }
64 close(IN);
65}
66
67print OUT "OpenSSL version: $version\n";
68print OUT "Last change: $last...\n";
69print OUT "Options: $options\n" if $options ne "";
70print OUT "OS (uname): $uname";
71print OUT "OS (config): $os\n";
72print OUT "Target (default): $platform0\n";
73print OUT "Target: $platform\n";
74print OUT "Compiler: $cversion\n";
75print OUT "\n";
76
77print "Checking compiler...\n";
78if (open(TEST,">cctest.c")) {
79 print TEST "#include <stdio.h>\nmain(){printf(\"Hello world\\n\");}\n";
80 close(TEST);
81 system("$cc -o cctest cctest.c");
82 if (`./cctest` !~ /Hello world/) {
83 print OUT "Compiler doesn't work.\n";
84 goto err;
85 }
86} else {
87 print OUT "Can't create cctest.c\n";
88}
89if (open(TEST,">cctest.c")) {
90 print TEST "#include <openssl/opensslv.h>\nmain(){printf(OPENSSL_VERSION_TEXT);}\n";
91 close(TEST);
92 system("$cc -o cctest -Iinclude cctest.c");
93 $cctest = `./cctest`;
94 if ($cctest !~ /OpenSSL $version/) {
95 if ($cctest =~ /OpenSSL/) {
96 print OUT "#include uses headers from different OpenSSL version!\n";
97 } else {
98 print OUT "Can't compile test program!\n";
99 }
100 goto err;
101 }
102} else {
103 print OUT "Can't create cctest.c\n";
104}
105
106print "Running make...\n";
107if (system("make 2>&1 | tee make.log") > 255) {
108
109 print OUT "make failed!\n";
110 if (open(IN,"<make.log")) {
111 print OUT $sep;
112 while (<IN>) {
113 print OUT;
114 }
115 close(IN);
116 print OUT $sep;
117 } else {
118 print OUT "make.log not found!\n";
119 }
120 goto err;
121}
122
123$_=$options;
124s/no-asm//;
125if (/no-/)
126{
127 print OUT "Test skipped.\n";
128 goto err;
129}
130
131print "Running make test...\n";
132if (system("make test 2>&1 | tee make.log") > 255)
133 {
134 print OUT "make test failed!\n";
135} else {
136 $ok=1;
137}
138
139if ($ok and open(IN,"<make.log")) {
140 while (<IN>) {
141 $ok=2 if /^platform: $platform/;
142 }
143 close(IN);
144}
145
146if ($ok != 2) {
147 print OUT "Failure!\n";
148 if (open(IN,"<make.log")) {
149 print OUT $sep;
150 while (<IN>) {
151 print OUT;
152 }
153 close(IN);
154 print OUT $sep;
155 } else {
156 print OUT "make.log not found!\n";
157 }
158} else {
159 print OUT "Test passed.\n";
160}
161err:
162close(OUT);
163
164print "\n";
165open(IN,"<$report") or die;
166while (<IN>) {
167 if (/$sep/) {
168 print "[...]\n";
169 last;
170 }
171 print;
172}
173print "\nTest report in file $report\n";
174
diff --git a/src/lib/libcrypto/util/ssleay.num b/src/lib/libcrypto/util/ssleay.num
index 8121738bd6..32b2e960c4 100644
--- a/src/lib/libcrypto/util/ssleay.num
+++ b/src/lib/libcrypto/util/ssleay.num
@@ -215,3 +215,13 @@ SSL_CTX_set_cert_verify_callback 232
215sk_SSL_COMP_sort 233 215sk_SSL_COMP_sort 233
216sk_SSL_CIPHER_sort 234 216sk_SSL_CIPHER_sort 234
217SSL_CTX_set_default_passwd_cb_userdata 235 217SSL_CTX_set_default_passwd_cb_userdata 235
218SSL_set_purpose 236
219SSL_CTX_set_trust 237
220SSL_CTX_set_purpose 238
221SSL_set_trust 239
222SSL_get_finished 240
223SSL_get_peer_finished 241
224SSL_get1_session 242
225SSL_CTX_callback_ctrl 243
226SSL_callback_ctrl 244
227SSL_CTX_sessions 245