libusb 0.3.4 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Gemfile +1 -0
  5. data/History.md +10 -0
  6. data/README.md +19 -6
  7. data/Rakefile +1 -1
  8. data/ext/extconf.rb +17 -1
  9. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/AUTHORS +18 -6
  10. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/COPYING +0 -0
  11. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/ChangeLog +58 -1
  12. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/INSTALL +0 -0
  13. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/Makefile.am +6 -1
  14. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/Makefile.in +248 -174
  15. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/NEWS +2 -2
  16. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/PORTING +0 -0
  17. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/README +2 -1
  18. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/TODO +0 -0
  19. data/ext/libusbx-1.0.17/Xcode/common.xcconfig +40 -0
  20. data/ext/libusbx-1.0.17/Xcode/config.h +28 -0
  21. data/ext/libusbx-1.0.17/Xcode/debug.xcconfig +29 -0
  22. data/ext/libusbx-1.0.17/Xcode/libusbx.xcconfig +21 -0
  23. data/ext/libusbx-1.0.17/Xcode/libusbx.xcodeproj/project.pbxproj +864 -0
  24. data/ext/libusbx-1.0.17/Xcode/libusbx_debug.xcconfig +21 -0
  25. data/ext/libusbx-1.0.17/Xcode/libusbx_release.xcconfig +21 -0
  26. data/ext/libusbx-1.0.17/Xcode/release.xcconfig +29 -0
  27. data/ext/libusbx-1.0.17/aclocal.m4 +1112 -0
  28. data/ext/libusbx-1.0.17/android/README +114 -0
  29. data/ext/libusbx-1.0.17/android/config.h +90 -0
  30. data/ext/libusbx-1.0.17/android/jni/Android.mk +23 -0
  31. data/ext/libusbx-1.0.17/android/jni/Application.mk +19 -0
  32. data/ext/libusbx-1.0.17/android/jni/examples.mk +134 -0
  33. data/ext/libusbx-1.0.17/android/jni/libusb.mk +54 -0
  34. data/ext/libusbx-1.0.17/android/jni/tests.mk +56 -0
  35. data/ext/libusbx-1.0.17/compile +347 -0
  36. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/config.guess +164 -130
  37. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/config.h.in +37 -1
  38. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/config.sub +174 -89
  39. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/configure +723 -302
  40. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/configure.ac +71 -20
  41. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/depcomp +345 -185
  42. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/doc/Makefile.am +0 -0
  43. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/doc/Makefile.in +95 -32
  44. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/doc/doxygen.cfg.in +1 -1
  45. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/examples/Makefile.am +5 -4
  46. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/examples/Makefile.in +208 -104
  47. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/examples/dpfp.c +1 -1
  48. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/examples/dpfp_threaded.c +1 -1
  49. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/examples/ezusb.c +188 -8
  50. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/examples/ezusb.h +18 -5
  51. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/examples/fxload.c +90 -64
  52. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/examples/getopt/getopt.c +0 -0
  53. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/examples/getopt/getopt.h +0 -0
  54. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/examples/getopt/getopt1.c +0 -0
  55. data/ext/libusbx-1.0.17/examples/hotplugtest.c +97 -0
  56. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/examples/listdevs.c +12 -4
  57. data/ext/libusbx-1.0.17/examples/sam3u_benchmark.c +193 -0
  58. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/examples/xusb.c +106 -49
  59. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/install-sh +21 -14
  60. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb-1.0.pc.in +1 -1
  61. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/Makefile.am +29 -10
  62. data/ext/libusbx-1.0.17/libusb/Makefile.in +914 -0
  63. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/core.c +378 -87
  64. data/ext/libusbx-1.0.17/libusb/descriptor.c +1199 -0
  65. data/ext/libusbx-1.0.17/libusb/hotplug.c +322 -0
  66. data/ext/libusbx-1.0.17/libusb/hotplug.h +82 -0
  67. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/io.c +182 -62
  68. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/libusb-1.0.def +32 -0
  69. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/libusb-1.0.rc +2 -0
  70. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/libusb.h +481 -32
  71. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/libusbi.h +135 -38
  72. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/os/darwin_usb.c +591 -496
  73. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/os/darwin_usb.h +39 -46
  74. data/ext/libusbx-1.0.17/libusb/os/linux_netlink.c +345 -0
  75. data/ext/libusbx-1.0.17/libusb/os/linux_udev.c +306 -0
  76. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/os/linux_usbfs.c +653 -617
  77. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/os/linux_usbfs.h +32 -0
  78. data/ext/{libusbx-1.0.14/libusb/os/openbsd_usb.c → libusbx-1.0.17/libusb/os/netbsd_usb.c} +70 -63
  79. data/ext/libusbx-1.0.17/libusb/os/openbsd_usb.c +823 -0
  80. data/ext/libusbx-1.0.17/libusb/os/poll_posix.c +51 -0
  81. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/os/poll_posix.h +2 -1
  82. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/os/poll_windows.c +85 -106
  83. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/os/poll_windows.h +14 -3
  84. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/os/threads_posix.c +3 -1
  85. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/os/threads_posix.h +0 -0
  86. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/os/threads_windows.c +6 -5
  87. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/os/threads_windows.h +0 -0
  88. data/ext/libusbx-1.0.17/libusb/os/wince_usb.c +1026 -0
  89. data/ext/libusbx-1.0.17/libusb/os/wince_usb.h +131 -0
  90. data/ext/libusbx-1.0.17/libusb/os/windows_common.h +108 -0
  91. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/os/windows_usb.c +92 -57
  92. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/os/windows_usb.h +2 -63
  93. data/ext/libusbx-1.0.17/libusb/strerror.c +184 -0
  94. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/sync.c +24 -38
  95. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/libusb/version.h +1 -1
  96. data/ext/libusbx-1.0.17/libusb/version_nano.h +1 -0
  97. data/ext/{libusbx-1.0.14 → libusbx-1.0.17}/ltmain.sh +60 -41
  98. data/ext/{libusbx-1.0.14/aclocal.m4 → libusbx-1.0.17/m4/libtool.m4} +229 -1723
  99. data/ext/libusbx-1.0.17/m4/ltoptions.m4 +384 -0
  100. data/ext/libusbx-1.0.17/m4/ltsugar.m4 +123 -0
  101. data/ext/libusbx-1.0.17/m4/ltversion.m4 +23 -0
  102. data/ext/libusbx-1.0.17/m4/lt~obsolete.m4 +98 -0
  103. data/ext/libusbx-1.0.17/missing +215 -0
  104. data/ext/libusbx-1.0.17/tests/Makefile.am +6 -0
  105. data/ext/libusbx-1.0.17/tests/Makefile.in +583 -0
  106. data/ext/libusbx-1.0.17/tests/libusbx_testlib.h +107 -0
  107. data/ext/libusbx-1.0.17/tests/stress.c +160 -0
  108. data/ext/libusbx-1.0.17/tests/testlib.c +276 -0
  109. data/lib/libusb.rb +4 -0
  110. data/lib/libusb/call.rb +43 -1
  111. data/lib/libusb/constants.rb +5 -0
  112. data/lib/libusb/context.rb +100 -0
  113. data/lib/libusb/dev_handle.rb +27 -0
  114. data/lib/libusb/device.rb +10 -4
  115. data/lib/libusb/version_gem.rb +1 -1
  116. data/test/test_libusb_capability.rb +2 -2
  117. data/test/test_libusb_compat.rb +2 -2
  118. data/test/test_libusb_compat_mass_storage.rb +2 -2
  119. data/test/test_libusb_descriptors.rb +4 -2
  120. data/test/test_libusb_event_machine.rb +2 -2
  121. data/test/test_libusb_gc.rb +2 -2
  122. data/test/test_libusb_hotplug.rb +115 -0
  123. data/test/test_libusb_iso_transfer.rb +3 -3
  124. data/test/test_libusb_mass_storage.rb +6 -16
  125. data/test/test_libusb_mass_storage2.rb +26 -3
  126. data/test/test_libusb_structs.rb +2 -2
  127. data/test/test_libusb_threads.rb +2 -2
  128. data/test/test_libusb_version.rb +2 -2
  129. metadata +127 -68
  130. metadata.gz.sig +0 -0
  131. data/ext/libusbx-1.0.14/THANKS +0 -7
  132. data/ext/libusbx-1.0.14/compile +0 -143
  133. data/ext/libusbx-1.0.14/libusb/Makefile.in +0 -721
  134. data/ext/libusbx-1.0.14/libusb/descriptor.c +0 -731
  135. data/ext/libusbx-1.0.14/libusb/version_nano.h +0 -1
  136. data/ext/libusbx-1.0.14/missing +0 -376
