Home | History | Annotate | Download | only in m4
      1 # asm-underscore.m4 serial 2
      2 dnl Copyright (C) 2010-2012 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   dnl We don't use GCC's __USER_LABEL_PREFIX__ here, because
     18   dnl 1. It works only for GCC.
     19   dnl 2. It is incorrectly defined on some platforms, in some GCC versions.
     20   AC_REQUIRE([gl_C_ASM])
     21   AC_CACHE_CHECK(
     22     [whether C symbols are prefixed with underscore at the linker level],
     23     [gl_cv_prog_as_underscore],
     24     [cat > conftest.c <<EOF
     25 #ifdef __cplusplus
     26 extern "C" int foo (void);
     27 #endif
     28 int foo(void) { return 0; }
     29 EOF
     30      # Look for the assembly language name in the .s file.
     31      AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1
     32      if grep _foo conftest.$gl_asmext >/dev/null ; then
     33        gl_cv_prog_as_underscore=yes
     34      else
     35        gl_cv_prog_as_underscore=no
     36      fi
     37      rm -f conftest*
     38     ])
     39   if test $gl_cv_prog_as_underscore = yes; then
     40     USER_LABEL_PREFIX=_
     41   else
     42     USER_LABEL_PREFIX=
     43   fi
     44   AC_DEFINE_UNQUOTED([USER_LABEL_PREFIX], [$USER_LABEL_PREFIX],
     45     [Define to the prefix of C symbols at the assembler and linker level,
     46      either an underscore or empty.])
     47   ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"'
     48   AC_SUBST([ASM_SYMBOL_PREFIX])
     49 ])
     50 
     51 # gl_C_ASM
     52 # Determines how to produce an assembly language file from C source code.
     53 # Sets the variables:
     54 #   gl_asmext - the extension of assembly language output,
     55 #   gl_c_asm_opt - the C compiler option that produces assembly language output.
     56 
     57 AC_DEFUN([gl_C_ASM],
     58 [
     59   AC_EGREP_CPP([MicrosoftCompiler],
     60     [
     61 #ifdef _MSC_VER
     62 MicrosoftCompiler
     63 #endif
     64     ],
     65     [gl_asmext='asm'
     66      gl_c_asm_opt='-c -Fa'
     67     ],
     68     [gl_asmext='s'
     69      gl_c_asm_opt='-S'
     70     ])
     71 ])
     72