dnl dnl Contains the following macros dnl SANE_SET_CFLAGS(is_release) dnl SANE_CHECK_MISSING_HEADERS dnl SANE_SET_LDFLAGS dnl SANE_CHECK_DLL_LIB dnl SANE_CHECK_JPEG dnl SANE_CHECK_IEEE1284 dnl SANE_CHECK_PTHREAD dnl SANE_CHECK_LOCKING dnl JAPHAR_GREP_CFLAGS(flag, cmd_if_missing, cmd_if_present) dnl SANE_LINKER_RPATH dnl SANE_CHECK_U_TYPES dnl SANE_CHECK_GPHOTO2 dnl SANE_CHECK_IPV6 dnl SANE_CHECK_BACKENDS dnl SANE_PROTOTYPES dnl AC_PROG_LIBTOOL dnl # SANE_SET_CFLAGS(is_release) # Set CFLAGS. Enable/disable compilation warnings if we gcc is used. # Warnings are enabled by default when in development cycle but disabled # when a release is made. The argument is_release is either yes or no. AC_DEFUN([SANE_SET_CFLAGS], [ if test "${ac_cv_c_compiler_gnu}" = "yes"; then NORMAL_CFLAGS="\ -W \ -Wall" WARN_CFLAGS="\ -W \ -Wall \ -Wcast-align \ -Wcast-qual \ -Wmissing-declarations \ -Wmissing-prototypes \ -Wpointer-arith \ -Wreturn-type \ -Wstrict-prototypes \ -pedantic" # OS/2 and others don't include some headers with -ansi enabled ANSI_FLAG=-ansi case "${host_os}" in solaris* | hpux* | os2* | darwin* ) ANSI_FLAG= ;; esac WARN_CFLAGS="${WARN_CFLAGS} ${ANSI_FLAG}" AC_ARG_ENABLE(warnings, AC_HELP_STRING([--enable-warnings], [turn on tons of compiler warnings (GCC only)]), [ if eval "test x$enable_warnings = xyes"; then for flag in $WARN_CFLAGS; do JAPHAR_GREP_CFLAGS($flag, [ CFLAGS="$CFLAGS $flag" ]) done else for flag in $NORMAL_CFLAGS; do JAPHAR_GREP_CFLAGS($flag, [ CFLAGS="$CFLAGS $flag" ]) done fi ], [if test x$1 = xno; then # Warnings enabled by default (development) for flag in $WARN_CFLAGS; do JAPHAR_GREP_CFLAGS($flag, [ CFLAGS="$CFLAGS $flag" ]) done else # Warnings disabled by default (release) for flag in $NORMAL_CFLAGS; do JAPHAR_GREP_CFLAGS($flag, [ CFLAGS="$CFLAGS $flag" ]) done fi]) fi # ac_cv_c_compiler_gnu ]) dnl SANE_CHECK_MISSING_HEADERS dnl Do some sanity checks. It doesn't make sense to proceed if those headers dnl aren't present. AC_DEFUN([SANE_CHECK_MISSING_HEADERS], [ MISSING_HEADERS= if test "${ac_cv_header_fcntl_h}" != "yes" ; then MISSING_HEADERS="${MISSING_HEADERS}\"fcntl.h\" " fi if test "${ac_cv_header_sys_time_h}" != "yes" ; then MISSING_HEADERS="${MISSING_HEADERS}\"sys/time.h\" " fi if test "${ac_cv_header_unistd_h}" != "yes" ; then MISSING_HEADERS="${MISSING_HEADERS}\"unistd.h\" " fi if test "${ac_cv_header_stdc}" != "yes" ; then MISSING_HEADERS="${MISSING_HEADERS}\"ANSI C headers\" " fi if test "${MISSING_HEADERS}" != "" ; then echo "*** The following essential header files couldn't be found:" echo "*** ${MISSING_HEADERS}" echo "*** Maybe the compiler isn't ANSI C compliant or not properly installed?" echo "*** For details on what went wrong see config.log." AC_MSG_ERROR([Exiting now.]) fi ]) # SANE_SET_LDFLAGS # Add special LDFLAGS AC_DEFUN([SANE_SET_LDFLAGS], [ # Define stricter linking policy on GNU systems. This is not # added to global LDFLAGS because we may want to create convenience # libraries that don't require such strick linking. if test "$GCC" = yes; then case ${host_os} in linux* | solaris*) STRICT_LDFLAGS="-Wl,-z,defs" ;; esac fi AC_SUBST(STRICT_LDFLAGS) case "${host_os}" in aix*) #enable .so libraries, disable archives LDFLAGS="$LDFLAGS -Wl,-brtl" ;; darwin*) #include frameworks LIBS="$LIBS -framework CoreFoundation -framework IOKit" ;; esac ]) # SANE_CHECK_DLL_LIB # Find dll library AC_DEFUN([SANE_CHECK_DLL_LIB], [ dnl Checks for dll libraries: dl DL_LIBS="" if test "${enable_dynamic}" != "no"; then # dlopen AC_CHECK_HEADERS(dlfcn.h, [AC_CHECK_LIB(dl, dlopen, DL_LIBS=-ldl) saved_LIBS="${LIBS}" LIBS="${LIBS} ${DL_LIBS}" AC_CHECK_FUNCS(dlopen, enable_dynamic=yes,) LIBS="${saved_LIBS}" ],) # HP/UX DLL handling AC_CHECK_HEADERS(dl.h, [AC_CHECK_LIB(dld,shl_load, DL_LIBS=-ldld) saved_LIBS="${LIBS}" LIBS="${LIBS} ${DL_LIBS}" AC_CHECK_FUNCS(shl_load, enable_dynamic=yes,) LIBS="${saved_LIBS}" ],) if test -z "$DL_LIBS" ; then # old Mac OS X/Darwin (without dlopen) AC_CHECK_HEADERS(mach-o/dyld.h, [AC_CHECK_FUNCS(NSLinkModule, enable_dynamic=yes,) ],) fi fi AC_SUBST(DL_LIBS) DYNAMIC_FLAG= if test "${enable_dynamic}" = yes ; then DYNAMIC_FLAG=-module fi AC_SUBST(DYNAMIC_FLAG) ]) # # Checks for ieee1284 library, needed for canon_pp backend. AC_DEFUN([SANE_CHECK_IEEE1284], [ AC_CHECK_HEADER(ieee1284.h, [ AC_CACHE_CHECK([for libieee1284 >= 0.1.5], sane_cv_use_libieee1284, [ AC_TRY_COMPILE([#include ], [ struct parport p; char *buf; ieee1284_nibble_read(&p, 0, buf, 1); ], [sane_cv_use_libieee1284="yes"; IEEE1284_LIBS="-lieee1284" ],[sane_cv_use_libieee1284="no"]) ],) ],) if test "$sane_cv_use_libieee1284" = "yes" ; then AC_DEFINE(HAVE_LIBIEEE1284,1,[Define to 1 if you have the `ieee1284' library (-lcam).]) fi AC_SUBST(IEEE1284_LIBS) ]) # # Checks for pthread support AC_DEFUN([SANE_CHECK_PTHREAD], [ case "${host_os}" in darwin*) # currently only enabled on MacOS X use_pthread=yes ;; *) use_pthread=no esac # # now that we have the systems preferences, we check # the user AC_ARG_ENABLE( [fork-process], AC_HELP_STRING([--enable-fork-process], [use fork instead of pthread (default=no for MacOS X, yes for everything else)]), [ if test $enableval != yes ; then use_pthread=yes fi ]) AC_CHECK_HEADERS(pthread.h, [ AC_CHECK_LIB(pthread, pthread_create, PTHREAD_LIBS="-lpthread") have_pthread=yes save_LIBS="$LIBS" LIBS="$LIBS $PTHREAD_LIBS" AC_CHECK_FUNCS([pthread_create pthread_kill pthread_join pthread_detach pthread_cancel pthread_testcancel], ,[ have_pthread=no; use_pthread=no ]) LIBS="$save_LIBS" ],) AC_SUBST(PTHREAD_LIBS) if test $use_pthread = yes ; then AC_DEFINE_UNQUOTED(USE_PTHREAD, "$use_pthread", [Define if pthreads should be used instead of forked processes.]) fi if test "$have_pthread" = "yes" ; then CPPFLAGS="${CPPFLAGS} -D_REENTRANT" fi AC_MSG_CHECKING([whether to enable pthread support]) AC_MSG_RESULT([$have_pthread]) AC_MSG_CHECKING([whether to use pthread instead of fork]) AC_MSG_RESULT([$use_pthread]) ]) # # Checks for jpeg library >= v6B (61), needed for DC210, DC240, # GPHOTO2 and dell1600n_net backends. AC_DEFUN([SANE_CHECK_JPEG], [ AC_CHECK_LIB(jpeg,jpeg_start_decompress, [ AC_CHECK_HEADER(jconfig.h, [ AC_MSG_CHECKING([for jpeglib - version >= 61 (6a)]) AC_EGREP_CPP(sane_correct_jpeg_lib_version_found, [ #include #if JPEG_LIB_VERSION >= 61 sane_correct_jpeg_lib_version_found #endif ], [sane_cv_use_libjpeg="yes"; JPEG_LIBS="-ljpeg"; AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)]) ],) ],) if test "$sane_cv_use_libjpeg" = "yes" ; then AC_DEFINE(HAVE_LIBJPEG,1,[Define to 1 if you have the libjpeg library.]) fi AC_SUBST(JPEG_LIBS) ]) # Checks for tiff library dell1600n_net backend. AC_DEFUN([SANE_CHECK_TIFF], [ AC_CHECK_LIB(tiff,TIFFFdOpen, [ AC_CHECK_HEADER(tiffio.h, [sane_cv_use_libtiff="yes"; TIFF_LIBS="-ltiff"],) ],) AC_SUBST(TIFF_LIBS) ]) # # Checks for pthread support AC_DEFUN([SANE_CHECK_LOCKING], [ LOCKPATH_GROUP=uucp use_locking=yes case "${host_os}" in os2* ) use_locking=no ;; esac # # we check the user AC_ARG_ENABLE( [locking], AC_HELP_STRING([--enable-locking], [activate device locking (default=yes, but only used by some backends)]), [ if test $enableval = yes ; then use_locking=yes else use_locking=no fi ]) if test $use_locking = yes ; then AC_ARG_WITH([group], AC_HELP_STRING([--with-group], [use the specified group for lock dir @<:@default=uucp@:>@]), [LOCKPATH_GROUP="$withval"] ) # check if the group does exist lasterror="" touch sanetest.file chgrp $LOCKPATH_GROUP sanetest.file 2>/dev/null || lasterror=$? rm -f sanetest.file if test ! -z "$lasterror"; then AC_MSG_WARN([Group $LOCKPATH_GROUP does not exist on this system.]) AC_MSG_WARN([Locking feature will be disabled.]) use_locking=no fi fi if test $use_locking = yes ; then INSTALL_LOCKPATH=install-lockpath AC_DEFINE([ENABLE_LOCKING], 1, [Define to 1 if device locking should be enabled.]) else INSTALL_LOCKPATH= fi AC_MSG_CHECKING([whether to enable device locking]) AC_MSG_RESULT([$use_locking]) if test $use_locking = yes ; then AC_MSG_NOTICE([Setting lockdir group to $LOCKPATH_GROUP]) fi AC_SUBST(INSTALL_LOCKPATH) AC_SUBST(LOCKPATH_GROUP) ]) dnl dnl JAPHAR_GREP_CFLAGS(flag, cmd_if_missing, cmd_if_present) dnl dnl From Japhar. Report changes to japhar@hungry.com dnl AC_DEFUN([JAPHAR_GREP_CFLAGS], [case "$CFLAGS" in "$1" | "$1 "* | *" $1" | *" $1 "* ) ifelse($#, 3, [$3], [:]) ;; *) $2 ;; esac ]) dnl dnl SANE_LINKER_RPATH dnl dnl Detect how to set runtime link path (rpath). Set variable dnl LINKER_RPATH. Typical content will be '-Wl,-rpath,' or '-R '. If dnl set, add '${LINKER_RPATH}${libdir}' to $LDFLAGS dnl AC_DEFUN([SANE_LINKER_RPATH], [dnl AC_REQUIRE([AC_SUBST])dnl This line resulted in an empty AC_SUBST() !! AC_CACHE_CHECK([linker parameter to set runtime link path], LINKER_RPATH, [LINKER_RPATH= case "$host_os" in linux* | freebsd* | netbsd* | openbsd* | irix*) # I believe this only works with GNU ld [pere 2001-04-16] LINKER_RPATH="-Wl,-rpath," ;; solaris*) LINKER_RPATH="-R " ;; esac ]) AC_SUBST(LINKER_RPATH)dnl ]) dnl dnl SANE_CHECK_U_TYPES dnl dnl Some of the following types seem to be defined only in sys/bitypes.h on dnl some systems (e.g. Tru64 Unix). This is a problem for files that include dnl sys/bitypes.h indirectly (e.g. net.c). If this is true, we add dnl sys/bitypes.h to CPPFLAGS. dnl dnl FIXME: stdint.h is apart of C99 so we have datatypes that can be dnl used in place of these and we have a macro to create a replacement dnl stdint.h on platforms that do not support it. The types below dnl are tricky to support; as the code below shows. AC_DEFUN([SANE_CHECK_U_TYPES], [ if test "$ac_cv_header_sys_bitypes_h" = "yes" ; then AC_MSG_CHECKING([for u_int8_t only in sys/bitypes.h]) AC_EGREP_CPP(u_int8_t, [ #include "confdefs.h" #include #if STDC_HEADERS #include #include #endif ],[AC_MSG_RESULT([no, also in standard headers])], [AC_EGREP_HEADER(u_int8_t,netinet/in.h, [AC_DEFINE(NEED_SYS_BITYPES_H, 1, [Do we need ?]) AH_VERBATIM([NEED_SYS_BITYPES_H_IF], [/* Make sure that sys/bitypes.h is included on True64 */ #ifdef NEED_SYS_BITYPES_H #include #endif]) AC_MSG_RESULT(yes)], [AC_MSG_RESULT([no, not even included with netinet/in.h])])]) fi dnl Use new style of check types that doesn't take default to use. dnl The old style would add an #undef of the type check on platforms dnl that defined that type... That is not portable to platform that dnl define it as a #define. AC_CHECK_TYPES([u_int8_t, u_int16_t, u_int32_t, u_char, u_int, u_long],,,) ]) # # Checks for gphoto2 libs, needed by gphoto2 backend AC_DEFUN([SANE_CHECK_GPHOTO2], [ AC_ARG_WITH(gphoto2, AC_HELP_STRING([--with-gphoto2], [include the gphoto2 backend @<:@default=yes@:>@]), [# If --with-gphoto2=no or --without-gphoto2, disable backend # as "$with_gphoto2" will be set to "no"]) # If --with-gphoto2=yes (or not supplied), first check if # pkg-config exists, then use it to check if libgphoto2 is # present. If all that works, then see if we can actually link # a program. And, if that works, then add the -l flags to # LIBS and any other flags to GPHOTO2_LDFLAGS to pass to # sane-config. if test "$with_gphoto2" != "no" ; then AC_CHECK_TOOL(HAVE_GPHOTO2, pkg-config, false) if test ${HAVE_GPHOTO2} != "false" ; then if pkg-config --exists libgphoto2 ; then with_gphoto2="`pkg-config --modversion libgphoto2`" GPHOTO2_CPPFLAGS="`pkg-config --cflags libgphoto2`" GPHOTO2_LIBS="`pkg-config --libs libgphoto2`" saved_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${GPHOTO2_CPPFLAGS}" saved_LIBS="${LIBS}" LIBS="${LIBS} ${GPHOTO2_LIBS}" # Make sure we an really use the library AC_CHECK_FUNCS(gp_camera_init, HAVE_GPHOTO2=true, HAVE_GPHOTO2=false) CPPFLAGS="${saved_CPPFLAGS}" LIBS="${saved_LIBS}" else HAVE_GPHOTO2=false fi if test "${HAVE_GPHOTO2}" = "false"; then GPHOTO2_CPPFLAGS="" GPHOTO2_LIBS="" fi fi fi AC_SUBST(GPHOTO2_CPPFLAGS) AC_SUBST(GPHOTO2_LIBS) ]) # # Check for AF_INET6, determines whether or not to enable IPv6 support # Check for ss_family member in struct sockaddr_storage AC_DEFUN([SANE_CHECK_IPV6], [ AC_MSG_CHECKING([whether to enable IPv6]) AC_ARG_ENABLE(ipv6, AC_HELP_STRING([--disable-ipv6],[disable IPv6 support]), [ if test "$enableval" = "no" ; then AC_MSG_RESULT([no, manually disabled]) ipv6=no fi ]) if test "$ipv6" != "no" ; then AC_TRY_COMPILE([ #define INET6 #include #include ], [ /* AF_INET6 available check */ if (socket(AF_INET6, SOCK_STREAM, 0) < 0) exit(1); else exit(0); ],[ AC_MSG_RESULT(yes) AC_DEFINE([ENABLE_IPV6], 1, [Define to 1 if the system supports IPv6]) ipv6=yes ],[ AC_MSG_RESULT([no (couldn't compile test program)]) ipv6=no ]) fi if test "$ipv6" != "no" ; then AC_MSG_CHECKING([whether struct sockaddr_storage has an ss_family member]) AC_TRY_COMPILE([ #define INET6 #include #include ], [ /* test if the ss_family member exists in struct sockaddr_storage */ struct sockaddr_storage ss; ss.ss_family = AF_INET; exit (0); ], [ AC_MSG_RESULT(yes) AC_DEFINE([HAS_SS_FAMILY], 1, [Define to 1 if struct sockaddr_storage has an ss_family member]) ], [ AC_TRY_COMPILE([ #define INET6 #include #include ], [ /* test if the __ss_family member exists in struct sockaddr_storage */ struct sockaddr_storage ss; ss.__ss_family = AF_INET; exit (0); ], [ AC_MSG_RESULT([no, but __ss_family exists]) AC_DEFINE([HAS___SS_FAMILY], 1, [Define to 1 if struct sockaddr_storage has __ss_family instead of ss_family]) ], [ AC_MSG_RESULT([no]) ipv6=no ]) ]) fi ]) # # Verifies that values in $BACKENDS and updates FILTERED_BACKEND # with either backends that can be compiled or fails the script. AC_DEFUN([SANE_CHECK_BACKENDS], [ if test "${user_selected_backends}" = "yes"; then DISABLE_MSG="aborting" else DISABLE_MSG="disabling" fi FILTERED_BACKENDS="" for be in ${BACKENDS}; do backend_supported="yes" case $be in plustek_pp) case "$host_os" in gnu*) echo "*** $be backend not supported on GNU/Hurd - $DISABLE_MSG" backend_supported="no" ;; esac ;; dc210|dc240) if test "${sane_cv_use_libjpeg}" != "yes"; then echo "*** $be backend requires JPEG library - $DISABLE_MSG" backend_supported="no" fi ;; canon_pp|hpsj5s) if test "${sane_cv_use_libieee1284}" != "yes"; then echo "*** $be backend requires libieee1284 library - $DISABLE_MSG" backend_supported="no" fi ;; mustek_pp) if test "${sane_cv_use_libieee1284}" != "yes" && test "${enable_parport_directio}" != "yes"; then echo "*** $be backend requires libieee1284 and paraport-directio libraries - DISABLE_MSG" backend_supported="no" fi ;; dell1600n_net) if test "${sane_cv_use_libjpeg}" != "yes" || test "${sane_cv_use_libtiff}" != "yes"; then echo "*** $be backend requires JPEG and/or TIFF library - $DISABLE_MSG" backend_supported="no" fi ;; gphoto2) if test "${HAVE_GPHOTO2}" != "true" \ -o "${sane_cv_use_libjpeg}" != "yes"; then echo "*** $be backend requires gphoto2 and JPEG libraries - $DISABLE_MSG" backend_supported="no" fi ;; pint) if test "${ac_cv_header_sys_scanio_h}" = "no"; then echo "*** $be backend requires sys/scanio.h - $DISABLE_MSG" backend_supported="no" fi ;; qcam) if test "${ac_cv_func_ioperm}" = "no" \ && test "${ac_cv_func__portaccess}" = "no"; then echo "*** $be backend requires ioperm and portaccess functions - $DISABLE_MSG" backend_supported="no" fi ;; v4l) if test "${have_linux_ioctl_defines}" != "yes" \ || test "${have_libv4l1}" != "yes"; then echo "*** $be backend requires v4l libraries - $DISABLE_MSG" backend_supported="no" fi ;; net) if test "${ac_cv_header_sys_socket_h}" = "no"; then echo "*** $be backend requires sys/socket.h - $DISABLE_MSG" backend_supported="no" fi ;; mustek_usb2) if test "${have_pthread}" != "yes"; then echo "*** $be backend requires pthread library - $DISABLE_MSG" backend_supported="no" fi ;; esac if test "${backend_supported}" = "no"; then if test "${user_selected_backends}" = "yes"; then exit 1 fi else FILTERED_BACKENDS="${FILTERED_BACKENDS} $be" fi done ]) # # Generate prototypes for functions not available on the system AC_DEFUN([SANE_PROTOTYPES], [ AH_BOTTOM([ /* FIXME: Do not use these types in code anymore. Use types defined * in C99 stdint.h and available in our cross-platform _stdint.h. */ #ifndef HAVE_U_INT8_T #define u_int8_t unsigned char #endif #ifndef HAVE_U_INT16_T #define u_int16_t unsigned int #endif #ifndef HAVE_U_INT32_T #define u_int32_t unsigned long #endif #ifndef HAVE_U_CHAR #define u_char unsigned char #endif #ifndef HAVE_U_INT #define u_int unsigned int #endif #ifndef HAVE_U_LONG #define u_long unsigned long #endif /* END of FIXME: Do not use above types */ /* Prototype for getenv */ #ifndef HAVE_GETENV #define getenv sanei_getenv char * getenv(const char *name); #endif /* Prototype for inet_ntop */ #ifndef HAVE_INET_NTOP #define inet_ntop sanei_inet_ntop #include const char * inet_ntop (int af, const void *src, char *dst, size_t cnt); #endif /* Prototype for inet_pton */ #ifndef HAVE_INET_PTON #define inet_pton sanei_inet_pton int inet_pton (int af, const char *src, void *dst); #endif /* Prototype for isfdtype */ #ifndef HAVE_ISFDTYPE #define isfdtype sanei_isfdtype int isfdtype(int fd, int fdtype); #endif /* Prototype for sigprocmask */ #ifndef HAVE_SIGPROCMASK #define sigprocmask sanei_sigprocmask int sigprocmask (int how, int *new, int *old); #endif /* Prototype for snprintf */ #ifndef HAVE_SNPRINTF #define snprintf sanei_snprintf #include int snprintf (char *str,size_t count,const char *fmt,...); #endif /* Prototype for strcasestr */ #ifndef HAVE_STRCASESTR #define strcasestr sanei_strcasestr char * strcasestr (const char *phaystack, const char *pneedle); #endif /* Prototype for strdup */ #ifndef HAVE_STRDUP #define strdup sanei_strdup char *strdup (const char * s); #endif /* Prototype for strndup */ #ifndef HAVE_STRNDUP #define strndup sanei_strndup #include char *strndup(const char * s, size_t n); #endif /* Prototype for strsep */ #ifndef HAVE_STRSEP #define strsep sanei_strsep char *strsep(char **stringp, const char *delim); #endif /* Prototype for usleep */ #ifndef HAVE_USLEEP #define usleep sanei_usleep unsigned int usleep (unsigned int useconds); #endif /* Prototype for vsyslog */ #ifndef HAVE_VSYSLOG #define vsyslog sanei_vsyslog #include void vsyslog(int priority, const char *format, va_list args); #endif ]) ]) m4_include([m4/libtool.m4]) m4_include([m4/byteorder.m4]) m4_include([m4/stdint.m4])