Merge tag 'upstream/2016.20160507.40923' into experimental
Upstream version 2016.20160507.40923
# gpg: Signature made Sat 07 May 2016 08:34:24 AM JST
# gpg: using RSA key 0xEC00B8DAD32266AA
# gpg: Good signature from "Norbert Preining <norbert@preining.info>" [ultimate]
# gpg: aka "Norbert Preining <preining@logic.at>" [ultimate]
# gpg: aka "Norbert Preining <preining@debian.org>" [ultimate]
# gpg: aka "Norbert Preining <preining@jaist.ac.jp>" [ultimate]
# gpg: aka "[jpeg image of size 4185]" [ultimate]
# Primary key fingerprint: F7D8 A928 26E3 16A1 9FA0 ACF0 6CAC A448 860C DC13
# Subkey fingerprint: 5871 F824 2DCC 3660 2362 BE7D EC00 B8DA D322 66AA
Norbert Preining
8 years ago
0 | 0 | (This file public domain. Originally written by Mojca Miklavec, 2015-16.) |
1 | 1 | |
2 | 2 | Compiling TeX binaries on Solaris |
3 | ||
4 | (The document describes the procedures used on Sparc Solaris binaries, | |
5 | but the same rules should apply to i386 and x86_64 as well.) | |
6 | 3 | |
7 | 4 | Solaris 9 has been out of official support for a while and making |
8 | 5 | software compile on that platform is challenging, so it hardly makes any |
40 | 37 | SUNW_0.8; |
41 | 38 | SUNW_0.7; |
42 | 39 | |
40 | Building for 64-bit | |
41 | =================== | |
42 | ||
43 | All binaries have been compiled with gcc-5.2. | |
44 | The only thing that is needed to build for 64-bit is to define | |
45 | export CC="/path/to/gcc-5.2 -m64" | |
46 | export CXX="/path/to/g++-5.2 -m64" | |
47 | ||
43 | 48 | Building wget |
44 | 49 | ============= |
45 | 50 | |
69 | 74 | The binary was built with gcc 5.2. |
70 | 75 | The definition '#define _XOPEN_SOURCE 500' has been removed from 'src/sysdep.h' |
71 | 76 | to avoid compile error due to the fact that GCC 5 switched to -std=99. |
77 | ||
78 | On i386 and x86_64 one has to manually add "-lsocket -lnsl" to the last linker command. | |
79 | This should be reported upstream. | |
72 | 80 | |
73 | 81 | > pvs Master/tlpkg/installer/wget/wget.sparc-solaris |
74 | 82 | libsocket.so.1 (SUNW_1.4); |
107 | 115 | If users need binaries to run on even older systems, we can target what |
108 | 116 | is desired by changing the map file. |
109 | 117 | |
118 | Building asymptote | |
119 | ================== | |
120 | ||
121 | Asymptote has been built with the following flags: | |
122 | ||
123 | export CC=/opt/csw/bin/gcc-5.2 | |
124 | export CXX=/opt/csw/bin/g++-5.2 | |
125 | ./configure --prefix=/tmp/asyinst --enable-texlive-build \ | |
126 | --disable-fftw --disable-offscreen \ | |
127 | --disable-gl --disable-gsl --disable-readline | |
128 | ||
129 | Even though GL, GSL and readline should generally not be disabled, | |
130 | the resulting binaries would not be portable enough otherwise. | |
131 | ||
132 | Because a newer gcc compiler was used we had to link statically against stdlib. | |
133 | In the last command that builds the asy binary the following part: | |
134 | -lnsl -lrt -lz -lm gc-7.4.2/.libs/libgc.a | |
135 | was replaced by: | |
136 | gc-7.4.2/.libs/libgc.a -nodefaultlibs -Wl,-Bstatic -lstdc++ \ | |
137 | -Wl,-Bdynamic -lnsl -lrt -lz -lm -lgcc_eh -lgcc -lc | |
138 | ||
139 | The resulting binary depends on: | |
140 | ||
141 | > pvs asy | |
142 | libnsl.so.1 (SUNW_0.7); | |
143 | librt.so.1 (SUNW_1.2); | |
144 | libm.so.2 (SUNW_1.2); | |
145 | libc.so.1 (SUNW_1.22, SUNWprivate_1.1); | |
146 | > ldd asy | |
147 | libnsl.so.1 => /lib/libnsl.so.1 | |
148 | librt.so.1 => /lib/librt.so.1 | |
149 | libz.so.1 => /usr/lib/libz.so.1 | |
150 | libm.so.2 => /lib/libm.so.2 | |
151 | libc.so.1 => /lib/libc.so.1 | |
152 | libmp.so.2 => /lib/libmp.so.2 | |
153 | libmd.so.1 => /lib/libmd.so.1 | |
154 | libscf.so.1 => /lib/libscf.so.1 | |
155 | libaio.so.1 => /lib/libaio.so.1 | |
156 | libdoor.so.1 => /lib/libdoor.so.1 | |
157 | libuutil.so.1 => /lib/libuutil.so.1 | |
158 | libgen.so.1 => /lib/libgen.so.1 | |
159 | ||
160 | Additional notes: | |
161 | ||
162 | * gc-7.4.2 doesn't support sparc properly, so the sources for sparc were fetched from | |
163 | https://github.com/ivmai/bdwgc/tree/release-7_4 | |
164 | and put into gc-7.4.2 | |
165 | Running ./autogen.sh was needed before proceeding | |
166 | ||
167 | * Workarounds were needed for: | |
168 | * https://github.com/vectorgraphics/asymptote/issues/19 | |
169 | CC and CXX env variables are not respected when building GC | |
170 | * https://github.com/vectorgraphics/asymptote/issues/20 | |
171 | Provide a configure-time option to disable sigsegv | |
172 | * https://github.com/vectorgraphics/asymptote/pull/21 | |
173 | Makefile.in: replace 'test ! -e' => 'test ! -s' | |
174 | * https://github.com/vectorgraphics/asymptote/issues/22 | |
175 | Wrong expansion of revision in Bourne Shell | |
176 | ||
177 | * Patches used are listed below. | |
178 | ||
110 | 179 | Building texlive |
111 | 180 | ================ |
112 | 181 | |
116 | 185 | The '--without-iconv' makes sure to avoid linking against libiconv |
117 | 186 | which is not available on SunOS by default. |
118 | 187 | |
188 | ||
189 | ||
190 | Patches for Asymptote | |
191 | ===================== | |
192 | ||
193 | --- Makefile.in (revision 40918) | |
194 | +++ Makefile.in (working copy) | |
195 | @@ -114,7 +114,7 @@ | |
196 | fi | |
197 | ||
198 | version: $(GCLIB) $(FILES:=.o) | |
199 | - if test ! -e revision.cc -o "$(revision)" != "$(last)"; then \ | |
200 | + if test ! -s revision.cc -o "$(revision)" != "$(last)"; then \ | |
201 | echo $(REVISION)\"$(revision)\"\; > revision.cc; \ | |
202 | fi | |
203 | $(CXX) $(OPTS) $(INCL) -o revision.o -c revision.cc; | |
204 | @@ -160,7 +160,7 @@ | |
205 | mv gc-7.2 gc-7.2d; \ | |
206 | fi | |
207 | cd $(GC) && \ | |
208 | - ./configure $(GCOPTIONS); \ | |
209 | + ./configure CC="$(CC)" CXX="$(CXX)" $(GCOPTIONS); \ | |
210 | $(MAKE) check | |
211 | ||
212 | $(GCPPLIB): $(GCLIB) | |
213 | --- configure.ac (revision 40918) | |
214 | +++ configure.ac (working copy) | |
215 | @@ -223,15 +223,15 @@ | |
216 | AC_SUBST(OPTIONS) | |
217 | ||
218 | # Checks for libraries. | |
219 | -AC_CHECK_LIB([ncurses], [setupterm], [AC_DEFINE(HAVE_LIBCURSES) | |
220 | - LIBS=$LIBS"-lncurses "], | |
221 | - AC_CHECK_LIB([curses], [setupterm])) | |
222 | +#AC_CHECK_LIB([ncurses], [setupterm], [AC_DEFINE(HAVE_LIBCURSES) | |
223 | +# LIBS=$LIBS"-lncurses "], | |
224 | +# AC_CHECK_LIB([curses], [setupterm])) | |
225 | AC_CHECK_LIB([m], [sqrt],, | |
226 | AC_MSG_ERROR([*** Please install libm on your system ***])) | |
227 | AC_CHECK_LIB([z], [deflate],, | |
228 | AC_MSG_ERROR([*** Please install libz or zlib-devel on your system ***])) | |
229 | AX_PTHREAD | |
230 | -AC_CHECK_LIB([sigsegv], [stackoverflow_install_handler]) | |
231 | +#AC_CHECK_LIB([sigsegv], [stackoverflow_install_handler]) | |
232 | AC_CHECK_LIB([rt], [sched_yield]) | |
233 | ||
234 | AC_ARG_ENABLE(readline, | |
235 | @@ -254,7 +254,7 @@ | |
236 | # Checks for header files. | |
237 | AC_HEADER_SYS_WAIT | |
238 | AC_CHECK_HEADERS([fenv.h stddef.h libintl.h]) | |
239 | -AC_CHECK_HEADERS([ncurses/curses.h ncurses.h curses.h], [break]) | |
240 | +#AC_CHECK_HEADERS([ncurses/curses.h ncurses.h curses.h], [break]) | |
241 | AC_CHECK_HEADERS(fpu_control.h) | |
242 | ||
243 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include "xstream.h"])], | |
244 |
0 | 2016-05-04 Akira Kakuto <kakuto@fuk.kindai.ac.jp> | |
1 | ||
2 | * pdfdoc.c, pdfencrypt.c, pdffont.c, pdfobj.h, xbb.c: Improve the | |
3 | support of SOURCE_DATE_EPOCH. | |
4 | ||
0 | 5 | 2016-05-02 Akira Kakuto <kakuto@fuk.kindai.ac.jp> |
1 | 6 | |
2 | 7 | * pdfdoc.c, xbb.c: Apply the patch by Alexis, |
442 | 442 | time_t gmtoff; |
443 | 443 | |
444 | 444 | now = get_unique_time_if_given(); |
445 | if (now == 0) { | |
445 | if (now == INVALID_EPOCH_VALUE) { | |
446 | 446 | now = time(NULL); |
447 | 447 | localtime_r(&now, &local); |
448 | 448 | gmtime_r(&now, &tm); |
466 | 466 | struct tm *bd_time; |
467 | 467 | |
468 | 468 | current_time = get_unique_time_if_given(); |
469 | if (current_time == 0) { | |
469 | if (current_time == INVALID_EPOCH_VALUE) { | |
470 | 470 | time(¤t_time); |
471 | 471 | bd_time = localtime(¤t_time); |
472 | 472 |
100 | 100 | struct pdf_sec *p = &sec_data; |
101 | 101 | |
102 | 102 | current_time = get_unique_time_if_given(); |
103 | if (current_time == 0) | |
103 | if (current_time == INVALID_EPOCH_VALUE) | |
104 | 104 | current_time = time(NULL); |
105 | 105 | srand(current_time); /* For AES IV */ |
106 | 106 | p->setting.use_aes = use_aes; |
126 | 126 | |
127 | 127 | date_string = NEW(15, char); |
128 | 128 | current_time = get_unique_time_if_given(); |
129 | if (current_time == 0) { | |
129 | if (current_time == INVALID_EPOCH_VALUE) { | |
130 | 130 | time(¤t_time); |
131 | 131 | bd_time = localtime(¤t_time); |
132 | 132 | } else { |
89 | 89 | |
90 | 90 | /* If an environment variable SOURCE_DATE_EPOCH is correctly defined like |
91 | 91 | * SOURCE_DATE_EPOCH=1456304492, then returns this value, to be used as the |
92 | * 'current time', otherwise returns 0. | |
92 | * 'current time', otherwise returns INVALID_EPOCH_VALUE (= 0x7fffffffffffffffULL). | |
93 | * In the case of Microsoft Visual Studio 2010, the value should be less | |
94 | * than 32535291600. | |
93 | 95 | */ |
94 | 96 | |
95 | 97 | time_t |
98 | 100 | const char *source_date_epoch; |
99 | 101 | int64_t epoch; |
100 | 102 | char *endptr; |
101 | time_t ret = 0; | |
103 | time_t ret = INVALID_EPOCH_VALUE; | |
102 | 104 | |
103 | 105 | source_date_epoch = getenv("SOURCE_DATE_EPOCH"); |
104 | 106 | if (source_date_epoch) { |
120 | 122 | if (first) { |
121 | 123 | time_t current_time; |
122 | 124 | current_time = get_unique_time_if_given(); |
123 | if (current_time == 0) | |
125 | if (current_time == INVALID_EPOCH_VALUE) | |
124 | 126 | current_time = time(NULL); |
125 | 127 | srand(current_time); |
126 | 128 | first = 0; |
198 | 198 | extern pdf_obj *pdf_new_indirect (pdf_file *pf, unsigned label, unsigned short generation); |
199 | 199 | |
200 | 200 | extern time_t get_unique_time_if_given(void); |
201 | #define INVALID_EPOCH_VALUE 0x7fffffffffffffffULL | |
201 | 202 | |
202 | 203 | #endif /* _PDFOBJ_H_ */ |
94 | 94 | struct tm *bd_time; |
95 | 95 | |
96 | 96 | current_time = get_unique_time_if_given(); |
97 | if (current_time == 0) { | |
97 | if (current_time == INVALID_EPOCH_VALUE) { | |
98 | 98 | time(¤t_time); |
99 | 99 | bd_time = localtime(¤t_time); |
100 | 100 | } else { |
0 | 2016-05-06 Akira Kakuto <kakuto@fuk.kindai.ac.jp> | |
1 | ||
2 | * output.c: Avoid to crash for to large a value of SOURCE_DATE_EPOCH | |
3 | (w32 only). | |
4 | ||
5 | 2016-05-04 Akira Kakuto <kakuto@fuk.kindai.ac.jp> | |
6 | ||
7 | * output.c: Support SOURCE_DATE_EPOCH for %%CreationDate. | |
8 | ||
0 | 9 | 2016-03-24 Akira Kakuto <kakuto@fuk.kindai.ac.jp> |
1 | 10 | |
2 | 11 | * writet1.c: Fix one-byte buffer overflow bug reported by Hanno Boeck: |
84 | 84 | #endif |
85 | 85 | #include <time.h> /* asctime() and localtime(), at least on BSD Unix */ |
86 | 86 | static time_t jobtime; |
87 | #endif | |
87 | ||
88 | #if defined(_MSC_VER) | |
89 | #define strtoll _strtoi64 | |
90 | #endif | |
91 | ||
92 | #define INVALID_EPOCH_VALUE 0x7fffffffffffffffULL | |
93 | ||
94 | static time_t | |
95 | get_unique_time_if_given(void) | |
96 | { | |
97 | const char *source_date_epoch; | |
98 | int64_t epoch; | |
99 | char *endptr; | |
100 | time_t ret = INVALID_EPOCH_VALUE; | |
101 | ||
102 | source_date_epoch = getenv("SOURCE_DATE_EPOCH"); | |
103 | if (source_date_epoch) { | |
104 | errno = 0; | |
105 | epoch = strtoll(source_date_epoch, &endptr, 10); | |
106 | if (!(epoch < 0 || *endptr != '\0' || errno != 0)) { | |
107 | ret = (time_t) epoch; | |
108 | #if defined(_MSC_VER) | |
109 | if (ret > 32535291599ULL) | |
110 | ret = 32535291599ULL; | |
111 | #endif | |
112 | } | |
113 | } | |
114 | return ret; | |
115 | } | |
116 | #endif /* CREATIONDATE */ | |
117 | ||
88 | 118 | /* |
89 | 119 | * This routine copies a file down the pipe. Search path uses the |
90 | 120 | * header path. |
1387 | 1417 | if (*iname) |
1388 | 1418 | fprintf(bitfile, "%%%%Title: %s\n", iname); |
1389 | 1419 | #ifdef CREATIONDATE |
1390 | jobtime=time(0); | |
1391 | fprintf(bitfile, "%%%%CreationDate: %s", | |
1392 | asctime(localtime(&jobtime))); | |
1420 | jobtime = get_unique_time_if_given(); | |
1421 | if (jobtime == INVALID_EPOCH_VALUE) { | |
1422 | jobtime = time(0); | |
1423 | fprintf(bitfile, "%%%%CreationDate: %s", | |
1424 | asctime(localtime(&jobtime))); | |
1425 | } else { | |
1426 | fprintf(bitfile, "%%%%CreationDate: %s", | |
1427 | asctime(gmtime(&jobtime))); | |
1428 | } | |
1393 | 1429 | #endif |
1394 | 1430 | if (! isepsf) { |
1395 | 1431 | /* |
6 | 6 | -- LICENSE: GPL v2.0 |
7 | 7 | ----------------------------------------------------------------------- |
8 | 8 | |
9 | luaotfload = luaotfload or { } | |
10 | local version = "2.7" | |
11 | luaotfload.version = version | |
12 | luaotfload.self = "luaotfload-tool" | |
9 | luaotfload = luaotfload or { } | |
10 | local version = "2.7" | |
11 | luaotfload.version = version | |
12 | luaotfload.min_luatex_version = { 0, 95, 0 } --- i. e. 0.95.0 | |
13 | luaotfload.self = "luaotfload-tool" | |
13 | 14 | |
14 | 15 | --[[doc-- |
15 | 16 | |
31 | 32 | --doc]]-- |
32 | 33 | |
33 | 34 | kpse.set_program_name "luatex" |
34 | ||
35 | --[[doc-- | |
36 | ||
37 | We test for Lua 5.1 by means of capability detection to see if | |
38 | we’re running an outdated Luatex. If so, we bail. | |
39 | ||
40 | \url{http://lua-users.org/wiki/LuaVersionCompatibility} | |
41 | ||
42 | --doc]]-- | |
43 | ||
44 | 35 | |
45 | 36 | local iowrite = io.write |
46 | 37 | local kpsefind_file = kpse.find_file |
58 | 49 | local tonumber = tonumber |
59 | 50 | local type = type |
60 | 51 | |
61 | local runtime | |
62 | if _G.getfenv ~= nil then -- 5.1 or LJ | |
63 | if _G.jit ~= nil then | |
64 | runtime = { "jit", jit.version } | |
65 | else | |
66 | runtime = { "stock", _VERSION } | |
67 | print "FATAL ERROR" | |
68 | print "Luaotfload requires a Luatex version >=0.76." | |
69 | print "Please update your TeX distribution!" | |
70 | os.exit (-1) | |
71 | end | |
72 | else -- 5.2 | |
73 | runtime = { "stock", _VERSION } | |
52 | do | |
53 | local runtime = _G.jit and { "jit" , jit.version } | |
54 | or { "stock", _VERSION } | |
55 | local stats = status and status.list () | |
56 | local minimum = luaotfload.min_luatex_version | |
57 | local actual = { 0, 0, 0 } | |
58 | if stats then | |
59 | local major = stats.luatex_version / 100 | |
60 | local minor = stats.luatex_version % 100 | |
61 | local revision = stats.luatex_revision --[[ : string ]] | |
62 | local revno = tonumber (revision) | |
63 | actual = { major, minor, revno or 0 } | |
64 | end | |
65 | ||
66 | if actual [1] < minimum [1] or actual [2] < minimum [2] | |
67 | or actual [3] < minimum [3] | |
68 | then | |
69 | texio.write_nl ("term and log", | |
70 | string.format ("\tFATAL ERROR\n\z | |
71 | \tLuaotfload requires a Luatex version >= %d.%d.%d.\n\z | |
72 | \tPlease update your TeX distribution!\n\n", | |
73 | (unpack or table.unpack) (minimum))) | |
74 | error "version check failed" | |
75 | end | |
76 | luaotfload.runtime = runtime | |
77 | luaotfload.luatex_version = actual | |
74 | 78 | end |
75 | 79 | |
76 | 80 | local C, Ct, P, S = lpeg.C, lpeg.Ct, lpeg.P, lpeg.S |
335 | 339 | local out = function (...) texiowrite_nl (stringformat (...)) end |
336 | 340 | local uname = os.uname () |
337 | 341 | local meta = fonts.names.getmetadata () |
338 | local info = status.list () | |
342 | ||
343 | local runtime = luaotfload.runtime | |
344 | local actual = luaotfload.luatex_version | |
345 | local status = config.luaotfload.status | |
346 | local notes = status and status.notes or { } | |
347 | ||
339 | 348 | out (about, luaotfload.self) |
340 | 349 | out ("%s version: %q", luaotfload.self, version) |
341 | out ("Revision: %q", config.luaotfload.status.notes.revision) | |
350 | if notes.description then | |
351 | out ("Luaotfload: %q", notes.description) | |
352 | end | |
353 | out ("Revision: %q", notes.revision) | |
342 | 354 | out ("Lua interpreter: %s; version %q", runtime[1], runtime[2]) |
343 | 355 | --[[out ("Luatex SVN revision: %d", info.luatex_svn)]] --> SVN r5624 |
344 | out ("Luatex version: %.2f.%d", | |
345 | info.luatex_version / 100, | |
346 | info.luatex_revision) | |
356 | out ("Luatex version: %d.%d", actual [1], actual [2]) | |
347 | 357 | out ("Platform: type=%s name=%s", os.type, os.name) |
348 | 358 | |
349 | 359 | local uname_vars = tablesortedkeys (uname) |
355 | 365 | out("No database metadata available.") |
356 | 366 | else |
357 | 367 | out ("Index: version=%q created=%q modified=%q", |
358 | config.luaotfload.status.notes.revision, | |
368 | meta.version or "too old", | |
359 | 369 | meta.created or "ages ago", |
360 | 370 | meta.modified or "ages ago") |
361 | 371 | end |
1159 | 1169 | tmpspec.size = 655360 --- assume 10pt |
1160 | 1170 | end |
1161 | 1171 | |
1162 | local foundname, subfont, success | |
1163 | ||
1164 | if tmpspec.lookup == "name" | |
1165 | or tmpspec.lookup == "anon" --- not *exactly* as resolvers.anon | |
1166 | then | |
1167 | foundname, _, success = fonts.names.lookup_font_name (tmpspec) | |
1168 | if foundname then | |
1169 | foundname, _, success = fonts.names.lookup_font_file (foundname) | |
1172 | local foundname, subfont, success, needle | |
1173 | ||
1174 | if tmpspec.lookup == "name" then | |
1175 | if fonts.definers.resolvers.name (tmpspec) then | |
1176 | needle = tmpspec.resolved | |
1177 | end | |
1178 | elseif tmpspec.lookup == "anon" then | |
1179 | if fonts.definers.resolvers.anon (tmpspec) then | |
1180 | needle = tmpspec.resolved or tmpspec.name | |
1170 | 1181 | end |
1171 | 1182 | elseif tmpspec.lookup == "file" then |
1183 | needle = tmpspec.name | |
1184 | end | |
1185 | ||
1186 | if needle then | |
1172 | 1187 | foundname, _, success = fonts.names.lookup_font_file (tmpspec.name) |
1173 | 1188 | end |
1174 | 1189 |
0 | 0 | #!/usr/bin/env perl |
1 | # $Id: tlmgr.pl 40800 2016-04-28 17:56:52Z karl $ | |
1 | # $Id: tlmgr.pl 40844 2016-05-02 23:46:44Z karl $ | |
2 | 2 | # |
3 | 3 | # Copyright 2008-2016 Norbert Preining |
4 | 4 | # This file is licensed under the GNU General Public License version 2 |
5 | 5 | # or any later version. |
6 | 6 | # |
7 | 7 | |
8 | my $svnrev = '$Revision: 40800 $'; | |
9 | my $datrev = '$Date: 2016-04-28 19:56:52 +0200 (Thu, 28 Apr 2016) $'; | |
8 | my $svnrev = '$Revision: 40844 $'; | |
9 | my $datrev = '$Date: 2016-05-03 01:46:44 +0200 (Tue, 03 May 2016) $'; | |
10 | 10 | my $tlmgrrevision; |
11 | 11 | my $prg; |
12 | 12 | if ($svnrev =~ m/: ([0-9]+) /) { |
7636 | 7636 | |
7637 | 7637 | =over 4 |
7638 | 7638 | |
7639 | =item C<auto-remove, value 0 or 1 (default 1), same as command-line | |
7639 | =item C<auto-remove>, value 0 or 1 (default 1), same as command-line | |
7640 | 7640 | option. |
7641 | 7641 | |
7642 | 7642 | =item C<gui-expertmode>, value 0 or 1 (default 1). |
7660 | 7660 | |
7661 | 7661 | =over 4 |
7662 | 7662 | |
7663 | =item C<allowed-actions> I<action1[,I<action>,...] | |
7663 | =item C<allowed-actions> I<action1> [,I<action>,...] | |
7664 | 7664 | The value is a comma-separated list of C<tlmgr> actions which are |
7665 | 7665 | allowed to be executed when C<tlmgr> is invoked in system mode (that is, |
7666 | 7666 | without C<--usermode>). |
7678 | 7678 | disables this. |
7679 | 7679 | |
7680 | 7680 | The checksum algorithm is SHA-512. Your system must have (looked for in |
7681 | this order) the Perl L<Digest::SHA> module, the C<openssl> program | |
7682 | (L<openssl.org>), or the C<sha512sum> program (from GNU Coreutils, | |
7683 | L<http://www.gnu.org/software/coreutils>). If none of these are | |
7684 | available, a warning is issued and C<tlmgr> proceeds without checking | |
7685 | checksums. (Incidentally, other SHA implementations, such as the pure | |
7686 | Perl and pure Lua modules, are much too slow to be usable in our | |
7687 | context.) C<no-checksums> also avoids the warning. | |
7681 | this order) the Perl C<Digest::SHA> module, the C<openssl> program | |
7682 | (L<http://openssl.org>), or the C<sha512sum> program (from GNU | |
7683 | Coreutils, L<http://www.gnu.org/software/coreutils>). If none of these | |
7684 | are available, a warning is issued and C<tlmgr> proceeds without | |
7685 | checking checksums. (Incidentally, other SHA implementations, such as | |
7686 | the pure Perl and pure Lua modules, are much too slow to be usable in | |
7687 | our context.) C<no-checksums> also avoids the warning. | |
7688 | 7688 | |
7689 | 7689 | |
7690 | 7690 | =head1 CRYPTOGRAPHIC VERIFICATION |
0 | 2016-05-04 Karl Berry <karl@freefriends.org> | |
1 | ||
2 | * texmfmp-help.h (PDFTEXHELP) [pdfTeX]: mention pdftex.org. | |
3 | ||
0 | 4 | 2016-02-27 Akira Kakuto <kakuto@fuk.kindai.ac.jp> |
1 | 5 | |
2 | 6 | * help.h: Add an option -charcode-format in omfonts for compatibility. |
0 | 2016-05-06 Karl Berry <karl@tug.org> | |
1 | ||
2 | * texmfmp.c (init_start_time, get_date_and_time) [onlyTeX]: | |
3 | ignore SOURCE_DATE_EPOCH... envvars for original TeX. | |
4 | ||
5 | 2016-05-05 Akira Kakuto <kakuto@fuk.kinidai.ac.jp> | |
6 | ||
7 | * texmfmp.c (strtoull) [_MSC_VER]: #define as _strtoui64. | |
8 | ||
9 | 2016-05-04 Karl Berry <karl@freefriends.org> | |
10 | ||
11 | * texmfmp.c (init_start_time): new fn, factored out from | |
12 | initstarttime. | |
13 | (get_date_and_time): if envvar SOURCE_DATE_EPOCH_TEX_PRIMITIVES | |
14 | is set, initialize minutes, day, month, year, from | |
15 | SOURCE_DATE_EPOCH value. Requested by Debian, thread starting at | |
16 | http://tug.org/pipermail/tex-k/2016-May/002691.html. | |
17 | ||
0 | 18 | 2016-04-14 Akira Kakuto <kakuto@fuk.kinidai.ac.jp> |
1 | 19 | |
2 | 20 | * texmfmp.c: Fix a bug to show input file name in the case of pipe input. |
2199 | 2199 | } |
2200 | 2200 | #endif /* not WIN32 */ |
2201 | 2201 | |
2202 | #if defined(_MSC_VER) | |
2203 | #define strtoull _strtoui64 | |
2204 | #endif | |
2205 | ||
2206 | static boolean start_time_set = false; | |
2207 | static time_t start_time = 0; | |
2208 | ||
2209 | void init_start_time() { | |
2210 | char *source_date_epoch; | |
2211 | unsigned long long epoch; | |
2212 | char *endptr; | |
2213 | if (!start_time_set) { | |
2214 | start_time_set = true; | |
2215 | #ifndef onlyTeX | |
2216 | source_date_epoch = getenv("SOURCE_DATE_EPOCH"); | |
2217 | if (source_date_epoch) { | |
2218 | errno = 0; | |
2219 | epoch = strtoull(source_date_epoch, &endptr, 10); | |
2220 | if (epoch < 0 || *endptr != '\0' || errno != 0) { | |
2221 | FATAL1 ("invalid epoch-seconds-timezone value for environment variable $SOURCE_DATE_EPOCH: %s", | |
2222 | source_date_epoch); | |
2223 | } | |
2224 | start_time = epoch; | |
2225 | } else | |
2226 | #endif /* not onlyTeX */ | |
2227 | { | |
2228 | start_time = time((time_t *) NULL); | |
2229 | } | |
2230 | } | |
2231 | } | |
2232 | ||
2202 | 2233 | /* Besides getting the date and time here, we also set up the interrupt |
2203 | 2234 | handler, for no particularly good reason. It's just that since the |
2204 | 2235 | `fix_date_and_time' routine is called early on (section 1337 in TeX, |
2209 | 2240 | get_date_and_time (integer *minutes, integer *day, |
2210 | 2241 | integer *month, integer *year) |
2211 | 2242 | { |
2212 | time_t myclock = time ((time_t *) 0); | |
2213 | struct tm *tmptr = localtime (&myclock); | |
2243 | struct tm *tmptr; | |
2244 | #ifndef onlyTeX | |
2245 | string sde_texprim = getenv ("SOURCE_DATE_EPOCH_TEX_PRIMITIVES"); | |
2246 | if (sde_texprim && STREQ (sde_texprim, "1")) { | |
2247 | init_start_time (); | |
2248 | tmptr = gmtime (&start_time); | |
2249 | } else | |
2250 | #endif /* not onlyTeX */ | |
2251 | { | |
2252 | /* whether the envvar was not set (usual case) or invalid, | |
2253 | use current time. */ | |
2254 | time_t myclock = time ((time_t *) 0); | |
2255 | tmptr = localtime (&myclock); | |
2256 | ||
2257 | #ifndef onlyTeX | |
2258 | /* warn if they gave an invalid value, empty (null string) ok. */ | |
2259 | if (sde_texprim && strlen (sde_texprim) > 0 | |
2260 | && !STREQ (sde_texprim, "0")) { | |
2261 | WARNING1 ("invalid value (expected 0 or 1) for environment variable $SOURCE_DATE_EPOCH_TEX_PRIMITIVES: %s", | |
2262 | sde_texprim); | |
2263 | } | |
2264 | #endif /* not onlyTeX */ | |
2265 | } | |
2214 | 2266 | |
2215 | 2267 | *minutes = tmptr->tm_hour * 60 + tmptr->tm_min; |
2216 | 2268 | *day = tmptr->tm_mday; |
2929 | 2981 | #endif /* not pdfTeX */ |
2930 | 2982 | |
2931 | 2983 | #if !defined(XeTeX) |
2932 | static boolean start_time_set = false; | |
2933 | static time_t start_time = 0; | |
2984 | ||
2934 | 2985 | #define TIME_STR_SIZE 30 |
2935 | 2986 | char start_time_str[TIME_STR_SIZE]; |
2936 | 2987 | static char time_str[TIME_STR_SIZE]; |
2989 | 3040 | } |
2990 | 3041 | } |
2991 | 3042 | |
2992 | #if defined(_MSC_VER) | |
2993 | #define strtoll _strtoi64 | |
2994 | #endif | |
2995 | ||
2996 | 3043 | void initstarttime(void) |
2997 | 3044 | { |
2998 | char *source_date_epoch; | |
2999 | int64_t epoch; | |
3000 | char *endptr; | |
3001 | 3045 | if (!start_time_set) { |
3002 | start_time_set = true; | |
3003 | source_date_epoch = getenv("SOURCE_DATE_EPOCH"); | |
3004 | if (source_date_epoch) { | |
3005 | errno = 0; | |
3006 | epoch = strtoll(source_date_epoch, &endptr, 10); | |
3007 | if (epoch < 0 || *endptr != '\0' || errno != 0) { | |
3008 | FATAL1 ("invalid value for environment variable $SOURCE_DATE_EPOCH: %s", | |
3009 | source_date_epoch); | |
3010 | } | |
3011 | start_time = epoch; | |
3012 | makepdftime(start_time, start_time_str, /* utc= */true); | |
3013 | } | |
3014 | else { | |
3015 | start_time = time((time_t *) NULL); | |
3016 | makepdftime(start_time, start_time_str, /* utc= */false); | |
3046 | init_start_time (); | |
3047 | if (getenv ("SOURCE_DATE_EPOCH")) { | |
3048 | makepdftime (start_time, start_time_str, /* utc= */true); | |
3049 | } else { | |
3050 | makepdftime (start_time, start_time_str, /* utc= */false); | |
3017 | 3051 | } |
3018 | 3052 | } |
3019 | 3053 | } |
524 | 524 | expand_macros_in_tokenlist(p); |
525 | 525 | old_setting = selector; |
526 | 526 | j = write_stream(p); |
527 | if (write_open[j]) { | |
527 | if (file_can_be_written(j)) { | |
528 | 528 | selector = j; |
529 | 529 | } else if ((j == term_only) && (selector == term_and_log)) { |
530 | 530 | /* write to the terminal if file isn't open */ |
0 | .TH PDFTEX 1 "16 June 2015" "Web2C @VERSION@" | |
0 | .TH PDFTEX 1 "4 May 2016" "Web2C @VERSION@" | |
1 | 1 | .\"===================================================================== |
2 | 2 | .if n .ds MF Metafont |
3 | 3 | .if t .ds MF Metafont |
317 | 317 | Print version information and exit. |
318 | 318 | .\"===================================================================== |
319 | 319 | .SH ENVIRONMENT |
320 | See the Kpathsearch library documentation (the `Path specifications' | |
320 | See the Kpathsea library documentation (e.g., the `Path specifications' | |
321 | 321 | node) for precise details of how the environment variables are used. |
322 | 322 | The |
323 | 323 | .B kpsewhich |
363 | 363 | .B TEXFORMATS |
364 | 364 | Search path for format files. |
365 | 365 | .TP |
366 | .B TEXPOOL | |
367 | search path for | |
368 | .B pdftex | |
369 | internal strings. | |
370 | .TP | |
371 | 366 | .B TEXEDIT |
372 | 367 | Command template for switching to editor. The default, usually |
373 | 368 | .BR vi , |
377 | 372 | Search path for font metric |
378 | 373 | .RI ( .tfm ) |
379 | 374 | files. |
375 | .TP | |
376 | .B SOURCE_DATE_EPOCH | |
377 | If set, its value, taken to be in epoch-seconds, will be used for the | |
378 | timestamps in the PDF output, such as the CreationDate and ModDate keys. | |
379 | This is useful for making reproducible builds. | |
380 | .TP | |
381 | .B SOURCE_DATE_EPOCH_TEX_PRIMITIVES | |
382 | If set to the value "1", the time-related \*(TX primitives | |
383 | .RI ( \eyear , | |
384 | .IR \emonth , | |
385 | .IR \eday , | |
386 | .IR \etime ) | |
387 | are also initialized from the value of SOURCE_DATE_EPOCH. This is not | |
388 | recommended if there is any viable alternative. | |
389 | .br | |
390 | pdf\*(TX also has several primitives to support reproducible builds, | |
391 | which are preferable to setting these environment variables; see the | |
392 | main manual. | |
393 | .PP | |
394 | Many, many more environment variables may be consulted related to path | |
395 | searching. See the Kpathsea manual. | |
380 | 396 | .\"===================================================================== |
381 | 397 | .SH FILES |
382 | 398 | The location of the files mentioned below varies from system to |
384 | 400 | .B kpsewhich |
385 | 401 | utility to find their locations. |
386 | 402 | .TP |
387 | .I pdftex.pool | |
388 | Text file containing pdf\*(TX's internal strings. | |
389 | .TP | |
390 | 403 | .I pdftex.map |
391 | Filename mapping definitions. | |
404 | Font name mapping definitions. | |
392 | 405 | .TP |
393 | 406 | .I *.tfm |
394 | 407 | Metric files for pdf\*(TX's fonts. |
408 | 421 | .IR "Web2C: A TeX implementation" . |
409 | 422 | .\"===================================================================== |
410 | 423 | .SH BUGS |
411 | This version of pdf\*(TX implements a number of optional extensions. | |
412 | In fact, many of these extensions conflict to a greater or lesser | |
413 | extent with the definition of pdf\*(TX. When such extensions are | |
414 | enabled, the banner printed when pdf\*(TX starts is changed to print | |
415 | .B pdfTeXk | |
416 | instead of | |
417 | .BR pdfTeX . | |
418 | .PP | |
419 | 424 | This version of pdf\*(TX fails to trap arithmetic overflow when |
420 | 425 | dimensions are added or subtracted. Cases where this occurs are rare, |
421 | 426 | but when it does the generated |
426 | 431 | .\"===================================================================== |
427 | 432 | .SH AVAILABILITY |
428 | 433 | pdf\*(TX is available for a large variety of machine architectures |
429 | and operation systems. | |
434 | and operating systems. | |
430 | 435 | pdf\*(TX is part of all major \*(TX distributions. |
431 | .P | |
432 | Information on how to get pdf\*(TX and related information | |
433 | is available at the | |
434 | .B http://www.pdftex.org | |
435 | .IR "pdf\*(TX" | |
436 | web site. | |
437 | .P | |
438 | The following pdfe\*(TX related mailing list is available: | |
439 | .BR pdftex@tug.org . | |
440 | This is a mailman list; | |
441 | to subscribe send a message containing | |
442 | .I subscribe | |
443 | to | |
444 | .BR pdftex-request@tug.org . | |
445 | A web interface and list archives can be found at the | |
446 | .B "http://lists.tug.org/pdftex" | |
447 | mailing list web site. | |
436 | .br | |
437 | The pdf\*(TX home page: http://www.pdftex.org. | |
438 | .br | |
439 | pdf\*(TX on CTAN: http://www.ctan.org/pkg/pdftex. | |
440 | .br | |
441 | pdf\*(TX mailing list for all discussion: http://lists.tug.org/pdftex. | |
448 | 442 | .\"===================================================================== |
449 | 443 | .SH "SEE ALSO" |
444 | The full pdf\*(TX manual can be accessed from the home page or CTAN page. | |
445 | Same for the Web2C, Kpathsea, and other manuals. | |
446 | Some related programs: | |
450 | 447 | .BR epstopdf (1), |
451 | 448 | .BR etex (1), |
452 | 449 | .BR latex (1), |
454 | 451 | .BR mptopdf (1), |
455 | 452 | .BR tex (1), |
456 | 453 | .BR mf (1). |
457 | http://pdftex.org, http://tug.org/web2c. | |
458 | 454 | .\"===================================================================== |
459 | 455 | .SH AUTHORS |
460 | 456 | The primary authors of pdf\*(TX are Han The Thanh, Petr Sojka, |
0 | 0 | pdfTeX 3.14159265-2.6-1.40.17 (TeX Live 2016) |
1 | 1 | - changes: |
2 | - if environment variable SOURCE_DATE_EPOCH is set, use its value for | |
3 | the CreationDate and ModDate values, and to seed the trailer /ID. | |
2 | - if the environment variable SOURCE_DATE_EPOCH is set, use its value for | |
3 | the PDF CreationDate and ModDate values, and to seed the trailer /ID. | |
4 | 4 | This by itself should suffice to create reproducible PDFs. The |
5 | other changes support more granular output tweaks along the same lines. | |
5 | new primitives below support more granular output tweaks with the | |
6 | same intent. | |
7 | - if the environment variable SOURCE_DATE_EPOCH_TEX_PRIMITIVES is set | |
8 | to 1, the \year, \day, and \time primitives are also initialized | |
9 | from the SOURCE_DATE_EPOCH value, instead of the current time. | |
6 | 10 | |
7 | 11 | - new primitive \pdfinfoomitdate to omit CreationDate and ModDate keys. |
8 | 12 | - new primitive \pdftrailerid to set seed for the trailer /ID |
1 | 1 | TeX source files and enhance the result of TeX typesetting with the help |
2 | 2 | of PDF. When PDF output is not selected, pdfTeX produces normal DVI |
3 | 3 | output, otherwise it produces PDF output that looks essentially |
4 | identical to the DVI output. An important aspect of this project was to | |
5 | investigate alternative justification algorithms, resulting in the | |
6 | margin kerning and font expansion "microtypgraphy" features, inspired by | |
7 | Peter Karow. | |
4 | identical to the DVI output | |
8 | 5 | |
9 | pdfTeX is based on the original e-TeX sources and Web2c, and has been | |
10 | successfully compiled on many systems. It is actively maintained, but | |
11 | stability is paramount now; only bug fixes and small enhancements are expected. | |
6 | An important aspect of this project was to investigate alternative | |
7 | justification algorithms, resulting in the "microtypography" features of | |
8 | margin kerning and font expansion. This was inspired by Peter Karow's | |
9 | and Hermann Zapf's work. | |
10 | ||
11 | pdfTeX is integrated with the original e-TeX sources and Web2c. It is | |
12 | actively maintained, but stability is paramount now; only bug fixes and | |
13 | small enhancements are expected. Releases are made through TeX Live. | |
12 | 14 | |
13 | 15 | See the file NEWS for changes to the program. |
14 | 16 | Documentation about pdfTeX can be found at http://www.pdftex.org. |
0 | 0 | /* The help messages for TeX & MF family of programs. |
1 | 1 | |
2 | Copyright 1995, 1996, 2008-2015 Karl Berry. | |
2 | Copyright 1995, 1996, 2008-2016 Karl Berry. | |
3 | 3 | Copyright 2001-05 Olaf Weber. |
4 | 4 | |
5 | 5 | This program is free software; you can redistribute it and/or modify |
463 | 463 | "-8bit make all characters printable by default", |
464 | 464 | "-help display this help and exit", |
465 | 465 | "-version output version information and exit", |
466 | "", | |
467 | "pdfTeX home page: <http://pdftex.org>", | |
466 | 468 | NULL |
467 | 469 | }; |
468 | 470 | #endif /* pdfTeX */ |
0 | ============================================================================= | |
1 | Devanagari for TeX Release Notes | |
2 | version 2.0 23 January 2000 | |
3 | ============================================================================= | |
4 | ||
5 | Preprocessor: devnag.c has been updated and greatly enhanced. If you have | |
6 | a previously installed version of devnag, you must recompile the source. | |
7 | A 32-bit DOS/Win95 executable (devnag.exe) has been provided. | |
8 | ||
9 | Package: dev.sty has been revised to fix certain catcode problems. Several | |
10 | new features have been implemented in the package. Refer to the manual | |
11 | for descriptions. | |
12 | ||
13 | Font: The fonts have been revised. Certain characters have been modified. | |
14 | The font metrics have not been changed. | |
15 | ||
16 | Please refer to the manual for further information. | |
17 | ||
18 | ============================================================================= | |
19 |
0 | 0 | /* $Id: devnag.c,v 1.15 2008-03-09 15:57:59 icebearsoft Exp $ |
1 | Version 2.15 | |
1 | Version 2.16 | |
2 | 2 | |
3 | 3 | * |
4 | 4 | Preprocessor for Devanagari for TeX package |
5 | Copyright (C) 1991-1998 University of Groningen, The Netherlands | |
5 | Copyright (C) 1991-2016 University of Groningen, The Netherlands | |
6 | 6 | * |
7 | 7 | Author : Frans J. Velthuis <velthuis@rc.rug.nl> |
8 | 8 | Date : 09 May 1991 |
276 | 276 | (requested by Karl Berry) |
277 | 277 | */ |
278 | 278 | |
279 | const char *version = "2.15"; | |
279 | /* | |
280 | Modifications in version 2.16: | |
281 | ||
282 | Character and string handling commands were improved by TeX Live developers, | |
283 | these commands cuased errors in several platforms. | |
284 | ||
285 | */ | |
286 | ||
287 | const char *version = "2.16"; | |
280 | 288 | |
281 | 289 | #include <stdio.h> |
282 | 290 | #include <ctype.h> |
0 | \def\DevnagVersion{2.15}%@modernhindi | |
0 | \def\DevnagVersion{2.16}%@modernhindi | |
1 | 1 | \def\datemodernhindi{\def\today{\@datenumeric\day\space\ifcase\month\or |
2 | 2 | {\dn jnvrF}\or |
3 | 3 | {\dn \327wrvrF}\or |
0 | \def\DevnagVersion{2.15}%@hyphen | |
0 | \def\DevnagVersion{2.16}%@hyphen | |
1 | 1 | \documentclass[12pt]{article} |
2 | 2 | \usepackage{devanagari} |
3 | 3 | \parindent=0pt |