@@ -59,12 +59,12 @@ case $host in
59
59
  ;;
60
60
  *-openbsd*)
61
61
  AC_MSG_RESULT([OpenBSD])
62
- backend="bsd"
62
+ backend="openbsd"
63
63
  threads="posix"
64
64
  ;;
65
65
  *-netbsd*)
66
- AC_MSG_RESULT([NetBSD (using OpenBSD backend)])
67
- backend="bsd"
66
+ AC_MSG_RESULT([NetBSD])
67
+ backend="netbsd"
68
68
  threads="posix"
69
69
  ;;
70
70
  *-mingw*)
@@ -87,16 +87,36 @@ case $backend in
87
87
  linux)
88
88
  AC_DEFINE(OS_LINUX, 1, [Linux backend])
89
89
  AC_SUBST(OS_LINUX)
90
- AC_CHECK_LIB(rt, clock_gettime, PC_LIBS_PRIVATE="-lrt")
90
+ AC_SEARCH_LIBS(clock_gettime, rt, [], [], -pthread)
91
+ AC_ARG_ENABLE([udev],
92
+ [AC_HELP_STRING([--enable-udev], [use udev for device enumeration and hotplug support (recommended) [default=yes]])],
93
+ [], [enable_udev="yes"])
94
+ if test "x$enable_udev" = "xyes" ; then
95
+ # system has udev. use it or fail!
96
+ AC_CHECK_HEADERS([libudev.h],[],[AC_ERROR(["udev support requested but libudev not installed"])])
97
+ AC_CHECK_LIB([udev], [udev_new], [], [AC_ERROR(["udev support requested but libudev not installed"])])
98
+ AC_DEFINE(USE_UDEV, 1, [Use udev for device enumeration/hotplug])
99
+ else
100
+ AC_CHECK_HEADERS([asm/types.h sys/socket.h], [], [])
101
+ AC_CHECK_HEADERS([linux/netlink.h linux/filter.h], [], [AC_ERROR(["Linux netlink headers not found"])], [
102
+ #ifdef HAVE_ASM_TYPES_H
103
+ #include <asm/types.h>
104
+ #endif
105
+ #ifdef HAVE_SYS_SOCKET_H
106
+ #include <sys/socket.h>
107
+ #endif
108
+ ])
109
+ fi
110
+ AC_SUBST(USE_UDEV)
91
111
  THREAD_CFLAGS="-pthread"
92
- PC_LIBS_PRIVATE="${PC_LIBS_PRIVATE} -pthread"
112
+ LIBS="${LIBS} -pthread"
93
113
  AC_CHECK_HEADERS([poll.h])
94
114
  AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument])
95
115
  ;;
96
116
  darwin)
97
117
  AC_DEFINE(OS_DARWIN, 1, [Darwin backend])
98
118
  AC_SUBST(OS_DARWIN)
99
- PC_LIBS_PRIVATE="-lobjc -Wl,-framework,IOKit -Wl,-framework,CoreFoundation"
119
+ LIBS="-lobjc -Wl,-framework,IOKit -Wl,-framework,CoreFoundation"
100
120
  LTLDFLAGS="${LTLDFLAGS} -Wl,-prebind"
101
121
  AC_CHECK_HEADERS([poll.h])
102
122
  AC_CHECK_TYPE([nfds_t],
@@ -104,33 +124,41 @@ darwin)
104
124
  [AC_DEFINE([POLL_NFDS_TYPE],[unsigned int],[type of second poll() argument])],
