]> granicus.if.org Git - linux-pam/blob - configure.in
Relevant BUGIDs: report per email
[linux-pam] / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2 AC_INIT(conf/pam_conv1/pam_conv.y)
3
4 dnl The configuration header file
5 AC_CONFIG_HEADER(_pam_aconf.h)
6
7 dnl
8 dnl Release specific
9 dnl
10
11 LIBPAM_VERSION_MAJOR=0
12 LIBPAM_VERSION_MINOR=79
13
14 AC_SUBST(LIBPAM_VERSION_MAJOR)
15 AC_SUBST(LIBPAM_VERSION_MINOR)
16 AC_DEFINE(LIBPAM_VERSION_MAJOR)
17 AC_DEFINE(LIBPAM_VERSION_MINOR)
18
19 dnl
20 dnl By default, everything under PAM is installed under the root fs.
21 dnl
22
23 AC_PREFIX_DEFAULT()
24
25 dnl
26 dnl Useful info (believed to be portable) - in the future
27 dnl the LOCALSRCDIR and LOCALOBJDIRs may be different
28 dnl
29 LOCALSRCDIR=`/bin/pwd`         ; AC_SUBST(LOCALSRCDIR)
30 LOCALOBJDIR=`/bin/pwd`         ; AC_SUBST(LOCALOBJDIR)
31 OS=`uname|sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
32 AC_SUBST(OS)
33
34 dnl
35 dnl Rules needed for the following (hardcoded Linux defaults for now)
36 dnl
37
38 CONF_CFLAGS=                    ; AC_SUBST(CONF_CFLAGS)
39 MKDIR="mkdir -p"                ; AC_SUBST(MKDIR)
40
41 SHLIBMODE=755                   ; AC_SUBST(SHLIBMODE)
42 MANMODE=644                     ; AC_SUBST(MANMODE)
43
44 dnl These are most likely platform specific - I think HPUX differs
45 USESONAME=yes                   ; AC_SUBST(USESONAME)
46 SOSWITCH="-Wl,-soname -Wl,"     ; AC_SUBST(SOSWITCH)
47 NEEDSONAME=yes                  ; AC_SUBST(NEEDSONAME)
48 LDCONFIG=/sbin/ldconfig         ; AC_SUBST(LDCONFIG)
49
50 dnl Checks for programs.
51 AC_PROG_CC
52 dnl ### AC_PROG_CXX
53 AC_PROG_YACC
54 AC_PROG_LEX
55 AC_PROG_INSTALL
56 AC_PROG_LN_S
57 AC_PROG_MAKE_SET
58
59 dnl
60 dnl options and defaults
61 dnl
62
63 dnl lots of debugging information goes to /tmp/pam-debug.log
64 AC_ARG_ENABLE(debug,
65 [  --enable-debug           specify you are building with debugging on],
66         WITH_DEBUG=yes ; AC_DEFINE(DEBUG) , WITH_DEBUG=no)
67 AC_SUBST(WITH_DEBUG)
68
69 AC_ARG_ENABLE(memory-debug,
70 [  --enable-memory-debug    specify you want every malloc etc. call tracked],
71         WITH_MEMORY_DEBUG=yes ; AC_DEFINE(MEMORY_DEBUG) , WITH_MEMORY_DEBUG=no)
72 AC_SUBST(WITH_MEMORY_DEBUG)
73
74 dnl build specially named libraries (for debugging purposes)
75 AC_ARG_ENABLE(libdebug,
76 [  --enable-libdebug        specify you are building debugging libraries],
77         WITH_LIBDEBUG=yes ; AC_DEFINE(WITH_LIBDEBUG) , WITH_LIBDEBUG=no)
78 AC_SUBST(WITH_LIBDEBUG)
79
80 dnl packaging convenience
81 AC_ARG_ENABLE(fakeroot,
82 [  --enable-fakeroot=<path to packaging directory>], FAKEROOT=$enableval)
83 AC_SUBST(FAKEROOT)
84
85 AC_ARG_ENABLE(securedir,
86 [  --enable-securedir=<path to location of PAMs> [default \$libdir/security]],
87         SECUREDIR=$enableval, SECUREDIR=$libdir/security)
88 AC_SUBST(SECUREDIR)
89
90 AC_ARG_ENABLE(isadir,
91 [  --enable-isadir=<path to arch-specific module files> [default ../../\`basename \$libdir\`/security]],
92 ISA=$enableval,
93 ISA=../../`basename $libdir`/security)
94 unset mylibdirbase
95 AC_DEFINE_UNQUOTED(_PAM_ISA,"$ISA",[Define to the path, relative to SECUREDIR, where PAMs specific to this architecture can be found.])
96 AC_MSG_RESULT([Defining \$ISA to \"$ISA\".])
97
98 AC_ARG_ENABLE(sconfigdir,
99 [  --enable-sconfigdir=<path to module conf files> [default \$sysconfdir/security]],
100         SCONFIGDIR=$enableval, SCONFIGDIR=$sysconfdir/security)
101 AC_SUBST(SCONFIGDIR)
102
103 AC_ARG_ENABLE(suplementedir,
104 [  --enable-suplementedir=<path to module helper binaries> [default \$sbindir]],
105         SUPLEMENTED=$enableval, SUPLEMENTED=$sbindir)
106 AC_SUBST(SUPLEMENTED)
107
108 AC_ARG_ENABLE(includedir,
109 [  --enable-includedir=<path to include location> - where to put <security>],
110         INCLUDEDIR=$enableval, INCLUDEDIR=/usr/include)
111 AC_SUBST(INCLUDEDIR)
112
113 AC_ARG_ENABLE(docdir,
114 [  --enable-docdir=<path to store documentation in - /usr/share/doc/pam>],
115         DOCDIR=$enableval, DOCDIR=/usr/share/doc/pam)
116 AC_SUBST(DOCDIR)
117
118 AC_ARG_ENABLE(mandir,
119 [  --enable-mandir=<path to store manuals in - /usr/share/man>],
120         MANDIR=$enableval, MANDIR=/usr/share/man)
121 AC_SUBST(MANDIR)
122
123 AC_ARG_ENABLE(pamlocking,
124 [  --enable-pamlocking      configure libpam to observe a global authentication lock],
125         WITH_PAMLOCKING=yes ; AC_DEFINE(PAM_LOCKING) , WITH_PAMLOCKING=no)
126 AC_SUBST(WITH_PAMLOCKING)
127
128 AC_ARG_ENABLE(uglyhack,
129 [  --enable-uglyhack        configure libpam to try to honor old pam_strerror syntax],
130         AC_DEFINE(UGLY_HACK_FOR_PRIOR_BEHAVIOR_SUPPORT))
131
132 AC_ARG_ENABLE(read-both-confs,
133 [  --enable-read-both-confs  read both /etc/pam.d and /etc/pam.conf files],
134         AC_DEFINE(PAM_READ_BOTH_CONFS))
135 AC_SUBST(PAM_READ_BOTH_CONFS)
136
137 AC_ARG_ENABLE(static-libpam, [  --enable-static-libpam   build a libpam.a library],
138         STATIC_LIBPAM=yes , STATIC_LIBPAM=no)
139 AC_SUBST(STATIC_LIBPAM)
140
141 AC_ARG_ENABLE(dynamic-libpam,
142 [  --disable-dynamic-libpam do not build a shared libpam library],
143         DYNAMIC_LIBPAM=no, DYNAMIC_LIBPAM=yes)
144 AC_SUBST(DYNAMIC_LIBPAM)
145
146 DYNAMIC=-DPAM_DYNAMIC
147 AC_SUBST(DYNAMIC)
148
149 AC_ARG_ENABLE(static-modules,
150 [  --enable-static-modules  do not make the modules dynamically loadable],
151         STATIC=-DPAM_STATIC)
152 AC_SUBST(STATIC)
153
154 AC_ARG_ENABLE(lckpwdf,
155 [  --disable-lckpwdf do not use the lckpwdf function],
156         WITH_LCKPWDF=no, WITH_LCKPWDF=yes)
157 AC_SUBST(WITH_LCKPWDF)
158
159 AC_CHECK_HEADERS(paths.h)
160 AC_ARG_WITH(mailspool,
161 [  --with-mailspool         path to mail spool directory
162                            [default _PATH_MAILDIR if defined in paths.h, otherwise /var/spool/mail]],
163 with_mailspool=${withval})
164 if test x$with_mailspool != x ; then
165         pam_mail_spool="\"$with_mailspool\""
166 else
167         AC_TRY_RUN([
168 #include <paths.h>
169 int main() {
170 #ifdef _PATH_MAILDIR
171 exit(0);
172 #else
173 exit(1);
174 #endif
175 }], pam_mail_spool="_PATH_MAILDIR",
176 pam_mail_spool="\"/var/spool/mail\"",
177 pam_mail_spool="\"/var/spool/mail\"")
178 fi
179 AC_DEFINE_UNQUOTED(PAM_PATH_MAILDIR, $pam_mail_spool)
180
181 dnl Checks for libraries.
182 AC_CHECK_LIB(c, __libc_sched_setscheduler, PAM_NEEDS_LIBC=, PAM_NEEDS_LIBC=-lc)
183 AC_SUBST(PAM_NEEDS_LIBC)
184
185 dnl Checks for the existence of lckpwdf in libc
186 AC_CHECK_LIB(c, lckpwdf, HAVE_LCKPWDF=yes, HAVE_LCKPWDF=no)
187 AC_SUBST(HAVE_LCKPWDF)
188
189 dnl Checks for the existence of libdl - on BSD and Tru64 its part of libc
190 AC_CHECK_LIB(dl, dlopen, LIBDL=-ldl)
191 AC_SUBST(LIBDL)
192
193 dnl
194 dnl At least on Solaris, the existing libcrack must be dynamic.
195 dnl Ought to introduce a check for this.
196 dnl
197 AC_CHECK_LIB(crack, FascistCheck, HAVE_LIBCRACK=yes ; AC_DEFINE(HAVE_LIBCRACK),
198         HAVE_LIBCRACK=no)
199 AC_SUBST(HAVE_LIBCRACK)
200
201 AC_CHECK_LIB(crypt, crypt, HAVE_LIBCRYPT=yes ; AC_DEFINE(HAVE_LIBCRYPT),
202         HAVE_LIBCRYPT=no)
203 AC_SUBST(HAVE_LIBCRYPT)
204 AC_CHECK_LIB(util, logwtmp, HAVE_LIBUTIL=yes ; AC_DEFINE(HAVE_LIBUTIL),
205         HAVE_LIBUTIL=no)
206 AC_SUBST(HAVE_LIBUTIL)
207 AC_CHECK_LIB(ndbm, dbm_store, HAVE_LIBNDBM=yes ; AC_DEFINE(HAVE_LIBNDBM),
208         HAVE_LIBNDBM=no)
209 AC_SUBST(HAVE_LIBNDBM)
210 AC_CHECK_LIB(db, dbm_store, HAVE_LIBDB=yes ; AC_DEFINE(HAVE_LIBDB),
211         HAVE_LIBDB=no)
212 if test x$HAVE_LIBDB != xyes ; then
213         AC_CHECK_LIB(db, db_create, HAVE_LIBDB=yes ; AC_DEFINE(HAVE_LIBDB),
214         HAVE_LIBDB=no)
215 fi
216 AC_SUBST(HAVE_LIBDB)
217 AC_CHECK_LIB(fl, yylex, yyterminate, HAVE_LIBFL=yes ; AC_DEFINE(HAVE_LIBFL),
218         HAVE_LIBFL=no)
219 AC_SUBST(HAVE_LIBFL)
220 AC_CHECK_LIB(nsl, yp_maplist, HAVE_LIBNSL=yes ; AC_DEFINE(HAVE_LIBNSL),
221         HAVE_LIBNSL=no)
222 AC_SUBST(HAVE_LIBNSL)
223
224 if test $HAVE_LIBNSL = yes ; then
225         pwdblibs="$pwdblibs -lnsl"
226 fi
227 AC_CHECK_LIB(pwdb, pwdb_db_name, HAVE_LIBPWDB=yes ; AC_DEFINE(HAVE_LIBPWDB),
228         HAVE_LIBPWDB=no,$pwdblibs)
229 AC_SUBST(HAVE_LIBPWDB)
230 unset pwdblibs
231
232 AC_CHECK_LIB(fl, yywrap, HAVE_LIBFLEX=yes ; AC_DEFINE(HAVE_LIBFLEX),
233         HAVE_LIBFLEX=no)
234 AC_SUBST(HAVE_LIBFLEX)
235 AC_CHECK_LIB(l, yywrap, HAVE_LIBLEX=yes ; AC_DEFINE(HAVE_LIBLEX),
236         HAVE_LIBLEX=no)
237 AC_SUBST(HAVE_LIBLEX)
238
239 dnl Checks for header files.
240 AC_HEADER_DIRENT
241 AC_HEADER_STDC
242 AC_HEADER_SYS_WAIT
243 AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/file.h sys/ioctl.h sys/time.h syslog.h termio.h unistd.h sys/fsuid.h)
244
245 dnl Linux wants features.h in some of the source files.
246 AC_CHECK_HEADERS(features.h)
247
248 dnl For module/pam_cracklib
249 AC_CHECK_HEADERS(crypt.h)
250
251 dnl For module/pam_userdb
252 AC_CHECK_HEADERS(ndbm.h db.h)
253 dnl I suspect the following two lines are a hack.
254 HAVE_NDBM_H=$ac_cv_header_ndbm_h
255 AC_SUBST(HAVE_NDBM_H)
256
257 dnl For module/pam_lastlog
258 AC_CHECK_HEADERS(lastlog.h utmp.h utmpx.h)
259
260 dnl This following rule should be made conditional upon HAVE_LIBCRYPT
261 dnl being found.
262
263 dnl Look for cracklib dictionary
264 AC_MSG_CHECKING(path to cracklib dictionary)
265 DICT_DIR_CANDIDATES="/usr/lib /usr/share/dict /usr/share/lib \
266   /usr/local/lib /usr/local/share/lib"
267 DICT_FILE_CANDIDATES="pw_dict cracklib_dict"
268 CRACKLIB_DICTPATH=""
269 for d in $DICT_DIR_CANDIDATES ; do
270       for f in $DICT_FILE_CANDIDATES ; do
271               if test -r $d/$f.hwm ; then
272                       CRACKLIB_DICTPATH=$d/$f
273                       break 2
274               elif test -r $d/dict/$f.hwm ; then
275                       CRACKLIB_DICTPATH=$d/dict/$f
276                       break 2
277               fi
278       done
279 done
280 if test -z "$CRACKLIB_DICTPATH" ; then
281       AC_MSG_WARN([none found - pam_cracklib will not be built])
282 else
283       AC_MSG_RESULT($CRACKLIB_DICTPATH)
284 fi
285 AC_SUBST(CRACKLIB_DICTPATH)
286
287 dnl Set FLAGS, linker options etc. depending on C compiler.
288 dnl gcc is tested and much preferred; others less so, if at all
289 dnl
290 dnl If compiling with gcc, linking is also supposed to be done with gcc
291 dnl
292 dnl For the moment, gcc is enforced above at "CC=gcc".
293 dnl
294 dnl There is an issue over _POSIX_SOURCE _BSD_SOURCE and _GNU_SOURCE .
295 dnl The original "Linux-PAM" had blanket inclusion.  But portability
296 dnl requires their default absence: if particular OSes require them,
297 dnl this should be done selectively.
298
299 GCC_WARNINGS="-Wall -Wwrite-strings \
300         -Wpointer-arith -Wcast-qual -Wcast-align \
301         -Wstrict-prototypes -Wmissing-prototypes \
302         -Wnested-externs -Winline -Wshadow"
303
304 if test "$GCC" = yes; then
305         CC=gcc                          ; AC_SUBST(CC)
306 ### May need per-OS attention
307 ### Example: -D_POSIX_SOURCE: needed on Linux but harms Solaris.
308         case $OS in
309         linux)
310                 OS_CFLAGS=
311                 LD_D="$CC -shared $LDFLAGS"
312                 WARNINGS="$GCC_WARNINGS"
313                 PIC="-fPIC"
314                 DYNTYPE=so
315                 LD=gcc
316                 LD_L="$CC -shared $LDFLAGS"
317                 RANLIB=:
318                 STRIP=strip
319                 CC_STATIC="-Xlinker -export-dynamic"
320                 ;;
321         sunos)
322                 OS_CFLAGS="-ansi -pedantic"
323                 LD_D="gcc -shared -Xlinker -x"
324                 WARNINGS="$GCC_WARNINGS"
325                 PIC="-fPIC"
326                 DYNTYPE=so
327                 LD=ld
328                 LD_L="$LD -x -shared"
329                 RANLIB=ranlib
330                 STRIP=strip
331                 CC_STATIC="-Xlinker -export-dynamic"
332                 ;;
333         aix)
334                 OS_CFLAGS=""
335                 DYNTYPE=lo
336                 LD=ld
337                 LD_L=ld -bexpall -bM:SRE -bnoentry
338                 LD_D="$LD_L"
339                 RANLIB=ranlib
340                 STRIP=strip
341                 ;;
342         *)
343                 OS_CFLAGS=""
344                 ;;
345         esac
346 else
347 ###
348 ### Non-gcc needs attention on per-OS basis
349 ###
350         case "$OS" in
351         darwin)
352 # add some stuff here (see sourceforge bug 534205)
353 # DOCDIR=/System/Documentation/Administration/Libraries/PAM
354 # MANDIR=/usr/share/man
355                 ;;
356         solaris)
357             ### Support for Solaris-C
358             OS_CFLAGS=""
359             WARNINGS=""
360             PIC="-K pic"
361             LD=ld
362             LD_D="cc -z text -G -R."
363             LD_L="$LD_D"
364             RANLIB=ranlib
365             STRIP=strip
366             CC_STATIC=
367             ;;
368         irix*)
369             OSRELEASE=`uname -r`
370             if test "$OSRELEASE" = 6.5; then
371                 OS_CFLAGS=""
372                 WARNINGS="-fullwarn"
373                 PIC=                    #PIC code is default for IRIX
374                 LD="cc -shared"         # modules friendly approach
375                 LD_D="cc -shared"
376                 LD_L="ld -G -z redlocsym"
377                 RANLIB=echo
378                 STRIP=strip
379                 CC_STATIC=
380             else
381                 echo "IRIX prior to 6.5 not allowed for"
382                 exit
383             fi
384             ;;
385        *) echo "Native compiler on $OS is not yet supported"
386                exit
387             ;;
388        esac
389 fi
390
391 AC_SUBST(DYNTYPE)
392 AC_SUBST(OS_CFLAGS)
393 AC_SUBST(WARNINGS)
394 AC_SUBST(PIC)
395 AC_SUBST(LD)
396 AC_SUBST(LD_D)
397 AC_SUBST(LD_L)
398 AC_SUBST(RANLIB)
399 AC_SUBST(STRIP)
400 AC_SUBST(CC_STATIC)
401
402 dnl Checks for typedefs, structures, and compiler characteristics.
403 AC_C_BIGENDIAN
404 AC_C_CONST
405 AC_TYPE_UID_T
406 AC_TYPE_OFF_T
407 AC_TYPE_PID_T
408 AC_TYPE_SIZE_T
409 AC_HEADER_TIME
410 AC_STRUCT_TM
411
412 dnl Checks for library functions.
413 AC_TYPE_GETGROUPS
414 AC_PROG_GCC_TRADITIONAL
415 AC_FUNC_MEMCMP
416 AC_FUNC_VPRINTF
417 AC_CHECK_FUNCS(gethostname gettimeofday mkdir select strcspn strdup strerror strspn strstr strtol uname)
418
419 AC_CHECK_FUNCS(getpwnam_r getpwuid_r getgrnam_r getgrgid_r getspnam_r getgrouplist)
420
421 dnl Checks for programs/utilities
422 AC_CHECK_PROG(HAVE_SGML2TXT, sgml2txt, yes, no)
423 AC_CHECK_PROG(HAVE_SGML2HTML, sgml2html, yes, no)
424 AC_CHECK_PROG(HAVE_SGML2LATEX, sgml2latex, yes, no)
425 if test $HAVE_SGML2LATEX = "yes" ; then
426   if sgml2latex -h | grep -e --paper | grep  ' -p ' > /dev/null ; then
427     PSER="sgml2latex -o ps"
428   else
429     PSER="sgml2latex -p"
430   fi
431   AC_CHECK_PROG(HAVE_PS2PDF, ps2pdf, yes, no)
432 else
433   AC_CHECK_PROG(HAVE_SGML2PS, sgml2ps, yes, no)
434   if test $HAVE_SGML2PS = yes ; then
435     PSER="sgml2ps"
436   fi
437 fi
438 AC_SUBST(PSER)
439 AC_SUBST(PS2PDF)
440
441 dnl Files to be created from when we run configure
442 AC_OUTPUT(Make.Rules)