document mingw linker fix and close associated bug
[debian/gzip] / m4 / asm-underscore.m4
1 # asm-underscore.m4 serial 4
2 dnl Copyright (C) 2010-2018 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
6
7 dnl From Bruno Haible. Based on as-underscore.m4 in GNU clisp.
8
9 # gl_ASM_SYMBOL_PREFIX
10 # Tests for the prefix of C symbols at the assembly language level and the
11 # linker level. This prefix is either an underscore or empty. Defines the
12 # C macro USER_LABEL_PREFIX to this prefix, and sets ASM_SYMBOL_PREFIX to
13 # a stringified variant of this prefix.
14
15 AC_DEFUN([gl_ASM_SYMBOL_PREFIX],
16 [
17   AC_REQUIRE([AC_PROG_EGREP])
18   dnl We don't use GCC's __USER_LABEL_PREFIX__ here, because
19   dnl 1. It works only for GCC.
20   dnl 2. It is incorrectly defined on some platforms, in some GCC versions.
21   AC_REQUIRE([gl_C_ASM])
22   AC_CACHE_CHECK(
23     [whether C symbols are prefixed with underscore at the linker level],
24     [gl_cv_prog_as_underscore],
25     [cat > conftest.c <<EOF
26 #ifdef __cplusplus
27 extern "C" int foo (void);
28 #endif
29 int foo(void) { return 0; }
30 EOF
31      # Look for the assembly language name in the .s file.
32      AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1
33      if LC_ALL=C $EGREP '(^|[[^a-zA-Z0-9_]])_foo([[^a-zA-Z0-9_]]|$)' conftest.$gl_asmext >/dev/null; then
34        gl_cv_prog_as_underscore=yes
35      else
36        gl_cv_prog_as_underscore=no
37      fi
38      rm -f conftest*
39     ])
40   if test $gl_cv_prog_as_underscore = yes; then
41     USER_LABEL_PREFIX=_
42   else
43     USER_LABEL_PREFIX=
44   fi
45   AC_DEFINE_UNQUOTED([USER_LABEL_PREFIX], [$USER_LABEL_PREFIX],
46     [Define to the prefix of C symbols at the assembler and linker level,
47      either an underscore or empty.])
48   ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"'
49   AC_SUBST([ASM_SYMBOL_PREFIX])
50 ])
51
52 # gl_C_ASM
53 # Determines how to produce an assembly language file from C source code.
54 # Sets the variables:
55 #   gl_asmext - the extension of assembly language output,
56 #   gl_c_asm_opt - the C compiler option that produces assembly language output.
57
58 AC_DEFUN([gl_C_ASM],
59 [
60   AC_EGREP_CPP([MicrosoftCompiler],
61     [
62 #ifdef _MSC_VER
63 MicrosoftCompiler
64 #endif
65     ],
66     [gl_asmext='asm'
67      gl_c_asm_opt='-c -Fa'
68     ],
69     [gl_asmext='s'
70      gl_c_asm_opt='-S'
71     ])
72 ])