105
125
  [#include <poll.h>])
106
126
  ;;
107
- bsd)
108
- AC_DEFINE(OS_OPENBSD, 1, [OpenBSD/NetBSD backend])
127
+ openbsd)
128
+ AC_DEFINE(OS_OPENBSD, 1, [OpenBSD backend])
109
129
  AC_SUBST(OS_OPENBSD)
110
130
  THREAD_CFLAGS="-pthread"
111
- PC_LIBS_PRIVATE="-pthread"
131
+ LIBS="-pthread"
132
+ AC_CHECK_HEADERS([poll.h])
133
+ AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument])
134
+ ;;
135
+ netbsd)
136
+ AC_DEFINE(OS_NETBSD, 1, [NetBSD backend])
137
+ AC_SUBST(OS_NETBSD)
138
+ THREAD_CFLAGS="-pthread"
139
+ LIBS="-pthread"
112
140
  AC_CHECK_HEADERS([poll.h])
113
141
  AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument])
114
142
  ;;
115
143
  windows)
116
144
  AC_DEFINE(OS_WINDOWS, 1, [Windows backend])
117
145
  AC_SUBST(OS_WINDOWS)
118
- PC_LIBS_PRIVATE=""
146
+ LIBS=""
119
147
  LTLDFLAGS="${LTLDFLAGS} -avoid-version -Wl,--add-stdcall-alias"
120
148
  AC_DEFINE([POLL_NFDS_TYPE],[unsigned int],[type of second poll() argument])
121
149
  ;;
122
150
  esac
123
151
 
124
- AC_SUBST(THREAD_CFLAGS)
125
- AC_SUBST(PC_LIBS_PRIVATE)
126
- LIBS="${LIBS} ${PC_LIBS_PRIVATE}"
152
+ AC_SUBST(LIBS)
127
153
 
128
154
  AM_CONDITIONAL(OS_LINUX, test "x$backend" = xlinux)
129
155
  AM_CONDITIONAL(OS_DARWIN, test "x$backend" = xdarwin)
130
- AM_CONDITIONAL(OS_OPENBSD, test "x$backend" = xbsd)
156
+ AM_CONDITIONAL(OS_OPENBSD, test "x$backend" = xopenbsd)
157
+ AM_CONDITIONAL(OS_NETBSD, test "x$backend" = xnetbsd)
131
158
  AM_CONDITIONAL(OS_WINDOWS, test "x$backend" = xwindows)
132
159
  AM_CONDITIONAL(THREADS_POSIX, test "x$threads" = xposix)
133
- AM_CONDITIONAL(CREATE_IMPORT_LIB, test "x$create_import_lib" = "xyes")
160
+ AM_CONDITIONAL(CREATE_IMPORT_LIB, test "x$create_import_lib" = "xyes")
161
+ AM_CONDITIONAL(USE_UDEV, test "x$enable_udev" = xyes)
134
162
  if test "$threads" = posix; then
135
163
  AC_DEFINE(THREADS_POSIX, 1, [Use POSIX Threads])
136
164
  fi
@@ -139,7 +167,7 @@ fi
139
167
  AC_CHECK_HEADER([sys/timerfd.h], [timerfd_h=1], [timerfd_h=0])
140
168
  AC_ARG_ENABLE([timerfd],
141
169
  [AS_HELP_STRING([--enable-timerfd],
142
- [use timerfd for timing (default auto)])],
170
+ [use timerfd for timing [default=auto]])],
143
171
  [use_timerfd=$enableval], [use_timerfd='auto'])
144
172
 
145
173
  if test "x$use_timerfd" = "xyes" -a "x$timerfd_h" = "x0"; then
@@ -174,20 +202,42 @@ if test "x$log_enabled" != "xno"; then
174
202
  fi
175
203
 
176
204
  AC_ARG_ENABLE([debug-log], [AS_HELP_STRING([--enable-debug-log],
177
- [start with debug message logging enabled (default n)])],
205
+ [start with debug message logging enabled [default=no]])],
178
206
  [debug_log_enabled=$enableval],
179
207
  [debug_log_enabled='no'])
180
208
  if test "x$debug_log_enabled" != "xno"; then
181
209
  AC_DEFINE([ENABLE_DEBUG_LOGGING], 1, [Start with debug message logging enabled])
182
210
  fi
183
211
 
212
+ AC_ARG_ENABLE([system-log], [AS_HELP_STRING([--enable-system-log],
213
+ [output logging messages to system wide log, if supported by the OS [default=no]])],
214
+ [system_log_enabled=$enableval],
215
+ [system_log_enabled='no'])
216
+ if test "x$system_log_enabled" != "xno"; then
217
+ AC_DEFINE([USE_SYSTEM_LOGGING_FACILITY], 1, [Enable output to system log])
218
+ fi
219
+
220
+ # Check if syslog is available in standard C library
221
+ AC_CHECK_HEADERS(syslog.h)
222
+ AC_CHECK_FUNC([syslog], [have_syslog=yes], [have_syslog=no])
223
+ if test "x$have_syslog" != "xno"; then
224
+ AC_DEFINE([HAVE_SYSLOG_FUNC], 1, [syslog() function available])
225
+ fi
226
+
184
227
  # Examples build
185
228
  AC_ARG_ENABLE([examples-build], [AS_HELP_STRING([--enable-examples-build],
186
- [build example applications (default n)])],
229
+ [build example applications [default=no]])],
187
230
  [build_examples=$enableval],
188
231
  [build_examples='no'])
189
232
  AM_CONDITIONAL([BUILD_EXAMPLES], [test "x$build_examples" != "xno"])
190
233
 
234
+ # Tests build
235
+ AC_ARG_ENABLE([tests-build], [AS_HELP_STRING([--enable-tests-build],
236
+ [build test applications [default=no]])],
237
+ [build_tests=$enableval],
238
+ [build_tests='no'])
239
+ AM_CONDITIONAL([BUILD_TESTS], [test "x$build_tests" != "xno"])
240
+
191
241
  # check for -fvisibility=hidden compiler support (GCC >= 3.4)
192
242
  saved_cflags="$CFLAGS"
193
243
  # -Werror required for cygwin
@@ -214,10 +264,10 @@ AM_CONDITIONAL([HAVE_SIGACTION], [test "x$have_sigaction" = "xyes"])
214
264
  # headers not available on all platforms but required on others
