Checking the ./configure failure in config.log, we see that it creates a small program conftest.cpp:
extern "C" {
#include <com_err.h>
int main(void) {
error_message(0);
}
}
... and it fails to compile with the command g++ -o conftest -g -O2 conftest.cpp -lkrb5.
But the following does work:
jurjen@lwp05:~/packaging/msktutil/msktutil-0.4$ g++ -o conftest -g -O2 conftest.cpp -lkrb5 -lcom_err
, the solution being that conftest should've been linked against libcomerr.
That can be fixed by patching configure.in with this patch:
--- a/configure.in
+++ b/configure.in
@@ -104,19 +104,20 @@
# Checks for libraries.
AC_CHECK_LIB([krb5], [krb5_init_context], , [AC_MSG_ERROR([libkrb5 not found])])
AC_CHECK_LIB([ldap], [ldap_initialize], , [AC_MSG_ERROR([libldap not found])])
+AC_CHECK_LIB([com_err], [error_message], , [AC_MSG_ERROR([libcom_err not found])])
if test "$ac_cv_header_com_err_h"; then
AC_MSG_CHECKING([whether com_err.h needs extern "C"]);
-AC_LINK_IFELSE([[
+AC_LINK_IFELSE([AC_LANG_SOURCE([
#include <com_err.h>
int main(void) {
error_message(0);
}
-]], [AC_MSG_RESULT(no); com_err_needs_extern_c=no], [
+])], [AC_MSG_RESULT(no); com_err_needs_extern_c=no], [
-AC_LINK_IFELSE([[
+AC_LINK_IFELSE([AC_LANG_SOURCE([
extern "C" {
#include <com_err.h>
}
@@ -124,7 +125,7 @@
int main(void) {
error_message(0);
}
-]], [AC_MSG_RESULT(yes); com_err_needs_extern_c=yes], [AC_MSG_ERROR([Couldn't get error_message to work.])])])
+])], [AC_MSG_RESULT(yes); com_err_needs_extern_c=yes], [AC_MSG_ERROR([Couldn't get error_message to work.])])])
if test "$com_err_needs_extern_c=yes"; then
AC_DEFINE(COM_ERR_NEEDS_EXTERN_C, 1, [Does com_err.h need extern "C" around it?])
After that, ./configure runs, but make still fails with undefined references.
That is because the link order is wrong in Makefile.in, which can be fixed with the following patch:
--- a/Makefile.in
+++ b/Makefile.in
@@ -26,7 +26,7 @@
$(PROG) : $(objects)
@$(ECHO) "Assembling $(PROG)"
- $(CXX) $(LDFLAGS) $(LIBS) $(objects) -o $(PROG)
+ $(CXX) $(LDFLAGS) $(objects) $(LIBS) -o $(PROG)
%.o : %.cpp msktutil.h krb5wrap.h config.h
@$(ECHO) "Compiling $<"
... and then still the right libraries need to be linked against, which we fix rather ad-hoc, in Makefile.in as well:
--- a/Makefile.in
+++ b/Makefile.in
@@ -8,7 +8,8 @@
CPPFLAGS=@CPPFLAGS@
CXXFLAGS=@CXXFLAGS@ $(WARNFLAGS)
LDFLAGS=@LDFLAGS@
-LIBS=@LIBS@
+#LIBS=@LIBS@
+LIBS=-l krb5 -lldap -lcom_err
INSTALL=@INSTALL@
RM=@RM@ -rf
CP=@CP@ -f
With the build phase thus fixed, a rather standard debian/rules can be used[4]:
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
# Uncomment this to turn on verbose mode.
# export DH_VERBOSE=1
%:
dh $@
override_dh_auto_configure:
autoconf
dh_auto_configure
override_dh_installman:
dh_installman msktutil.M
... and the package will build.
The package is now free of Lintian errors, and it will mount an NFS3 share from a Windows 2008 R2 server with Kerberos authentication.