summaryrefslogtreecommitdiff
path: root/Build/source/m4/kpse-setup.m4
blob: 1c04d6d36652a92f3faa5f2ecb313cf700fd40c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
# $Id$
# Private macros for the TeX Live (TL) tree.
# Copyright 2017-2020 Karl Berry <tex-live@tug.org>
# Copyright 2009-2015 Peter Breitenlohner <tex-live@tug.org>
#
# This file is free software; the copyright holder
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# KPSE_SETUP(TOP-LEVEL)
# ---------------------
# Initialize path prefix kpse_TL to top-level TeX Live (TL) directory.
# Sinclude all pkgdir/ac/withenable.ac files, which are supposed to provide:
#   configure options for libraries:
#     --with-system-LIB --with-LIB-includes --with-LIB-libdir
#   configure options for programs:
#     --disable-PROG --enable-PROG
#   additional program specific configure options (if any)
#   library dependencies for programs and libraries
AC_DEFUN([KPSE_SETUP], [dnl
AC_REQUIRE([AC_CANONICAL_HOST])[]dnl
AC_REQUIRE([_KPSE_MSG_WARN_PREPARE])[]dnl
m4_define([kpse_TL], [$1])[]dnl
m4_define([kpse_indent_26], [28])[]dnl
AC_ARG_ENABLE([all-pkgs],
              AS_HELP_STRING([--disable-all-pkgs],
                             [do not build packages unless explicitly enabled]))[]dnl
test "x$enable_all_pkgs" = xno || enable_all_pkgs=yes
AC_ARG_ENABLE([native-texlive-build],
              AS_HELP_STRING([--disable-native-texlive-build],
                             [do not build for the TeX Live binary distribution]))[]dnl
AS_CASE([$enable_native_texlive_build],
        [yes | no], [:],
        [enable_native_texlive_build=yes
         ac_configure_args="$ac_configure_args '--enable-native-texlive-build'"])
AS_CASE([$enable_largefile],
        [yes | no], [:],
        [enable_largefile=yes
         ac_configure_args="$ac_configure_args '--enable-largefile'"])
AS_CASE([$enable_silent_rules],
        [yes | no], [:],
        [enable_silent_rules=no
         ac_configure_args="$ac_configure_args '--disable-silent-rules'"])
AS_CASE([$enable_multiplatform],
        [yes | no], [:],
        [enable_multiplatform=$enable_native_texlive_build
         ac_configure_args="$ac_configure_args '--enable-multiplatform=$enable_native_texlive_build'"])
AS_CASE([$enable_cxx_runtime_hack],
        [yes | no], [:],
        [enable_cxx_runtime_hack=$enable_native_texlive_build
         ac_configure_args="$ac_configure_args '--enable-cxx-runtime-hack=$enable_native_texlive_build'"])
AS_CASE([$enable_libtool_hack],
        [yes | no], [:],
        [AS_CASE([$host_os],
                 [do-not-match],
                   [enable_libtool_hack=no],
                 [enable_libtool_hack=yes])
         ac_configure_args="$ac_configure_args '--enable-libtool-hack=$enable_libtool_hack'"])
AS_CASE([$enable_shared:$host_os],
        [no:* | yes:mingw* | yes:cygwin*], [:],
        [yes:* ], [AS_IF([test "x$enable_native_texlive_build" = xyes],
                       [AC_MSG_ERROR([you can not use a shared Kpathsea library for a native TeX Live build])])],
        [enable_shared=no
         ac_configure_args="$ac_configure_args '--disable-shared'"])
dnl Automatically pass this option to all subdirectories.
AS_CASE([$enable_texlive_build],
        [yes], [:],
        [no], [AC_MSG_ERROR([you can not configure the TeX Live tree with `--disable-texlive-build'])],
        [enable_texlive_build=yes
         ac_configure_args="$ac_configure_args '--enable-texlive-build'"])
KPSE_OPTIONS
KPSE_ENABLE_CXX_HACK
KPSE_ENABLE_LT_HACK
KPSE_LIBS_PREPARE
KPSE_MKTEX_PREPARE
KPSE_WEB2C_PREPARE
KPSE_CHECK_WIN32
AS_CASE([$with_x:$kpse_cv_have_win32],
        [yes:no | no:*], [:],
        [yes:*], [AC_MSG_ERROR([you can not use `--with-x' for Windows])],
        [*:no], [with_x=yes
                 AC_MSG_NOTICE([Assuming `--with-x'])
                 ac_configure_args="$ac_configure_args '--with-x'"],
        [with_x=no
         AC_MSG_NOTICE([WIN32 -> `--without-x'])
         ac_configure_args="$ac_configure_args '--without-x'"])
AC_FOREACH([Kpse_Pkg], [luajittex luajithbtex mfluajit mfluajit-nowin], [dnl
AS_CASE([$enable_[]AS_TR_SH([Kpse_Pkg])],
        [yes | no], [:],
          [AS_CASE([$host],
                   [alpha* | sparc* | x86_64-*-solaris* | powerpc* ],
                     [AC_MSG_NOTICE([$host -> `--disable-]Kpse_Pkg['])
                      ac_configure_args="$ac_configure_args '--disable-]Kpse_Pkg['"])])
])
KPSE_FOR_PKGS([utils], [m4_sinclude(kpse_TL[utils/]Kpse_Pkg[/ac/withenable.ac])])
KPSE_FOR_PKGS([texk], [m4_sinclude(kpse_TL[texk/]Kpse_Pkg[/ac/withenable.ac])])
KPSE_FOR_PKGS([libs], [m4_sinclude(kpse_TL[libs/]Kpse_Pkg[/ac/withenable.ac])])
KPSE_FOR_PKGS([texlibs], [m4_sinclude(kpse_TL[texk/]Kpse_Pkg[/ac/withenable.ac])])
]) # KPSE_SETUP

# KPSE_ENABLE_PROG(PROG, REQUIRED-LIBS, OPTIONS, [COMMENT])
# ---------------------------------------------------------
# Provide the configure option --enable-PROG if the option `disable' is
# specified, or -disable-PROG otherwise.
# Define the list of libraries required from the TL tree (if any).
# Options:
#          disable - do not build by default
#          native - impossible to cross compile
#          x - requires X11
AC_DEFUN([KPSE_ENABLE_PROG], [dnl
m4_define([have_]AS_TR_SH($1))[]dnl
m4_pushdef([Kpse_enable], m4_if(m4_index([ $3 ], [ disable ]), [-1], [yes], [no]))[]dnl
AC_ARG_ENABLE([$1],
              AS_HELP_STRING([[--]m4_if(Kpse_enable, [yes], [dis], [en])[able-$1]],
                              m4_if(Kpse_enable, [yes],
                                    [do not ])[build the $1 ]m4_ifval([$4],
                                                                      [($4) ])[package]))[]dnl
m4_if(m4_index([ $3 ], [ x ]), [-1], , [AS_IF([test "x$with_x" = xno],
      [AS_CASE([$enable_[]AS_TR_SH($1)],
               [""], [AC_MSG_NOTICE([`--without-x' -> `--disable-$1'])
                      enable_[]AS_TR_SH($1)=no
                      ac_configure_args="$ac_configure_args '--disable-$1'"],
               [yes], [AC_MSG_ERROR([Sorry, incompatible options `--without-x' and `--enable-$1'])])])
])[]dnl m4_if
AS_CASE([$enable_[]AS_TR_SH($1)],
  m4_if(m4_index([ $3 ], [ native ]), [-1],
        [[yes|no], []],
        [[yes], [AS_IF([test "x$cross_compiling" = xyes],
                       [AC_MSG_ERROR([Unable to cross compile $1])])],
         [no], []]),
  [m4_if(m4_index([ $3 ], [ native ]), [-1], ,
         [if test "x$cross_compiling" = xyes; then
            AC_MSG_NOTICE([Cross compiling -> `--disable-$1'])
            enable_[]AS_TR_SH($1)=no
            ac_configure_args="$ac_configure_args '--disable-$1'"
          else])
   enable_[]AS_TR_SH($1)=m4_if(Kpse_enable, [yes], [$enable_all_pkgs], [no])
     AC_MSG_NOTICE([Assuming `--enable-$1=$enable_]AS_TR_SH($1)['])
     ac_configure_args="$ac_configure_args '--enable-$1=$enable_[]AS_TR_SH($1)'"
   m4_if(m4_index([ $3 ], [ native ]), [-1], , [fi])])
m4_popdef([Kpse_enable])[]dnl
m4_ifval([$2], [
test "x$enable_[]AS_TR_SH($1)" = xno || {
AC_FOREACH([Kpse_Lib], [$2], [  need_[]AS_TR_SH(Kpse_Lib)=yes
])}
])[]dnl m4_ifval
]) # KPSE_ENABLE_PROG

# KPSE_WITH_LIB(LIB, REQUIRED-LIBS, OPTIONS)
# ------------------------------------------
# For generic libraries in libs/LIB.
# Unless the option `tree' is specified, provide the configure options
# --with-system-LIB, --with-LIB-includes, and --with-LIB-libdir.
# Define the list of libraries required from the TL tree (if any).
# Options:
#          tree - only use library from the TL tree
#
# At the top-level we build a (reversed) list of potential system libraries.
AC_DEFUN([KPSE_WITH_LIB], [_KPSE_WITH_LIB([libs], $@)])
m4_define([kpse_sys_libs_pkgs], [])[]dnl initialize the list.

# KPSE_WITH_TEXLIB(LIB, REQUIRED-LIBS, OPTIONS)
# ---------------------------------------------
# As above, but for TeX specific libraries in texk/LIB.
AC_DEFUN([KPSE_WITH_TEXLIB], [_KPSE_WITH_LIB([texk], $@)])
m4_define([kpse_sys_texk_pkgs], [])[]dnl initialize the list.

# _KPSE_WITH_LIB(DIR, LIB, REQUIRED-LIBS, OPTIONS)
# ------------------------------------------------
# Internal subroutine for KPSE_WITH_LIB and KPSE_WITH_TEXLIB.
m4_define([_KPSE_WITH_LIB], [dnl
m4_define([have_]AS_TR_SH($2))[]dnl
m4_if(m4_index([ $4 ], [ tree ]), [-1],
[KPSE_]AS_TR_CPP([$2])[_OPTIONS([with-system])[]dnl
if test "x$with_system_[]AS_TR_SH($2)" = x; then
  if test -f $srcdir/kpse_TL[]$1/$2/configure; then
    AC_MSG_NOTICE([Assuming `$2' headers and library from TL tree])
    with_system_[]AS_TR_SH($2)=no
  else
    AC_MSG_NOTICE([Assuming installed `$2' headers and library])
    with_system_[]AS_TR_SH($2)=yes
  fi
  ac_configure_args="$ac_configure_args '--with-system-$2=$with_system_[]AS_TR_SH($2)'"
m4_ifset([kpse_TL], [], dnl top level only
[elif test "x$with_system_[]AS_TR_SH($2)" = xyes; then
  AC_MSG_NOTICE([Using installed `$2' headers and library])
else
  AC_MSG_NOTICE([Using `$2' headers and library from TL tree])
  if test "x$with_system_[]AS_TR_SH($2)" != xno; then
    with_system_[]AS_TR_SH($2)=no
    ac_configure_args="$ac_configure_args '--without-system-$2'"
  fi
m4_define([kpse_sys_$1_pkgs],
          [$2]m4_ifval([kpse_sys_$1_pkgs], [ _m4_defn([kpse_sys_$1_pkgs])]))[]dnl
])[]dnl m4_ifset
fi
m4_ifval([$3],
[if test "x$with_system_[]AS_TR_SH($2)" = xyes; then
AC_FOREACH([Kpse_Lib], [$3],
[  if test "x$with_system_[]AS_TR_SH(Kpse_Lib)" = x; then
    AC_MSG_NOTICE([  ->  installed `AS_TR_SH(Kpse_Lib)' headers and library])
    with_system_[]AS_TR_SH(Kpse_Lib)=yes
    ac_configure_args="$ac_configure_args '--with-system-Kpse_Lib'"
  elif test "x$with_system_[]AS_TR_SH(Kpse_Lib)" != xyes; then
    AC_MSG_ERROR([Sorry, `--with-system-$2' requires `--with-system-Kpse_Lib'])
  fi
])fi
])[]dnl m4_ifval
])[]dnl m4_if
m4_ifval([$3], [
test "x$need_[]AS_TR_SH($2)" = xyes && {
AC_FOREACH([Kpse_Lib], [$3], [  need_[]AS_TR_SH(Kpse_Lib)=yes
])}
])[]dnl m4_ifval
]) # _KPSE_WITH_LIB

# KPSE_TRY_LIB(LIB, PROLOGUE, BODY)
# ---------------------------------
# When the user requests to use an installed version of a required library,
# check that the flags derived from --with-LIB-includes and --with-LIB-libdir
# or determined otherwise provide the required functionality.
AC_DEFUN([KPSE_TRY_LIB], [dnl
if test "x$need_[]AS_TR_SH($1):$with_system_[]AS_TR_SH($1)" = xyes:yes; then
  AC_MSG_CHECKING([requested system `$1' library])
  CPPFLAGS="$AS_TR_CPP($1)_INCLUDES $CPPFLAGS"
  LIBS="$AS_TR_CPP($1)_LIBS $LIBS"
  AC_LINK_IFELSE([AC_LANG_PROGRAM([[$2]], [[$3]])],
                 [syslib_used=yes kpse_res=ok],
                 [syslib_status=no kpse_res=failed])
  AC_MSG_RESULT([$kpse_res])
fi
]) # KPSE_TRY_LIB

# KPSE_TRY_LIBXX(LIB, PROLOGUE, BODY)
# -----------------------------------
# As above, but for C++.
AC_DEFUN([KPSE_TRY_LIBXX], [dnl
AC_REQUIRE([AC_PROG_CXX])[]dnl
AC_LANG_PUSH([C++])[]dnl
KPSE_TRY_LIB($@)[]dnl
AC_LANG_POP([C++])[]dnl
]) # KPSE_TRY_LIBXX

# KPSE_RECURSE_LIBS(LIST, TEXT, [PREFIX])
# ---------------------------------------
# Determine which of the libraries in kpse_LIST_pkgs to build.
AC_DEFUN([KPSE_RECURSE_LIBS], [dnl
m4_pushdef([Kpse_add], [$][1="$3Kpse_Pkg $$][1"])[]dnl prepend
_KPSE_RECURSE([$1], [$2 libraries],
              [test "x$with_system_[]Kpse_pkg" != xyes && test "x$need_[]Kpse_pkg" = xyes],
              [$3])[]dnl
m4_popdef([Kpse_add])[]dnl
]) # KPSE_RECURSE_LIBS

# KPSE_RECURSE_PROGS(LIST, TEXT)
# ------------------------------
# Determine which of the programs in kpse_LIST_pkgs to build.
AC_DEFUN([KPSE_RECURSE_PROGS], [dnl
m4_pushdef([Kpse_add], [$][1="$$][1 Kpse_Pkg"])[]dnl append
_KPSE_RECURSE([$1], [$2 programs],
              [test "x$enable_[]Kpse_pkg" = xyes])[]dnl
m4_popdef([Kpse_add])[]dnl
]) # KPSE_RECURSE_PROGS

# _KPSE_RECURSE(LIST, TEXT, COND, [PREFIX])
# -----------------------------------------
# Internal subroutine.  Determine which of the libraries or programs in
# kpse_LIST_pkgs to build: if a package's source directory contains a
# configure script, then add to CONF_SUBDIRS.  If COND is true, also add
# to MAKE_SUBDIRS.  PREFIX, if present, is prepended to the package name
# for the directory.
# 
# Thus if a directory has a configure script, the configure must succeed,
# even if the package has been disabled. This is suboptimal, but see below.
# 
m4_define([_KPSE_RECURSE], [dnl
AC_MSG_CHECKING([for $2 to build])
echo 'tldbg:[$0] called: list=[$1], text=[$2], cond=[$3], prefix=[$4].' >&AS_MESSAGE_LOG_FD
MAKE_SUBDIRS=
CONF_SUBDIRS=
KPSE_FOR_PKGS([$1], [dnl
m4_ifdef([have_]Kpse_pkg, [dnl
if test -x $srcdir/$4Kpse_Pkg/configure; then
  $3 && Kpse_add([MAKE_SUBDIRS])
  Kpse_add([CONF_SUBDIRS])
fi
])[]dnl m4_ifdef
])
AC_SUBST([MAKE_SUBDIRS])[]dnl
AC_SUBST([CONF_SUBDIRS])[]dnl
AC_MSG_RESULT([$MAKE_SUBDIRS])[]dnl
dnl
dnl Historic (and current) method: assume all directories present will be
dnl configured, but only make if the package is enabled.  This works in
dnl the cut-down pdftex source tree, but means that configure always has
dnl to succeed; not desirable in, e.g., 2017 when dvisvgm newly required
dnl C++11. But for 2018, all kinds of other things also require C++11, so
dnl might as well go back to it instead of debugging further.
dnl #old if test -x $srcdir/$4Kpse_Pkg/configure; then
dnl #old   $3 && Kpse_add([MAKE_SUBDIRS])
dnl #old   Kpse_add([CONF_SUBDIRS])
dnl #old fi
dnl
dnl new (and not used) method: don't try to configure if a package has
dnl been disabled, even if the directory exists. This is more intuitive,
dnl but does not work in the cut-down pdftex source tree.
dnl #new if test -x $srcdir/$4Kpse_Pkg/configure && $3; then
dnl #new   Kpse_add([CONF_SUBDIRS])
dnl #new   Kpse_add([MAKE_SUBDIRS])
dnl #new fi
dnl 
]) dnl _KPSE_RECURSE