215
265
  AC_CHECK_HEADERS([sys/time.h])
216
266
  AC_CHECK_FUNCS(gettimeofday)
267
+ AC_CHECK_HEADERS([signal.h])
217
268
 
218
- AM_CFLAGS="${AM_CFLAGS} -std=gnu99 -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration $nopointersign_cflags -Wshadow"
269
+ AM_CFLAGS="${AM_CFLAGS} -std=gnu99 -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration $nopointersign_cflags -Wshadow ${THREAD_CFLAGS} ${VISIBILITY_CFLAGS}"
219
270
 
220
- AC_SUBST(VISIBILITY_CFLAGS)
221
271
  AC_SUBST(AM_CFLAGS)
222
272
  AC_SUBST(LTLDFLAGS)
223
273
 
@@ -225,6 +275,7 @@ AC_CONFIG_FILES([libusb-1.0.pc])
225
275
  AC_CONFIG_FILES([Makefile])
226
276
  AC_CONFIG_FILES([libusb/Makefile])
227
277
  AC_CONFIG_FILES([examples/Makefile])
278
+ AC_CONFIG_FILES([tests/Makefile])
228
279
  AC_CONFIG_FILES([doc/Makefile])
229
280
  AC_CONFIG_FILES([doc/doxygen.cfg])
230
281
  AC_OUTPUT
@@ -1,10 +1,9 @@
1
1
  #! /bin/sh
2
2
  # depcomp - compile a program generating dependencies as side-effects
3
3
 
4
- scriptversion=2009-04-28.21; # UTC
4
+ scriptversion=2012-10-18.11; # UTC
5
5
 
6
- # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7
- # Software Foundation, Inc.
6
+ # Copyright (C) 1999-2013 Free Software Foundation, Inc.
8
7
 
9
8
  # This program is free software; you can redistribute it and/or modify
10
9
  # it under the terms of the GNU General Public License as published by
@@ -28,9 +27,9 @@ scriptversion=2009-04-28.21; # UTC
28
27
 
29
28
  case $1 in
30
29
  '')
31
- echo "$0: No command. Try \`$0 --help' for more information." 1>&2
32
- exit 1;
33
- ;;
30
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
31
+ exit 1;
32
+ ;;
34
33
  -h | --h*)
35
34
  cat <<\EOF
36
35
  Usage: depcomp [--help] [--version] PROGRAM [ARGS]
@@ -40,11 +39,11 @@ as side-effects.
40
39
 
41
40
  Environment variables:
42
41
  depmode Dependency tracking mode.
43
- source Source file read by `PROGRAMS ARGS'.
44
- object Object file output by `PROGRAMS ARGS'.
42
+ source Source file read by 'PROGRAMS ARGS'.
43
+ object Object file output by 'PROGRAMS ARGS'.
45
44
  DEPDIR directory where to store dependencies.
46
45
  depfile Dependency file to output.
47
- tmpdepfile Temporary file to use when outputing dependencies.
46
+ tmpdepfile Temporary file to use when outputting dependencies.
48
47
  libtool Whether libtool is used (yes/no).
49
48
 
50
49
  Report bugs to <bug-automake@gnu.org>.
@@ -57,6 +56,66 @@ EOF
57
56
  ;;
58
57
  esac
59
58
 
59
+ # Get the directory component of the given path, and save it in the
60
+ # global variables '$dir'. Note that this directory component will
61
+ # be either empty or ending with a '/' character. This is deliberate.
62
+ set_dir_from ()
63
+ {
64
+ case $1 in
65
+ */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
66
+ *) dir=;;
67
+ esac
68
+ }
69
+
70
+ # Get the suffix-stripped basename of the given path, and save it the
71
+ # global variable '$base'.
72
+ set_base_from ()
73
+ {
74
+ base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
75
+ }
76
+
77
+ # If no dependency file was actually created by the compiler invocation,
78
+ # we still have to create a dummy depfile, to avoid errors with the
79
+ # Makefile "include basename.Plo" scheme.
80
+ make_dummy_depfile ()
81
+ {
82
+ echo "#dummy" > "$depfile"
83
+ }
84
+
85
+ # Factor out some common post-processing of the generated depfile.
86
+ # Requires the auxiliary global variable '$tmpdepfile' to be set.
87
+ aix_post_process_depfile ()
88
+ {
89
+ # If the compiler actually managed to produce a dependency file,
90
+ # post-process it.
91
+ if test -f "$tmpdepfile"; then
92
+ # Each line is of the form 'foo.o: dependency.h'.
93
+ # Do two passes, one to just change these to
94
+ # $object: dependency.h
95
+ # and one to simply output
96
+ # dependency.h:
97
+ # which is needed to avoid the deleted-header problem.
98
+ { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99
+ sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
100
+ } > "$depfile"
101
+ rm -f "$tmpdepfile"
102
+ else
103
+ make_dummy_depfile
104
+ fi
105
+ }
106
+
107
+ # A tabulation character.
108
+ tab=' '
109
+ # A newline character.
110
+ nl='
111
+ '
112
+ # Character ranges might be problematic outside the C locale.
113
+ # These definitions help.
114
+ upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115
+ lower=abcdefghijklmnopqrstuvwxyz
116
+ digits=0123456789
117
+ alpha=${upper}${lower}
118
+
60
119
  if test -z "$depmode" || test -z "$source" || test -z "$object"; then
61
120
  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62
121
  exit 1
@@ -69,6 +128,9 @@ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69
128
 
70
129
  rm -f "$tmpdepfile"
71
130
 
131
+ # Avoid interferences from the environment.
132
+ gccflag= dashmflag=
133
+
72
134
  # Some modes work just like other modes, but use different flags. We
73
135
  # parameterize here, but still list the modes in the big case below,
74
136
  # to make depend.m4 easier to write. Note that we *cannot* use a case
@@ -80,18 +142,32 @@ if test "$depmode" = hp; then
80
142
  fi
81
143
 
82
144
  if test "$depmode" = dashXmstdout; then
83
- # This is just like dashmstdout with a different argument.
84
- dashmflag=-xM
85
- depmode=dashmstdout
145
+ # This is just like dashmstdout with a different argument.
146
+ dashmflag=-xM
147
+ depmode=dashmstdout
86
148
  fi
