summaryrefslogtreecommitdiff
path: root/Build/source/texk/xdvik/m4/xdvi-linker-multiple-defns.m4
blob: 3de54de5b89f0b68b8ba437a06951a1f10a90be6 (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
dnl ### Check if the --allow-multiple-definition linker flag is
dnl ### available (assuming that we need to use it if it is).
dnl ### If it isn't, check if the linker accepts multiple definitions,
dnl ### and if it doesn't, don't define LD_ALLOWS_MULTIPLE_DEFINITIONS.

AC_DEFUN([XDVI_LINKER_MULTIPLE_DEFNS],
[AC_CACHE_CHECK([whether linker supports the --allow-multiple-definition flag],
xdvi_cv_linker_multiple_defns,
xdvi_save_LDFLAGS="$LDFLAGS"
LDFLAGS="-Xlinker --allow-multiple-definition"
x_linker_options=""
[AC_TRY_LINK(
   [#include <stdio.h>
   ],
   [void foo(void);
   ],
   [xdvi_cv_linker_multiple_defns=yes], [xdvi_cv_linker_multiple_defns=no]
)]
)
if test $xdvi_cv_linker_multiple_defns = yes; then
    x_linker_options="-Xlinker --allow-multiple-definition"
    LDFLAGS="$xdvi_save_LDFLAGS"
    AC_DEFINE([LD_ALLOWS_MULTIPLE_DEFINITIONS], 1,
              [Define if your system allows multiple definitions of functions.])
else
    LDFLAGS="$xdvi_save_LDFLAGS"

    xdvi_ld_save_LIBS="$LIBS"
    xdvi_ld_save_CFLAGS="$CFLAGS"
    xdvi_ld_save_CPPFLAGS="$CPPFLAGS"
    xdvi_ld_save_LDFLAGS="$LDFLAGS"

    LIBS="$X_PRE_LIBS -lXt -lX11 $X_EXTRA_LIBS $LIBS"
    CFLAGS="$X_CFLAGS $CFLAGS"
    CPPFLAGS="$X_CFLAGS $CPPFLAGS"
    LDFLAGS="$X_LIBS $LDFLAGS"

    AC_MSG_CHECKING([whether linker supports multiple definitions by default])

    AC_TRY_LINK(
    [#include <X11/Intrinsic.h>

	XtIntervalId XtAppAddTimeOut(XtAppContext app,
                                     unsigned long interval,
                                     XtTimerCallbackProc proc,
                                     XtPointer closure)
	{
    	    (void)app; (void)interval; (void)proc; (void)closure;
    	    return (XtIntervalId)0;
	}
    ],[
	XtIntervalId i = 0;
	XtRemoveTimeOut(i);
    ],
    [xdvi_cv_linker_multiple_defns=yes], [xdvi_cv_linker_multiple_defns=no]
    )

    if test $xdvi_cv_linker_multiple_defns = yes; then
        AC_MSG_RESULT(yes)
        AC_DEFINE([LD_ALLOWS_MULTIPLE_DEFINITIONS], 1)
    else
        AC_MSG_RESULT(no)
 	AC_MSG_WARN([Linker does not allow multiple definitions.
  *****************************************************************
  * Warning: Your linker does not allow multiple definitions.     *
  * This does not make xdvik unusable, but it will cause problems *
  * with event handling: Some widgets, e.g. the print log window, *
  * tooltips, statusline messages and hyperlink location markers  *
  * will not be updated until the mouse is moved.                 *
  *****************************************************************])
    fi
    LIBS="$xdvi_ld_save_LIBS"
    CFLAGS="$xdvi_ld_save_CFLAGS"
    CPPFLAGS="$xdvi_ld_save_CPPFLAGS"
    LDFLAGS="$xdvi_ld_save_LDFLAGS"
fi
AC_SUBST(x_linker_options)])