blob: 3d3cdcf31886bceb4a2a34926902263614f71e3d [file] [log] [blame]
Linus Walleijeb8c6fe2006-02-03 09:46:22 +00001# Process this file with autoconf to produce a configure script.
2AC_PREREQ(2.52)
Linus Walleijdc31a2e2014-08-26 22:17:57 +02003AC_INIT([libmtp], [1.1.8], [libmtp-discuss@lists.sourceforge.net])
Linus Walleijd4637502009-06-14 23:03:33 +00004AC_CONFIG_MACRO_DIR([m4])
Linus Walleijeb8c6fe2006-02-03 09:46:22 +00005AM_INIT_AUTOMAKE([foreign])
6AC_CONFIG_SRCDIR([src/libmtp.c])
Linus Walleij8609af32006-12-28 21:25:17 +00007AM_CONFIG_HEADER(config.h)
Linus Walleijeb8c6fe2006-02-03 09:46:22 +00008
Linus Walleijeb8c6fe2006-02-03 09:46:22 +00009# Checks for programs.
10AC_PROG_CC
11AC_PROG_INSTALL
12AC_PROG_LN_S
13AC_LIBTOOL_WIN32_DLL
14AC_PROG_LIBTOOL
Linus Walleijd4637502009-06-14 23:03:33 +000015AM_ICONV
16
Denis Dupeyronb9eed542011-01-26 22:31:16 -070017# Optionally set install location of udev
18UDEV=/lib/udev
19AC_ARG_WITH(udev,
20 AC_HELP_STRING([--with-udev=DIR],
21 [directory where udev is installed [default=/lib/udev]]),
22 [UDEV="${withval}"], [])
23AC_SUBST(UDEV)
Linus Walleij925cd452010-12-05 21:26:48 +000024
Linus Walleijd5ab76b2011-10-22 15:04:02 +020025# Optionally set name of udev rules file, default
26# priority is 69, to appear before 70-acl.rules which handles
27# access control to the devices. We try to let all other userspace
28# libusb-based device handlers take precedence since libmtp may
29# attempt to autoprobe the devices.
30#
Linus Walleij6a81a342011-02-16 16:39:26 +010031# Later rules can then use the identifiers for its processing.
Linus Walleijd5ab76b2011-10-22 15:04:02 +020032UDEV_RULES=69-libmtp.rules
Denis Dupeyronb9eed542011-01-26 22:31:16 -070033AC_ARG_WITH(udev-rules,
34 AC_HELP_STRING([--with-udev-rules=NAME],
Linus Walleijd5ab76b2011-10-22 15:04:02 +020035 [file name for udev rules [default=69-libmtp.rules]]),
Denis Dupeyronb9eed542011-01-26 22:31:16 -070036 [UDEV_RULES="${withval}"], [])
37AC_SUBST(UDEV_RULES)
Linus Walleij5cf12e72011-01-18 15:33:09 +010038
Denis Dupeyron83e79a22011-02-07 22:40:45 -070039# Optionally set group for device nodes
40UDEV_GROUP=
41AC_ARG_WITH(udev-group,
42 AC_HELP_STRING([--with-udev-group=GROUP],
Linus Walleijb7087922011-12-13 00:36:23 +010043 [file group for device nodes [default: none specified]]),
Denis Dupeyron83e79a22011-02-07 22:40:45 -070044 [UDEV_GROUP="-g\"${withval}\""], [])
45AC_SUBST(UDEV_GROUP)
46
47# Optionally set mode for device nodes
48UDEV_MODE=
49AC_ARG_WITH(udev-mode,
50 AC_HELP_STRING([--with-udev-mode=GROUP],
Linus Walleijb7087922011-12-13 00:36:23 +010051 [file mode for device nodes [default: none specified]]),
Denis Dupeyron83e79a22011-02-07 22:40:45 -070052 [UDEV_MODE="-m\"${withval}\""], [])
53AC_SUBST(UDEV_MODE)
54
Denis Dupeyronbc442cd2011-01-16 21:57:39 -070055# Optionally enable and check for doxygen
56AC_ARG_ENABLE([doxygen],
Denis Dupeyron339b3942011-01-20 23:17:23 -070057 AS_HELP_STRING([--enable-doxygen], [Build API documentation using Doxygen [default=no]]),
Denis Dupeyronbc442cd2011-01-16 21:57:39 -070058 [ac_enable_doxygen=$enableval], [ac_enable_doxygen=auto])
Denis Dupeyron339b3942011-01-20 23:17:23 -070059if test "x$ac_enable_doxygen" == "xyes"; then
Denis Dupeyronbc442cd2011-01-16 21:57:39 -070060 AC_CHECK_PROG(HAVE_DOXYGEN, doxygen, true, false)
61 if test "x$HAVE_DOXYGEN" = "xfalse" -a "x$ac_enable_doxygen" = "xyes"; then
62 AC_MSG_ERROR([*** API documentation explicitly requested but Doxygen not found])
63 fi
64 AC_MSG_NOTICE([API documentation will be generated using Doxygen])
65else
66 HAVE_DOXYGEN=false
67 AC_MSG_NOTICE([API documentation will not be generated])
Linus Walleijeb8c6fe2006-02-03 09:46:22 +000068fi
Denis Dupeyronbc442cd2011-01-16 21:57:39 -070069AM_CONDITIONAL(HAVE_DOXYGEN,$HAVE_DOXYGEN)
Linus Walleijeb8c6fe2006-02-03 09:46:22 +000070
71# Check for Darwin
72AC_MSG_CHECKING([if the host operating system is Darwin])
73case "$host" in
74 *-darwin*)
75 AC_MSG_RESULT([yes])
76 CFLAGS="$CFLAGS -DUSE_DARWIN"
77 OSFLAGS="-framework IOKit"
78 ;;
79 *) AC_MSG_RESULT([no]) ;;
80esac
81AC_SUBST(OSFLAGS)
82
Linus Walleij9e44f182010-12-07 20:33:13 +000083AC_MSG_CHECKING([if the host operating system is Linux])
84AC_TRY_COMPILE([#ifndef __linux__
85 #error "FAIL"
86 #endif
87 ],
88 [int test;],
89 [ AC_MSG_RESULT(yes)
90 AM_CONDITIONAL(USE_LINUX, true)
91 ],
92 [ AC_MSG_RESULT(no)
93 AM_CONDITIONAL(USE_LINUX, false)
94 ])
95
Linus Walleijeb8c6fe2006-02-03 09:46:22 +000096# Check for mingw compiler platform
97AC_MSG_CHECKING([For MinGW32])
98case "$host" in
99 *-*-mingw*)
100 AC_MSG_RESULT([yes])
101 mingw_compiler=yes
102 ;;
103 *) AC_MSG_RESULT([no]) ;;
104esac
105AM_CONDITIONAL(COMPILE_MINGW32, [test "$mingw_compiler" = "yes"])
106
Linus Walleij6f050022009-05-06 21:14:41 +0000107# Check if Microsoft LIB.EXE is available
108if test "$mingw_compiler" = "yes"; then
109 AC_CHECK_PROG(ms_lib_exe, lib.exe, yes, no)
110fi
111AM_CONDITIONAL(MS_LIB_EXE, test x$ms_lib_exe = xyes)
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000112
Linus Walleijfbbef8b2011-11-17 19:19:51 +0100113# Check for libusb-1.0
Marcus Meissnercd8aa4d2012-04-13 19:23:39 +0200114PKG_CHECK_MODULES(LIBUSB, libusb-1.0 >= 1.0.0,[
Linus Walleijfbbef8b2011-11-17 19:19:51 +0100115 LIBUSB_VER=`pkg-config --modversion libusb-1.0`
Alessio Tregliaf6a57b32012-04-03 01:56:21 +0200116 LIBUSB_REQUIRES='libusb-1.0'
Linus Walleijfbbef8b2011-11-17 19:19:51 +0100117 AC_DEFINE(HAVE_LIBUSB1, [], [Have libusb 1.0])
Marcus Meissnercd8aa4d2012-04-13 19:23:39 +0200118 found_libusb1_pkg=yes
119],[
120 # Check for libopenusb second
121 AC_CHECK_LIB([openusb], [openusb_init],[
122 AC_DEFINE(HAVE_OPENUSB, [], [Have libopenusb 1.0])
123 LIBUSB_VER=1.0
124 ],[
125 PKG_CHECK_MODULES(LIBUSB, libusb >= 0.1.8, [
Darran Kartaschew11082d32011-12-13 00:42:01 +0100126 LIBUSB_VER=`pkg-config --modversion libusb`
Alessio Tregliaf6a57b32012-04-03 01:56:21 +0200127 LIBUSB_REQUIRES='libusb'
Darran Kartaschew11082d32011-12-13 00:42:01 +0100128 AC_DEFINE(HAVE_LIBUSB0, [], [Have libusb 0.x])
Marcus Meissnercd8aa4d2012-04-13 19:23:39 +0200129 found_libusb0_pkg=yes
130 ],[
Darran Kartaschew11082d32011-12-13 00:42:01 +0100131 # Some systems don't use pkg-config for libusb, so double check.
Marcus Meissnercd8aa4d2012-04-13 19:23:39 +0200132 AC_CHECK_LIB([usb], [usb_open],[
Darran Kartaschew11082d32011-12-13 00:42:01 +0100133 LIBUSB_VER=0.1
134 AC_DEFINE(HAVE_LIBUSB0, [], [Have libusb 0.x])
Marcus Meissnercd8aa4d2012-04-13 19:23:39 +0200135 found_libusb0_pkg=yes
136 ],[
Darran Kartaschew11082d32011-12-13 00:42:01 +0100137 AC_MSG_ERROR([*** libusb not found! (missing -dev/-devel package?) ***\n*** prefer to install libusb-1 if you can! ***])
Marcus Meissnercd8aa4d2012-04-13 19:23:39 +0200138 ])
139 ])
140 ])
141])
Linus Walleij8e498d42012-03-22 22:58:14 +0100142
Sajid Anwar1badf4e2012-02-18 21:40:16 +0100143# Optionally disable MTPZ functionality.
144AC_ARG_ENABLE([mtpz],
145 AC_HELP_STRING([--disable-mtpz], [Disable functionality to connect to MTPZ devices (e.g. Zune)]),
146 [use_mtpz=$enableval],
147 [use_mtpz="yes"])
148
149# Include MTPZ if not disabled.
150if test x"$use_mtpz" = "xyes" ; then
151 # Check for libgcrypt.
152 AC_MSG_CHECKING([for libgcrypt])
153 AC_CHECK_LIB([gcrypt], [gcry_check_version], , [AC_MSG_NOTICE([*** libgcrypt not found - disabling MTPZ support ***]) ; use_mtpz="no"])
154fi
155
156if test x"$use_mtpz" = "xyes" ; then
157 AC_DEFINE(USE_MTPZ, [], [Enable MTPZ functionality])
158 AC_MSG_NOTICE([MTPZ functionality enabled]);
159else
160 AC_MSG_NOTICE([MTPZ functionality disable]);
161fi
162
Darran Kartaschew11082d32011-12-13 00:42:01 +0100163
Linus Walleijfbbef8b2011-11-17 19:19:51 +0100164AC_SUBST(LIBUSB_CFLAGS)
165AC_SUBST(LIBUSB_LIBS)
Alessio Tregliaf6a57b32012-04-03 01:56:21 +0200166AC_SUBST(LIBUSB_REQUIRES)
Sajid Anwar8dca41d2012-08-18 20:36:13 +0200167AM_CONDITIONAL(MTPZ_COMPILE, test x"$use_mtpz" = "xyes")
Linus Walleijfbbef8b2011-11-17 19:19:51 +0100168AM_CONDITIONAL(LIBUSB1_COMPILE, test x"$found_libusb1_pkg" = "xyes")
169AM_CONDITIONAL(LIBUSB0_COMPILE, test x"$found_libusb0_pkg" = "xyes")
Darran Kartaschew11082d32011-12-13 00:42:01 +0100170AM_CONDITIONAL(LIBOPENUSB_COMPILE, test x"$ac_cv_lib_openusb_openusb_init" = "xyes")
Linus Walleijfbbef8b2011-11-17 19:19:51 +0100171AC_MSG_NOTICE([*** using libusb $LIBUSB_VER ***])
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000172
173# Checks for header files.
174AC_HEADER_STDC
175AC_HEADER_TIME
176# zlib.h the day we need to decompress firmware
177AC_CHECK_HEADERS([ctype.h errno.h fcntl.h getopt.h libgen.h \
Linus Walleij56c63952008-06-08 21:55:58 +0000178 limits.h stdio.h string.h sys/stat.h sys/time.h unistd.h \
Linus Walleij8e499142011-02-10 16:28:02 +0100179 langinfo.h locale.h arpa/inet.h byteswap.h sys/uio.h])
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000180
181# Checks for typedefs, structures, and compiler characteristics.
182AC_C_CONST
183AC_TYPE_OFF_T
184AC_TYPE_SIGNAL
185AC_TYPE_SIZE_T
186AC_STRUCT_ST_BLKSIZE
187
188# Checks for library functions.
189AC_FUNC_MALLOC
190AC_FUNC_MEMCMP
191AC_FUNC_STAT
Richard Low8d97bad2010-09-12 17:31:12 +0000192AC_CHECK_FUNCS(basename memset select strdup strerror strndup strrchr strtoul usleep mkstemp)
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000193
194# Switches.
Linus Walleij05358382007-08-06 20:46:35 +0000195# Enable LFS (Large File Support)
Linus Walleij2f1b6402009-06-15 19:49:33 +0000196AC_SYS_LARGEFILE
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000197# Stick in "-Werror" if you want to be more aggressive.
198# (No need to use AC_SUBST on this default substituted environment variable.)
Linus Walleij5fba3332011-12-13 00:37:08 +0100199# Only add these additional CFLAGS if we are using GCC. Other C compilers may
200# not support them.
201if test x"$GCC" == "xyes" ; then
202 CFLAGS="$CFLAGS -Wall -Wmissing-prototypes"
203fi
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000204
205# Output files
Linus Walleije8c54642006-03-28 09:45:00 +0000206
207# Create a stdint.h-like file containing size-specific integer definitions
208# that will always be available. The <stdint.h> file is required by the
209# library, but we provide this anyway because the libptp2 stuff wants this
210# file.
Linus Walleij2a84ca42008-12-14 00:00:23 +0000211AX_NEED_STDINT_H([src/_stdint.h])
Linus Walleij6fd2f082006-03-28 07:19:22 +0000212
Linus Walleije8c54642006-03-28 09:45:00 +0000213# Create a header file containing NetBSD-style byte swapping macros.
Linus Walleijd5ab76b2011-10-22 15:04:02 +0200214# This m4 macros has caused severe pain, I am considering creating a
Linus Walleije8c54642006-03-28 09:45:00 +0000215# hard-coded byte swapper that will be eternally portable.
Linus Walleijb02a0662006-04-25 08:05:09 +0000216AC_NEED_BYTEORDER_H(src/gphoto2-endian.h)
Linus Walleij6fd2f082006-03-28 07:19:22 +0000217
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000218AC_CONFIG_FILES([src/libmtp.h doc/Doxyfile Makefile doc/Makefile src/Makefile
Linus Walleij6d3c2222010-11-30 23:42:32 +0000219 examples/Makefile util/Makefile libmtp.sh hotplug.sh libmtp.pc])
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000220AC_OUTPUT
Linus Walleij0f2e7732006-08-17 20:48:32 +0000221chmod +x hotplug.sh