87
149
 
88
150
  cygpath_u="cygpath -u -f -"
89
151
  if test "$depmode" = msvcmsys; then
90
- # This is just like msvisualcpp but w/o cygpath translation.
91
- # Just convert the backslash-escaped backslashes to single forward
92
- # slashes to satisfy depend.m4
93
- cygpath_u="sed s,\\\\\\\\,/,g"
94
- depmode=msvisualcpp
152
+ # This is just like msvisualcpp but w/o cygpath translation.
153
+ # Just convert the backslash-escaped backslashes to single forward
154
+ # slashes to satisfy depend.m4
155
+ cygpath_u='sed s,\\\\,/,g'
156
+ depmode=msvisualcpp
157
+ fi
158
+
159
+ if test "$depmode" = msvc7msys; then
160
+ # This is just like msvc7 but w/o cygpath translation.
161
+ # Just convert the backslash-escaped backslashes to single forward
162
+ # slashes to satisfy depend.m4
163
+ cygpath_u='sed s,\\\\,/,g'
164
+ depmode=msvc7
165
+ fi
166
+
167
+ if test "$depmode" = xlc; then
168
+ # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
169
+ gccflag=-qmakedep=gcc,-MF
170
+ depmode=gcc
95
171
  fi
96
172
 
97
173
  case "$depmode" in
@@ -114,8 +190,7 @@ gcc3)
114
190
  done
115
191
  "$@"
116
192
  stat=$?
117
- if test $stat -eq 0; then :
118
- else
193
+ if test $stat -ne 0; then
119
194
  rm -f "$tmpdepfile"
120
195
  exit $stat
121
196
  fi
@@ -123,13 +198,17 @@ gcc3)
123
198
  ;;
124
199
 
125
200
  gcc)
201
+ ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
202
+ ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
203
+ ## (see the conditional assignment to $gccflag above).
126
204
  ## There are various ways to get dependency output from gcc. Here's
127
205
  ## why we pick this rather obscure method:
128
206
  ## - Don't want to use -MD because we'd like the dependencies to end
129
207
  ## up in a subdir. Having to rename by hand is ugly.
130
208
  ## (We might end up doing this anyway to support other compilers.)
131
209
  ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
132
- ## -MM, not -M (despite what the docs say).
210
+ ## -MM, not -M (despite what the docs say). Also, it might not be
211
+ ## supported by the other compilers which use the 'gcc' depmode.
133
212
  ## - Using -M directly means running the compiler twice (even worse
134
213
  ## than renaming).
135
214
  if test -z "$gccflag"; then
@@ -137,31 +216,31 @@ gcc)
137
216
  fi
138
217
  "$@" -Wp,"$gccflag$tmpdepfile"
139
218
  stat=$?
140
- if test $stat -eq 0; then :
141
- else
219
+ if test $stat -ne 0; then
142
220
  rm -f "$tmpdepfile"
143
221
  exit $stat
144
222
  fi
145
223
  rm -f "$depfile"
146
224
  echo "$object : \\" > "$depfile"
147
- alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
148
- ## The second -e expression handles DOS-style file names with drive letters.
225
+ # The second -e expression handles DOS-style file names with drive
226
+ # letters.
149
227
  sed -e 's/^[^:]*: / /' \
150
228
  -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151
- ## This next piece of magic avoids the `deleted header file' problem.
229
+ ## This next piece of magic avoids the "deleted header file" problem.
152
230
  ## The problem is that when a header file which appears in a .P file
153
231
  ## is deleted, the dependency causes make to die (because there is
154
232
  ## typically no way to rebuild the header). We avoid this by adding
155
233
  ## dummy dependencies for each header file. Too bad gcc doesn't do
156
234
  ## this for us directly.
157
- tr ' ' '
158
- ' < "$tmpdepfile" |
159
- ## Some versions of gcc put a space before the `:'. On the theory
235
+ ## Some versions of gcc put a space before the ':'. On the theory
160
236
  ## that the space means something, we add a space to the output as
161
- ## well.
237
+ ## well. hp depmode also adds that space, but also prefixes the VPATH
238
+ ## to the object. Take care to not repeat it in the output.
162
239
  ## Some versions of the HPUX 10.20 sed can't process this invocation
163
240
  ## correctly. Breaking it into two sed invocations is a workaround.
164
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
241
+ tr ' ' "$nl" < "$tmpdepfile" \
242
+ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243
+ | sed -e 's/$/ :/' >> "$depfile"
165
244
  rm -f "$tmpdepfile"
166
245
  ;;
167
246
 
@@ -179,8 +258,7 @@ sgi)
179
258
  "$@" -MDupdate "$tmpdepfile"
180
259
  fi
181
260
  stat=$?
182
- if test $stat -eq 0; then :
183
- else
261
+ if test $stat -ne 0; then
184
262
  rm -f "$tmpdepfile"
185
263
  exit $stat
186
264
  fi
@@ -188,43 +266,41 @@ sgi)
188
266
 
189
267
  if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
190
268
  echo "$object : \\" > "$depfile"
191
-
192
269
  # Clip off the initial element (the dependent). Don't try to be
193
270
  # clever and replace this with sed code, as IRIX sed won't handle
194
271
  # lines with more than a fixed number of characters (4096 in
195
272
  # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
196
- # the IRIX cc adds comments like `#:fec' to the end of the
273
+ # the IRIX cc adds comments like '#:fec' to the end of the
197
274
  # dependency line.
198
- tr ' ' '
199
- ' < "$tmpdepfile" \
200
- | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
201
- tr '
202
- ' ' ' >> "$depfile"
275
+ tr ' ' "$nl" < "$tmpdepfile" \
276
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277
+ | tr "$nl" ' ' >> "$depfile"
203
278
  echo >> "$depfile"
204
-
205
279
  # The second pass generates a dummy entry for each header file.
206
- tr ' ' '
207
- ' < "$tmpdepfile" \
208
- | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209
- >> "$depfile"
280
+ tr ' ' "$nl" < "$tmpdepfile" \
281
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282
+ >> "$depfile"
210
283
  else
