bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

fix link errors from modules getlogin, getlogin_r


From: Bruno Haible
Subject: fix link errors from modules getlogin, getlogin_r
Date: Sun, 18 Dec 2016 00:40:40 +0100
User-agent: KMail/4.8.5 (Linux/3.8.0-44-generic; KDE/4.8.5; x86_64; ; )

With MSVC, the implementation of the 'getlogin' and 'getlogin_r' functions
produces a link error:

/home/bruno/msvc/compile cl -nologo -DHAVE_CONFIG_H -DEXEEXT=\".exe\" -I. 
-I../../gltests -I..  -DGNULIB_STRICT_CHECKING=1 -DIN_GNULIB_TESTS=1 -I. 
-I../../gltests -I.. -I../../gltests/.. -I../gllib -I../../gltests/../gllib 
-D_WIN32_WINNT=_WIN32_WINNT_WINXP -I/usr/local/msvc32/include  -MD -c -o 
test-getlogin.obj `cygpath -w '../../gltests/test-getlogin.c'`
test-getlogin.c
/home/bruno/msvc/compile cl -nologo  -MD  -L/usr/local/msvc32/lib -o 
test-getlogin.exe test-getlogin.obj libtests.a ../gllib/libgnu.a libtests.a  
libgnu.a(getlogin.obj) : error LNK2019: unresolved external symbol 
address@hidden referenced in function _getlogin
test-getlogin.exe : fatal error LNK1120: 1 unresolved externals
make[4]: *** [Makefile:6279: test-getlogin.exe] Error 2

/home/bruno/msvc/compile cl -nologo -DHAVE_CONFIG_H -DEXEEXT=\".exe\" -I. 
-I../../gltests -I..  -DGNULIB_STRICT_CHECKING=1 -DIN_GNULIB_TESTS=1 -I. 
-I../../gltests -I.. -I../../gltests/.. -I../gllib -I../../gltests/../gllib 
-D_WIN32_WINNT=_WIN32_WINNT_WINXP -I/usr/local/msvc32/include  -MD -c -o 
test-getlogin_r.obj `cygpath -w '../../gltests/test-getlogin_r.c'`
test-getlogin_r.c
/home/bruno/msvc/compile cl -nologo  -MD  -L/usr/local/msvc32/lib -o 
test-getlogin_r.exe test-getlogin_r.obj libtests.a ../gllib/libgnu.a libtests.a 
 
libgnu.a(getlogin_r.obj) : error LNK2019: unresolved external symbol 
address@hidden referenced in function _getlogin_r
test-getlogin_r.exe : fatal error LNK1120: 1 unresolved externals
make[4]: *** [Makefile:6283: test-getlogin_r.exe] Error 2

The problem is that the use of GetUserName() requires linking with -ladvapi32,
see https://msdn.microsoft.com/en-us/library/ms724432(v=vs.85).aspx .

This fixes it.


2016-12-17  Bruno Haible  <address@hidden>

        getlogin, getlogin_r: Fix link errors on MSVC.
        * m4/getlogin.m4 (gl_LIB_GETLOGIN): New macro.
        * modules/getlogin (configure.ac): Require gl_LIB_GETLOGIN.
        (Link): New section.
        * modules/getlogin_r (Files): Add m4/getlogin.m4.
        (configure.ac): Require gl_LIB_GETLOGIN.
        (Link): New section.
        * NEWS: Mention the new link requirements.
        * modules/getlogin-tests (test_getlogin_LDADD): New variable.
        * modules/getlogin_r-tests (test_getlogin_r_LDADD): New variable.

diff --git a/NEWS b/NEWS
index fbbf6f2..3db6085 100644
--- a/NEWS
+++ b/NEWS
@@ -42,6 +42,9 @@ User visible incompatible changes
 
 Date        Modules         Changes
 
+2016-12-17  getlogin        The link requirements of these modules are changed
+            getlogin_r      from empty to $(LIB_GETLOGIN).
+
 2016-12-13  dfa             Remove DFA_CASE_FOLD flag. Now based on RE_ICASE.
 
 2016-11-17  unistr/u32-strmblen   The function u32_strmblen can now return -1.
diff --git a/m4/getlogin.m4 b/m4/getlogin.m4
index a03193b..a9dc4d3 100644
--- a/m4/getlogin.m4
+++ b/m4/getlogin.m4
@@ -1,4 +1,4 @@
-# getlogin.m4 serial 4
+# getlogin.m4 serial 5
 dnl Copyright (C) 2010-2016 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -16,3 +16,17 @@ AC_DEFUN([gl_FUNC_GETLOGIN],
     HAVE_GETLOGIN=0
   fi
 ])
+
+dnl Determines the library needed by the implementation of the
+dnl getlogin and getlogin_r functions.
+AC_DEFUN([gl_LIB_GETLOGIN],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  case $host_os in
+    mingw*)
+      LIB_GETLOGIN='-ladvapi32' ;;
+    *)
+      LIB_GETLOGIN= ;;
+  esac
+  AC_SUBST([LIB_GETLOGIN])
+])
diff --git a/modules/getlogin b/modules/getlogin
index 379052a..1348319 100644
--- a/modules/getlogin
+++ b/modules/getlogin
@@ -14,12 +14,16 @@ if test $HAVE_GETLOGIN = 0; then
   AC_LIBOBJ([getlogin])
 fi
 gl_UNISTD_MODULE_INDICATOR([getlogin])
+AC_REQUIRE([gl_LIB_GETLOGIN])
 
 Makefile.am:
 
 Include:
 <unistd.h>
 
+Link:
+$(LIB_GETLOGIN)
+
 License:
 LGPLv2+
 
diff --git a/modules/getlogin-tests b/modules/getlogin-tests
index 6facd60..c8cdb05 100644
--- a/modules/getlogin-tests
+++ b/modules/getlogin-tests
@@ -11,3 +11,4 @@ AC_CHECK_FUNCS_ONCE([ttyname])
 Makefile.am:
 TESTS += test-getlogin
 check_PROGRAMS += test-getlogin
+test_getlogin_LDADD = $(LDADD) $(LIB_GETLOGIN)
diff --git a/modules/getlogin_r b/modules/getlogin_r
index 5406d94..169cb44 100644
--- a/modules/getlogin_r
+++ b/modules/getlogin_r
@@ -4,6 +4,7 @@ getlogin_r() function: Get user name to a buffer allocated by 
the caller.
 Files:
 lib/getlogin_r.c
 m4/getlogin_r.m4
+m4/getlogin.m4
 
 Depends-on:
 unistd
@@ -17,12 +18,16 @@ if test $HAVE_GETLOGIN_R = 0 || test $REPLACE_GETLOGIN_R = 
1; then
   gl_PREREQ_GETLOGIN_R
 fi
 gl_UNISTD_MODULE_INDICATOR([getlogin_r])
+AC_REQUIRE([gl_LIB_GETLOGIN])
 
 Makefile.am:
 
 Include:
 <unistd.h>
 
+Link:
+$(LIB_GETLOGIN)
+
 License:
 LGPLv2+
 
diff --git a/modules/getlogin_r-tests b/modules/getlogin_r-tests
index eda7b45..868b1b6 100644
--- a/modules/getlogin_r-tests
+++ b/modules/getlogin_r-tests
@@ -11,3 +11,4 @@ AC_CHECK_FUNCS_ONCE([ttyname])
 Makefile.am:
 TESTS += test-getlogin_r
 check_PROGRAMS += test-getlogin_r
+test_getlogin_r_LDADD = $(LDADD) $(LIB_GETLOGIN)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]