blob: c7f6f5c9fd218cc4ef18b434e4d8d6c9a3fd5920 [file] [log] [blame]
Linus Walleij6c04caa2006-03-29 17:33:51 +00001INSTALLATION OVERVIEW
2=====================
3
Linus Walleij0dd71e92006-05-04 18:47:07 +00004Once libmtp is built and installed, you will have the following files
5($PREFIX is the --prefix option given to the "configure" script and
6defaults to /usr/local/):
Linus Walleij6c04caa2006-03-29 17:33:51 +00007
Linus Walleij0dd71e92006-05-04 18:47:07 +00008 $PREFIX/lib/libmtp.a Static C library
9 $PREFIX/lib/libmtp.so.x.y.z Dynamic C library
10 $PREFIX/lib/libmtp.so.x A link to the library
11 $PREFIX/lib/libmtp.so A link to the library
12 $PREFIX/include/libmtp.h C header file for libmtp API
13 $PREFIX/lib/pkgconfig/libmtp.pc pkg-config configuration file
Linus Walleij6c04caa2006-03-29 17:33:51 +000014
Linus Walleij0dd71e92006-05-04 18:47:07 +000015Sample programs will be built in the "example" directory, and should
16help you get used to using the libmtp API, as well as provide some
17immediate gratification. Links to other programs using the libmtp
18API may be found at the homepage: http://libmtp.sourceforge.net/
Linus Walleij6c04caa2006-03-29 17:33:51 +000019
Linus Walleijd4637502009-06-14 23:03:33 +000020
Linus Walleijb8ee9252009-01-03 00:02:58 +000021Install From Distribution
22-------------------------
23
24You should probably prefer to install libmtp from the distribution
25source you're using. Last time we checked, libmtp was part of Ubuntu,
Linus Walleijd4637502009-06-14 23:03:33 +000026Fedora, OpenSUSE, Debian testing, Gentoo, FreeBSD ports and OpenBSD
Linus Walleijb8ee9252009-01-03 00:02:58 +000027packages/ports.
28
29
Linus Walleijd4637502009-06-14 23:03:33 +000030Dependencies
31------------
32
33To build libmtp you should only need development files for libusb.
34(Often named libusb-devel or similar.) For working with CVS versions
35you may need autoconf, automake, libtool, gettext(-devel).
36
37
Linus Walleij0dd71e92006-05-04 18:47:07 +000038Shared Library Support
39----------------------
40
41Shared library linking is supported. You will need to 'make install'
42the library before you can execute the sample binaries, and add the
43libmtp install directory to your shared library search path.
44
45On Linux, you would add the line "/usr/local/lib" to your
46"/etc/ld.so.conf" or as a oneliner in for example a
47"/etc/ld.so.conf.d/local.conf" file and run the
Linus Walleijd4637502009-06-14 23:03:33 +000048program "ldconfig" to scan in the shared libraries at
49the new path. This is a part of the Linux shared library
Linus Walleij0dd71e92006-05-04 18:47:07 +000050loader actually.
51
52To access the library from real odd locations you can use
53the LD_LIBRARY_PATH environment variable by setting it before
54you run your program, for example:
55
56 % export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
57 % my_program
58
59This way of enabling the library to link is a workaround hack.
60Note that the LD_LIBRARY_PATH is actually supposed to be used for
61testing, not production systems or distributions. It is commonly
62used as a workaround when a user is installing libraries in her/his
63home directory however. Read more about this environment variable
64here: http://www.visi.com/~barr/ldpath.html
65
66The shared library comes with different interface version numbers,
67for example libmtp.so.4, libmtp.so.5 and so forth. This is used so
68that both old and new libmtp libraries shall be able to coexist on
Linus Walleijd4637502009-06-14 23:03:33 +000069the same system. When you compile your programs they will typically
70bind to the latest version of the shared library. A link to the
Linus Walleij0dd71e92006-05-04 18:47:07 +000071latest version is always provided as $PREFIX/lib/libmtp.so.
72
73libusb Support
74--------------
75
76This package depends on libusb. Get libusb from sourceforge at:
77
78 http://www.sourceforge.net/projects/libusb/
79
Linus Walleij63a92582006-06-03 20:36:35 +000080On Linux, please use the very latest version you can get, between
810.1.8 and 0.1.12 a lot of things happened which pertains to
82the udev hotplugging support, see below.
83
Linus Walleij0dd71e92006-05-04 18:47:07 +000084
85BASIC BUILD PROCEDURE
86=====================
87
88To build the package:
89
Linus Walleij925cd452010-12-05 21:26:48 +000090 % ./configure
Linus Walleij0dd71e92006-05-04 18:47:07 +000091 % make
92 % make install
93
94By default, libmtp will add the program-prefix "mtp-" to all the
95example programs prior to installation. The program-prefix option
96makes libmtp sample programs avoid collision with other programs like
Linus Walleij284aacb2007-08-11 21:17:36 +000097sox' "play" program. If the default prefix for some reason fail,
98try to tag on "--program-prefix=mtp-" to the "configure" command.
99
Linus Walleij925cd452010-12-05 21:26:48 +0000100The "libexedir" in the configure file is hardcoded to /lib/udev to
Linus Walleij1774a8e2010-12-05 20:01:53 +0000101make the mtp-probe (which is built for Linux only) install into
Linus Walleij925cd452010-12-05 21:26:48 +0000102that directory. This is the only location that makes sens for this
103executable.
Linus Walleij0dd71e92006-05-04 18:47:07 +0000104
105if you want to install the documentation type:
106
107 % make install-docs
108
109if you checked out the sources from CVS, you must first run the
110autogen.sh script that generates all the GNU autotools files.
Linus Walleij362d13e2009-08-02 19:59:21 +0000111Notice that this requires GNU autoconf, automake and libtool and
112possibly some other packages like gettext, readline, intltool and
113other M4 macro sources. This is done with:
Linus Walleij0dd71e92006-05-04 18:47:07 +0000114
115 % ./autogen.sh
116
117
118Linux hotplugging
119-----------------
120
121After compilation and installation you may (and should) add hotplugging
122support by running the hotplug script, if your distribution supports
123hotplugging (all do). This typically means you have something
124in /etc/hotplug and that hotplugging is started when you boot your
125machine in a script named /etc/init.d/hotplug or similar.
126
127Activate hotplugging by running:
128
129 %./hotplug.sh
130
131Hotplug will (typically) use the device map file installed by hotplug.sh
132at /etc/hotplug/usb/libmtp.usermap to lift the device to userspace for the
133current user by running the script /etc/hotplug/usb/libmtp.sh. If
134you have the program "resmgr" installed (currently used only by SuSE to
135our knowledge) that program will be used for enabling desktop user
136access, otherwise the current user of the desktop will be determined
137from files in /var/run. (See the script "libmtp.sh" for details.)
138
139
140Linux udev hotplugging
141----------------------
142
143Newer Linux distributions have dropped support for the old hotplug system
144and rely solely on udev, and rules stored below /etc/udev/rules.d to
145handle permissions and actions on device connections. It's quite solid
146but the whole thing is rather shaky when it comes to such things as
147custom devices handled solely by libusb, which is what libmtp and for
148example SANE backends use.
149
150The libmtp.rules file that comes with libmtp can be used as a starter.
151
Linus Walleijc4cd50b2011-01-08 22:50:07 +0000152This will set the environment variables ID_MEDIA_PLAYER and
153ID_MTP_DEVICE to "1" and the former one will be recognized by the
154scripts distributed by recent versions of udev to be a
155console-writable device that should be accessible for all
156users.
Linus Walleij0dd71e92006-05-04 18:47:07 +0000157
Linus Walleijc4cd50b2011-01-08 22:50:07 +0000158Ancient udev, HAL, libusb
159-------------------------
160
161The old script for udev used to set the device access to "666"
162which is rather nasty (not that big security issue, unless you
163think someone will break into your jukebox) some systems used
164to let PAM do this by placing a configuration file in
165/etc/security/ somewhere. Then it was replaced with simple
166udev rules.
167
168At one point HAL was used to take devices detected by udev and
169signal to userspace that they were available and provide some
170information about them. This was unnecessary middleware, it has
171been killed and most userspace applications now get their
172information directly from udev instead.
173
174In old libusb first you need a crazy rule that creates a device
175node in the /dev/bus/usb hierarchy whenever any USB device is
176connected. The script has this at the top, you can comment it
177in if your distribution does not already create these device
178nodes.
179
180Then libusb may need to be patched to recognize this hierarchy.
Linus Walleij0dd71e92006-05-04 18:47:07 +0000181The 0.1.12 version is the first which is properly fixed.
182
Linus Walleij0dd71e92006-05-04 18:47:07 +0000183
184
185If you cannot run hotplugging
186-----------------------------
187
188If you have a distro without hotplugging enabled try this as root:
189
190 % chmod -R a+w /proc/bus/usb
191
192You have to do this again every time you unplug/replug your USB cable
193or restart the jukebox, every time you quit libnjb and restart it,
194etc etc etc an alternative is to run libmtp as root which works just fine.
195The problem is to somehow assure that you (ie the current user) always
196has write access on /proc/bus/usb/*
197
198You can find the Linux hotplug project at:
199http://linux-hotplug.sourceforge.net/
Linus Walleijd3b78572007-08-24 21:28:24 +0000200
201
202Compilation for embedded devices
203--------------------------------
204
205Problems with Autoconf complaining about a missing malloc() function
206during cross-compilation can be solved with this hack if you're using
207glibc:
208
209 % export ac_cv_func_malloc_0_nonnull=yes
210 % ./configure
211
212If you're using uclibc you may have to smack in a custom rpl_malloc()
213function in your program, see the Autoconf texinfo documentation.
214
215See further:
216http://wiki.buici.com/wiki/Autoconf_and_RPL_MALLOC