211
- # The sourcefile does not contain any dependencies, so just
212
- # store a dummy comment line, to avoid errors with the Makefile
213
- # "include basename.Plo" scheme.
214
- echo "#dummy" > "$depfile"
284
+ make_dummy_depfile
215
285
  fi
216
286
  rm -f "$tmpdepfile"
217
287
  ;;
218
288
 
289
+ xlc)
290
+ # This case exists only to let depend.m4 do its work. It works by
291
+ # looking at the text of this script. This case will never be run,
292
+ # since it is checked for above.
293
+ exit 1
294
+ ;;
295
+
219
296
  aix)
220
297
  # The C for AIX Compiler uses -M and outputs the dependencies
221
298
  # in a .u file. In older versions, this file always lives in the
222
- # current directory. Also, the AIX compiler puts `$object:' at the
299
+ # current directory. Also, the AIX compiler puts '$object:' at the
223
300
  # start of each line; $object doesn't have directory information.
224
301
  # Version 6 uses the directory in both cases.
225
- dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226
- test "x$dir" = "x$object" && dir=
227
- base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
302
+ set_dir_from "$object"
303
+ set_base_from "$object"
228
304
  if test "$libtool" = yes; then
229
305
  tmpdepfile1=$dir$base.u
230
306
  tmpdepfile2=$base.u
@@ -237,9 +313,7 @@ aix)
237
313
  "$@" -M
238
314
  fi
239
315
  stat=$?
240
-
241
- if test $stat -eq 0; then :
242
- else
316
+ if test $stat -ne 0; then
243
317
  rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
244
318
  exit $stat
245
319
  fi
@@ -248,44 +322,100 @@ aix)
248
322
  do
249
323
  test -f "$tmpdepfile" && break
250
324
  done
251
- if test -f "$tmpdepfile"; then
252
- # Each line is of the form `foo.o: dependent.h'.
253
- # Do two passes, one to just change these to
254
- # `$object: dependent.h' and one to simply `dependent.h:'.
255
- sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256
- # That's a tab and a space in the [].
257
- sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
258
- else
259
- # The sourcefile does not contain any dependencies, so just
260
- # store a dummy comment line, to avoid errors with the Makefile
261
- # "include basename.Plo" scheme.
262
- echo "#dummy" > "$depfile"
325
+ aix_post_process_depfile
326
+ ;;
327
+
328
+ tcc)
329
+ # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330
+ # FIXME: That version still under development at the moment of writing.
331
+ # Make that this statement remains true also for stable, released
332
+ # versions.
333
+ # It will wrap lines (doesn't matter whether long or short) with a
334
+ # trailing '\', as in:
335
+ #
336
+ # foo.o : \
337
+ # foo.c \
338
+ # foo.h \
339
+ #
340
+ # It will put a trailing '\' even on the last line, and will use leading
341
+ # spaces rather than leading tabs (at least since its commit 0394caf7
342
+ # "Emit spaces for -MD").
343
+ "$@" -MD -MF "$tmpdepfile"
344
+ stat=$?
345
+ if test $stat -ne 0; then
346
+ rm -f "$tmpdepfile"
347
+ exit $stat
263
348
  fi
349
+ rm -f "$depfile"
350
+ # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351
+ # We have to change lines of the first kind to '$object: \'.
352
+ sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353
+ # And for each line of the second kind, we have to emit a 'dep.h:'
354
+ # dummy dependency, to avoid the deleted-header problem.
355
+ sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
264
356
  rm -f "$tmpdepfile"
265
357
  ;;
266
358
 
267
- icc)
268
- # Intel's C compiler understands `-MD -MF file'. However on
269
- # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270
- # ICC 7.0 will fill foo.d with something like
271
- # foo.o: sub/foo.c
272
- # foo.o: sub/foo.h
273
- # which is wrong. We want:
274
- # sub/foo.o: sub/foo.c
275
- # sub/foo.o: sub/foo.h
276
- # sub/foo.c:
277
- # sub/foo.h:
278
- # ICC 7.1 will output
359
+ ## The order of this option in the case statement is important, since the
360
+ ## shell code in configure will try each of these formats in the order
361
+ ## listed in this file. A plain '-MD' option would be understood by many
362
+ ## compilers, so we must ensure this comes after the gcc and icc options.
363
+ pgcc)
364
+ # Portland's C compiler understands '-MD'.
365
+ # Will always output deps to 'file.d' where file is the root name of the
366
+ # source file under compilation, even if file resides in a subdirectory.
367
+ # The object file name does not affect the name of the '.d' file.
368
+ # pgcc 10.2 will output
279
369
  # foo.o: sub/foo.c sub/foo.h
280
- # and will wrap long lines using \ :
370
+ # and will wrap long lines using '\' :
281
371
  # foo.o: sub/foo.c ... \
282
372
  # sub/foo.h ... \
283
373
  # ...
374
+ set_dir_from "$object"
375
+ # Use the source, not the object, to determine the base name, since
376
+ # that's sadly what pgcc will do too.
377
+ set_base_from "$source"
378
+ tmpdepfile=$base.d
379
+
380
+ # For projects that build the same source file twice into different object
381
+ # files, the pgcc approach of using the *source* file root name can cause
382
+ # problems in parallel builds. Use a locking strategy to avoid stomping on
383
+ # the same $tmpdepfile.
384
+ lockdir=$base.d-lock
385
+ trap "
386
+ echo '$0: caught signal, cleaning up...' >&2
387
+ rmdir '$lockdir'
388
+ exit 1
389
+ " 1 2 13 15
390
+ numtries=100
391
+ i=$numtries
392
+ while test $i -gt 0; do
393
+ # mkdir is a portable test-and-set.
394
+ if mkdir "$lockdir" 2>/dev/null; then
395
+ # This process acquired the lock.
396
+ "$@" -MD
397
+ stat=$?
398
+ # Release the lock.
399
+ rmdir "$lockdir"
400
+ break
401
+ else
402
+ # If the lock is being held by a different process, wait
403
+ # until the winning process is done or we timeout.
404
+ while test -d "$lockdir" && test $i -gt 0; do
405
+ sleep 1
406
+ i=`expr $i - 1`
407
+ done
408
+ fi
409
+ i=`expr $i - 1`
410
+ done
411
+ trap - 1 2 13 15
412
+ if test $i -le 0; then
413
+ echo "$0: failed to acquire lock after $numtries attempts" >&2
414
+ echo "$0: check lockdir '$lockdir'" >&2
415
+ exit 1
416
+ fi
284
417
 
285
- "$@" -MD -MF "$tmpdepfile"
286
- stat=$?
287
- if test $stat -eq 0; then :
288
- else
418
+ if test $stat -ne 0; then
289
419
  rm -f "$tmpdepfile"
290
420
  exit $stat
291
421
  fi
@@ -297,8 +427,8 @@ icc)
297
427
  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298
428
  # Some versions of the HPUX 10.20 sed can't process this invocation
299
429
  # correctly. Breaking it into two sed invocations is a workaround.
300
- sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301
- sed -e 's/$/ :/' >> "$depfile"
430
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431
+ | sed -e 's/$/ :/' >> "$depfile"
302
432
  rm -f "$tmpdepfile"
303
433
  ;;
304
434
 
@@ -309,9 +439,8 @@ hp2)
309
439
  # 'foo.d', which lands next to the object file, wherever that
310
440
  # happens to be.
311
441
  # Much of this is similar to the tru64 case; see comments there.
312
- dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
313
- test "x$dir" = "x$object" && dir=
314
- base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
442
+ set_dir_from "$object"
443
+ set_base_from "$object"
315
444
  if test "$libtool" = yes; then
316
445
  tmpdepfile1=$dir$base.d
317
446
  tmpdepfile2=$dir.libs/$base.d
@@ -322,8 +451,7 @@ hp2)
322
451
  "$@" +Maked
323
452
  fi
324
453
  stat=$?
325
- if test $stat -eq 0; then :
326
- else
454
+ if test $stat -ne 0; then
327
455
  rm -f "$tmpdepfile1" "$tmpdepfile2"
328
456
  exit $stat
329
457
  fi
@@ -333,77 +461,106 @@ hp2)
333
461
  test -f "$tmpdepfile" && break
334
462
  done
335
463
  if test -f "$tmpdepfile"; then
336
- sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337
- # Add `dependent.h:' lines.
464
+ sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465
+ # Add 'dependent.h:' lines.
338
466
  sed -ne '2,${
339
- s/^ *//
340
- s/ \\*$//
341
- s/$/:/
342
- p
343
- }' "$tmpdepfile" >> "$depfile"
467
+ s/^ *//
468
+ s/ \\*$//
469
+ s/$/:/
470
+ p
471
+ }' "$tmpdepfile" >> "$depfile"
344
472
  else
345
- echo "#dummy" > "$depfile"
473
+ make_dummy_depfile
346
474
  fi
347
475
  rm -f "$tmpdepfile" "$tmpdepfile2"
348
476
  ;;
349
477
 
350
478
  tru64)
351
- # The Tru64 compiler uses -MD to generate dependencies as a side
352
- # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
353
- # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354
- # dependencies in `foo.d' instead, so we check for that too.
355
- # Subdirectories are respected.
356
- dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357
- test "x$dir" = "x$object" && dir=
358
- base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
359
-
360
- if test "$libtool" = yes; then
361
- # With Tru64 cc, shared objects can also be used to make a
362
- # static library. This mechanism is used in libtool 1.4 series to
363
- # handle both shared and static libraries in a single compilation.
364
- # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
365
- #
366
- # With libtool 1.5 this exception was removed, and libtool now
367
- # generates 2 separate objects for the 2 libraries. These two
368
- # compilations output dependencies in $dir.libs/$base.o.d and
369
- # in $dir$base.o.d. We have to check for both files, because
370
- # one of the two compilations can be disabled. We should prefer
371
- # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372
- # automatically cleaned when .libs/ is deleted, while ignoring
373
- # the former would cause a distcleancheck panic.
374
- tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
375
- tmpdepfile2=$dir$base.o.d # libtool 1.5
376
- tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
377
- tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
378
- "$@" -Wc,-MD
379
- else
380
- tmpdepfile1=$dir$base.o.d
381
- tmpdepfile2=$dir$base.d
382
- tmpdepfile3=$dir$base.d
383
- tmpdepfile4=$dir$base.d
384
- "$@" -MD
385
- fi
386
-
387
- stat=$?
388
- if test $stat -eq 0; then :
389
- else
390
- rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
391
- exit $stat
392
- fi
393
-
394
- for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
395
- do
396
- test -f "$tmpdepfile" && break
397
- done
398
- if test -f "$tmpdepfile"; then
399
- sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400
- # That's a tab and a space in the [].
401
- sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
402
- else
403
- echo "#dummy" > "$depfile"
404
- fi
405
- rm -f "$tmpdepfile"
406
- ;;
479
+ # The Tru64 compiler uses -MD to generate dependencies as a side
480
+ # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
481
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482
+ # dependencies in 'foo.d' instead, so we check for that too.
483
+ # Subdirectories are respected.
484
+ set_dir_from "$object"
485
+ set_base_from "$object"
486
+
487
+ if test "$libtool" = yes; then
488
+ # Libtool generates 2 separate objects for the 2 libraries. These
489
+ # two compilations output dependencies in $dir.libs/$base.o.d and
490
+ # in $dir$base.o.d. We have to check for both files, because
491
+ # one of the two compilations can be disabled. We should prefer
492
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
493
+ # automatically cleaned when .libs/ is deleted, while ignoring
494
+ # the former would cause a distcleancheck panic.
495
+ tmpdepfile1=$dir$base.o.d # libtool 1.5
496
+ tmpdepfile2=$dir.libs/$base.o.d # Likewise.
497
+ tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
498
+ "$@" -Wc,-MD
499
+ else
500
+ tmpdepfile1=$dir$base.d
501
+ tmpdepfile2=$dir$base.d
502
+ tmpdepfile3=$dir$base.d
503
+ "$@" -MD
504
+ fi
505
+
506
+ stat=$?
507
+ if test $stat -ne 0; then
508
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
509
+ exit $stat
510
+ fi
511
+
512
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
513
+ do
514
+ test -f "$tmpdepfile" && break
515
+ done
516
+ # Same post-processing that is required for AIX mode.
517
+ aix_post_process_depfile
518
+ ;;
519
+
520
+ msvc7)
521
+ if test "$libtool" = yes; then
522
+ showIncludes=-Wc,-showIncludes
523
+ else
524
+ showIncludes=-showIncludes
525
+ fi
526
+ "$@" $showIncludes > "$tmpdepfile"
527
+ stat=$?
528
+ grep -v '^Note: including file: ' "$tmpdepfile"
529
+ if test $stat -ne 0; then
530
+ rm -f "$tmpdepfile"
531
+ exit $stat
532
+ fi
533
+ rm -f "$depfile"
534
+ echo "$object : \\" > "$depfile"
535
+ # The first sed program below extracts the file names and escapes
536
+ # backslashes for cygpath. The second sed program outputs the file
537
+ # name when reading, but also accumulates all include files in the
538
+ # hold buffer in order to output them again at the end. This only
539
+ # works with sed implementations that can handle large buffers.
540
+ sed < "$tmpdepfile" -n '
541
+ /^Note: including file: *\(.*\)/ {
542
+ s//\1/
543
+ s/\\/\\\\/g
544
+ p
545
+ }' | $cygpath_u | sort -u | sed -n '
546
+ s/ /\\ /g
547
+ s/\(.*\)/'"$tab"'\1 \\/p
548
+ s/.\(.*\) \\/\1:/
549
+ H
550
+ $ {
551
+ s/.*/'"$tab"'/
552
+ G
553
+ p
554
+ }' >> "$depfile"
555
+ rm -f "$tmpdepfile"
556
+ ;;
557
+
558
+ msvc7msys)
559
+ # This case exists only to let depend.m4 do its work. It works by
560
+ # looking at the text of this script. This case will never be run,
561
+ # since it is checked for above.
562
+ exit 1
563
+ ;;
407
564
 
408
565
  #nosideeffect)
409
566
  # This comment above is used by automake to tell side-effect
@@ -422,7 +579,7 @@ dashmstdout)
422
579
  shift
423
580
  fi
424
581
 
425
- # Remove `-o $object'.
582
+ # Remove '-o $object'.
426
583
  IFS=" "
427
584
  for arg
428
585
  do
@@ -442,18 +599,18 @@ dashmstdout)
442
599
  done
443
600
 
444
601
  test -z "$dashmflag" && dashmflag=-M
445
- # Require at least two characters before searching for `:'
602
+ # Require at least two characters before searching for ':'
446
603
  # in the target name. This is to cope with DOS-style filenames:
447
- # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
604
+ # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
448
605
  "$@" $dashmflag |
449
- sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
606
+ sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
450
607
  rm -f "$depfile"
451
608
  cat < "$tmpdepfile" > "$depfile"
452
- tr ' ' '
453
- ' < "$tmpdepfile" | \
454
- ## Some versions of the HPUX 10.20 sed can't process this invocation
455
- ## correctly. Breaking it into two sed invocations is a workaround.
456
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
609
+ # Some versions of the HPUX 10.20 sed can't process this sed invocation
610
+ # correctly. Breaking it into two sed invocations is a workaround.
611
+ tr ' ' "$nl" < "$tmpdepfile" \
612
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
613
+ | sed -e 's/$/ :/' >> "$depfile"
457
614
  rm -f "$tmpdepfile"
458
615
  ;;
459
616
 
@@ -503,12 +660,15 @@ makedepend)
503
660
  touch "$tmpdepfile"
504
661
  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
505
662
  rm -f "$depfile"
506
- cat < "$tmpdepfile" > "$depfile"
507
- sed '1,2d' "$tmpdepfile" | tr ' ' '
508
- ' | \
509
- ## Some versions of the HPUX 10.20 sed can't process this invocation
510
- ## correctly. Breaking it into two sed invocations is a workaround.
511
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
663
+ # makedepend may prepend the VPATH from the source file name to the object.
664
+ # No need to regex-escape $object, excess matching of '.' is harmless.
665
+ sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
666
+ # Some versions of the HPUX 10.20 sed can't process the last invocation
667
+ # correctly. Breaking it into two sed invocations is a workaround.
668
+ sed '1,2d' "$tmpdepfile" \
669
+ | tr ' ' "$nl" \
670
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
671
+ | sed -e 's/$/ :/' >> "$depfile"
512
672
  rm -f "$tmpdepfile" "$tmpdepfile".bak
513
673
  ;;
514
674
 
@@ -525,7 +685,7 @@ cpp)
525
685
  shift
526
686
  fi
527
687
 
528
- # Remove `-o $object'.
688
+ # Remove '-o $object'.
529
689
  IFS=" "
530
690
  for arg
531
691
  do
@@ -544,10 +704,10 @@ cpp)
544
704
  esac
545
705
  done
546
706
 
547
- "$@" -E |
548
- sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549
- -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
550
- sed '$ s: \\$::' > "$tmpdepfile"
707
+ "$@" -E \
708
+ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
709
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
710
+ | sed '$ s: \\$::' > "$tmpdepfile"
551
711
  rm -f "$depfile"
552
712
  echo "$object : \\" > "$depfile"
553
713
  cat < "$tmpdepfile" >> "$depfile"
@@ -579,23 +739,23 @@ msvisualcpp)
579
739
  shift
580
740
  ;;
581
741
  "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
582
- set fnord "$@"
583
- shift
584
- shift
585
- ;;
742
+ set fnord "$@"
743
+ shift
744
+ shift
745
+ ;;
586
746
  *)
587
- set fnord "$@" "$arg"
588
- shift
589
- shift
590
- ;;
747
+ set fnord "$@" "$arg"
748
+ shift
749
+ shift
750
+ ;;
591
751
  esac
592
752
  done
593
753
  "$@" -E 2>/dev/null |
594
754
  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
595
755
  rm -f "$depfile"
596
756
  echo "$object : \\" > "$depfile"
597
- sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
598
- echo " " >> "$depfile"
757
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
758
+ echo "$tab" >> "$depfile"
599
759
  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600
760
  rm -f "$tmpdepfile"
601
761
  ;;