Merge ~hui.wang/ubuntu/+source/alsa-utils:merge into ubuntu/+source/alsa-utils:ubuntu/devel
- Git
- lp:~hui.wang/ubuntu/+source/alsa-utils
- merge
- Merge into ubuntu/devel
Proposed by
Hui Wang
Status: | Needs review |
---|---|
Proposed branch: | ~hui.wang/ubuntu/+source/alsa-utils:merge |
Merge into: | ubuntu/+source/alsa-utils:ubuntu/devel |
Diff against target: |
26126 lines (+12680/-5063) (has conflicts) 131 files modified
ABOUT-NLS (+1/-1379) Makefile.am (+1/-1) Makefile.in (+24/-16) aclocal.m4 (+38/-94) alsa-info/Makefile.in (+6/-4) alsa-info/alsa-info.sh (+77/-17) alsaconf/Makefile.in (+6/-4) alsactl/Makefile.am (+1/-1) alsactl/Makefile.in (+27/-7) alsactl/alsa-restore.service.in (+0/-1) alsactl/alsactl.1 (+53/-11) alsactl/alsactl.c (+72/-6) alsactl/alsactl.h (+24/-3) alsactl/clean.c (+196/-0) alsactl/daemon.c (+1/-2) alsactl/init/Makefile.in (+6/-4) alsactl/init_parse.c (+36/-59) alsactl/init_ucm.c (+18/-7) alsactl/lock.c (+8/-4) alsactl/monitor.c (+3/-25) alsactl/state.c (+74/-161) alsactl/utils.c (+147/-8) alsaloop/Makefile.in (+6/-4) alsaloop/alsaloop.1 (+1/-1) alsaloop/alsaloop.c (+7/-2) alsaloop/pcmjob.c (+3/-4) alsamixer/Makefile.in (+6/-4) alsamixer/alsamixer.1 (+1/-1) alsamixer/card_select.c (+5/-1) alsamixer/cli.c (+5/-1) alsamixer/colors.c (+4/-4) alsamixer/configparser.c (+2/-2) alsamixer/mixer_display.c (+1/-1) alsamixer/widget.c (+0/-7) alsaucm/Makefile.in (+6/-4) alsaucm/alsaucm.rst (+1/-1) alsaucm/usecase.c (+14/-2) amidi/Makefile.in (+6/-4) amidi/amidi.c (+5/-2) amixer/Makefile.am (+2/-2) amixer/Makefile.in (+8/-24) amixer/amixer.1 (+5/-4) amixer/amixer.c (+39/-28) amixer/volume_mapping.c (+179/-0) amixer/volume_mapping.h (+19/-0) aplay/Makefile.in (+6/-4) aplay/aplay.c (+87/-22) axfer/Makefile.in (+6/-4) axfer/container.c (+22/-35) axfer/container.h (+4/-6) axfer/subcmd-transfer.c (+52/-12) axfer/test/Makefile.in (+6/-4) axfer/test/container-test.c (+39/-14) axfer/test/mapper-test.c (+45/-10) axfer/xfer-libasound-timer-mmap.c (+2/-1) bat/Makefile.in (+6/-4) bat/tests/Makefile.in (+6/-4) bat/tests/asound_state/Makefile.in (+6/-4) compile (+3/-3) config.guess (+65/-55) config.rpath (+1/-1) config.sub (+1192/-1235) configure (+750/-265) configure.ac (+7/-2) debian/changelog (+28/-1) debian/control (+1/-1) debian/patches/Don-t-run-both-systemd-services-in-paralell.patch (+5/-9) debian/patches/alsa-info_call_home.patch (+10/-0) debian/patches/alsactl_home.patch (+2/-2) debian/patches/alsactl_xdg_runtime.patch (+2/-2) debian/patches/series (+3/-0) debian/patches/spellfixes.patch (+14/-14) debian/patches/systemd_Documentation_key.patch (+1/-1) debian/patches/udev_test_alsactl.patch (+7/-0) debian/patches/unset_pulse_internal.patch (+33/-0) debian/upstream/metadata (+5/-0) depcomp (+1/-1) iecset/Makefile.in (+6/-4) include/Makefile.in (+8/-6) include/aconfig.h.in (+6/-3) include/version.h (+2/-2) install-sh (+12/-1) m4/Makefile.am (+1/-1) m4/Makefile.in (+7/-5) m4/gettext.m4 (+19/-53) m4/host-cpu-c-abi.m4 (+675/-0) m4/iconv.m4 (+37/-20) m4/intlmacosx.m4 (+65/-0) m4/lib-ld.m4 (+106/-57) m4/lib-link.m4 (+96/-73) m4/lib-prefix.m4 (+167/-71) m4/nls.m4 (+5/-5) m4/po.m4 (+30/-33) m4/progtest.m4 (+4/-4) missing (+1/-1) po/LINGUAS (+1/-1) po/Makefile.in.in (+80/-53) po/Rules-quot (+5/-1) po/alsa-utils.pot (+220/-189) po/de.po (+242/-188) po/en@boldquot.header (+1/-1) po/en@quot.header (+1/-1) po/eu.po (+1786/-0) po/fr.po (+484/-407) po/insert-header.sin (+5/-0) po/ja.po (+227/-188) po/remove-potcdate.sin (+7/-1) po/sk.po (+1770/-0) seq/Makefile.in (+6/-4) seq/aconnect/Makefile.in (+6/-4) seq/aplaymidi/Makefile.in (+6/-4) seq/aseqdump/Makefile.in (+6/-4) seq/aseqnet/Makefile.in (+6/-4) seq/aseqnet/README.aseqnet (+2/-0) seq/aseqnet/aseqnet.1 (+3/-0) seq/aseqnet/aseqnet.c (+23/-10) speaker-test/Makefile.in (+6/-4) speaker-test/samples/Makefile.in (+6/-4) speaker-test/speaker-test.c (+16/-0) test-driver (+1/-1) topology/Makefile.am (+4/-1) topology/Makefile.in (+39/-11) topology/pre-process-class.c (+303/-0) topology/pre-process-dai.c (+140/-0) topology/pre-process-dapm.c (+424/-0) topology/pre-process-object.c (+1547/-0) topology/pre-processor.c (+271/-0) topology/pre-processor.h (+112/-0) topology/topology.c (+76/-6) topology/topology.h (+34/-0) utils/Makefile.in (+6/-4) Conflict in debian/changelog Conflict in debian/patches/alsa-info_call_home.patch Conflict in debian/patches/series Conflict in debian/patches/udev_test_alsactl.patch Conflict in debian/patches/unset_pulse_internal.patch |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Timo Aaltonen | Pending | ||
Review via email: mp+412552@code.launchpad.net |
Commit message
1.2.4-1ubuntu1
Description of the change
Based on the latest debian/sid, we only need to pick the change of 1.2.4-1ubuntu1, and do some minor change on it: drop 2 patches alsa-info_
To post a comment you must log in.
Unmerged commits
- 951d5dc... by Sebastien Bacher
-
1.2.5.1-1ubuntu1 (patches unapplied)
Imported using git-ubuntu import.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/ABOUT-NLS b/ABOUT-NLS |
2 | index 3cc8286..0a9d56d 100644 |
3 | --- a/ABOUT-NLS |
4 | +++ b/ABOUT-NLS |
5 | @@ -1,1379 +1 @@ |
6 | -1 Notes on the Free Translation Project |
7 | -*************************************** |
8 | - |
9 | -Free software is going international! The Free Translation Project is a |
10 | -way to get maintainers of free software, translators, and users all |
11 | -together, so that free software will gradually become able to speak many |
12 | -languages. A few packages already provide translations for their |
13 | -messages. |
14 | - |
15 | - If you found this 'ABOUT-NLS' file inside a distribution, you may |
16 | -assume that the distributed package does use GNU 'gettext' internally, |
17 | -itself available at your nearest GNU archive site. But you do _not_ |
18 | -need to install GNU 'gettext' prior to configuring, installing or using |
19 | -this package with messages translated. |
20 | - |
21 | - Installers will find here some useful hints. These notes also |
22 | -explain how users should proceed for getting the programs to use the |
23 | -available translations. They tell how people wanting to contribute and |
24 | -work on translations can contact the appropriate team. |
25 | - |
26 | -1.1 INSTALL Matters |
27 | -=================== |
28 | - |
29 | -Some packages are "localizable" when properly installed; the programs |
30 | -they contain can be made to speak your own native language. Most such |
31 | -packages use GNU 'gettext'. Other packages have their own ways to |
32 | -internationalization, predating GNU 'gettext'. |
33 | - |
34 | - By default, this package will be installed to allow translation of |
35 | -messages. It will automatically detect whether the system already |
36 | -provides the GNU 'gettext' functions. Installers may use special |
37 | -options at configuration time for changing the default behaviour. The |
38 | -command: |
39 | - |
40 | - ./configure --disable-nls |
41 | - |
42 | -will _totally_ disable translation of messages. |
43 | - |
44 | - When you already have GNU 'gettext' installed on your system and run |
45 | -configure without an option for your new package, 'configure' will |
46 | -probably detect the previously built and installed 'libintl' library and |
47 | -will decide to use it. If not, you may have to to use the |
48 | -'--with-libintl-prefix' option to tell 'configure' where to look for it. |
49 | - |
50 | - Internationalized packages usually have many 'po/LL.po' files, where |
51 | -LL gives an ISO 639 two-letter code identifying the language. Unless |
52 | -translations have been forbidden at 'configure' time by using the |
53 | -'--disable-nls' switch, all available translations are installed |
54 | -together with the package. However, the environment variable 'LINGUAS' |
55 | -may be set, prior to configuration, to limit the installed set. |
56 | -'LINGUAS' should then contain a space separated list of two-letter |
57 | -codes, stating which languages are allowed. |
58 | - |
59 | -1.2 Using This Package |
60 | -====================== |
61 | - |
62 | -As a user, if your language has been installed for this package, you |
63 | -only have to set the 'LANG' environment variable to the appropriate |
64 | -'LL_CC' combination. If you happen to have the 'LC_ALL' or some other |
65 | -'LC_xxx' environment variables set, you should unset them before setting |
66 | -'LANG', otherwise the setting of 'LANG' will not have the desired |
67 | -effect. Here 'LL' is an ISO 639 two-letter language code, and 'CC' is |
68 | -an ISO 3166 two-letter country code. For example, let's suppose that |
69 | -you speak German and live in Germany. At the shell prompt, merely |
70 | -execute 'setenv LANG de_DE' (in 'csh'), 'export LANG; LANG=de_DE' (in |
71 | -'sh') or 'export LANG=de_DE' (in 'bash'). This can be done from your |
72 | -'.login' or '.profile' file, once and for all. |
73 | - |
74 | - You might think that the country code specification is redundant. |
75 | -But in fact, some languages have dialects in different countries. For |
76 | -example, 'de_AT' is used for Austria, and 'pt_BR' for Brazil. The |
77 | -country code serves to distinguish the dialects. |
78 | - |
79 | - The locale naming convention of 'LL_CC', with 'LL' denoting the |
80 | -language and 'CC' denoting the country, is the one use on systems based |
81 | -on GNU libc. On other systems, some variations of this scheme are used, |
82 | -such as 'LL' or 'LL_CC.ENCODING'. You can get the list of locales |
83 | -supported by your system for your language by running the command |
84 | -'locale -a | grep '^LL''. |
85 | - |
86 | - Not all programs have translations for all languages. By default, an |
87 | -English message is shown in place of a nonexistent translation. If you |
88 | -understand other languages, you can set up a priority list of languages. |
89 | -This is done through a different environment variable, called |
90 | -'LANGUAGE'. GNU 'gettext' gives preference to 'LANGUAGE' over 'LANG' |
91 | -for the purpose of message handling, but you still need to have 'LANG' |
92 | -set to the primary language; this is required by other parts of the |
93 | -system libraries. For example, some Swedish users who would rather read |
94 | -translations in German than English for when Swedish is not available, |
95 | -set 'LANGUAGE' to 'sv:de' while leaving 'LANG' to 'sv_SE'. |
96 | - |
97 | - Special advice for Norwegian users: The language code for Norwegian |
98 | -bokma*l changed from 'no' to 'nb' recently (in 2003). During the |
99 | -transition period, while some message catalogs for this language are |
100 | -installed under 'nb' and some older ones under 'no', it's recommended |
101 | -for Norwegian users to set 'LANGUAGE' to 'nb:no' so that both newer and |
102 | -older translations are used. |
103 | - |
104 | - In the 'LANGUAGE' environment variable, but not in the 'LANG' |
105 | -environment variable, 'LL_CC' combinations can be abbreviated as 'LL' to |
106 | -denote the language's main dialect. For example, 'de' is equivalent to |
107 | -'de_DE' (German as spoken in Germany), and 'pt' to 'pt_PT' (Portuguese |
108 | -as spoken in Portugal) in this context. |
109 | - |
110 | -1.3 Translating Teams |
111 | -===================== |
112 | - |
113 | -For the Free Translation Project to be a success, we need interested |
114 | -people who like their own language and write it well, and who are also |
115 | -able to synergize with other translators speaking the same language. |
116 | -Each translation team has its own mailing list. The up-to-date list of |
117 | -teams can be found at the Free Translation Project's homepage, |
118 | -'http://translationproject.org/', in the "Teams" area. |
119 | - |
120 | - If you'd like to volunteer to _work_ at translating messages, you |
121 | -should become a member of the translating team for your own language. |
122 | -The subscribing address is _not_ the same as the list itself, it has |
123 | -'-request' appended. For example, speakers of Swedish can send a |
124 | -message to 'sv-request@li.org', having this message body: |
125 | - |
126 | - subscribe |
127 | - |
128 | - Keep in mind that team members are expected to participate _actively_ |
129 | -in translations, or at solving translational difficulties, rather than |
130 | -merely lurking around. If your team does not exist yet and you want to |
131 | -start one, or if you are unsure about what to do or how to get started, |
132 | -please write to 'coordinator@translationproject.org' to reach the |
133 | -coordinator for all translator teams. |
134 | - |
135 | - The English team is special. It works at improving and uniformizing |
136 | -the terminology in use. Proven linguistic skills are praised more than |
137 | -programming skills, here. |
138 | - |
139 | -1.4 Available Packages |
140 | -====================== |
141 | - |
142 | -Languages are not equally supported in all packages. The following |
143 | -matrix shows the current state of internationalization, as of Jun 2014. |
144 | -The matrix shows, in regard of each package, for which languages PO |
145 | -files have been submitted to translation coordination, with a |
146 | -translation percentage of at least 50%. |
147 | - |
148 | - Ready PO files af am an ar as ast az be bg bn bn_IN bs ca crh cs |
149 | - +---------------------------------------------------+ |
150 | - a2ps | [] [] [] | |
151 | - aegis | | |
152 | - anubis | | |
153 | - aspell | [] [] [] | |
154 | - bash | [] [] [] | |
155 | - bfd | | |
156 | - binutils | [] | |
157 | - bison | | |
158 | - bison-runtime | [] | |
159 | - buzztrax | [] | |
160 | - ccd2cue | | |
161 | - ccide | | |
162 | - cflow | | |
163 | - clisp | | |
164 | - coreutils | [] [] | |
165 | - cpio | | |
166 | - cppi | | |
167 | - cpplib | [] | |
168 | - cryptsetup | [] | |
169 | - datamash | | |
170 | - denemo | [] [] | |
171 | - dfarc | [] | |
172 | - dialog | [] [] [] | |
173 | - dico | | |
174 | - diffutils | [] | |
175 | - dink | [] | |
176 | - direvent | | |
177 | - doodle | [] | |
178 | - dos2unix | | |
179 | - dos2unix-man | | |
180 | - e2fsprogs | [] [] | |
181 | - enscript | [] | |
182 | - exif | [] | |
183 | - fetchmail | [] [] | |
184 | - findutils | [] | |
185 | - flex | [] | |
186 | - freedink | [] [] | |
187 | - fusionforge | | |
188 | - gas | | |
189 | - gawk | [] | |
190 | - gcal | [] | |
191 | - gcc | | |
192 | - gdbm | | |
193 | - gettext-examples | [] [] [] [] [] | |
194 | - gettext-runtime | [] [] [] | |
195 | - gettext-tools | [] [] | |
196 | - gjay | | |
197 | - glunarclock | [] [] [] | |
198 | - gnubiff | [] | |
199 | - gnubik | [] | |
200 | - gnucash | () () [] | |
201 | - gnuchess | | |
202 | - gnulib | [] | |
203 | - gnunet | | |
204 | - gnunet-gtk | | |
205 | - gold | | |
206 | - gphoto2 | [] | |
207 | - gprof | [] | |
208 | - gramadoir | | |
209 | - grep | [] [] [] | |
210 | - grub | [] | |
211 | - gsasl | | |
212 | - gss | | |
213 | - gst-plugins-bad | [] [] | |
214 | - gst-plugins-base | [] [] [] | |
215 | - gst-plugins-good | [] [] [] | |
216 | - gst-plugins-ugly | [] [] [] | |
217 | - gstreamer | [] [] [] [] | |
218 | - gtick | [] | |
219 | - gtkam | [] [] | |
220 | - gtkspell | [] [] [] [] [] | |
221 | - guix | | |
222 | - guix-packages | | |
223 | - gutenprint | [] | |
224 | - hello | [] | |
225 | - help2man | | |
226 | - help2man-texi | | |
227 | - hylafax | | |
228 | - idutils | | |
229 | - iso_15924 | [] | |
230 | - iso_3166 | [] [] [] [] [] [] [] [] [] [] | |
231 | - iso_3166_2 | | |
232 | - iso_4217 | [] | |
233 | - iso_639 | [] [] [] [] [] [] [] [] [] | |
234 | - iso_639_3 | [] [] | |
235 | - iso_639_5 | | |
236 | - jwhois | | |
237 | - kbd | [] | |
238 | - klavaro | [] [] [] [] [] | |
239 | - ld | [] | |
240 | - leafpad | [] [] [] [] | |
241 | - libc | [] [] [] | |
242 | - libexif | () | |
243 | - libextractor | | |
244 | - libgnutls | [] | |
245 | - libgphoto2 | [] | |
246 | - libgphoto2_port | [] | |
247 | - libgsasl | | |
248 | - libiconv | [] [] | |
249 | - libidn | [] | |
250 | - liferea | [] [] [] [] | |
251 | - lilypond | [] [] | |
252 | - lordsawar | [] | |
253 | - lprng | | |
254 | - lynx | [] [] | |
255 | - m4 | [] | |
256 | - mailfromd | | |
257 | - mailutils | | |
258 | - make | [] | |
259 | - man-db | [] [] | |
260 | - man-db-manpages | | |
261 | - midi-instruments | [] [] [] | |
262 | - minicom | [] | |
263 | - mkisofs | [] | |
264 | - myserver | [] | |
265 | - nano | [] [] [] | |
266 | - opcodes | | |
267 | - parted | [] | |
268 | - pies | | |
269 | - pnmixer | | |
270 | - popt | [] | |
271 | - procps-ng | | |
272 | - procps-ng-man | | |
273 | - psmisc | [] | |
274 | - pspp | [] | |
275 | - pushover | [] | |
276 | - pwdutils | | |
277 | - pyspread | | |
278 | - radius | [] | |
279 | - recode | [] [] [] | |
280 | - recutils | | |
281 | - rpm | | |
282 | - rush | | |
283 | - sarg | | |
284 | - sed | [] [] [] [] | |
285 | - sharutils | [] | |
286 | - shishi | | |
287 | - skribilo | | |
288 | - solfege | [] [] | |
289 | - solfege-manual | | |
290 | - spotmachine | | |
291 | - sudo | [] [] | |
292 | - sudoers | [] [] | |
293 | - sysstat | [] | |
294 | - tar | [] [] [] | |
295 | - texinfo | [] [] | |
296 | - texinfo_document | [] [] | |
297 | - tigervnc | [] | |
298 | - tin | | |
299 | - tin-man | | |
300 | - tracgoogleappsa... | | |
301 | - trader | | |
302 | - util-linux | [] | |
303 | - ve | | |
304 | - vice | | |
305 | - vmm | | |
306 | - vorbis-tools | [] | |
307 | - wastesedge | | |
308 | - wcd | | |
309 | - wcd-man | | |
310 | - wdiff | [] [] | |
311 | - wget | [] | |
312 | - wyslij-po | | |
313 | - xboard | | |
314 | - xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | |
315 | - xkeyboard-config | [] [] [] | |
316 | - +---------------------------------------------------+ |
317 | - af am an ar as ast az be bg bn bn_IN bs ca crh cs |
318 | - 4 0 2 5 3 11 0 8 25 3 3 1 55 4 74 |
319 | - |
320 | - da de el en en_GB en_ZA eo es et eu fa fi fr |
321 | - +--------------------------------------------------+ |
322 | - a2ps | [] [] [] [] [] [] [] [] [] | |
323 | - aegis | [] [] [] [] | |
324 | - anubis | [] [] [] [] [] | |
325 | - aspell | [] [] [] [] [] [] [] | |
326 | - bash | [] [] [] | |
327 | - bfd | [] [] [] [] | |
328 | - binutils | [] [] [] | |
329 | - bison | [] [] [] [] [] [] [] [] | |
330 | - bison-runtime | [] [] [] [] [] [] [] [] | |
331 | - buzztrax | [] [] [] [] | |
332 | - ccd2cue | [] [] [] [] | |
333 | - ccide | [] [] [] [] [] [] | |
334 | - cflow | [] [] [] [] [] | |
335 | - clisp | [] [] [] [] [] | |
336 | - coreutils | [] [] [] [] [] | |
337 | - cpio | [] [] [] [] [] | |
338 | - cppi | [] [] [] [] [] | |
339 | - cpplib | [] [] [] [] [] [] | |
340 | - cryptsetup | [] [] [] [] [] | |
341 | - datamash | [] [] [] [] | |
342 | - denemo | [] | |
343 | - dfarc | [] [] [] [] [] [] | |
344 | - dialog | [] [] [] [] [] [] [] [] [] | |
345 | - dico | [] [] [] [] | |
346 | - diffutils | [] [] [] [] [] [] | |
347 | - dink | [] [] [] [] [] [] | |
348 | - direvent | [] [] [] [] | |
349 | - doodle | [] [] [] [] | |
350 | - dos2unix | [] [] [] [] [] | |
351 | - dos2unix-man | [] [] [] | |
352 | - e2fsprogs | [] [] [] [] [] | |
353 | - enscript | [] [] [] [] [] [] | |
354 | - exif | [] [] [] [] [] [] | |
355 | - fetchmail | [] () [] [] [] [] [] | |
356 | - findutils | [] [] [] [] [] [] [] [] | |
357 | - flex | [] [] [] [] [] [] | |
358 | - freedink | [] [] [] [] [] [] [] [] | |
359 | - fusionforge | [] [] [] | |
360 | - gas | [] [] [] | |
361 | - gawk | [] [] [] [] [] | |
362 | - gcal | [] [] [] [] | |
363 | - gcc | [] | |
364 | - gdbm | [] [] [] [] [] | |
365 | - gettext-examples | [] [] [] [] [] [] [] | |
366 | - gettext-runtime | [] [] [] [] [] [] | |
367 | - gettext-tools | [] [] [] [] [] | |
368 | - gjay | [] [] [] [] | |
369 | - glunarclock | [] [] [] [] [] | |
370 | - gnubiff | () [] [] () | |
371 | - gnubik | [] [] [] [] [] | |
372 | - gnucash | [] () () () () () () | |
373 | - gnuchess | [] [] [] [] | |
374 | - gnulib | [] [] [] [] [] [] [] | |
375 | - gnunet | [] | |
376 | - gnunet-gtk | [] | |
377 | - gold | [] [] [] | |
378 | - gphoto2 | [] () [] [] | |
379 | - gprof | [] [] [] [] [] [] | |
380 | - gramadoir | [] [] [] [] [] | |
381 | - grep | [] [] [] [] [] [] [] | |
382 | - grub | [] [] [] [] [] | |
383 | - gsasl | [] [] [] [] [] | |
384 | - gss | [] [] [] [] [] | |
385 | - gst-plugins-bad | [] [] [] | |
386 | - gst-plugins-base | [] [] [] [] [] [] | |
387 | - gst-plugins-good | [] [] [] [] [] [] [] | |
388 | - gst-plugins-ugly | [] [] [] [] [] [] [] [] | |
389 | - gstreamer | [] [] [] [] [] [] [] | |
390 | - gtick | [] () [] [] [] | |
391 | - gtkam | [] () [] [] [] [] | |
392 | - gtkspell | [] [] [] [] [] [] [] [] | |
393 | - guix | [] [] | |
394 | - guix-packages | | |
395 | - gutenprint | [] [] [] [] | |
396 | - hello | [] [] [] [] [] [] [] [] | |
397 | - help2man | [] [] [] [] [] [] [] | |
398 | - help2man-texi | [] [] [] | |
399 | - hylafax | [] [] | |
400 | - idutils | [] [] [] [] [] | |
401 | - iso_15924 | [] () [] [] () [] () | |
402 | - iso_3166 | [] () [] [] [] [] () [] () | |
403 | - iso_3166_2 | [] () () () | |
404 | - iso_4217 | [] () [] [] [] () [] () | |
405 | - iso_639 | [] () [] [] () [] () | |
406 | - iso_639_3 | () () () | |
407 | - iso_639_5 | () () () | |
408 | - jwhois | [] [] [] [] [] | |
409 | - kbd | [] [] [] [] [] [] | |
410 | - klavaro | [] [] [] [] [] [] [] | |
411 | - ld | [] [] [] [] | |
412 | - leafpad | [] [] [] [] [] [] [] [] | |
413 | - libc | [] [] [] [] [] | |
414 | - libexif | [] [] () [] [] | |
415 | - libextractor | [] | |
416 | - libgnutls | [] [] [] [] | |
417 | - libgphoto2 | [] () [] | |
418 | - libgphoto2_port | [] () [] [] [] [] | |
419 | - libgsasl | [] [] [] [] [] | |
420 | - libiconv | [] [] [] [] [] [] [] | |
421 | - libidn | [] [] [] [] [] | |
422 | - liferea | [] () [] [] [] [] [] | |
423 | - lilypond | [] [] [] [] [] [] | |
424 | - lordsawar | [] [] | |
425 | - lprng | | |
426 | - lynx | [] [] [] [] [] [] | |
427 | - m4 | [] [] [] [] [] [] | |
428 | - mailfromd | [] | |
429 | - mailutils | [] [] [] [] | |
430 | - make | [] [] [] [] [] | |
431 | - man-db | [] [] [] [] | |
432 | - man-db-manpages | [] [] | |
433 | - midi-instruments | [] [] [] [] [] [] [] [] [] | |
434 | - minicom | [] [] [] [] [] | |
435 | - mkisofs | [] [] [] | |
436 | - myserver | [] [] [] [] | |
437 | - nano | [] [] [] [] [] [] [] | |
438 | - opcodes | [] [] [] [] [] | |
439 | - parted | [] [] [] | |
440 | - pies | [] | |
441 | - pnmixer | [] [] | |
442 | - popt | [] [] [] [] [] [] | |
443 | - procps-ng | [] [] | |
444 | - procps-ng-man | [] [] | |
445 | - psmisc | [] [] [] [] [] [] [] | |
446 | - pspp | [] [] [] | |
447 | - pushover | () [] [] [] | |
448 | - pwdutils | [] [] [] | |
449 | - pyspread | [] [] [] | |
450 | - radius | [] [] | |
451 | - recode | [] [] [] [] [] [] [] | |
452 | - recutils | [] [] [] [] | |
453 | - rpm | [] [] [] [] [] | |
454 | - rush | [] [] [] | |
455 | - sarg | [] [] | |
456 | - sed | [] [] [] [] [] [] [] [] | |
457 | - sharutils | [] [] [] [] | |
458 | - shishi | [] [] [] | |
459 | - skribilo | [] [] [] | |
460 | - solfege | [] [] [] [] [] [] [] [] | |
461 | - solfege-manual | [] [] [] [] [] | |
462 | - spotmachine | [] [] [] [] [] | |
463 | - sudo | [] [] [] [] [] [] | |
464 | - sudoers | [] [] [] [] [] [] | |
465 | - sysstat | [] [] [] [] [] [] | |
466 | - tar | [] [] [] [] [] [] [] | |
467 | - texinfo | [] [] [] [] [] | |
468 | - texinfo_document | [] [] [] [] | |
469 | - tigervnc | [] [] [] [] [] [] | |
470 | - tin | [] [] [] [] | |
471 | - tin-man | [] | |
472 | - tracgoogleappsa... | [] [] [] [] [] | |
473 | - trader | [] [] [] [] [] [] | |
474 | - util-linux | [] [] [] [] | |
475 | - ve | [] [] [] [] [] | |
476 | - vice | () () () | |
477 | - vmm | [] [] | |
478 | - vorbis-tools | [] [] [] [] | |
479 | - wastesedge | [] | |
480 | - wcd | [] [] [] [] | |
481 | - wcd-man | [] | |
482 | - wdiff | [] [] [] [] [] [] [] | |
483 | - wget | [] [] [] [] [] [] | |
484 | - wyslij-po | [] [] [] [] | |
485 | - xboard | [] [] [] [] | |
486 | - xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | |
487 | - xkeyboard-config | [] [] [] [] [] [] [] | |
488 | - +--------------------------------------------------+ |
489 | - da de el en en_GB en_ZA eo es et eu fa fi fr |
490 | - 119 131 32 1 6 0 94 95 22 13 4 102 139 |
491 | - |
492 | - ga gd gl gu he hi hr hu hy ia id is it ja ka kk |
493 | - +-------------------------------------------------+ |
494 | - a2ps | [] [] [] [] | |
495 | - aegis | [] | |
496 | - anubis | [] [] [] [] | |
497 | - aspell | [] [] [] [] [] | |
498 | - bash | [] [] [] [] | |
499 | - bfd | [] [] | |
500 | - binutils | [] [] [] | |
501 | - bison | [] | |
502 | - bison-runtime | [] [] [] [] [] [] [] [] | |
503 | - buzztrax | | |
504 | - ccd2cue | [] | |
505 | - ccide | [] [] | |
506 | - cflow | [] [] [] | |
507 | - clisp | | |
508 | - coreutils | [] [] | |
509 | - cpio | [] [] [] [] [] [] | |
510 | - cppi | [] [] [] [] [] | |
511 | - cpplib | [] [] | |
512 | - cryptsetup | [] | |
513 | - datamash | | |
514 | - denemo | [] | |
515 | - dfarc | [] [] [] | |
516 | - dialog | [] [] [] [] [] [] [] [] [] [] | |
517 | - dico | | |
518 | - diffutils | [] [] [] [] | |
519 | - dink | [] | |
520 | - direvent | [] | |
521 | - doodle | [] [] | |
522 | - dos2unix | [] [] | |
523 | - dos2unix-man | | |
524 | - e2fsprogs | [] [] | |
525 | - enscript | [] [] [] | |
526 | - exif | [] [] [] [] [] [] | |
527 | - fetchmail | [] [] [] | |
528 | - findutils | [] [] [] [] [] [] [] | |
529 | - flex | [] | |
530 | - freedink | [] [] [] [] | |
531 | - fusionforge | | |
532 | - gas | [] | |
533 | - gawk | [] () [] | |
534 | - gcal | | |
535 | - gcc | | |
536 | - gdbm | | |
537 | - gettext-examples | [] [] [] [] [] [] [] | |
538 | - gettext-runtime | [] [] [] [] [] [] [] | |
539 | - gettext-tools | [] [] [] | |
540 | - gjay | [] | |
541 | - glunarclock | [] [] [] [] [] [] | |
542 | - gnubiff | [] [] () | |
543 | - gnubik | [] [] [] | |
544 | - gnucash | () () () () () | |
545 | - gnuchess | | |
546 | - gnulib | [] [] [] [] [] | |
547 | - gnunet | | |
548 | - gnunet-gtk | | |
549 | - gold | [] [] | |
550 | - gphoto2 | [] [] [] [] | |
551 | - gprof | [] [] [] [] | |
552 | - gramadoir | [] [] [] | |
553 | - grep | [] [] [] [] [] [] [] | |
554 | - grub | [] [] [] | |
555 | - gsasl | [] [] [] [] [] | |
556 | - gss | [] [] [] [] [] | |
557 | - gst-plugins-bad | [] [] [] | |
558 | - gst-plugins-base | [] [] [] [] | |
559 | - gst-plugins-good | [] [] [] [] [] [] | |
560 | - gst-plugins-ugly | [] [] [] [] [] [] | |
561 | - gstreamer | [] [] [] [] [] | |
562 | - gtick | [] [] [] [] [] | |
563 | - gtkam | [] [] [] [] [] | |
564 | - gtkspell | [] [] [] [] [] [] [] [] [] [] | |
565 | - guix | | |
566 | - guix-packages | | |
567 | - gutenprint | [] [] [] | |
568 | - hello | [] [] [] [] [] | |
569 | - help2man | [] [] [] | |
570 | - help2man-texi | | |
571 | - hylafax | [] | |
572 | - idutils | [] [] | |
573 | - iso_15924 | [] [] [] [] [] [] | |
574 | - iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] | |
575 | - iso_3166_2 | [] [] | |
576 | - iso_4217 | [] [] [] [] [] [] | |
577 | - iso_639 | [] [] [] [] [] [] [] [] [] | |
578 | - iso_639_3 | [] [] | |
579 | - iso_639_5 | | |
580 | - jwhois | [] [] [] [] | |
581 | - kbd | [] [] [] | |
582 | - klavaro | [] [] [] [] [] | |
583 | - ld | [] [] [] [] | |
584 | - leafpad | [] [] [] [] [] [] [] () | |
585 | - libc | [] [] [] [] [] | |
586 | - libexif | [] | |
587 | - libextractor | | |
588 | - libgnutls | [] | |
589 | - libgphoto2 | [] [] | |
590 | - libgphoto2_port | [] [] | |
591 | - libgsasl | [] [] [] [] | |
592 | - libiconv | [] [] [] [] [] [] [] | |
593 | - libidn | [] [] [] [] | |
594 | - liferea | [] [] [] [] [] | |
595 | - lilypond | [] | |
596 | - lordsawar | | |
597 | - lprng | [] | |
598 | - lynx | [] [] [] [] | |
599 | - m4 | [] [] [] [] [] | |
600 | - mailfromd | | |
601 | - mailutils | | |
602 | - make | [] [] [] [] | |
603 | - man-db | [] [] | |
604 | - man-db-manpages | [] [] | |
605 | - midi-instruments | [] [] [] [] [] [] [] [] [] | |
606 | - minicom | [] [] [] | |
607 | - mkisofs | [] [] | |
608 | - myserver | [] | |
609 | - nano | [] [] [] [] [] [] | |
610 | - opcodes | [] [] [] | |
611 | - parted | [] [] [] [] [] | |
612 | - pies | | |
613 | - pnmixer | [] [] | |
614 | - popt | [] [] [] [] [] [] [] [] [] [] | |
615 | - procps-ng | | |
616 | - procps-ng-man | | |
617 | - psmisc | [] [] [] [] | |
618 | - pspp | [] [] | |
619 | - pushover | [] | |
620 | - pwdutils | [] | |
621 | - pyspread | | |
622 | - radius | [] | |
623 | - recode | [] [] [] [] [] [] [] | |
624 | - recutils | | |
625 | - rpm | [] | |
626 | - rush | [] | |
627 | - sarg | | |
628 | - sed | [] [] [] [] [] [] [] | |
629 | - sharutils | | |
630 | - shishi | | |
631 | - skribilo | [] | |
632 | - solfege | [] [] | |
633 | - solfege-manual | | |
634 | - spotmachine | | |
635 | - sudo | [] [] [] [] | |
636 | - sudoers | [] [] [] | |
637 | - sysstat | [] [] [] [] | |
638 | - tar | [] [] [] [] [] [] | |
639 | - texinfo | [] [] [] | |
640 | - texinfo_document | [] [] [] | |
641 | - tigervnc | | |
642 | - tin | | |
643 | - tin-man | | |
644 | - tracgoogleappsa... | [] [] [] [] | |
645 | - trader | [] [] | |
646 | - util-linux | [] | |
647 | - ve | [] | |
648 | - vice | () () | |
649 | - vmm | | |
650 | - vorbis-tools | [] [] | |
651 | - wastesedge | [] | |
652 | - wcd | | |
653 | - wcd-man | | |
654 | - wdiff | [] [] [] | |
655 | - wget | [] [] [] [] | |
656 | - wyslij-po | [] [] [] | |
657 | - xboard | | |
658 | - xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | |
659 | - xkeyboard-config | [] [] [] [] [] [] | |
660 | - +-------------------------------------------------+ |
661 | - ga gd gl gu he hi hr hu hy ia id is it ja ka kk |
662 | - 35 2 47 4 8 2 60 71 2 6 81 11 87 57 0 3 |
663 | - |
664 | - kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl |
665 | - +--------------------------------------------------+ |
666 | - a2ps | [] [] | |
667 | - aegis | [] | |
668 | - anubis | [] [] [] | |
669 | - aspell | [] [] | |
670 | - bash | [] [] | |
671 | - bfd | | |
672 | - binutils | | |
673 | - bison | [] | |
674 | - bison-runtime | [] [] [] [] [] [] | |
675 | - buzztrax | | |
676 | - ccd2cue | | |
677 | - ccide | [] [] | |
678 | - cflow | [] | |
679 | - clisp | [] | |
680 | - coreutils | [] [] | |
681 | - cpio | [] | |
682 | - cppi | | |
683 | - cpplib | [] | |
684 | - cryptsetup | [] | |
685 | - datamash | [] [] | |
686 | - denemo | | |
687 | - dfarc | [] [] | |
688 | - dialog | [] [] [] [] [] [] | |
689 | - dico | | |
690 | - diffutils | [] [] [] | |
691 | - dink | [] | |
692 | - direvent | [] | |
693 | - doodle | [] | |
694 | - dos2unix | [] [] | |
695 | - dos2unix-man | [] | |
696 | - e2fsprogs | [] | |
697 | - enscript | [] | |
698 | - exif | [] [] [] | |
699 | - fetchmail | [] | |
700 | - findutils | [] [] | |
701 | - flex | [] | |
702 | - freedink | [] [] | |
703 | - fusionforge | | |
704 | - gas | | |
705 | - gawk | [] | |
706 | - gcal | | |
707 | - gcc | | |
708 | - gdbm | | |
709 | - gettext-examples | [] [] [] [] [] [] | |
710 | - gettext-runtime | [] [] [] | |
711 | - gettext-tools | [] | |
712 | - gjay | | |
713 | - glunarclock | [] [] | |
714 | - gnubiff | [] | |
715 | - gnubik | [] [] | |
716 | - gnucash | () () () () () () () [] | |
717 | - gnuchess | [] [] | |
718 | - gnulib | [] | |
719 | - gnunet | | |
720 | - gnunet-gtk | | |
721 | - gold | | |
722 | - gphoto2 | [] | |
723 | - gprof | [] [] | |
724 | - gramadoir | [] | |
725 | - grep | [] [] | |
726 | - grub | [] [] [] | |
727 | - gsasl | [] | |
728 | - gss | | |
729 | - gst-plugins-bad | [] [] [] | |
730 | - gst-plugins-base | [] [] [] | |
731 | - gst-plugins-good | [] [] [] [] | |
732 | - gst-plugins-ugly | [] [] [] [] [] | |
733 | - gstreamer | [] [] [] | |
734 | - gtick | [] | |
735 | - gtkam | [] [] | |
736 | - gtkspell | [] [] [] [] [] [] [] | |
737 | - guix | | |
738 | - guix-packages | | |
739 | - gutenprint | [] | |
740 | - hello | [] [] [] | |
741 | - help2man | [] | |
742 | - help2man-texi | | |
743 | - hylafax | [] | |
744 | - idutils | [] | |
745 | - iso_15924 | () [] [] | |
746 | - iso_3166 | [] [] [] () [] [] [] [] [] [] | |
747 | - iso_3166_2 | () [] | |
748 | - iso_4217 | () [] [] [] | |
749 | - iso_639 | [] [] () [] [] [] [] | |
750 | - iso_639_3 | [] () [] | |
751 | - iso_639_5 | () | |
752 | - jwhois | [] [] | |
753 | - kbd | [] | |
754 | - klavaro | [] [] | |
755 | - ld | | |
756 | - leafpad | [] [] [] [] [] | |
757 | - libc | [] [] | |
758 | - libexif | [] | |
759 | - libextractor | [] | |
760 | - libgnutls | [] [] | |
761 | - libgphoto2 | [] | |
762 | - libgphoto2_port | [] | |
763 | - libgsasl | [] | |
764 | - libiconv | [] [] | |
765 | - libidn | [] | |
766 | - liferea | [] [] [] | |
767 | - lilypond | [] | |
768 | - lordsawar | | |
769 | - lprng | | |
770 | - lynx | [] | |
771 | - m4 | [] | |
772 | - mailfromd | | |
773 | - mailutils | | |
774 | - make | [] [] | |
775 | - man-db | [] | |
776 | - man-db-manpages | [] | |
777 | - midi-instruments | [] [] [] [] [] [] [] | |
778 | - minicom | [] | |
779 | - mkisofs | [] | |
780 | - myserver | | |
781 | - nano | [] [] [] | |
782 | - opcodes | [] | |
783 | - parted | [] [] | |
784 | - pies | | |
785 | - pnmixer | [] | |
786 | - popt | [] [] [] [] [] | |
787 | - procps-ng | | |
788 | - procps-ng-man | | |
789 | - psmisc | [] | |
790 | - pspp | [] [] | |
791 | - pushover | | |
792 | - pwdutils | [] | |
793 | - pyspread | | |
794 | - radius | [] | |
795 | - recode | [] [] | |
796 | - recutils | [] | |
797 | - rpm | [] | |
798 | - rush | [] | |
799 | - sarg | | |
800 | - sed | [] [] | |
801 | - sharutils | [] | |
802 | - shishi | | |
803 | - skribilo | | |
804 | - solfege | [] [] | |
805 | - solfege-manual | [] | |
806 | - spotmachine | [] | |
807 | - sudo | [] [] [] | |
808 | - sudoers | [] [] [] | |
809 | - sysstat | [] [] | |
810 | - tar | [] [] [] | |
811 | - texinfo | [] | |
812 | - texinfo_document | [] | |
813 | - tigervnc | [] | |
814 | - tin | | |
815 | - tin-man | | |
816 | - tracgoogleappsa... | [] [] [] | |
817 | - trader | [] | |
818 | - util-linux | [] | |
819 | - ve | [] | |
820 | - vice | [] | |
821 | - vmm | [] | |
822 | - vorbis-tools | [] | |
823 | - wastesedge | [] | |
824 | - wcd | [] | |
825 | - wcd-man | [] | |
826 | - wdiff | [] | |
827 | - wget | [] [] | |
828 | - wyslij-po | [] | |
829 | - xboard | [] | |
830 | - xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] | |
831 | - xkeyboard-config | [] [] [] | |
832 | - +--------------------------------------------------+ |
833 | - kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl |
834 | - 5 15 4 6 0 13 23 3 3 3 4 11 2 42 1 125 |
835 | - |
836 | - nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr |
837 | - +------------------------------------------------+ |
838 | - a2ps | [] [] [] [] [] [] [] | |
839 | - aegis | [] [] | |
840 | - anubis | [] [] [] | |
841 | - aspell | [] [] [] [] [] [] [] | |
842 | - bash | [] [] [] [] [] [] | |
843 | - bfd | [] [] | |
844 | - binutils | [] [] | |
845 | - bison | [] [] [] | |
846 | - bison-runtime | [] [] [] [] [] [] [] [] | |
847 | - buzztrax | [] | |
848 | - ccd2cue | [] [] | |
849 | - ccide | [] [] [] | |
850 | - cflow | [] [] [] | |
851 | - clisp | [] | |
852 | - coreutils | [] [] [] [] | |
853 | - cpio | [] [] [] | |
854 | - cppi | [] [] [] | |
855 | - cpplib | [] [] [] | |
856 | - cryptsetup | [] [] [] | |
857 | - datamash | [] [] | |
858 | - denemo | | |
859 | - dfarc | [] [] [] | |
860 | - dialog | [] [] [] [] [] [] [] | |
861 | - dico | [] | |
862 | - diffutils | [] [] [] | |
863 | - dink | | |
864 | - direvent | [] [] [] | |
865 | - doodle | [] [] | |
866 | - dos2unix | [] [] [] [] | |
867 | - dos2unix-man | [] [] | |
868 | - e2fsprogs | [] | |
869 | - enscript | [] [] [] [] [] [] | |
870 | - exif | [] [] [] [] [] [] | |
871 | - fetchmail | [] [] [] | |
872 | - findutils | [] [] [] [] [] [] | |
873 | - flex | [] [] [] [] [] | |
874 | - freedink | [] [] [] [] [] | |
875 | - fusionforge | | |
876 | - gas | | |
877 | - gawk | [] | |
878 | - gcal | | |
879 | - gcc | | |
880 | - gdbm | [] [] [] | |
881 | - gettext-examples | [] [] [] [] [] [] [] [] | |
882 | - gettext-runtime | [] [] [] [] [] [] [] [] [] | |
883 | - gettext-tools | [] [] [] [] [] [] [] | |
884 | - gjay | [] | |
885 | - glunarclock | [] [] [] [] [] [] | |
886 | - gnubiff | [] | |
887 | - gnubik | [] [] [] [] | |
888 | - gnucash | () () () () () [] | |
889 | - gnuchess | [] [] | |
890 | - gnulib | [] [] [] [] [] | |
891 | - gnunet | | |
892 | - gnunet-gtk | | |
893 | - gold | | |
894 | - gphoto2 | [] [] [] [] [] | |
895 | - gprof | [] [] [] [] | |
896 | - gramadoir | [] [] | |
897 | - grep | [] [] [] [] [] [] | |
898 | - grub | [] [] [] [] [] | |
899 | - gsasl | [] [] [] | |
900 | - gss | [] [] [] [] | |
901 | - gst-plugins-bad | [] [] [] [] [] | |
902 | - gst-plugins-base | [] [] [] [] [] [] | |
903 | - gst-plugins-good | [] [] [] [] [] [] [] | |
904 | - gst-plugins-ugly | [] [] [] [] [] [] [] | |
905 | - gstreamer | [] [] [] [] [] [] [] | |
906 | - gtick | [] [] [] [] [] | |
907 | - gtkam | [] [] [] [] [] [] | |
908 | - gtkspell | [] [] [] [] [] [] [] [] [] | |
909 | - guix | | |
910 | - guix-packages | | |
911 | - gutenprint | [] [] | |
912 | - hello | [] [] [] [] [] [] | |
913 | - help2man | [] [] [] [] | |
914 | - help2man-texi | [] | |
915 | - hylafax | | |
916 | - idutils | [] [] [] | |
917 | - iso_15924 | [] () [] [] [] [] | |
918 | - iso_3166 | [] [] [] [] () [] [] [] [] [] [] [] [] | |
919 | - iso_3166_2 | [] () [] | |
920 | - iso_4217 | [] [] () [] [] [] [] [] | |
921 | - iso_639 | [] [] [] () [] [] [] [] [] [] | |
922 | - iso_639_3 | [] () | |
923 | - iso_639_5 | () [] | |
924 | - jwhois | [] [] [] [] | |
925 | - kbd | [] [] | |
926 | - klavaro | [] [] [] [] [] | |
927 | - ld | | |
928 | - leafpad | [] [] [] [] [] [] [] [] | |
929 | - libc | [] [] [] | |
930 | - libexif | [] () [] | |
931 | - libextractor | [] | |
932 | - libgnutls | [] | |
933 | - libgphoto2 | [] | |
934 | - libgphoto2_port | [] [] [] [] [] | |
935 | - libgsasl | [] [] [] [] | |
936 | - libiconv | [] [] [] [] [] | |
937 | - libidn | [] [] [] | |
938 | - liferea | [] [] [] [] () [] [] | |
939 | - lilypond | | |
940 | - lordsawar | | |
941 | - lprng | [] | |
942 | - lynx | [] [] | |
943 | - m4 | [] [] [] [] [] | |
944 | - mailfromd | [] | |
945 | - mailutils | [] | |
946 | - make | [] [] [] | |
947 | - man-db | [] [] [] | |
948 | - man-db-manpages | [] [] [] | |
949 | - midi-instruments | [] [] [] [] [] [] [] [] | |
950 | - minicom | [] [] [] [] | |
951 | - mkisofs | [] [] [] | |
952 | - myserver | [] [] | |
953 | - nano | [] [] [] [] [] [] | |
954 | - opcodes | | |
955 | - parted | [] [] [] [] [] [] | |
956 | - pies | [] | |
957 | - pnmixer | [] | |
958 | - popt | [] [] [] [] [] [] | |
959 | - procps-ng | [] | |
960 | - procps-ng-man | [] | |
961 | - psmisc | [] [] [] [] | |
962 | - pspp | [] [] | |
963 | - pushover | | |
964 | - pwdutils | [] | |
965 | - pyspread | [] [] | |
966 | - radius | [] [] | |
967 | - recode | [] [] [] [] [] [] [] [] | |
968 | - recutils | [] [] | |
969 | - rpm | [] | |
970 | - rush | [] [] [] | |
971 | - sarg | [] [] | |
972 | - sed | [] [] [] [] [] [] [] [] | |
973 | - sharutils | [] [] [] | |
974 | - shishi | [] [] | |
975 | - skribilo | [] | |
976 | - solfege | [] [] [] | |
977 | - solfege-manual | [] [] | |
978 | - spotmachine | [] [] | |
979 | - sudo | [] [] [] [] [] [] | |
980 | - sudoers | [] [] [] [] | |
981 | - sysstat | [] [] [] [] [] | |
982 | - tar | [] [] [] [] [] | |
983 | - texinfo | [] [] [] | |
984 | - texinfo_document | [] [] | |
985 | - tigervnc | [] [] [] | |
986 | - tin | [] | |
987 | - tin-man | | |
988 | - tracgoogleappsa... | [] [] [] [] | |
989 | - trader | [] [] | |
990 | - util-linux | [] [] | |
991 | - ve | [] [] [] | |
992 | - vice | | |
993 | - vmm | | |
994 | - vorbis-tools | [] [] [] | |
995 | - wastesedge | | |
996 | - wcd | | |
997 | - wcd-man | | |
998 | - wdiff | [] [] [] [] [] | |
999 | - wget | [] [] [] [] [] | |
1000 | - wyslij-po | [] [] [] [] | |
1001 | - xboard | [] [] [] | |
1002 | - xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | |
1003 | - xkeyboard-config | [] [] [] [] | |
1004 | - +------------------------------------------------+ |
1005 | - nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr |
1006 | - 7 3 6 114 1 12 88 32 82 3 40 45 7 101 |
1007 | - |
1008 | - sv sw ta te tg th tr uk ur vi wa wo zh_CN |
1009 | - +----------------------------------------------+ |
1010 | - a2ps | [] [] [] [] [] | |
1011 | - aegis | [] | |
1012 | - anubis | [] [] [] [] | |
1013 | - aspell | [] [] [] [] [] | |
1014 | - bash | [] [] [] [] | |
1015 | - bfd | [] [] [] | |
1016 | - binutils | [] [] [] | |
1017 | - bison | [] [] [] [] | |
1018 | - bison-runtime | [] [] [] [] [] [] | |
1019 | - buzztrax | [] [] [] | |
1020 | - ccd2cue | [] [] [] | |
1021 | - ccide | [] [] [] [] | |
1022 | - cflow | [] [] [] [] | |
1023 | - clisp | | |
1024 | - coreutils | [] [] [] | |
1025 | - cpio | [] [] [] [] [] | |
1026 | - cppi | [] [] [] [] | |
1027 | - cpplib | [] [] [] [] [] | |
1028 | - cryptsetup | [] [] [] | |
1029 | - datamash | [] [] [] | |
1030 | - denemo | [] | |
1031 | - dfarc | [] [] | |
1032 | - dialog | [] [] [] [] [] [] | |
1033 | - dico | [] | |
1034 | - diffutils | [] [] [] [] [] | |
1035 | - dink | [] | |
1036 | - direvent | [] [] | |
1037 | - doodle | [] [] | |
1038 | - dos2unix | [] [] [] [] | |
1039 | - dos2unix-man | [] [] [] | |
1040 | - e2fsprogs | [] [] [] [] | |
1041 | - enscript | [] [] [] [] | |
1042 | - exif | [] [] [] [] [] | |
1043 | - fetchmail | [] [] [] [] | |
1044 | - findutils | [] [] [] [] [] | |
1045 | - flex | [] [] [] [] | |
1046 | - freedink | [] [] [] | |
1047 | - fusionforge | | |
1048 | - gas | [] | |
1049 | - gawk | [] [] [] | |
1050 | - gcal | [] [] [] | |
1051 | - gcc | [] | |
1052 | - gdbm | [] [] | |
1053 | - gettext-examples | [] [] [] [] [] | |
1054 | - gettext-runtime | [] [] [] [] [] | |
1055 | - gettext-tools | [] [] [] [] [] | |
1056 | - gjay | [] [] [] | |
1057 | - glunarclock | [] [] [] [] | |
1058 | - gnubiff | [] [] | |
1059 | - gnubik | [] [] [] [] | |
1060 | - gnucash | () () () () [] | |
1061 | - gnuchess | [] [] [] | |
1062 | - gnulib | [] [] [] [] | |
1063 | - gnunet | | |
1064 | - gnunet-gtk | | |
1065 | - gold | [] [] | |
1066 | - gphoto2 | [] [] [] [] | |
1067 | - gprof | [] [] [] [] | |
1068 | - gramadoir | [] [] [] | |
1069 | - grep | [] [] [] [] [] | |
1070 | - grub | [] [] [] [] | |
1071 | - gsasl | [] [] [] [] | |
1072 | - gss | [] [] [] | |
1073 | - gst-plugins-bad | [] [] [] [] [] | |
1074 | - gst-plugins-base | [] [] [] [] [] | |
1075 | - gst-plugins-good | [] [] [] [] [] | |
1076 | - gst-plugins-ugly | [] [] [] [] [] | |
1077 | - gstreamer | [] [] [] [] [] | |
1078 | - gtick | [] [] [] | |
1079 | - gtkam | [] [] [] [] | |
1080 | - gtkspell | [] [] [] [] [] [] [] | |
1081 | - guix | | |
1082 | - guix-packages | | |
1083 | - gutenprint | [] [] [] [] | |
1084 | - hello | [] [] [] [] [] [] | |
1085 | - help2man | [] [] [] | |
1086 | - help2man-texi | [] | |
1087 | - hylafax | [] | |
1088 | - idutils | [] [] [] | |
1089 | - iso_15924 | [] () [] [] () [] | |
1090 | - iso_3166 | [] [] () [] [] () [] [] | |
1091 | - iso_3166_2 | () [] [] () [] | |
1092 | - iso_4217 | [] () [] [] () [] | |
1093 | - iso_639 | [] [] [] () [] [] () [] [] | |
1094 | - iso_639_3 | [] () [] [] () | |
1095 | - iso_639_5 | () [] () | |
1096 | - jwhois | [] [] [] [] | |
1097 | - kbd | [] [] [] [] | |
1098 | - klavaro | [] [] [] [] [] [] | |
1099 | - ld | [] [] [] [] [] | |
1100 | - leafpad | [] [] [] [] [] [] | |
1101 | - libc | [] [] [] [] [] | |
1102 | - libexif | [] [] () | |
1103 | - libextractor | [] [] | |
1104 | - libgnutls | [] [] [] [] | |
1105 | - libgphoto2 | [] [] [] | |
1106 | - libgphoto2_port | [] [] [] [] | |
1107 | - libgsasl | [] [] [] [] | |
1108 | - libiconv | [] [] [] [] [] | |
1109 | - libidn | () [] [] [] | |
1110 | - liferea | [] [] [] [] [] | |
1111 | - lilypond | [] | |
1112 | - lordsawar | | |
1113 | - lprng | [] | |
1114 | - lynx | [] [] [] [] | |
1115 | - m4 | [] [] [] | |
1116 | - mailfromd | [] [] | |
1117 | - mailutils | [] | |
1118 | - make | [] [] [] [] | |
1119 | - man-db | [] [] [] | |
1120 | - man-db-manpages | [] [] | |
1121 | - midi-instruments | [] [] [] [] [] [] | |
1122 | - minicom | [] [] | |
1123 | - mkisofs | [] [] [] | |
1124 | - myserver | [] | |
1125 | - nano | [] [] [] [] | |
1126 | - opcodes | [] [] [] | |
1127 | - parted | [] [] [] [] [] | |
1128 | - pies | [] [] | |
1129 | - pnmixer | [] [] [] | |
1130 | - popt | [] [] [] [] [] [] [] | |
1131 | - procps-ng | [] [] | |
1132 | - procps-ng-man | [] | |
1133 | - psmisc | [] [] [] [] | |
1134 | - pspp | [] [] [] | |
1135 | - pushover | [] | |
1136 | - pwdutils | [] [] | |
1137 | - pyspread | [] | |
1138 | - radius | [] [] | |
1139 | - recode | [] [] [] [] | |
1140 | - recutils | [] [] [] | |
1141 | - rpm | [] [] [] [] | |
1142 | - rush | [] [] | |
1143 | - sarg | | |
1144 | - sed | [] [] [] [] [] | |
1145 | - sharutils | [] [] [] [] | |
1146 | - shishi | [] [] | |
1147 | - skribilo | [] [] | |
1148 | - solfege | [] [] [] [] | |
1149 | - solfege-manual | [] | |
1150 | - spotmachine | [] [] [] | |
1151 | - sudo | [] [] [] [] [] | |
1152 | - sudoers | [] [] [] [] | |
1153 | - sysstat | [] [] [] [] [] | |
1154 | - tar | [] [] [] [] [] | |
1155 | - texinfo | [] [] [] | |
1156 | - texinfo_document | [] | |
1157 | - tigervnc | [] [] [] | |
1158 | - tin | [] | |
1159 | - tin-man | | |
1160 | - tracgoogleappsa... | [] [] [] [] [] | |
1161 | - trader | [] | |
1162 | - util-linux | [] [] [] [] | |
1163 | - ve | [] [] [] [] | |
1164 | - vice | () () | |
1165 | - vmm | | |
1166 | - vorbis-tools | [] [] | |
1167 | - wastesedge | | |
1168 | - wcd | [] [] [] | |
1169 | - wcd-man | [] | |
1170 | - wdiff | [] [] [] [] | |
1171 | - wget | [] [] [] | |
1172 | - wyslij-po | [] [] | |
1173 | - xboard | [] [] | |
1174 | - xdg-user-dirs | [] [] [] [] [] [] [] [] | |
1175 | - xkeyboard-config | [] [] [] [] | |
1176 | - +----------------------------------------------+ |
1177 | - sv sw ta te tg th tr uk ur vi wa wo zh_CN |
1178 | - 106 1 4 3 0 13 51 115 1 125 7 1 100 |
1179 | - |
1180 | - zh_HK zh_TW |
1181 | - +-------------+ |
1182 | - a2ps | | 30 |
1183 | - aegis | | 9 |
1184 | - anubis | | 19 |
1185 | - aspell | | 29 |
1186 | - bash | [] | 23 |
1187 | - bfd | | 11 |
1188 | - binutils | | 12 |
1189 | - bison | [] | 18 |
1190 | - bison-runtime | [] | 38 |
1191 | - buzztrax | | 9 |
1192 | - ccd2cue | | 10 |
1193 | - ccide | | 17 |
1194 | - cflow | | 16 |
1195 | - clisp | | 10 |
1196 | - coreutils | | 18 |
1197 | - cpio | | 20 |
1198 | - cppi | | 17 |
1199 | - cpplib | [] | 19 |
1200 | - cryptsetup | | 14 |
1201 | - datamash | | 11 |
1202 | - denemo | | 5 |
1203 | - dfarc | | 17 |
1204 | - dialog | [] | 42 |
1205 | - dico | | 6 |
1206 | - diffutils | | 22 |
1207 | - dink | | 10 |
1208 | - direvent | | 11 |
1209 | - doodle | | 12 |
1210 | - dos2unix | [] | 18 |
1211 | - dos2unix-man | | 9 |
1212 | - e2fsprogs | | 15 |
1213 | - enscript | | 21 |
1214 | - exif | | 27 |
1215 | - fetchmail | | 19 |
1216 | - findutils | | 29 |
1217 | - flex | [] | 19 |
1218 | - freedink | | 24 |
1219 | - fusionforge | | 3 |
1220 | - gas | | 5 |
1221 | - gawk | | 13 |
1222 | - gcal | | 8 |
1223 | - gcc | | 2 |
1224 | - gdbm | | 10 |
1225 | - gettext-examples | [] [] | 40 |
1226 | - gettext-runtime | [] [] | 35 |
1227 | - gettext-tools | [] | 24 |
1228 | - gjay | | 9 |
1229 | - glunarclock | [] | 27 |
1230 | - gnubiff | | 9 |
1231 | - gnubik | | 19 |
1232 | - gnucash | () | 6 |
1233 | - gnuchess | | 11 |
1234 | - gnulib | | 23 |
1235 | - gnunet | | 1 |
1236 | - gnunet-gtk | | 1 |
1237 | - gold | | 7 |
1238 | - gphoto2 | [] | 19 |
1239 | - gprof | | 21 |
1240 | - gramadoir | | 14 |
1241 | - grep | [] | 31 |
1242 | - grub | | 21 |
1243 | - gsasl | [] | 19 |
1244 | - gss | | 17 |
1245 | - gst-plugins-bad | | 21 |
1246 | - gst-plugins-base | | 27 |
1247 | - gst-plugins-good | | 32 |
1248 | - gst-plugins-ugly | | 34 |
1249 | - gstreamer | [] | 32 |
1250 | - gtick | | 19 |
1251 | - gtkam | | 24 |
1252 | - gtkspell | [] [] | 48 |
1253 | - guix | | 2 |
1254 | - guix-packages | | 0 |
1255 | - gutenprint | | 15 |
1256 | - hello | [] | 30 |
1257 | - help2man | | 18 |
1258 | - help2man-texi | | 5 |
1259 | - hylafax | | 5 |
1260 | - idutils | | 14 |
1261 | - iso_15924 | [] | 23 |
1262 | - iso_3166 | [] [] | 58 |
1263 | - iso_3166_2 | | 9 |
1264 | - iso_4217 | [] [] | 28 |
1265 | - iso_639 | [] [] | 46 |
1266 | - iso_639_3 | | 10 |
1267 | - iso_639_5 | | 2 |
1268 | - jwhois | [] | 20 |
1269 | - kbd | | 17 |
1270 | - klavaro | | 30 |
1271 | - ld | [] | 15 |
1272 | - leafpad | [] | 39 |
1273 | - libc | [] | 24 |
1274 | - libexif | | 10 |
1275 | - libextractor | | 5 |
1276 | - libgnutls | | 13 |
1277 | - libgphoto2 | | 10 |
1278 | - libgphoto2_port | [] | 19 |
1279 | - libgsasl | | 18 |
1280 | - libiconv | [] | 29 |
1281 | - libidn | | 17 |
1282 | - liferea | | 29 |
1283 | - lilypond | | 11 |
1284 | - lordsawar | | 3 |
1285 | - lprng | | 3 |
1286 | - lynx | | 19 |
1287 | - m4 | [] | 22 |
1288 | - mailfromd | | 4 |
1289 | - mailutils | | 6 |
1290 | - make | | 19 |
1291 | - man-db | | 15 |
1292 | - man-db-manpages | | 10 |
1293 | - midi-instruments | [] | 43 |
1294 | - minicom | [] | 17 |
1295 | - mkisofs | | 13 |
1296 | - myserver | | 9 |
1297 | - nano | [] | 30 |
1298 | - opcodes | | 12 |
1299 | - parted | [] | 23 |
1300 | - pies | | 4 |
1301 | - pnmixer | | 9 |
1302 | - popt | [] | 36 |
1303 | - procps-ng | | 5 |
1304 | - procps-ng-man | | 4 |
1305 | - psmisc | [] | 22 |
1306 | - pspp | | 13 |
1307 | - pushover | | 6 |
1308 | - pwdutils | | 8 |
1309 | - pyspread | | 6 |
1310 | - radius | | 9 |
1311 | - recode | | 31 |
1312 | - recutils | | 10 |
1313 | - rpm | [] | 13 |
1314 | - rush | | 10 |
1315 | - sarg | | 4 |
1316 | - sed | [] | 35 |
1317 | - sharutils | | 13 |
1318 | - shishi | | 7 |
1319 | - skribilo | | 7 |
1320 | - solfege | | 21 |
1321 | - solfege-manual | | 9 |
1322 | - spotmachine | | 11 |
1323 | - sudo | | 26 |
1324 | - sudoers | | 22 |
1325 | - sysstat | | 23 |
1326 | - tar | [] | 30 |
1327 | - texinfo | | 17 |
1328 | - texinfo_document | | 13 |
1329 | - tigervnc | | 14 |
1330 | - tin | [] | 7 |
1331 | - tin-man | | 1 |
1332 | - tracgoogleappsa... | [] | 22 |
1333 | - trader | | 12 |
1334 | - util-linux | | 13 |
1335 | - ve | | 14 |
1336 | - vice | | 1 |
1337 | - vmm | | 3 |
1338 | - vorbis-tools | | 13 |
1339 | - wastesedge | | 3 |
1340 | - wcd | | 8 |
1341 | - wcd-man | | 3 |
1342 | - wdiff | [] | 23 |
1343 | - wget | | 21 |
1344 | - wyslij-po | | 14 |
1345 | - xboard | | 10 |
1346 | - xdg-user-dirs | [] [] | 68 |
1347 | - xkeyboard-config | [] | 28 |
1348 | - +-------------+ |
1349 | - 89 teams zh_HK zh_TW |
1350 | - 166 domains 7 42 2809 |
1351 | - |
1352 | - Some counters in the preceding matrix are higher than the number of |
1353 | -visible blocks let us expect. This is because a few extra PO files are |
1354 | -used for implementing regional variants of languages, or language |
1355 | -dialects. |
1356 | - |
1357 | - For a PO file in the matrix above to be effective, the package to |
1358 | -which it applies should also have been internationalized and distributed |
1359 | -as such by its maintainer. There might be an observable lag between the |
1360 | -mere existence a PO file and its wide availability in a distribution. |
1361 | - |
1362 | - If Jun 2014 seems to be old, you may fetch a more recent copy of this |
1363 | -'ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix |
1364 | -with full percentage details can be found at |
1365 | -'http://translationproject.org/extra/matrix.html'. |
1366 | - |
1367 | -1.5 Using 'gettext' in new packages |
1368 | -=================================== |
1369 | - |
1370 | -If you are writing a freely available program and want to |
1371 | -internationalize it you are welcome to use GNU 'gettext' in your |
1372 | -package. Of course you have to respect the GNU Lesser General Public |
1373 | -License which covers the use of the GNU 'gettext' library. This means |
1374 | -in particular that even non-free programs can use 'libintl' as a shared |
1375 | -library, whereas only free software can use 'libintl' as a static |
1376 | -library or use modified versions of 'libintl'. |
1377 | - |
1378 | - Once the sources are changed appropriately and the setup can handle |
1379 | -the use of 'gettext' the only thing missing are the translations. The |
1380 | -Free Translation Project is also available for packages which are not |
1381 | -developed inside the GNU project. Therefore the information given above |
1382 | -applies also for every other Free Software Project. Contact |
1383 | -'coordinator@translationproject.org' to make the '.pot' files available |
1384 | -to the translation teams. |
1385 | +<https://www.gnu.org/software/gettext/manual/html_node/Users.html> |
1386 | diff --git a/Makefile.am b/Makefile.am |
1387 | index b001546..20dcfc8 100644 |
1388 | --- a/Makefile.am |
1389 | +++ b/Makefile.am |
1390 | @@ -32,7 +32,7 @@ if HAVE_TOPOLOGY |
1391 | SUBDIRS += topology |
1392 | endif |
1393 | |
1394 | -EXTRA_DIST= config.rpath README.md TODO gitcompile |
1395 | +EXTRA_DIST= README.md TODO gitcompile |
1396 | AUTOMAKE_OPTIONS=foreign |
1397 | ACLOCAL_AMFLAGS = -I m4 |
1398 | |
1399 | diff --git a/Makefile.in b/Makefile.in |
1400 | index aacaf3d..79fd478 100644 |
1401 | --- a/Makefile.in |
1402 | +++ b/Makefile.in |
1403 | @@ -1,7 +1,7 @@ |
1404 | -# Makefile.in generated by automake 1.16.1 from Makefile.am. |
1405 | +# Makefile.in generated by automake 1.16.2 from Makefile.am. |
1406 | # @configure_input@ |
1407 | |
1408 | -# Copyright (C) 1994-2018 Free Software Foundation, Inc. |
1409 | +# Copyright (C) 1994-2020 Free Software Foundation, Inc. |
1410 | |
1411 | # This Makefile.in is free software; the Free Software Foundation |
1412 | # gives unlimited permission to copy and/or distribute it, |
1413 | @@ -100,7 +100,8 @@ host_triplet = @host@ |
1414 | subdir = . |
1415 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
1416 | am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ |
1417 | - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
1418 | + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ |
1419 | + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
1420 | $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ |
1421 | $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ |
1422 | $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ |
1423 | @@ -277,8 +278,8 @@ MAINT = @MAINT@ |
1424 | MAKEINFO = @MAKEINFO@ |
1425 | MKDIR_P = @MKDIR_P@ |
1426 | MSGFMT = @MSGFMT@ |
1427 | -MSGFMT_015 = @MSGFMT_015@ |
1428 | MSGMERGE = @MSGMERGE@ |
1429 | +MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ |
1430 | NCURSESW_CFLAGS = @NCURSESW_CFLAGS@ |
1431 | NCURSESW_LIBS = @NCURSESW_LIBS@ |
1432 | NCURSES_CFLAGS = @NCURSES_CFLAGS@ |
1433 | @@ -358,6 +359,7 @@ prefix = @prefix@ |
1434 | program_transform_name = @program_transform_name@ |
1435 | psdir = @psdir@ |
1436 | rst2man_available = @rst2man_available@ |
1437 | +runstatedir = @runstatedir@ |
1438 | sbindir = @sbindir@ |
1439 | sharedstatedir = @sharedstatedir@ |
1440 | srcdir = @srcdir@ |
1441 | @@ -374,7 +376,7 @@ SUBDIRS = include alsactl utils m4 po alsa-info $(am__append_1) \ |
1442 | $(am__append_2) $(am__append_3) $(am__append_4) \ |
1443 | $(am__append_5) $(am__append_6) $(am__append_7) \ |
1444 | $(am__append_8) $(am__append_9) $(am__append_10) |
1445 | -EXTRA_DIST = config.rpath README.md TODO gitcompile |
1446 | +EXTRA_DIST = README.md TODO gitcompile |
1447 | AUTOMAKE_OPTIONS = foreign |
1448 | ACLOCAL_AMFLAGS = -I m4 |
1449 | DISTCHECK_CONFIGURE_FLAGS = \ |
1450 | @@ -611,6 +613,10 @@ dist-xz: distdir |
1451 | tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz |
1452 | $(am__post_remove_distdir) |
1453 | |
1454 | +dist-zstd: distdir |
1455 | + tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst |
1456 | + $(am__post_remove_distdir) |
1457 | + |
1458 | dist-tarZ: distdir |
1459 | @echo WARNING: "Support for distribution archives compressed with" \ |
1460 | "legacy program 'compress' is deprecated." >&2 |
1461 | @@ -653,6 +659,8 @@ distcheck: dist |
1462 | eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ |
1463 | *.zip*) \ |
1464 | unzip $(distdir).zip ;;\ |
1465 | + *.tar.zst*) \ |
1466 | + zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ |
1467 | esac |
1468 | chmod -R a-w $(distdir) |
1469 | chmod u+w $(distdir) |
1470 | @@ -831,17 +839,17 @@ uninstall-am: |
1471 | am--refresh check check-am clean clean-cscope clean-generic \ |
1472 | cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ |
1473 | dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ |
1474 | - dist-zip distcheck distclean distclean-generic distclean-tags \ |
1475 | - distcleancheck distdir distuninstallcheck dvi dvi-am html \ |
1476 | - html-am info info-am install install-am install-data \ |
1477 | - install-data-am install-data-hook install-dvi install-dvi-am \ |
1478 | - install-exec install-exec-am install-html install-html-am \ |
1479 | - install-info install-info-am install-man install-pdf \ |
1480 | - install-pdf-am install-ps install-ps-am install-strip \ |
1481 | - installcheck installcheck-am installdirs installdirs-am \ |
1482 | - maintainer-clean maintainer-clean-generic mostlyclean \ |
1483 | - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ |
1484 | - uninstall-am |
1485 | + dist-zip dist-zstd distcheck distclean distclean-generic \ |
1486 | + distclean-tags distcleancheck distdir distuninstallcheck dvi \ |
1487 | + dvi-am html html-am info info-am install install-am \ |
1488 | + install-data install-data-am install-data-hook install-dvi \ |
1489 | + install-dvi-am install-exec install-exec-am install-html \ |
1490 | + install-html-am install-info install-info-am install-man \ |
1491 | + install-pdf install-pdf-am install-ps install-ps-am \ |
1492 | + install-strip installcheck installcheck-am installdirs \ |
1493 | + installdirs-am maintainer-clean maintainer-clean-generic \ |
1494 | + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ |
1495 | + tags-am uninstall uninstall-am |
1496 | |
1497 | .PRECIOUS: Makefile |
1498 | |
1499 | diff --git a/aclocal.m4 b/aclocal.m4 |
1500 | index e00b291..105a53e 100644 |
1501 | --- a/aclocal.m4 |
1502 | +++ b/aclocal.m4 |
1503 | @@ -1,6 +1,6 @@ |
1504 | -# generated automatically by aclocal 1.16.1 -*- Autoconf -*- |
1505 | +# generated automatically by aclocal 1.16.2 -*- Autoconf -*- |
1506 | |
1507 | -# Copyright (C) 1996-2018 Free Software Foundation, Inc. |
1508 | +# Copyright (C) 1996-2020 Free Software Foundation, Inc. |
1509 | |
1510 | # This file is free software; the Free Software Foundation |
1511 | # gives unlimited permission to copy and/or distribute it, |
1512 | @@ -103,12 +103,11 @@ no_alsa="" |
1513 | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` |
1514 | AC_MSG_RESULT($alsa_min_major_version.$alsa_min_minor_version.$alsa_min_micro_version) |
1515 | |
1516 | -AC_LANG_SAVE |
1517 | -AC_LANG_C |
1518 | +AC_LANG_PUSH([C]) |
1519 | AC_MSG_CHECKING([for libasound headers version >= $alsa_min_major_version.$alsa_min_minor_version.$alsa_min_micro_version ($min_alsa_version)]) |
1520 | -AC_TRY_COMPILE([ |
1521 | +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ |
1522 | #include <alsa/asoundlib.h> |
1523 | -], [ |
1524 | +]], [[ |
1525 | /* ensure backward compatibility */ |
1526 | #if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR) |
1527 | #define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR |
1528 | @@ -140,21 +139,20 @@ AC_TRY_COMPILE([ |
1529 | # endif |
1530 | # endif |
1531 | exit(0); |
1532 | -], |
1533 | +]])], |
1534 | [AC_MSG_RESULT(found.)], |
1535 | [AC_MSG_RESULT(not present.) |
1536 | ifelse([$3], , [AC_MSG_ERROR(Sufficiently new version of libasound not found.)]) |
1537 | alsa_found=no] |
1538 | ) |
1539 | -AC_LANG_RESTORE |
1540 | +AC_LANG_POP([C]) |
1541 | |
1542 | -AC_LANG_SAVE |
1543 | -AC_LANG_C |
1544 | +AC_LANG_PUSH([C]) |
1545 | AC_MSG_CHECKING([for libatopology (sound headers version > 1.1.9)]) |
1546 | -AC_TRY_COMPILE([ |
1547 | +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ |
1548 | #include <alsa/asoundlib.h> |
1549 | #include <alsa/topology.h> |
1550 | -], [ |
1551 | +]], [[ |
1552 | /* ensure backward compatibility */ |
1553 | #if !defined(SND_LIB_VERSION) |
1554 | #define SND_LIB_VERSION 0 |
1555 | @@ -165,13 +163,12 @@ AC_TRY_COMPILE([ |
1556 | # error not present |
1557 | #endif |
1558 | exit(0); |
1559 | -], |
1560 | +]])], |
1561 | [AC_MSG_RESULT(yes) |
1562 | enable_atopology="yes"], |
1563 | [AC_MSG_RESULT(no)] |
1564 | ) |
1565 | -AC_LANG_RESTORE |
1566 | - |
1567 | +AC_LANG_POP([C]) |
1568 | fi |
1569 | |
1570 | dnl Now that we know that we have the right version, let's see if we have the library and not just the headers. |
1571 | @@ -225,63 +222,6 @@ AC_SUBST(ALSA_LIBS) |
1572 | AC_SUBST(ALSA_TOPOLOGY_LIBS) |
1573 | ]) |
1574 | |
1575 | -# intlmacosx.m4 serial 5 (gettext-0.18.2) |
1576 | -dnl Copyright (C) 2004-2014, 2016 Free Software Foundation, Inc. |
1577 | -dnl This file is free software; the Free Software Foundation |
1578 | -dnl gives unlimited permission to copy and/or distribute it, |
1579 | -dnl with or without modifications, as long as this notice is preserved. |
1580 | -dnl |
1581 | -dnl This file can be used in projects which are not available under |
1582 | -dnl the GNU General Public License or the GNU Library General Public |
1583 | -dnl License but which still want to provide support for the GNU gettext |
1584 | -dnl functionality. |
1585 | -dnl Please note that the actual code of the GNU gettext library is covered |
1586 | -dnl by the GNU Library General Public License, and the rest of the GNU |
1587 | -dnl gettext package is covered by the GNU General Public License. |
1588 | -dnl They are *not* in the public domain. |
1589 | - |
1590 | -dnl Checks for special options needed on Mac OS X. |
1591 | -dnl Defines INTL_MACOSX_LIBS. |
1592 | -AC_DEFUN([gt_INTL_MACOSX], |
1593 | -[ |
1594 | - dnl Check for API introduced in Mac OS X 10.2. |
1595 | - AC_CACHE_CHECK([for CFPreferencesCopyAppValue], |
1596 | - [gt_cv_func_CFPreferencesCopyAppValue], |
1597 | - [gt_save_LIBS="$LIBS" |
1598 | - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" |
1599 | - AC_LINK_IFELSE( |
1600 | - [AC_LANG_PROGRAM( |
1601 | - [[#include <CoreFoundation/CFPreferences.h>]], |
1602 | - [[CFPreferencesCopyAppValue(NULL, NULL)]])], |
1603 | - [gt_cv_func_CFPreferencesCopyAppValue=yes], |
1604 | - [gt_cv_func_CFPreferencesCopyAppValue=no]) |
1605 | - LIBS="$gt_save_LIBS"]) |
1606 | - if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then |
1607 | - AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], |
1608 | - [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) |
1609 | - fi |
1610 | - dnl Check for API introduced in Mac OS X 10.3. |
1611 | - AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], |
1612 | - [gt_save_LIBS="$LIBS" |
1613 | - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" |
1614 | - AC_LINK_IFELSE( |
1615 | - [AC_LANG_PROGRAM( |
1616 | - [[#include <CoreFoundation/CFLocale.h>]], |
1617 | - [[CFLocaleCopyCurrent();]])], |
1618 | - [gt_cv_func_CFLocaleCopyCurrent=yes], |
1619 | - [gt_cv_func_CFLocaleCopyCurrent=no]) |
1620 | - LIBS="$gt_save_LIBS"]) |
1621 | - if test $gt_cv_func_CFLocaleCopyCurrent = yes; then |
1622 | - AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], |
1623 | - [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) |
1624 | - fi |
1625 | - INTL_MACOSX_LIBS= |
1626 | - if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then |
1627 | - INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" |
1628 | - fi |
1629 | - AC_SUBST([INTL_MACOSX_LIBS]) |
1630 | -]) |
1631 | - |
1632 | # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- |
1633 | # serial 11 (pkg-config-0.29.1) |
1634 | |
1635 | @@ -626,7 +566,7 @@ AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], |
1636 | [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) |
1637 | ])dnl PKG_HAVE_DEFINE_WITH_MODULES |
1638 | |
1639 | -# Copyright (C) 2002-2018 Free Software Foundation, Inc. |
1640 | +# Copyright (C) 2002-2020 Free Software Foundation, Inc. |
1641 | # |
1642 | # This file is free software; the Free Software Foundation |
1643 | # gives unlimited permission to copy and/or distribute it, |
1644 | @@ -641,7 +581,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], |
1645 | [am__api_version='1.16' |
1646 | dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to |
1647 | dnl require some minimum version. Point them to the right macro. |
1648 | -m4_if([$1], [1.16.1], [], |
1649 | +m4_if([$1], [1.16.2], [], |
1650 | [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl |
1651 | ]) |
1652 | |
1653 | @@ -657,14 +597,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) |
1654 | # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. |
1655 | # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. |
1656 | AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], |
1657 | -[AM_AUTOMAKE_VERSION([1.16.1])dnl |
1658 | +[AM_AUTOMAKE_VERSION([1.16.2])dnl |
1659 | m4_ifndef([AC_AUTOCONF_VERSION], |
1660 | [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl |
1661 | _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) |
1662 | |
1663 | # AM_AUX_DIR_EXPAND -*- Autoconf -*- |
1664 | |
1665 | -# Copyright (C) 2001-2018 Free Software Foundation, Inc. |
1666 | +# Copyright (C) 2001-2020 Free Software Foundation, Inc. |
1667 | # |
1668 | # This file is free software; the Free Software Foundation |
1669 | # gives unlimited permission to copy and/or distribute it, |
1670 | @@ -716,7 +656,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` |
1671 | |
1672 | # AM_CONDITIONAL -*- Autoconf -*- |
1673 | |
1674 | -# Copyright (C) 1997-2018 Free Software Foundation, Inc. |
1675 | +# Copyright (C) 1997-2020 Free Software Foundation, Inc. |
1676 | # |
1677 | # This file is free software; the Free Software Foundation |
1678 | # gives unlimited permission to copy and/or distribute it, |
1679 | @@ -747,7 +687,7 @@ AC_CONFIG_COMMANDS_PRE( |
1680 | Usually this means the macro was only invoked conditionally.]]) |
1681 | fi])]) |
1682 | |
1683 | -# Copyright (C) 1999-2018 Free Software Foundation, Inc. |
1684 | +# Copyright (C) 1999-2020 Free Software Foundation, Inc. |
1685 | # |
1686 | # This file is free software; the Free Software Foundation |
1687 | # gives unlimited permission to copy and/or distribute it, |
1688 | @@ -938,7 +878,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl |
1689 | |
1690 | # Generate code to set up dependency tracking. -*- Autoconf -*- |
1691 | |
1692 | -# Copyright (C) 1999-2018 Free Software Foundation, Inc. |
1693 | +# Copyright (C) 1999-2020 Free Software Foundation, Inc. |
1694 | # |
1695 | # This file is free software; the Free Software Foundation |
1696 | # gives unlimited permission to copy and/or distribute it, |
1697 | @@ -977,7 +917,9 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], |
1698 | done |
1699 | if test $am_rc -ne 0; then |
1700 | AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments |
1701 | - for automatic dependency tracking. Try re-running configure with the |
1702 | + for automatic dependency tracking. If GNU make was not used, consider |
1703 | + re-running the configure script with MAKE="gmake" (or whatever is |
1704 | + necessary). You can also try re-running configure with the |
1705 | '--disable-dependency-tracking' option to at least be able to build |
1706 | the package (albeit without support for automatic dependency tracking).]) |
1707 | fi |
1708 | @@ -1004,7 +946,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], |
1709 | |
1710 | # Do all the work for Automake. -*- Autoconf -*- |
1711 | |
1712 | -# Copyright (C) 1996-2018 Free Software Foundation, Inc. |
1713 | +# Copyright (C) 1996-2020 Free Software Foundation, Inc. |
1714 | # |
1715 | # This file is free software; the Free Software Foundation |
1716 | # gives unlimited permission to copy and/or distribute it, |
1717 | @@ -1201,7 +1143,7 @@ for _am_header in $config_headers :; do |
1718 | done |
1719 | echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) |
1720 | |
1721 | -# Copyright (C) 2001-2018 Free Software Foundation, Inc. |
1722 | +# Copyright (C) 2001-2020 Free Software Foundation, Inc. |
1723 | # |
1724 | # This file is free software; the Free Software Foundation |
1725 | # gives unlimited permission to copy and/or distribute it, |
1726 | @@ -1222,7 +1164,7 @@ if test x"${install_sh+set}" != xset; then |
1727 | fi |
1728 | AC_SUBST([install_sh])]) |
1729 | |
1730 | -# Copyright (C) 2003-2018 Free Software Foundation, Inc. |
1731 | +# Copyright (C) 2003-2020 Free Software Foundation, Inc. |
1732 | # |
1733 | # This file is free software; the Free Software Foundation |
1734 | # gives unlimited permission to copy and/or distribute it, |
1735 | @@ -1244,7 +1186,7 @@ AC_SUBST([am__leading_dot])]) |
1736 | # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- |
1737 | # From Jim Meyering |
1738 | |
1739 | -# Copyright (C) 1996-2018 Free Software Foundation, Inc. |
1740 | +# Copyright (C) 1996-2020 Free Software Foundation, Inc. |
1741 | # |
1742 | # This file is free software; the Free Software Foundation |
1743 | # gives unlimited permission to copy and/or distribute it, |
1744 | @@ -1279,7 +1221,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) |
1745 | |
1746 | # Check to see how 'make' treats includes. -*- Autoconf -*- |
1747 | |
1748 | -# Copyright (C) 2001-2018 Free Software Foundation, Inc. |
1749 | +# Copyright (C) 2001-2020 Free Software Foundation, Inc. |
1750 | # |
1751 | # This file is free software; the Free Software Foundation |
1752 | # gives unlimited permission to copy and/or distribute it, |
1753 | @@ -1322,7 +1264,7 @@ AC_SUBST([am__quote])]) |
1754 | |
1755 | # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- |
1756 | |
1757 | -# Copyright (C) 1997-2018 Free Software Foundation, Inc. |
1758 | +# Copyright (C) 1997-2020 Free Software Foundation, Inc. |
1759 | # |
1760 | # This file is free software; the Free Software Foundation |
1761 | # gives unlimited permission to copy and/or distribute it, |
1762 | @@ -1361,7 +1303,7 @@ fi |
1763 | |
1764 | # Helper functions for option handling. -*- Autoconf -*- |
1765 | |
1766 | -# Copyright (C) 2001-2018 Free Software Foundation, Inc. |
1767 | +# Copyright (C) 2001-2020 Free Software Foundation, Inc. |
1768 | # |
1769 | # This file is free software; the Free Software Foundation |
1770 | # gives unlimited permission to copy and/or distribute it, |
1771 | @@ -1390,7 +1332,7 @@ AC_DEFUN([_AM_SET_OPTIONS], |
1772 | AC_DEFUN([_AM_IF_OPTION], |
1773 | [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) |
1774 | |
1775 | -# Copyright (C) 1999-2018 Free Software Foundation, Inc. |
1776 | +# Copyright (C) 1999-2020 Free Software Foundation, Inc. |
1777 | # |
1778 | # This file is free software; the Free Software Foundation |
1779 | # gives unlimited permission to copy and/or distribute it, |
1780 | @@ -1437,7 +1379,7 @@ AC_LANG_POP([C])]) |
1781 | # For backward compatibility. |
1782 | AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) |
1783 | |
1784 | -# Copyright (C) 2001-2018 Free Software Foundation, Inc. |
1785 | +# Copyright (C) 2001-2020 Free Software Foundation, Inc. |
1786 | # |
1787 | # This file is free software; the Free Software Foundation |
1788 | # gives unlimited permission to copy and/or distribute it, |
1789 | @@ -1456,7 +1398,7 @@ AC_DEFUN([AM_RUN_LOG], |
1790 | |
1791 | # Check to make sure that the build environment is sane. -*- Autoconf -*- |
1792 | |
1793 | -# Copyright (C) 1996-2018 Free Software Foundation, Inc. |
1794 | +# Copyright (C) 1996-2020 Free Software Foundation, Inc. |
1795 | # |
1796 | # This file is free software; the Free Software Foundation |
1797 | # gives unlimited permission to copy and/or distribute it, |
1798 | @@ -1537,7 +1479,7 @@ AC_CONFIG_COMMANDS_PRE( |
1799 | rm -f conftest.file |
1800 | ]) |
1801 | |
1802 | -# Copyright (C) 2009-2018 Free Software Foundation, Inc. |
1803 | +# Copyright (C) 2009-2020 Free Software Foundation, Inc. |
1804 | # |
1805 | # This file is free software; the Free Software Foundation |
1806 | # gives unlimited permission to copy and/or distribute it, |
1807 | @@ -1597,7 +1539,7 @@ AC_SUBST([AM_BACKSLASH])dnl |
1808 | _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl |
1809 | ]) |
1810 | |
1811 | -# Copyright (C) 2001-2018 Free Software Foundation, Inc. |
1812 | +# Copyright (C) 2001-2020 Free Software Foundation, Inc. |
1813 | # |
1814 | # This file is free software; the Free Software Foundation |
1815 | # gives unlimited permission to copy and/or distribute it, |
1816 | @@ -1625,7 +1567,7 @@ fi |
1817 | INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" |
1818 | AC_SUBST([INSTALL_STRIP_PROGRAM])]) |
1819 | |
1820 | -# Copyright (C) 2006-2018 Free Software Foundation, Inc. |
1821 | +# Copyright (C) 2006-2020 Free Software Foundation, Inc. |
1822 | # |
1823 | # This file is free software; the Free Software Foundation |
1824 | # gives unlimited permission to copy and/or distribute it, |
1825 | @@ -1644,7 +1586,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) |
1826 | |
1827 | # Check how to create a tarball. -*- Autoconf -*- |
1828 | |
1829 | -# Copyright (C) 2004-2018 Free Software Foundation, Inc. |
1830 | +# Copyright (C) 2004-2020 Free Software Foundation, Inc. |
1831 | # |
1832 | # This file is free software; the Free Software Foundation |
1833 | # gives unlimited permission to copy and/or distribute it, |
1834 | @@ -1776,7 +1718,9 @@ AC_SUBST([am__untar]) |
1835 | ]) # _AM_PROG_TAR |
1836 | |
1837 | m4_include([m4/gettext.m4]) |
1838 | +m4_include([m4/host-cpu-c-abi.m4]) |
1839 | m4_include([m4/iconv.m4]) |
1840 | +m4_include([m4/intlmacosx.m4]) |
1841 | m4_include([m4/lib-ld.m4]) |
1842 | m4_include([m4/lib-link.m4]) |
1843 | m4_include([m4/lib-prefix.m4]) |
1844 | diff --git a/alsa-info/Makefile.in b/alsa-info/Makefile.in |
1845 | index 19a7b7a..8a21da4 100644 |
1846 | --- a/alsa-info/Makefile.in |
1847 | +++ b/alsa-info/Makefile.in |
1848 | @@ -1,7 +1,7 @@ |
1849 | -# Makefile.in generated by automake 1.16.1 from Makefile.am. |
1850 | +# Makefile.in generated by automake 1.16.2 from Makefile.am. |
1851 | # @configure_input@ |
1852 | |
1853 | -# Copyright (C) 1994-2018 Free Software Foundation, Inc. |
1854 | +# Copyright (C) 1994-2020 Free Software Foundation, Inc. |
1855 | |
1856 | # This Makefile.in is free software; the Free Software Foundation |
1857 | # gives unlimited permission to copy and/or distribute it, |
1858 | @@ -91,7 +91,8 @@ host_triplet = @host@ |
1859 | subdir = alsa-info |
1860 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
1861 | am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ |
1862 | - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
1863 | + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ |
1864 | + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
1865 | $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ |
1866 | $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ |
1867 | $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ |
1868 | @@ -215,8 +216,8 @@ MAINT = @MAINT@ |
1869 | MAKEINFO = @MAKEINFO@ |
1870 | MKDIR_P = @MKDIR_P@ |
1871 | MSGFMT = @MSGFMT@ |
1872 | -MSGFMT_015 = @MSGFMT_015@ |
1873 | MSGMERGE = @MSGMERGE@ |
1874 | +MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ |
1875 | NCURSESW_CFLAGS = @NCURSESW_CFLAGS@ |
1876 | NCURSESW_LIBS = @NCURSESW_LIBS@ |
1877 | NCURSES_CFLAGS = @NCURSES_CFLAGS@ |
1878 | @@ -296,6 +297,7 @@ prefix = @prefix@ |
1879 | program_transform_name = @program_transform_name@ |
1880 | psdir = @psdir@ |
1881 | rst2man_available = @rst2man_available@ |
1882 | +runstatedir = @runstatedir@ |
1883 | sbindir = @sbindir@ |
1884 | sharedstatedir = @sharedstatedir@ |
1885 | srcdir = @srcdir@ |
1886 | diff --git a/alsa-info/alsa-info.sh b/alsa-info/alsa-info.sh |
1887 | index f179bfa..01a910a 100755 |
1888 | --- a/alsa-info/alsa-info.sh |
1889 | +++ b/alsa-info/alsa-info.sh |
1890 | @@ -1,7 +1,7 @@ |
1891 | #!/bin/bash |
1892 | |
1893 | -SCRIPT_VERSION=0.4.65 |
1894 | -CHANGELOG="http://www.alsa-project.org/alsa-info.sh.changelog" |
1895 | +SCRIPT_VERSION=0.5.0 |
1896 | +CHANGELOG="https://www.alsa-project.org/alsa-info.sh.changelog" |
1897 | |
1898 | ################################################################################# |
1899 | #Copyright (C) 2007 Free Software Foundation. |
1900 | @@ -45,7 +45,7 @@ update() { |
1901 | test -z "$WGET" -o ! -x "$WGET" && return |
1902 | |
1903 | SHFILE=$(mktemp -t alsa-info.XXXXXXXXXX) || exit 1 |
1904 | - wget -O $SHFILE "http://www.alsa-project.org/alsa-info.sh" >/dev/null 2>&1 |
1905 | + wget -O $SHFILE "https://www.alsa-project.org/alsa-info.sh" >/dev/null 2>&1 |
1906 | REMOTE_VERSION=$(grep SCRIPT_VERSION $SHFILE | head -n1 | sed 's/.*=//') |
1907 | if [ -s "$SHFILE" -a "$REMOTE_VERSION" != "$SCRIPT_VERSION" ]; then |
1908 | if [[ -n $DIALOG ]] |
1909 | @@ -233,7 +233,7 @@ withdmesg() { |
1910 | echo "!!ALSA/HDA dmesg" >> $FILE |
1911 | echo "!!--------------" >> $FILE |
1912 | echo "" >> $FILE |
1913 | - dmesg | grep -C1 -E 'ALSA|HDA|HDMI|snd[_-]|sound|hda.codec|hda.intel' >> $FILE |
1914 | + dmesg | grep -C1 -E 'ALSA|HDA|HDMI|snd[_-]|sound|audio|hda.codec|hda.intel' >> $FILE |
1915 | echo "" >> $FILE |
1916 | echo "" >> $FILE |
1917 | } |
1918 | @@ -425,9 +425,11 @@ get_alsa_library_version |
1919 | ALSA_UTILS_VERSION=$(amixer -v | awk '{ print $3 }') |
1920 | |
1921 | ESDINST=$(command -v esd) |
1922 | +PWINST=$(command -v pipewire) |
1923 | PAINST=$(command -v pulseaudio) |
1924 | ARTSINST=$(command -v artsd) |
1925 | JACKINST=$(command -v jackd) |
1926 | +JACK2INST=$(command -v jackdbus) |
1927 | ROARINST=$(command -v roard) |
1928 | DMIDECODE=$(command -v dmidecode) |
1929 | |
1930 | @@ -461,7 +463,7 @@ if [ -d /sys/bus/acpi/devices ]; then |
1931 | done |
1932 | fi |
1933 | |
1934 | -cat /proc/asound/modules 2>/dev/null | awk '{ print $2 }' > $TEMPDIR/alsamodules.tmp |
1935 | +awk '{ print $2 " (card " $1 ")" }' < /proc/asound/modules > $TEMPDIR/alsamodules.tmp 2> /dev/null |
1936 | cat /proc/asound/cards > $TEMPDIR/alsacards.tmp |
1937 | if [[ ! -z "$LSPCI" ]]; then |
1938 | for class in 0401 0402 0403; do |
1939 | @@ -476,6 +478,18 @@ cat /proc/asound/card*/codec\#* > $TEMPDIR/alsa-hda-intel.tmp 2> /dev/null |
1940 | cat /proc/asound/card*/codec97\#0/ac97\#0-0 > $TEMPDIR/alsa-ac97.tmp 2> /dev/null |
1941 | cat /proc/asound/card*/codec97\#0/ac97\#0-0+regs > $TEMPDIR/alsa-ac97-regs.tmp 2> /dev/null |
1942 | |
1943 | +#Check for USB descriptors |
1944 | +if [ -x /usr/bin/lsusb ]; then |
1945 | + for f in /proc/asound/card[0-9]*/usbbus; do |
1946 | + test -f "$f" || continue |
1947 | + id=$(sed 's@/@:@' $f) |
1948 | + lsusb -v -s $id >> $TEMPDIR/lsusb.tmp 2> /dev/null |
1949 | + done |
1950 | +fi |
1951 | + |
1952 | +#Check for USB stream setup |
1953 | +cat /proc/asound/card*/stream[0-9]* > $TEMPDIR/alsa-usbstream.tmp 2> /dev/null |
1954 | + |
1955 | #Check for USB mixer setup |
1956 | cat /proc/asound/card*/usbmixer > $TEMPDIR/alsa-usbmixer.tmp 2> /dev/null |
1957 | |
1958 | @@ -543,6 +557,13 @@ echo "" >> $FILE |
1959 | echo "!!Sound Servers on this system" >> $FILE |
1960 | echo "!!----------------------------" >> $FILE |
1961 | echo "" >> $FILE |
1962 | +if [[ -n $PWINST ]];then |
1963 | +[[ $(pgrep '^(.*/)?pipewire$') ]] && PWRUNNING="Yes" || PWRUNNING="No" |
1964 | +echo "PipeWire:" >> $FILE |
1965 | +echo " Installed - Yes ($PWINST)" >> $FILE |
1966 | +echo " Running - $PWRUNNING" >> $FILE |
1967 | +echo "" >> $FILE |
1968 | +fi |
1969 | if [[ -n $PAINST ]];then |
1970 | [[ $(pgrep '^(.*/)?pulseaudio$') ]] && PARUNNING="Yes" || PARUNNING="No" |
1971 | echo "Pulseaudio:" >> $FILE |
1972 | @@ -571,6 +592,13 @@ echo " Installed - Yes ($JACKINST)" >> $FILE |
1973 | echo " Running - $JACKRUNNING" >> $FILE |
1974 | echo "" >> $FILE |
1975 | fi |
1976 | +if [[ -n $JACK2INST ]];then |
1977 | +[[ $(pgrep '^(.*/)?jackdbus$') ]] && JACK2RUNNING="Yes" || JACK2RUNNING="No" |
1978 | +echo "Jack2:" >> $FILE |
1979 | +echo " Installed - Yes ($JACK2INST)" >> $FILE |
1980 | +echo " Running - $JACK2RUNNING" >> $FILE |
1981 | +echo "" >> $FILE |
1982 | +fi |
1983 | if [[ -n $ROARINST ]];then |
1984 | [[ $(pgrep '^(.*/)?roard$') ]] && ROARRUNNING="Yes" || ROARRUNNING="No" |
1985 | echo "RoarAudio:" >> $FILE |
1986 | @@ -599,8 +627,7 @@ echo "" >> $FILE |
1987 | echo "" >> $FILE |
1988 | fi |
1989 | |
1990 | -if [ "$SNDOPTIONS" ] |
1991 | -then |
1992 | +if [ "$SNDOPTIONS" ]; then |
1993 | echo "!!Modprobe options (Sound related)" >> $FILE |
1994 | echo "!!--------------------------------" >> $FILE |
1995 | echo "" >> $FILE |
1996 | @@ -623,6 +650,18 @@ if [ -d "$SYSFS" ]; then |
1997 | echo "" >> $FILE |
1998 | done |
1999 | echo "" >> $FILE |
2000 | + echo "!!Sysfs card info" >> $FILE |
2001 | + echo "!!---------------" >> $FILE |
2002 | + echo "" >> $FILE |
2003 | + for cdir in $(echo $SYSFS/class/sound/card*); do |
2004 | + echo "!!Card: $cdir" >> $FILE |
2005 | + driver=$(readlink -f "$cdir/device/driver") |
2006 | + echo "Driver: $driver" >> $FILE |
2007 | + echo "Tree:" >> $FILE |
2008 | + tree --noreport $cdir -L 2 | sed -e 's/^/\t/g' >> $FILE |
2009 | + echo "" >> $FILE |
2010 | + done |
2011 | + echo "" >> $FILE |
2012 | fi |
2013 | |
2014 | if [ -s "$TEMPDIR/alsa-hda-intel.tmp" ]; then |
2015 | @@ -649,6 +688,27 @@ if [ -s "$TEMPDIR/alsa-ac97.tmp" ]; then |
2016 | echo "" >> $FILE |
2017 | fi |
2018 | |
2019 | +if [ -s "$TEMPDIR/lsusb.tmp" ]; then |
2020 | + echo "!!USB Descriptors" >> $FILE |
2021 | + echo "!!---------------" >> $FILE |
2022 | + echo "--startcollapse--" >> $FILE |
2023 | + cat $TEMPDIR/lsusb.tmp >> $FILE |
2024 | + echo "--endcollapse--" >> $FILE |
2025 | + echo "" >> $FILE |
2026 | + echo "" >> $FILE |
2027 | +fi |
2028 | + |
2029 | +if [ -s "$TEMPDIR/lsusb.tmp" ]; then |
2030 | + echo "!!USB Stream information" >> $FILE |
2031 | + echo "!!----------------------" >> $FILE |
2032 | + echo "--startcollapse--" >> $FILE |
2033 | + echo "" >> $FILE |
2034 | + cat $TEMPDIR/alsa-usbstream.tmp >> $FILE |
2035 | + echo "--endcollapse--" >> $FILE |
2036 | + echo "" >> $FILE |
2037 | + echo "" >> $FILE |
2038 | +fi |
2039 | + |
2040 | if [ -s "$TEMPDIR/alsa-usbmixer.tmp" ]; then |
2041 | echo "!!USB Mixer information" >> $FILE |
2042 | echo "!!---------------------" >> $FILE |
2043 | @@ -763,7 +823,7 @@ if [ -n "$1" ]; then |
2044 | echo " --update (check server for script updates)" |
2045 | echo " --upload (upload contents to remote server)" |
2046 | echo " --no-upload (do not upload contents to remote server)" |
2047 | - echo " --pastebin (use http://pastebin.ca) as remote server" |
2048 | + echo " --pastebin (use https://pastebin.ca) as remote server" |
2049 | echo " instead www.alsa-project.org" |
2050 | echo " --stdout (print alsa information to standard output" |
2051 | echo " instead of a file)" |
2052 | @@ -792,28 +852,28 @@ if ! wget --help 2>/dev/null | grep -q post-file; then |
2053 | : |
2054 | elif [ -n "$DIALOG" ]; then |
2055 | if [ -z "$PASTEBIN" ]; then |
2056 | - dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://www.alsa-project.org.\nPossible reasons are:\n\n 1. Couldn't find 'wget' in your PATH\n 2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to http://www.alsa-project.org/cardinfo-db/ and submit your post." 25 100 |
2057 | + dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to https://www.alsa-project.org.\nPossible reasons are:\n\n 1. Couldn't find 'wget' in your PATH\n 2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to https://www.alsa-project.org/cardinfo-db/ and submit your post." 25 100 |
2058 | else |
2059 | - dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://www.pastebin.ca.\nPossible reasons are:\n\n 1. Couldn't find 'wget' in your PATH\n 2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to http://www.pastebin.ca/upload.php and submit your post." 25 100 |
2060 | + dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to https://www.pastebin.ca.\nPossible reasons are:\n\n 1. Couldn't find 'wget' in your PATH\n 2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to https://www.pastebin.ca/upload.php and submit your post." 25 100 |
2061 | fi |
2062 | else |
2063 | if [ -z "$PASTEBIN" ]; then |
2064 | echo "" |
2065 | - echo "Could not automatically upload output to http://www.alsa-project.org" |
2066 | + echo "Could not automatically upload output to https://www.alsa-project.org" |
2067 | echo "Possible reasons are:" |
2068 | echo " 1. Couldn't find 'wget' in your PATH" |
2069 | echo " 2. Your version of wget is less than 1.8.2" |
2070 | echo "" |
2071 | - echo "Please manually upload $NFILE to http://www.alsa-project.org/cardinfo-db/ and submit your post." |
2072 | + echo "Please manually upload $NFILE to https://www.alsa-project.org/cardinfo-db/ and submit your post." |
2073 | echo "" |
2074 | else |
2075 | echo "" |
2076 | - echo "Could not automatically upload output to http://www.pastebin.ca" |
2077 | + echo "Could not automatically upload output to https://www.pastebin.ca" |
2078 | echo "Possible reasons are:" |
2079 | echo " 1. Couldn't find 'wget' in your PATH" |
2080 | echo " 2. Your version of wget is less than 1.8.2" |
2081 | echo "" |
2082 | - echo "Please manually upload $NFILE to http://www.pastebin.ca/upload.php and submit your post." |
2083 | + echo "Please manually upload $NFILE to https://www.pastebin.ca/upload.php and submit your post." |
2084 | echo "" |
2085 | fi |
2086 | fi |
2087 | @@ -867,9 +927,9 @@ else |
2088 | fi |
2089 | |
2090 | if [[ -z $PASTEBIN ]]; then |
2091 | - wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://www.alsa-project.org/cardinfo-db/" &>$TEMPDIR/wget.tmp |
2092 | + wget -O - --tries=5 --timeout=60 --post-file=$FILE "https://www.alsa-project.org/cardinfo-db/" &>$TEMPDIR/wget.tmp |
2093 | else |
2094 | - wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY&encrypt=t&encryptpw=blahblah" &>$TEMPDIR/wget.tmp |
2095 | + wget -O - --tries=5 --timeout=60 --post-file=$FILE "https://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY&encrypt=t&encryptpw=blahblah" &>$TEMPDIR/wget.tmp |
2096 | fi |
2097 | |
2098 | if [ $? -ne 0 ]; then |
2099 | @@ -912,7 +972,7 @@ fi # dialog |
2100 | if [ -z "$PASTEBIN" ]; then |
2101 | FINAL_URL=$(grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2) |
2102 | else |
2103 | - FINAL_URL=$(grep "SUCCESS:" $TEMPDIR/wget.tmp | sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p') |
2104 | + FINAL_URL=$(grep "SUCCESS:" $TEMPDIR/wget.tmp | sed -n 's/.*\:\([0-9]\+\).*/https:\/\/pastebin.ca\/\1/p') |
2105 | fi |
2106 | |
2107 | # See if tput is available, and use it if it is. |
2108 | diff --git a/alsaconf/Makefile.in b/alsaconf/Makefile.in |
2109 | index 0dd3b85..0508bef 100644 |
2110 | --- a/alsaconf/Makefile.in |
2111 | +++ b/alsaconf/Makefile.in |
2112 | @@ -1,7 +1,7 @@ |
2113 | -# Makefile.in generated by automake 1.16.1 from Makefile.am. |
2114 | +# Makefile.in generated by automake 1.16.2 from Makefile.am. |
2115 | # @configure_input@ |
2116 | |
2117 | -# Copyright (C) 1994-2018 Free Software Foundation, Inc. |
2118 | +# Copyright (C) 1994-2020 Free Software Foundation, Inc. |
2119 | |
2120 | # This Makefile.in is free software; the Free Software Foundation |
2121 | # gives unlimited permission to copy and/or distribute it, |
2122 | @@ -91,7 +91,8 @@ host_triplet = @host@ |
2123 | subdir = alsaconf |
2124 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
2125 | am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ |
2126 | - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
2127 | + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ |
2128 | + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
2129 | $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ |
2130 | $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ |
2131 | $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ |
2132 | @@ -275,8 +276,8 @@ MAINT = @MAINT@ |
2133 | MAKEINFO = @MAKEINFO@ |
2134 | MKDIR_P = @MKDIR_P@ |
2135 | MSGFMT = @MSGFMT@ |
2136 | -MSGFMT_015 = @MSGFMT_015@ |
2137 | MSGMERGE = @MSGMERGE@ |
2138 | +MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ |
2139 | NCURSESW_CFLAGS = @NCURSESW_CFLAGS@ |
2140 | NCURSESW_LIBS = @NCURSESW_LIBS@ |
2141 | NCURSES_CFLAGS = @NCURSES_CFLAGS@ |
2142 | @@ -356,6 +357,7 @@ prefix = @prefix@ |
2143 | program_transform_name = @program_transform_name@ |
2144 | psdir = @psdir@ |
2145 | rst2man_available = @rst2man_available@ |
2146 | +runstatedir = @runstatedir@ |
2147 | sbindir = @sbindir@ |
2148 | sharedstatedir = @sharedstatedir@ |
2149 | srcdir = @srcdir@ |
2150 | diff --git a/alsactl/Makefile.am b/alsactl/Makefile.am |
2151 | index c1031ac..deff2cd 100644 |
2152 | --- a/alsactl/Makefile.am |
2153 | +++ b/alsactl/Makefile.am |
2154 | @@ -10,7 +10,7 @@ EXTRA_DIST=alsactl.1 alsactl_init.xml |
2155 | AM_CFLAGS = -D_GNU_SOURCE |
2156 | |
2157 | alsactl_SOURCES=alsactl.c state.c lock.c utils.c init_parse.c init_ucm.c \ |
2158 | - daemon.c monitor.c |
2159 | + daemon.c monitor.c clean.c |
2160 | |
2161 | alsactl_CFLAGS=$(AM_CFLAGS) -D__USE_GNU \ |
2162 | -DSYS_ASOUNDRC=\"$(ASOUND_STATE_DIR)/asound.state\" \ |
2163 | diff --git a/alsactl/Makefile.in b/alsactl/Makefile.in |
2164 | index de97ef1..87211d8 100644 |
2165 | --- a/alsactl/Makefile.in |
2166 | +++ b/alsactl/Makefile.in |
2167 | @@ -1,7 +1,7 @@ |
2168 | -# Makefile.in generated by automake 1.16.1 from Makefile.am. |
2169 | +# Makefile.in generated by automake 1.16.2 from Makefile.am. |
2170 | # @configure_input@ |
2171 | |
2172 | -# Copyright (C) 1994-2018 Free Software Foundation, Inc. |
2173 | +# Copyright (C) 1994-2020 Free Software Foundation, Inc. |
2174 | |
2175 | # This Makefile.in is free software; the Free Software Foundation |
2176 | # gives unlimited permission to copy and/or distribute it, |
2177 | @@ -95,7 +95,8 @@ sbin_PROGRAMS = alsactl$(EXEEXT) |
2178 | subdir = alsactl |
2179 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
2180 | am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ |
2181 | - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
2182 | + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ |
2183 | + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
2184 | $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ |
2185 | $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ |
2186 | $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ |
2187 | @@ -115,7 +116,8 @@ PROGRAMS = $(sbin_PROGRAMS) |
2188 | am_alsactl_OBJECTS = alsactl-alsactl.$(OBJEXT) alsactl-state.$(OBJEXT) \ |
2189 | alsactl-lock.$(OBJEXT) alsactl-utils.$(OBJEXT) \ |
2190 | alsactl-init_parse.$(OBJEXT) alsactl-init_ucm.$(OBJEXT) \ |
2191 | - alsactl-daemon.$(OBJEXT) alsactl-monitor.$(OBJEXT) |
2192 | + alsactl-daemon.$(OBJEXT) alsactl-monitor.$(OBJEXT) \ |
2193 | + alsactl-clean.$(OBJEXT) |
2194 | alsactl_OBJECTS = $(am_alsactl_OBJECTS) |
2195 | alsactl_LDADD = $(LDADD) |
2196 | alsactl_LINK = $(CCLD) $(alsactl_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ |
2197 | @@ -136,7 +138,7 @@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include |
2198 | depcomp = $(SHELL) $(top_srcdir)/depcomp |
2199 | am__maybe_remake_depfiles = depfiles |
2200 | am__depfiles_remade = ./$(DEPDIR)/alsactl-alsactl.Po \ |
2201 | - ./$(DEPDIR)/alsactl-daemon.Po \ |
2202 | + ./$(DEPDIR)/alsactl-clean.Po ./$(DEPDIR)/alsactl-daemon.Po \ |
2203 | ./$(DEPDIR)/alsactl-init_parse.Po \ |
2204 | ./$(DEPDIR)/alsactl-init_ucm.Po ./$(DEPDIR)/alsactl-lock.Po \ |
2205 | ./$(DEPDIR)/alsactl-monitor.Po ./$(DEPDIR)/alsactl-state.Po \ |
2206 | @@ -319,8 +321,8 @@ MAINT = @MAINT@ |
2207 | MAKEINFO = @MAKEINFO@ |
2208 | MKDIR_P = @MKDIR_P@ |
2209 | MSGFMT = @MSGFMT@ |
2210 | -MSGFMT_015 = @MSGFMT_015@ |
2211 | MSGMERGE = @MSGMERGE@ |
2212 | +MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ |
2213 | NCURSESW_CFLAGS = @NCURSESW_CFLAGS@ |
2214 | NCURSESW_LIBS = @NCURSESW_LIBS@ |
2215 | NCURSES_CFLAGS = @NCURSES_CFLAGS@ |
2216 | @@ -400,6 +402,7 @@ prefix = @prefix@ |
2217 | program_transform_name = @program_transform_name@ |
2218 | psdir = @psdir@ |
2219 | rst2man_available = @rst2man_available@ |
2220 | +runstatedir = @runstatedir@ |
2221 | sbindir = @sbindir@ |
2222 | sharedstatedir = @sharedstatedir@ |
2223 | srcdir = @srcdir@ |
2224 | @@ -417,7 +420,7 @@ EXTRA_DIST = alsactl.1 alsactl_init.xml alsa-state.service.in \ |
2225 | alsa-restore.service.in 90-alsa-restore.rules.in |
2226 | AM_CFLAGS = -D_GNU_SOURCE |
2227 | alsactl_SOURCES = alsactl.c state.c lock.c utils.c init_parse.c init_ucm.c \ |
2228 | - daemon.c monitor.c |
2229 | + daemon.c monitor.c clean.c |
2230 | |
2231 | alsactl_CFLAGS = $(AM_CFLAGS) -D__USE_GNU \ |
2232 | -DSYS_ASOUNDRC=\"$(ASOUND_STATE_DIR)/asound.state\" \ |
2233 | @@ -533,6 +536,7 @@ distclean-compile: |
2234 | -rm -f *.tab.c |
2235 | |
2236 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsactl-alsactl.Po@am__quote@ # am--include-marker |
2237 | +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsactl-clean.Po@am__quote@ # am--include-marker |
2238 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsactl-daemon.Po@am__quote@ # am--include-marker |
2239 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsactl-init_parse.Po@am__quote@ # am--include-marker |
2240 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsactl-init_ucm.Po@am__quote@ # am--include-marker |
2241 | @@ -672,6 +676,20 @@ alsactl-monitor.obj: monitor.c |
2242 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='monitor.c' object='alsactl-monitor.obj' libtool=no @AMDEPBACKSLASH@ |
2243 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
2244 | @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(alsactl_CFLAGS) $(CFLAGS) -c -o alsactl-monitor.obj `if test -f 'monitor.c'; then $(CYGPATH_W) 'monitor.c'; else $(CYGPATH_W) '$(srcdir)/monitor.c'; fi` |
2245 | + |
2246 | +alsactl-clean.o: clean.c |
2247 | +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(alsactl_CFLAGS) $(CFLAGS) -MT alsactl-clean.o -MD -MP -MF $(DEPDIR)/alsactl-clean.Tpo -c -o alsactl-clean.o `test -f 'clean.c' || echo '$(srcdir)/'`clean.c |
2248 | +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/alsactl-clean.Tpo $(DEPDIR)/alsactl-clean.Po |
2249 | +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clean.c' object='alsactl-clean.o' libtool=no @AMDEPBACKSLASH@ |
2250 | +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
2251 | +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(alsactl_CFLAGS) $(CFLAGS) -c -o alsactl-clean.o `test -f 'clean.c' || echo '$(srcdir)/'`clean.c |
2252 | + |
2253 | +alsactl-clean.obj: clean.c |
2254 | +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(alsactl_CFLAGS) $(CFLAGS) -MT alsactl-clean.obj -MD -MP -MF $(DEPDIR)/alsactl-clean.Tpo -c -o alsactl-clean.obj `if test -f 'clean.c'; then $(CYGPATH_W) 'clean.c'; else $(CYGPATH_W) '$(srcdir)/clean.c'; fi` |
2255 | +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/alsactl-clean.Tpo $(DEPDIR)/alsactl-clean.Po |
2256 | +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clean.c' object='alsactl-clean.obj' libtool=no @AMDEPBACKSLASH@ |
2257 | +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
2258 | +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(alsactl_CFLAGS) $(CFLAGS) -c -o alsactl-clean.obj `if test -f 'clean.c'; then $(CYGPATH_W) 'clean.c'; else $(CYGPATH_W) '$(srcdir)/clean.c'; fi` |
2259 | install-man1: $(man_MANS) |
2260 | @$(NORMAL_INSTALL) |
2261 | @list1=''; \ |
2262 | @@ -1004,6 +1022,7 @@ clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am |
2263 | |
2264 | distclean: distclean-recursive |
2265 | -rm -f ./$(DEPDIR)/alsactl-alsactl.Po |
2266 | + -rm -f ./$(DEPDIR)/alsactl-clean.Po |
2267 | -rm -f ./$(DEPDIR)/alsactl-daemon.Po |
2268 | -rm -f ./$(DEPDIR)/alsactl-init_parse.Po |
2269 | -rm -f ./$(DEPDIR)/alsactl-init_ucm.Po |
2270 | @@ -1059,6 +1078,7 @@ installcheck-am: |
2271 | |
2272 | maintainer-clean: maintainer-clean-recursive |
2273 | -rm -f ./$(DEPDIR)/alsactl-alsactl.Po |
2274 | + -rm -f ./$(DEPDIR)/alsactl-clean.Po |
2275 | -rm -f ./$(DEPDIR)/alsactl-daemon.Po |
2276 | -rm -f ./$(DEPDIR)/alsactl-init_parse.Po |
2277 | -rm -f ./$(DEPDIR)/alsactl-init_ucm.Po |
2278 | diff --git a/alsactl/alsa-restore.service.in b/alsactl/alsa-restore.service.in |
2279 | index a84c2e8..80fd5fd 100644 |
2280 | --- a/alsactl/alsa-restore.service.in |
2281 | +++ b/alsactl/alsa-restore.service.in |
2282 | @@ -7,7 +7,6 @@ |
2283 | Description=Save/Restore Sound Card State |
2284 | ConditionPathExists=!@daemonswitch@ |
2285 | ConditionPathExistsGlob=/dev/snd/control* |
2286 | -ConditionPathExists=@asoundrcfile@ |
2287 | |
2288 | [Service] |
2289 | Type=oneshot |
2290 | diff --git a/alsactl/alsactl.1 b/alsactl/alsactl.1 |
2291 | index 615491a..8296663 100644 |
2292 | --- a/alsactl/alsactl.1 |
2293 | +++ b/alsactl/alsactl.1 |
2294 | @@ -8,6 +8,8 @@ alsactl \- advanced controls for ALSA soundcard driver |
2295 | |
2296 | \fBalsactl\fP \fImonitor\fP <card # or id> |
2297 | |
2298 | +\fBalsactl\fP [\fIclean\fP] <card # or id or device> [[control identifiers]] |
2299 | + |
2300 | .SH DESCRIPTION |
2301 | \fBalsactl\fP is used to control advanced settings for the ALSA |
2302 | soundcard drivers. It supports multiple soundcards. If your card has |
2303 | @@ -16,31 +18,67 @@ you have come to the right place. |
2304 | |
2305 | .SH COMMANDS |
2306 | |
2307 | -\fIstore\fP saves the current driver state for the selected soundcard |
2308 | +.SS Introduction |
2309 | + |
2310 | +The \fI<card>\fP argument is optional. If no soundcards are specified, |
2311 | +setup for all cards will be saved, loaded or monitored. |
2312 | + |
2313 | +.SS store <card> |
2314 | + |
2315 | +This command saves the current driver state for the selected soundcard |
2316 | to the configuration file. |
2317 | |
2318 | -\fIrestore\fP loads driver state for the selected soundcard from the |
2319 | +.SS restore <card> |
2320 | + |
2321 | +This command loads driver state for the selected soundcard from the |
2322 | configuration file. If restoring fails (eventually partly), the init |
2323 | action is called. |
2324 | |
2325 | -\fInrestore\fP is like \fIrestore\fP, but it notifies also the daemon |
2326 | +.SS nrestore <card> |
2327 | + |
2328 | +This command is like \fIrestore\fP, but it notifies also the daemon |
2329 | to do new rescan for available soundcards. |
2330 | |
2331 | -\fIinit\fP tries to initialize all devices to a default state. If device |
2332 | +.SS init <card> |
2333 | + |
2334 | +This command tries to initialize all devices to a default state. If device |
2335 | is not known, error code 99 is returned. |
2336 | |
2337 | -\fIdaemon\fP manages to save periodically the sound state. |
2338 | +.SS daemon |
2339 | + |
2340 | +This command manages to save periodically the sound state. |
2341 | + |
2342 | +.SS rdaemon |
2343 | + |
2344 | +This command is like \fIdaemon\fP but restore the sound state at first. |
2345 | |
2346 | -\fIrdaemon\fP like \fIdaemon\fP but restore the sound state at first. |
2347 | +.SS kill <cmd> |
2348 | |
2349 | -\fIkill\fP notifies the daemon to do the specified operation (quit, |
2350 | +This command notifies the daemon to do the specified operation (quit, |
2351 | rescan, save_and_quit). |
2352 | |
2353 | -\fImonitor\fP is for monitoring the events received from the given |
2354 | +.SS monitor <card> |
2355 | + |
2356 | +This command is for monitoring the events received from the given |
2357 | control device. |
2358 | |
2359 | -If no soundcards are specified, setup for all cards will be saved, |
2360 | -loaded or monitored. |
2361 | +.SS clean <card> [filter] |
2362 | + |
2363 | +This command cleans the controls created by applications. |
2364 | + |
2365 | +The optional element identifiers are accepted as a filter. One extra |
2366 | +argument is parsed as an element identifiers. |
2367 | + |
2368 | +\fIExample:\fP alsactl clean 0 "name='PCM'" "name='Mic Phantom'" |
2369 | + |
2370 | +.SS dump-state |
2371 | + |
2372 | +This command dumps the current state (all cards) to stdout. |
2373 | + |
2374 | +.SS dump-cfg |
2375 | + |
2376 | +This command dumps the current configuration (all cards) to stdout. |
2377 | +Note that the configuration hooks are evaluated. |
2378 | |
2379 | .SH OPTIONS |
2380 | |
2381 | @@ -61,6 +99,10 @@ Print alsactl version number. |
2382 | Select the configuration file to use. The default is /var/lib/alsa/asound.state. |
2383 | |
2384 | .TP |
2385 | +\fI\-a, \-\-config-dir\fP |
2386 | +Select the boot / hotplug ALSA configuration directory to use. The default is /var/lib/alsa. |
2387 | + |
2388 | +.TP |
2389 | \fI\-l, \-\-lock\fP |
2390 | Use the file locking to serialize the concurrent access to the state file (this |
2391 | option is default for the global state file). |
2392 | @@ -81,7 +123,7 @@ as much as possible. This option is set as default now. |
2393 | |
2394 | .TP |
2395 | \fI\-g, \-\-ignore\fP |
2396 | -Used with store and restore commands. Do not show 'No soundcards found' |
2397 | +Used with store, restore and init commands. Do not show 'No soundcards found' |
2398 | and do not set an error exit code when soundcards are not installed. |
2399 | |
2400 | .TP |
2401 | diff --git a/alsactl/alsactl.c b/alsactl/alsactl.c |
2402 | index 20ebac1..05738fb 100644 |
2403 | --- a/alsactl/alsactl.c |
2404 | +++ b/alsactl/alsactl.c |
2405 | @@ -29,11 +29,13 @@ |
2406 | #include <errno.h> |
2407 | #include <syslog.h> |
2408 | #include <sched.h> |
2409 | -#include <alsa/asoundlib.h> |
2410 | #include "alsactl.h" |
2411 | |
2412 | +#ifndef SYS_ASOUND_DIR |
2413 | +#define SYS_ASOUND_DIR "/var/lib/alsa" |
2414 | +#endif |
2415 | #ifndef SYS_ASOUNDRC |
2416 | -#define SYS_ASOUNDRC "/var/lib/alsa/asound.state" |
2417 | +#define SYS_ASOUNDRC SYS_ASOUND_DIR "/asound.state" |
2418 | #endif |
2419 | #ifndef SYS_PIDFILE |
2420 | #define SYS_PIDFILE "/var/run/alsactl.pid" |
2421 | @@ -74,6 +76,7 @@ static struct arg args[] = { |
2422 | { 'v', "version", "print version of this program" }, |
2423 | { HEADER, NULL, "Available state options:" }, |
2424 | { FILEARG | 'f', "file", "configuration file (default " SYS_ASOUNDRC ")" }, |
2425 | +{ FILEARG | 'a', "config-dir", "boot / hotplug configuration directory (default " SYS_ASOUND_DIR ")" }, |
2426 | { 'l', "lock", "use file locking to serialize concurrent access" }, |
2427 | { 'L', "no-lock", "do not use file locking to serialize concurrent access" }, |
2428 | { FILEARG | 'O', "lock-state-file", "state lock file path (default " SYS_LOCKFILE ")" }, |
2429 | @@ -111,6 +114,9 @@ static struct arg args[] = { |
2430 | { CARDCMD, "rdaemon", "like daemon but do the state restore at first" }, |
2431 | { KILLCMD, "kill", "notify daemon to quit, rescan or save_and_quit" }, |
2432 | { CARDCMD, "monitor", "monitor control events" }, |
2433 | +{ CARDCMD, "clean", "clean application controls" }, |
2434 | +{ EMPCMD, "dump-state", "dump the state (for all cards)" }, |
2435 | +{ EMPCMD, "dump-cfg", "dump the configuration (expanded, for all cards)" }, |
2436 | { 0, NULL, NULL } |
2437 | }; |
2438 | |
2439 | @@ -139,7 +145,7 @@ static void help(void) |
2440 | strcat(buf, "<card>"); |
2441 | else if (sarg & KILLCMD) |
2442 | strcat(buf, "<cmd>"); |
2443 | - printf(" %-8s %-6s %s\n", larg ? larg : "", |
2444 | + printf(" %-10s %-6s %s\n", larg ? larg : "", |
2445 | buf, a->comment); |
2446 | continue; |
2447 | } |
2448 | @@ -154,6 +160,49 @@ static void help(void) |
2449 | } |
2450 | } |
2451 | |
2452 | +static int dump_config_tree(snd_config_t *top) |
2453 | +{ |
2454 | + snd_output_t *out; |
2455 | + int err; |
2456 | + |
2457 | + err = snd_output_stdio_attach(&out, stdout, 0); |
2458 | + if (err < 0) |
2459 | + return err; |
2460 | + err = snd_config_save(top, out); |
2461 | + snd_output_close(out); |
2462 | + return err; |
2463 | +} |
2464 | + |
2465 | +static int dump_state(const char *file) |
2466 | +{ |
2467 | + snd_config_t *top; |
2468 | + int err; |
2469 | + |
2470 | + err = load_configuration(file, &top, NULL); |
2471 | + if (err < 0) |
2472 | + return err; |
2473 | + err = dump_config_tree(top); |
2474 | + snd_config_delete(top); |
2475 | + return err; |
2476 | +} |
2477 | + |
2478 | +static int dump_configuration(void) |
2479 | +{ |
2480 | + snd_config_t *top, *cfg2; |
2481 | + int err; |
2482 | + |
2483 | + err = snd_config_update_ref(&top); |
2484 | + if (err < 0) |
2485 | + return err; |
2486 | + /* expand cards.* tree */ |
2487 | + err = snd_config_search_definition(top, "cards", "_dummy_", &cfg2); |
2488 | + if (err >= 0) |
2489 | + snd_config_delete(cfg2); |
2490 | + err = dump_config_tree(top); |
2491 | + snd_config_unref(top); |
2492 | + return err; |
2493 | +} |
2494 | + |
2495 | #define NO_NICE (-100000) |
2496 | |
2497 | static void do_nice(int use_nice, int sched_idle) |
2498 | @@ -182,11 +231,13 @@ int main(int argc, char *argv[]) |
2499 | "/dev/snd/hwC", |
2500 | NULL |
2501 | }; |
2502 | + char *cfgdir = SYS_ASOUND_DIR; |
2503 | char *cfgfile = SYS_ASOUNDRC; |
2504 | char *initfile = DATADIR "/init/00main"; |
2505 | char *pidfile = SYS_PIDFILE; |
2506 | char *cardname, ncardname[16]; |
2507 | char *cmd; |
2508 | + char *const *extra_args; |
2509 | const char *const *tmp; |
2510 | int removestate = 0; |
2511 | int init_fallback = 1; /* new default behavior */ |
2512 | @@ -240,6 +291,9 @@ int main(int argc, char *argv[]) |
2513 | case 'f': |
2514 | cfgfile = optarg; |
2515 | break; |
2516 | + case 'a': |
2517 | + cfgdir = optarg; |
2518 | + break; |
2519 | case 'l': |
2520 | do_lock = 1; |
2521 | break; |
2522 | @@ -346,6 +400,8 @@ int main(int argc, char *argv[]) |
2523 | } |
2524 | } |
2525 | |
2526 | + extra_args = argc - optind > 2 ? argv + optind + 2 : NULL; |
2527 | + |
2528 | /* the global system file should be always locked */ |
2529 | if (strcmp(cfgfile, SYS_ASOUNDRC) == 0 && do_lock >= 0) |
2530 | do_lock = 1; |
2531 | @@ -353,7 +409,11 @@ int main(int argc, char *argv[]) |
2532 | /* when running in background, use syslog for reports */ |
2533 | if (background) { |
2534 | use_syslog = 1; |
2535 | - daemon(0, 0); |
2536 | + if (daemon(0, 0)) { |
2537 | + syslog(LOG_INFO, "alsactl " SND_UTIL_VERSION_STR " daemon cannot be started: %s", strerror(errno)); |
2538 | + res = EXIT_FAILURE; |
2539 | + goto out; |
2540 | + } |
2541 | } |
2542 | |
2543 | cmd = argv[optind]; |
2544 | @@ -368,7 +428,7 @@ int main(int argc, char *argv[]) |
2545 | snd_lib_error_set_handler(error_handler); |
2546 | |
2547 | if (!strcmp(cmd, "init")) { |
2548 | - res = init(initfile, initflags, cardname); |
2549 | + res = init(cfgdir, initfile, initflags | FLAG_UCM_FBOOT | FLAG_UCM_BOOT, cardname); |
2550 | snd_config_update_free_global(); |
2551 | } else if (!strcmp(cmd, "store")) { |
2552 | res = save_state(cfgfile, cardname); |
2553 | @@ -377,7 +437,7 @@ int main(int argc, char *argv[]) |
2554 | !strcmp(cmd, "nrestore")) { |
2555 | if (removestate) |
2556 | remove(statefile); |
2557 | - res = load_state(cfgfile, initfile, initflags, cardname, init_fallback); |
2558 | + res = load_state(cfgdir, cfgfile, initfile, initflags, cardname, init_fallback); |
2559 | if (!strcmp(cmd, "rdaemon")) { |
2560 | do_nice(use_nice, sched_idle); |
2561 | res = state_daemon(cfgfile, cardname, period, pidfile); |
2562 | @@ -391,6 +451,12 @@ int main(int argc, char *argv[]) |
2563 | res = state_daemon_kill(pidfile, cardname); |
2564 | } else if (!strcmp(cmd, "monitor")) { |
2565 | res = monitor(cardname); |
2566 | + } else if (!strcmp(cmd, "clean")) { |
2567 | + res = clean(cardname, extra_args); |
2568 | + } else if (!strcmp(cmd, "dump-state")) { |
2569 | + res = dump_state(cfgfile); |
2570 | + } else if (!strcmp(cmd, "dump-cfg")) { |
2571 | + res = dump_configuration(); |
2572 | } else { |
2573 | fprintf(stderr, "alsactl: Unknown command '%s'...\n", cmd); |
2574 | res = -ENODEV; |
2575 | diff --git a/alsactl/alsactl.h b/alsactl/alsactl.h |
2576 | index c478695..bbdf6c8 100644 |
2577 | --- a/alsactl/alsactl.h |
2578 | +++ b/alsactl/alsactl.h |
2579 | @@ -1,3 +1,6 @@ |
2580 | +#include <stdbool.h> |
2581 | +#include <alsa/asoundlib.h> |
2582 | + |
2583 | extern int debugflag; |
2584 | extern int force_restore; |
2585 | extern int ignore_nocards; |
2586 | @@ -7,6 +10,13 @@ extern char *command; |
2587 | extern char *statefile; |
2588 | extern char *lockfile; |
2589 | |
2590 | +struct snd_card_iterator { |
2591 | + int card; |
2592 | + char name[16]; |
2593 | + bool single; |
2594 | + bool first; |
2595 | +}; |
2596 | + |
2597 | void info_(const char *fcn, long line, const char *fmt, ...); |
2598 | void error_(const char *fcn, long line, const char *fmt, ...); |
2599 | void cerror_(const char *fcn, long line, int cond, const char *fmt, ...); |
2600 | @@ -26,20 +36,31 @@ void error_handler(const char *file, int line, const char *function, int err, co |
2601 | #endif |
2602 | |
2603 | #define FLAG_UCM_DISABLED (1<<0) |
2604 | -#define FLAG_UCM_DEFAULTS (1<<1) |
2605 | +#define FLAG_UCM_FBOOT (1<<1) |
2606 | +#define FLAG_UCM_BOOT (1<<2) |
2607 | +#define FLAG_UCM_DEFAULTS (1<<3) |
2608 | + |
2609 | +void snd_card_iterator_init(struct snd_card_iterator *iter, int cardno); |
2610 | +int snd_card_iterator_sinit(struct snd_card_iterator *iter, const char *cardname); |
2611 | +const char *snd_card_iterator_next(struct snd_card_iterator *iter); |
2612 | +int snd_card_iterator_error(struct snd_card_iterator *iter); |
2613 | |
2614 | -int init(const char *file, int flags, const char *cardname); |
2615 | +int load_configuration(const char *file, snd_config_t **top, int *open_failed); |
2616 | +int init(const char *cfgdir, const char *file, int flags, const char *cardname); |
2617 | int init_ucm(int flags, int cardno); |
2618 | int state_lock(const char *file, int timeout); |
2619 | int state_unlock(int fd, const char *file); |
2620 | int save_state(const char *file, const char *cardname); |
2621 | -int load_state(const char *file, const char *initfile, int initflags, |
2622 | +int load_state(const char *cfgdir, const char *file, |
2623 | + const char *initfile, int initflags, |
2624 | const char *cardname, int do_init); |
2625 | int power(const char *argv[], int argc); |
2626 | int monitor(const char *name); |
2627 | int state_daemon(const char *file, const char *cardname, int period, |
2628 | const char *pidfile); |
2629 | int state_daemon_kill(const char *pidfile, const char *cmd); |
2630 | +int clean(const char *cardname, char *const *extra_args); |
2631 | +int snd_card_clean_cfgdir(const char *cfgdir, int cardno); |
2632 | |
2633 | /* utils */ |
2634 | |
2635 | diff --git a/alsactl/clean.c b/alsactl/clean.c |
2636 | new file mode 100644 |
2637 | index 0000000..1eb82c0 |
2638 | --- /dev/null |
2639 | +++ b/alsactl/clean.c |
2640 | @@ -0,0 +1,196 @@ |
2641 | +/* |
2642 | + * Advanced Linux Sound Architecture Control Program |
2643 | + * Copyright (c) by Jaroslav Kysela <perex@perex.cz> |
2644 | + * |
2645 | + * |
2646 | + * This program is free software; you can redistribute it and/or modify |
2647 | + * it under the terms of the GNU General Public License as published by |
2648 | + * the Free Software Foundation; either version 2 of the License, or |
2649 | + * (at your option) any later version. |
2650 | + * |
2651 | + * This program is distributed in the hope that it will be useful, |
2652 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
2653 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2654 | + * GNU General Public License for more details. |
2655 | + * |
2656 | + * You should have received a copy of the GNU General Public License |
2657 | + * along with this program; if not, write to the Free Software |
2658 | + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
2659 | + * |
2660 | + */ |
2661 | + |
2662 | +#include "aconfig.h" |
2663 | +#include "version.h" |
2664 | +#include <getopt.h> |
2665 | +#include <stdarg.h> |
2666 | +#include <stdio.h> |
2667 | +#include <assert.h> |
2668 | +#include <errno.h> |
2669 | +#include "alsactl.h" |
2670 | + |
2671 | +static int clean_one_control(snd_ctl_t *handle, snd_ctl_elem_id_t *elem_id, |
2672 | + snd_ctl_elem_id_t **filter) |
2673 | +{ |
2674 | + snd_ctl_elem_info_t *info; |
2675 | + char *s; |
2676 | + int err; |
2677 | + |
2678 | + snd_ctl_elem_info_alloca(&info); |
2679 | + snd_ctl_elem_info_set_id(info, elem_id); |
2680 | + err = snd_ctl_elem_info(handle, info); |
2681 | + if (err < 0) { |
2682 | + s = snd_ctl_ascii_elem_id_get(elem_id); |
2683 | + error("Cannot read control info '%s': %s", s, snd_strerror(err)); |
2684 | + free(s); |
2685 | + return err; |
2686 | + } |
2687 | + |
2688 | + if (!snd_ctl_elem_info_is_user(info)) |
2689 | + return 0; |
2690 | + |
2691 | + s = snd_ctl_ascii_elem_id_get(elem_id); |
2692 | + dbg("Application control \"%s\" found.", s); |
2693 | + if (filter) { |
2694 | + for (; *filter; filter++) { |
2695 | + if (snd_ctl_elem_id_compare_set(elem_id, *filter) == 0) |
2696 | + break; |
2697 | + } |
2698 | + if (*filter == NULL) { |
2699 | + free(s); |
2700 | + return 0; |
2701 | + } |
2702 | + } |
2703 | + |
2704 | + err = snd_ctl_elem_remove(handle, elem_id); |
2705 | + if (err < 0) { |
2706 | + error("Cannot remove control '%s': %s", s, snd_strerror(err)); |
2707 | + free(s); |
2708 | + return err; |
2709 | + } |
2710 | + dbg("Application control \"%s\" removed.", s); |
2711 | + free(s); |
2712 | + return 0; |
2713 | +} |
2714 | + |
2715 | +static void filter_controls_free(snd_ctl_elem_id_t **_filter) |
2716 | +{ |
2717 | + snd_ctl_elem_id_t **filter; |
2718 | + |
2719 | + for (filter = _filter; filter; filter++) |
2720 | + free(*filter); |
2721 | + free(_filter); |
2722 | +} |
2723 | + |
2724 | +static int filter_controls_parse(char *const *controls, snd_ctl_elem_id_t ***_filter) |
2725 | +{ |
2726 | + snd_ctl_elem_id_t **filter = NULL; |
2727 | + char *const *c; |
2728 | + char *s; |
2729 | + unsigned int count, idx; |
2730 | + int err; |
2731 | + |
2732 | + if (!controls) |
2733 | + goto fin; |
2734 | + for (count = 0, c = controls; *c; c++, count++); |
2735 | + if (count == 0) |
2736 | + goto fin; |
2737 | + filter = calloc(count + 1, sizeof(snd_ctl_elem_id_t *)); |
2738 | + if (filter == NULL) { |
2739 | +nomem: |
2740 | + error("No enough memory..."); |
2741 | + return -ENOMEM; |
2742 | + } |
2743 | + filter[count] = NULL; |
2744 | + for (idx = 0; idx < count; idx++) { |
2745 | + err = snd_ctl_elem_id_malloc(&filter[idx]); |
2746 | + if (err < 0) { |
2747 | + filter_controls_free(filter); |
2748 | + goto nomem; |
2749 | + } |
2750 | + err = snd_ctl_ascii_elem_id_parse(filter[idx], controls[idx]); |
2751 | + if (err < 0) { |
2752 | + error("Cannot parse id '%s': %s", controls[idx], snd_strerror(err)); |
2753 | + filter_controls_free(filter); |
2754 | + return err; |
2755 | + } |
2756 | + s = snd_ctl_ascii_elem_id_get(filter[idx]); |
2757 | + dbg("Add to filter: \"%s\"", s); |
2758 | + free(s); |
2759 | + } |
2760 | +fin: |
2761 | + *_filter = filter; |
2762 | + return 0; |
2763 | +} |
2764 | + |
2765 | +static int clean_controls(int cardno, char *const *controls) |
2766 | +{ |
2767 | + snd_ctl_t *handle; |
2768 | + snd_ctl_elem_list_t *list; |
2769 | + snd_ctl_elem_id_t *elem_id; |
2770 | + snd_ctl_elem_id_t **filter; |
2771 | + char name[32]; |
2772 | + unsigned int idx, count; |
2773 | + int err; |
2774 | + |
2775 | + snd_ctl_elem_id_alloca(&elem_id); |
2776 | + snd_ctl_elem_list_alloca(&list); |
2777 | + |
2778 | + err = filter_controls_parse(controls, &filter); |
2779 | + if (err < 0) |
2780 | + return err; |
2781 | + |
2782 | + sprintf(name, "hw:%d", cardno); |
2783 | + err = snd_ctl_open(&handle, name, 0); |
2784 | + if (err < 0) { |
2785 | + error("snd_ctl_open error: %s", snd_strerror(err)); |
2786 | + filter_controls_free(filter); |
2787 | + return err; |
2788 | + } |
2789 | + dbg("Control device '%s' opened.", name); |
2790 | + err = snd_ctl_elem_list(handle, list); |
2791 | + if (err < 0) { |
2792 | + error("Cannot determine controls: %s", snd_strerror(err)); |
2793 | + goto fin_err; |
2794 | + } |
2795 | + count = snd_ctl_elem_list_get_count(list); |
2796 | + if (count == 0) |
2797 | + goto fin_ok; |
2798 | + snd_ctl_elem_list_set_offset(list, 0); |
2799 | + if ((err = snd_ctl_elem_list_alloc_space(list, count)) < 0) { |
2800 | + error("No enough memory..."); |
2801 | + goto fin_err; |
2802 | + } |
2803 | + if ((err = snd_ctl_elem_list(handle, list)) < 0) { |
2804 | + error("Cannot determine controls (2): %s", snd_strerror(err)); |
2805 | + goto fin_err; |
2806 | + } |
2807 | + for (idx = 0; idx < count; idx++) { |
2808 | + snd_ctl_elem_list_get_id(list, idx, elem_id); |
2809 | + err = clean_one_control(handle, elem_id, filter); |
2810 | + if (err < 0) |
2811 | + goto fin_err; |
2812 | + } |
2813 | +fin_ok: |
2814 | + filter_controls_free(filter); |
2815 | + snd_ctl_close(handle); |
2816 | + return 0; |
2817 | +fin_err: |
2818 | + filter_controls_free(filter); |
2819 | + snd_ctl_close(handle); |
2820 | + return err; |
2821 | +} |
2822 | + |
2823 | +int clean(const char *cardname, char *const *extra_args) |
2824 | +{ |
2825 | + struct snd_card_iterator iter; |
2826 | + int err; |
2827 | + |
2828 | + err = snd_card_iterator_sinit(&iter, cardname); |
2829 | + if (err < 0) |
2830 | + return err; |
2831 | + while (snd_card_iterator_next(&iter)) { |
2832 | + if ((err = clean_controls(iter.card, extra_args))) |
2833 | + return err; |
2834 | + } |
2835 | + return snd_card_iterator_error(&iter); |
2836 | +} |
2837 | diff --git a/alsactl/daemon.c b/alsactl/daemon.c |
2838 | index 65f7ac1..5109015 100644 |
2839 | --- a/alsactl/daemon.c |
2840 | +++ b/alsactl/daemon.c |
2841 | @@ -29,7 +29,6 @@ |
2842 | #include <signal.h> |
2843 | #include <time.h> |
2844 | #include <poll.h> |
2845 | -#include <alsa/asoundlib.h> |
2846 | #include "alsactl.h" |
2847 | |
2848 | struct id_list { |
2849 | @@ -284,7 +283,7 @@ static long read_pid_file(const char *pidfile) |
2850 | err = err < 0 ? -errno : -EIO; |
2851 | close(fd); |
2852 | pid_txt[11] = '\0'; |
2853 | - return atol(pid_txt); |
2854 | + return err < 0 ? err : atol(pid_txt); |
2855 | } else { |
2856 | return -errno; |
2857 | } |
2858 | diff --git a/alsactl/init/Makefile.in b/alsactl/init/Makefile.in |
2859 | index 2a4e3ec..3dac625 100644 |
2860 | --- a/alsactl/init/Makefile.in |
2861 | +++ b/alsactl/init/Makefile.in |
2862 | @@ -1,7 +1,7 @@ |
2863 | -# Makefile.in generated by automake 1.16.1 from Makefile.am. |
2864 | +# Makefile.in generated by automake 1.16.2 from Makefile.am. |
2865 | # @configure_input@ |
2866 | |
2867 | -# Copyright (C) 1994-2018 Free Software Foundation, Inc. |
2868 | +# Copyright (C) 1994-2020 Free Software Foundation, Inc. |
2869 | |
2870 | # This Makefile.in is free software; the Free Software Foundation |
2871 | # gives unlimited permission to copy and/or distribute it, |
2872 | @@ -91,7 +91,8 @@ host_triplet = @host@ |
2873 | subdir = alsactl/init |
2874 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
2875 | am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ |
2876 | - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
2877 | + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ |
2878 | + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
2879 | $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ |
2880 | $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ |
2881 | $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ |
2882 | @@ -212,8 +213,8 @@ MAINT = @MAINT@ |
2883 | MAKEINFO = @MAKEINFO@ |
2884 | MKDIR_P = @MKDIR_P@ |
2885 | MSGFMT = @MSGFMT@ |
2886 | -MSGFMT_015 = @MSGFMT_015@ |
2887 | MSGMERGE = @MSGMERGE@ |
2888 | +MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ |
2889 | NCURSESW_CFLAGS = @NCURSESW_CFLAGS@ |
2890 | NCURSESW_LIBS = @NCURSESW_LIBS@ |
2891 | NCURSES_CFLAGS = @NCURSES_CFLAGS@ |
2892 | @@ -293,6 +294,7 @@ prefix = @prefix@ |
2893 | program_transform_name = @program_transform_name@ |
2894 | psdir = @psdir@ |
2895 | rst2man_available = @rst2man_available@ |
2896 | +runstatedir = @runstatedir@ |
2897 | sbindir = @sbindir@ |
2898 | sharedstatedir = @sharedstatedir@ |
2899 | srcdir = @srcdir@ |
2900 | diff --git a/alsactl/init_parse.c b/alsactl/init_parse.c |
2901 | index ee9cc6d..e439de7 100644 |
2902 | --- a/alsactl/init_parse.c |
2903 | +++ b/alsactl/init_parse.c |
2904 | @@ -37,7 +37,6 @@ |
2905 | #include <sys/types.h> |
2906 | #include <dirent.h> |
2907 | #include <math.h> |
2908 | -#include <alsa/asoundlib.h> |
2909 | #include "aconfig.h" |
2910 | #include "alsactl.h" |
2911 | #include "list.h" |
2912 | @@ -465,12 +464,13 @@ static int set_ctl_value(struct space *space, const char *value, int all) |
2913 | return -EINVAL; |
2914 | } |
2915 | for (idx = 0; idx < count; idx += 2) { |
2916 | - val = hextodigit(*(value++)) << 4; |
2917 | - val |= hextodigit(*(value++)); |
2918 | - if (val > 255) { |
2919 | + int nibble1 = hextodigit(*(value++)); |
2920 | + int nibble2 = hextodigit(*(value++)); |
2921 | + if (nibble1 < 0 || nibble2 < 0) { |
2922 | Perror(space, "bad ctl hexa value"); |
2923 | return -EINVAL; |
2924 | } |
2925 | + val = (nibble1 << 4) | nibble2; |
2926 | snd_ctl_elem_value_set_byte(space->ctl_value, idx, val); |
2927 | } |
2928 | break; |
2929 | @@ -1700,6 +1700,7 @@ static int parse(struct space *space, const char *filename) |
2930 | |
2931 | if (count > linesize - 1) { |
2932 | free(line); |
2933 | + line = NULL; |
2934 | linesize = (count + 127 + 1) & ~127; |
2935 | if (linesize > 2048) { |
2936 | error("file %s, line %i too long", filename, linenum); |
2937 | @@ -1742,68 +1743,44 @@ static int parse(struct space *space, const char *filename) |
2938 | return err ? err : -abs(space->exit_code); |
2939 | } |
2940 | |
2941 | -int init(const char *filename, int flags, const char *cardname) |
2942 | +int init(const char *cfgdir, const char *filename, int flags, const char *cardname) |
2943 | { |
2944 | struct space *space; |
2945 | - int err = 0, lasterr = 0, card, first; |
2946 | + struct snd_card_iterator iter; |
2947 | + int err = 0, lasterr = 0; |
2948 | |
2949 | sysfs_init(); |
2950 | - if (!cardname) { |
2951 | - first = 1; |
2952 | - card = -1; |
2953 | - while (1) { |
2954 | - if (snd_card_next(&card) < 0) |
2955 | - break; |
2956 | - if (card < 0) { |
2957 | - if (first) { |
2958 | - error("No soundcards found..."); |
2959 | - return -ENODEV; |
2960 | - } |
2961 | - break; |
2962 | - } |
2963 | - first = 0; |
2964 | - if (!(flags & FLAG_UCM_DISABLED)) { |
2965 | - err = init_ucm(flags, card); |
2966 | - if (err == 0) |
2967 | - continue; |
2968 | - } |
2969 | - err = init_space(&space, card); |
2970 | - if (err == 0) { |
2971 | - space->rootdir = new_root_dir(filename); |
2972 | - if (space->rootdir != NULL) |
2973 | - err = parse(space, filename); |
2974 | - if (err <= -99) { /* non-fatal errors */ |
2975 | - if (lasterr == 0) |
2976 | - lasterr = err; |
2977 | - err = 0; |
2978 | - } |
2979 | - free_space(space); |
2980 | - } |
2981 | - if (err < 0) |
2982 | - break; |
2983 | - } |
2984 | - err = lasterr; |
2985 | - } else { |
2986 | - card = snd_card_get_index(cardname); |
2987 | - if (card < 0) { |
2988 | - error("Cannot find soundcard '%s'...", cardname); |
2989 | - goto error; |
2990 | - } |
2991 | - if (!(flags & FLAG_UCM_DISABLED)) { |
2992 | - err = init_ucm(flags, card); |
2993 | - if (err == 0) |
2994 | - return 0; |
2995 | + err = snd_card_iterator_sinit(&iter, cardname); |
2996 | + if (err < 0) |
2997 | + goto out; |
2998 | + while (snd_card_iterator_next(&iter)) { |
2999 | + err = snd_card_clean_cfgdir(cfgdir, iter.card); |
3000 | + if (err < 0) { |
3001 | + if (lasterr == 0) |
3002 | + lasterr = err; |
3003 | + continue; |
3004 | } |
3005 | - memset(&space, 0, sizeof(space)); |
3006 | - err = init_space(&space, card); |
3007 | - if (err == 0) { |
3008 | - space->rootdir = new_root_dir(filename); |
3009 | - if (space->rootdir != NULL) |
3010 | - err = parse(space, filename); |
3011 | - free_space(space); |
3012 | + err = init_ucm(flags, iter.card); |
3013 | + if (err == 0) |
3014 | + continue; |
3015 | + err = init_space(&space, iter.card); |
3016 | + if (err != 0) |
3017 | + continue; |
3018 | + space->rootdir = new_root_dir(filename); |
3019 | + if (space->rootdir != NULL) { |
3020 | + err = parse(space, filename); |
3021 | + if (!cardname && err <= -99) { /* non-fatal errors */ |
3022 | + if (lasterr == 0) |
3023 | + lasterr = err; |
3024 | + err = 0; |
3025 | + } |
3026 | } |
3027 | + free_space(space); |
3028 | + if (err < 0) |
3029 | + goto out; |
3030 | } |
3031 | - error: |
3032 | + err = lasterr ? lasterr : snd_card_iterator_error(&iter); |
3033 | +out: |
3034 | sysfs_cleanup(); |
3035 | return err; |
3036 | } |
3037 | diff --git a/alsactl/init_ucm.c b/alsactl/init_ucm.c |
3038 | index 6468c9d..b326601 100644 |
3039 | --- a/alsactl/init_ucm.c |
3040 | +++ b/alsactl/init_ucm.c |
3041 | @@ -28,7 +28,8 @@ |
3042 | #include <alsa/use-case.h> |
3043 | |
3044 | /* |
3045 | - * Keep it as simple as possible. Execute commands from the SectionOnce only. |
3046 | + * Keep it as simple as possible. Execute commands from the |
3047 | + * FixedBootSequence and BootSequence only. |
3048 | */ |
3049 | int init_ucm(int flags, int cardno) |
3050 | { |
3051 | @@ -36,17 +37,27 @@ int init_ucm(int flags, int cardno) |
3052 | char id[32]; |
3053 | int err; |
3054 | |
3055 | + if (flags & FLAG_UCM_DISABLED) |
3056 | + return -ENXIO; |
3057 | + |
3058 | snprintf(id, sizeof(id), "hw:%d", cardno); |
3059 | err = snd_use_case_mgr_open(&uc_mgr, id); |
3060 | if (err < 0) |
3061 | return err; |
3062 | - err = snd_use_case_set(uc_mgr, "_boot", NULL); |
3063 | - if (err < 0) |
3064 | - goto _error; |
3065 | - if ((flags & FLAG_UCM_DEFAULTS) != 0) { |
3066 | - err = snd_use_case_set(uc_mgr, "_defaults", NULL); |
3067 | + if (flags & FLAG_UCM_FBOOT) { |
3068 | + err = snd_use_case_set(uc_mgr, "_fboot", NULL); |
3069 | + if (err == -ENOENT && (flags & FLAG_UCM_BOOT) != 0) { |
3070 | + /* nothing */ |
3071 | + } else if (err < 0) { |
3072 | + goto _error; |
3073 | + } |
3074 | + } |
3075 | + if (flags & FLAG_UCM_BOOT) { |
3076 | + err = snd_use_case_set(uc_mgr, "_boot", NULL); |
3077 | if (err < 0) |
3078 | goto _error; |
3079 | + if ((flags & FLAG_UCM_DEFAULTS) != 0) |
3080 | + err = snd_use_case_set(uc_mgr, "_defaults", NULL); |
3081 | } |
3082 | _error: |
3083 | snd_use_case_mgr_close(uc_mgr); |
3084 | @@ -57,7 +68,7 @@ _error: |
3085 | |
3086 | int init_ucm(int flags, int cardno) |
3087 | { |
3088 | - return 0; |
3089 | + return -ENXIO; |
3090 | } |
3091 | |
3092 | #endif |
3093 | diff --git a/alsactl/lock.c b/alsactl/lock.c |
3094 | index 4a48539..5b47462 100644 |
3095 | --- a/alsactl/lock.c |
3096 | +++ b/alsactl/lock.c |
3097 | @@ -63,11 +63,15 @@ static int state_lock_(const char *file, int lock, int timeout, int _fd) |
3098 | if (fd < 0) { |
3099 | if (errno == EBUSY || errno == EAGAIN) { |
3100 | sleep(1); |
3101 | - timeout--; |
3102 | - } else { |
3103 | - err = -errno; |
3104 | - goto out; |
3105 | + continue; |
3106 | } |
3107 | + if (errno == EEXIST) { |
3108 | + fd = open(nfile, O_RDWR); |
3109 | + if (fd >= 0) |
3110 | + break; |
3111 | + } |
3112 | + err = -errno; |
3113 | + goto out; |
3114 | } |
3115 | } |
3116 | } |
3117 | diff --git a/alsactl/monitor.c b/alsactl/monitor.c |
3118 | index fa6cd85..4c02557 100644 |
3119 | --- a/alsactl/monitor.c |
3120 | +++ b/alsactl/monitor.c |
3121 | @@ -28,11 +28,12 @@ |
3122 | #include <time.h> |
3123 | #include <signal.h> |
3124 | #include <sys/signalfd.h> |
3125 | -#include <alsa/asoundlib.h> |
3126 | |
3127 | #include <stddef.h> |
3128 | #include "list.h" |
3129 | |
3130 | +#include "alsactl.h" |
3131 | + |
3132 | struct src_entry { |
3133 | snd_ctl_t *handle; |
3134 | char *name; |
3135 | @@ -40,29 +41,6 @@ struct src_entry { |
3136 | struct list_head list; |
3137 | }; |
3138 | |
3139 | -struct snd_card_iterator { |
3140 | - int card; |
3141 | - char name[16]; |
3142 | -}; |
3143 | - |
3144 | -void snd_card_iterator_init(struct snd_card_iterator *iter) |
3145 | -{ |
3146 | - iter->card = -1; |
3147 | - memset(iter->name, 0, sizeof(iter->name)); |
3148 | -} |
3149 | - |
3150 | -static const char *snd_card_iterator_next(struct snd_card_iterator *iter) |
3151 | -{ |
3152 | - if (snd_card_next(&iter->card) < 0) |
3153 | - return NULL; |
3154 | - if (iter->card < 0) |
3155 | - return NULL; |
3156 | - |
3157 | - snprintf(iter->name, sizeof(iter->name), "hw:%d", iter->card); |
3158 | - |
3159 | - return (const char *)iter->name; |
3160 | -} |
3161 | - |
3162 | static void remove_source_entry(struct src_entry *entry) |
3163 | { |
3164 | list_del(&entry->list); |
3165 | @@ -159,7 +137,7 @@ static int prepare_source_entry(struct list_head *srcs, const char *name) |
3166 | struct snd_card_iterator iter; |
3167 | const char *cardname; |
3168 | |
3169 | - snd_card_iterator_init(&iter); |
3170 | + snd_card_iterator_init(&iter, -1); |
3171 | while ((cardname = snd_card_iterator_next(&iter))) { |
3172 | if (seek_entry_by_name(srcs, cardname)) |
3173 | continue; |
3174 | diff --git a/alsactl/state.c b/alsactl/state.c |
3175 | index ea1d3bc..adbd13f 100644 |
3176 | --- a/alsactl/state.c |
3177 | +++ b/alsactl/state.c |
3178 | @@ -27,7 +27,6 @@ |
3179 | #include <stdio.h> |
3180 | #include <assert.h> |
3181 | #include <errno.h> |
3182 | -#include <alsa/asoundlib.h> |
3183 | #include "alsactl.h" |
3184 | |
3185 | |
3186 | @@ -230,7 +229,7 @@ static int get_control(snd_ctl_t *handle, snd_ctl_elem_id_t *id, snd_config_t *t |
3187 | { |
3188 | snd_ctl_elem_value_t *ctl; |
3189 | snd_ctl_elem_info_t *info; |
3190 | - snd_config_t *control, *comment, *item, *value; |
3191 | + snd_config_t *control, *comment, *item = NULL, *value; |
3192 | const char *s; |
3193 | char buf[256]; |
3194 | unsigned int idx; |
3195 | @@ -656,13 +655,16 @@ static long config_iface(snd_config_t *n) |
3196 | const char *str; |
3197 | switch (snd_config_get_type(n)) { |
3198 | case SND_CONFIG_TYPE_INTEGER: |
3199 | - snd_config_get_integer(n, &i); |
3200 | + if (snd_config_get_integer(n, &i) < 0) |
3201 | + return -1; |
3202 | return i; |
3203 | case SND_CONFIG_TYPE_INTEGER64: |
3204 | - snd_config_get_integer64(n, &li); |
3205 | + if (snd_config_get_integer64(n, &li) < 0) |
3206 | + return -1; |
3207 | return li; |
3208 | case SND_CONFIG_TYPE_STRING: |
3209 | - snd_config_get_string(n, &str); |
3210 | + if (snd_config_get_string(n, &str) < 0) |
3211 | + return -1; |
3212 | break; |
3213 | default: |
3214 | return -1; |
3215 | @@ -682,17 +684,20 @@ static int config_bool(snd_config_t *n, int doit) |
3216 | |
3217 | switch (snd_config_get_type(n)) { |
3218 | case SND_CONFIG_TYPE_INTEGER: |
3219 | - snd_config_get_integer(n, &val); |
3220 | + if (snd_config_get_integer(n, &val) < 0) |
3221 | + return -1; |
3222 | if (val < 0 || val > 1) |
3223 | return -1; |
3224 | return val; |
3225 | case SND_CONFIG_TYPE_INTEGER64: |
3226 | - snd_config_get_integer64(n, &lval); |
3227 | + if (snd_config_get_integer64(n, &lval) < 0) |
3228 | + return -1; |
3229 | if (lval < 0 || lval > 1) |
3230 | return -1; |
3231 | return (int) lval; |
3232 | case SND_CONFIG_TYPE_STRING: |
3233 | - snd_config_get_string(n, &str); |
3234 | + if (snd_config_get_string(n, &str) < 0) |
3235 | + return -1; |
3236 | break; |
3237 | case SND_CONFIG_TYPE_COMPOUND: |
3238 | if (!force_restore || !doit) |
3239 | @@ -719,13 +724,16 @@ static int config_enumerated(snd_config_t *n, snd_ctl_t *handle, |
3240 | |
3241 | switch (snd_config_get_type(n)) { |
3242 | case SND_CONFIG_TYPE_INTEGER: |
3243 | - snd_config_get_integer(n, &val); |
3244 | + if (snd_config_get_integer(n, &val) < 0) |
3245 | + return -1; |
3246 | return val; |
3247 | case SND_CONFIG_TYPE_INTEGER64: |
3248 | - snd_config_get_integer64(n, &lval); |
3249 | + if (snd_config_get_integer64(n, &lval) < 0) |
3250 | + return -1; |
3251 | return (int) lval; |
3252 | case SND_CONFIG_TYPE_STRING: |
3253 | - snd_config_get_string(n, &str); |
3254 | + if (snd_config_get_string(n, &str) < 0) |
3255 | + return -1; |
3256 | break; |
3257 | case SND_CONFIG_TYPE_COMPOUND: |
3258 | if (!force_restore || !doit) |
3259 | @@ -1248,6 +1256,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control, |
3260 | } |
3261 | if (strcmp(fld, "iface") == 0) { |
3262 | iface = (snd_ctl_elem_iface_t)config_iface(n); |
3263 | + if (iface < 0) |
3264 | + return -EINVAL; |
3265 | continue; |
3266 | } |
3267 | if (strcmp(fld, "device") == 0) { |
3268 | @@ -1255,7 +1265,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control, |
3269 | cerror(doit, "control.%d.%s is invalid", numid, fld); |
3270 | return -EINVAL; |
3271 | } |
3272 | - snd_config_get_integer(n, &device); |
3273 | + if (snd_config_get_integer(n, &device) < 0) |
3274 | + return -EINVAL; |
3275 | continue; |
3276 | } |
3277 | if (strcmp(fld, "subdevice") == 0) { |
3278 | @@ -1263,7 +1274,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control, |
3279 | cerror(doit, "control.%d.%s is invalid", numid, fld); |
3280 | return -EINVAL; |
3281 | } |
3282 | - snd_config_get_integer(n, &subdevice); |
3283 | + if (snd_config_get_integer(n, &subdevice) < 0) |
3284 | + return -EINVAL; |
3285 | continue; |
3286 | } |
3287 | if (strcmp(fld, "name") == 0) { |
3288 | @@ -1271,7 +1283,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control, |
3289 | cerror(doit, "control.%d.%s is invalid", numid, fld); |
3290 | return -EINVAL; |
3291 | } |
3292 | - snd_config_get_string(n, &name); |
3293 | + if (snd_config_get_string(n, &name) < 0) |
3294 | + return -EINVAL; |
3295 | continue; |
3296 | } |
3297 | if (strcmp(fld, "index") == 0) { |
3298 | @@ -1279,7 +1292,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control, |
3299 | cerror(doit, "control.%d.%s is invalid", numid, fld); |
3300 | return -EINVAL; |
3301 | } |
3302 | - snd_config_get_integer(n, &index); |
3303 | + if (snd_config_get_integer(n, &index) < 0) |
3304 | + return -EINVAL; |
3305 | continue; |
3306 | } |
3307 | if (strcmp(fld, "value") == 0) { |
3308 | @@ -1545,6 +1559,7 @@ int save_state(const char *file, const char *cardname) |
3309 | int stdio; |
3310 | char *nfile = NULL; |
3311 | int lock_fd = -EINVAL; |
3312 | + struct snd_card_iterator iter; |
3313 | |
3314 | err = snd_config_top(&config); |
3315 | if (err < 0) { |
3316 | @@ -1578,45 +1593,18 @@ int save_state(const char *file, const char *cardname) |
3317 | #endif |
3318 | } |
3319 | |
3320 | - if (!cardname) { |
3321 | - int card, first = 1; |
3322 | - |
3323 | - card = -1; |
3324 | - /* find each installed soundcards */ |
3325 | - while (1) { |
3326 | - if (snd_card_next(&card) < 0) |
3327 | - break; |
3328 | - if (card < 0) { |
3329 | - if (first) { |
3330 | - if (ignore_nocards) { |
3331 | - err = 0; |
3332 | - goto out; |
3333 | - } else { |
3334 | - error("No soundcards found..."); |
3335 | - err = -ENODEV; |
3336 | - goto out; |
3337 | - } |
3338 | - } |
3339 | - break; |
3340 | - } |
3341 | - first = 0; |
3342 | - if ((err = get_controls(card, config))) |
3343 | - goto out; |
3344 | - } |
3345 | - } else { |
3346 | - int cardno; |
3347 | - |
3348 | - cardno = snd_card_get_index(cardname); |
3349 | - if (cardno < 0) { |
3350 | - error("Cannot find soundcard '%s'...", cardname); |
3351 | - err = cardno; |
3352 | - goto out; |
3353 | - } |
3354 | - if ((err = get_controls(cardno, config))) { |
3355 | + err = snd_card_iterator_sinit(&iter, cardname); |
3356 | + if (err < 0) |
3357 | + goto out; |
3358 | + while (snd_card_iterator_next(&iter)) { |
3359 | + if ((err = get_controls(iter.card, config))) |
3360 | goto out; |
3361 | - } |
3362 | } |
3363 | - |
3364 | + if (iter.first) { |
3365 | + err = snd_card_iterator_error(&iter); |
3366 | + goto out; |
3367 | + } |
3368 | + |
3369 | if (stdio) { |
3370 | err = snd_output_stdio_attach(&out, stdout, 0); |
3371 | } else { |
3372 | @@ -1645,142 +1633,67 @@ out: |
3373 | return err; |
3374 | } |
3375 | |
3376 | -int load_state(const char *file, const char *initfile, int initflags, |
3377 | +int load_state(const char *cfgdir, const char *file, |
3378 | + const char *initfile, int initflags, |
3379 | const char *cardname, int do_init) |
3380 | { |
3381 | - int err, finalerr = 0; |
3382 | + int err, finalerr = 0, open_failed; |
3383 | + struct snd_card_iterator iter; |
3384 | snd_config_t *config; |
3385 | - snd_input_t *in; |
3386 | - int stdio, lock_fd = -EINVAL; |
3387 | + const char *cardname1; |
3388 | |
3389 | - err = snd_config_top(&config); |
3390 | - if (err < 0) { |
3391 | - error("snd_config_top error: %s", snd_strerror(err)); |
3392 | + config = NULL; |
3393 | + err = load_configuration(file, &config, &open_failed); |
3394 | + if (err < 0 && !open_failed) |
3395 | return err; |
3396 | - } |
3397 | - stdio = !strcmp(file, "-"); |
3398 | - if (stdio) { |
3399 | - err = snd_input_stdio_attach(&in, stdin, 0); |
3400 | - } else { |
3401 | - lock_fd = state_lock(file, 10); |
3402 | - err = lock_fd >= 0 ? snd_input_stdio_open(&in, file, "r") : lock_fd; |
3403 | - } |
3404 | - if (err >= 0) { |
3405 | - err = snd_config_load(config, in); |
3406 | - snd_input_close(in); |
3407 | - if (lock_fd >= 0) |
3408 | - state_unlock(lock_fd, file); |
3409 | - if (err < 0) { |
3410 | - error("snd_config_load error: %s", snd_strerror(err)); |
3411 | - goto out; |
3412 | - } |
3413 | - } else { |
3414 | - int card, first = 1; |
3415 | - char cardname1[16]; |
3416 | |
3417 | - if (lock_fd >= 0) |
3418 | - state_unlock(lock_fd, file); |
3419 | + if (open_failed) { |
3420 | error("Cannot open %s for reading: %s", file, snd_strerror(err)); |
3421 | finalerr = err; |
3422 | - if (cardname) { |
3423 | - card = snd_card_get_index(cardname); |
3424 | - if (card < 0) { |
3425 | - error("Cannot find soundcard '%s'...", cardname); |
3426 | - err = -ENODEV; |
3427 | - goto out; |
3428 | - } |
3429 | - goto single; |
3430 | - } else { |
3431 | - card = -1; |
3432 | - } |
3433 | - /* find each installed soundcards */ |
3434 | - while (!cardname) { |
3435 | - if (snd_card_next(&card) < 0) |
3436 | - break; |
3437 | - if (card < 0) |
3438 | - break; |
3439 | -single: |
3440 | - first = 0; |
3441 | + |
3442 | + err = snd_card_iterator_sinit(&iter, cardname); |
3443 | + if (err < 0) |
3444 | + return err; |
3445 | + while ((cardname1 = snd_card_iterator_next(&iter)) != NULL) { |
3446 | if (!do_init) |
3447 | break; |
3448 | - sprintf(cardname1, "%i", card); |
3449 | - err = init(initfile, initflags, cardname1); |
3450 | + err = init(cfgdir, initfile, initflags | FLAG_UCM_FBOOT | FLAG_UCM_BOOT, cardname1); |
3451 | if (err < 0) { |
3452 | finalerr = err; |
3453 | - initfailed(card, "init", err); |
3454 | + initfailed(iter.card, "init", err); |
3455 | } |
3456 | - initfailed(card, "restore", -ENOENT); |
3457 | + initfailed(iter.card, "restore", -ENOENT); |
3458 | } |
3459 | - if (first) |
3460 | - finalerr = 0; /* no cards, no error code */ |
3461 | err = finalerr; |
3462 | + if (iter.first) |
3463 | + err = 0; /* no cards, no error code */ |
3464 | goto out; |
3465 | } |
3466 | |
3467 | - if (!cardname) { |
3468 | - int card, first = 1; |
3469 | - char cardname1[16]; |
3470 | - |
3471 | - card = -1; |
3472 | - /* find each installed soundcards */ |
3473 | - while (1) { |
3474 | - if (snd_card_next(&card) < 0) |
3475 | - break; |
3476 | - if (card < 0) { |
3477 | - if (first) { |
3478 | - if (ignore_nocards) { |
3479 | - err = 0; |
3480 | - goto out; |
3481 | - } else { |
3482 | - error("No soundcards found..."); |
3483 | - err = -ENODEV; |
3484 | - goto out; |
3485 | - } |
3486 | - } |
3487 | - break; |
3488 | - } |
3489 | - first = 0; |
3490 | - /* do a check if controls matches state file */ |
3491 | - if (do_init && set_controls(card, config, 0)) { |
3492 | - sprintf(cardname1, "%i", card); |
3493 | - err = init(initfile, initflags, cardname1); |
3494 | - if (err < 0) { |
3495 | - initfailed(card, "init", err); |
3496 | - finalerr = err; |
3497 | - } |
3498 | - } |
3499 | - if ((err = set_controls(card, config, 1))) { |
3500 | - if (!force_restore) |
3501 | - finalerr = err; |
3502 | - initfailed(card, "restore", err); |
3503 | - } |
3504 | - } |
3505 | - } else { |
3506 | - int cardno; |
3507 | - |
3508 | - cardno = snd_card_get_index(cardname); |
3509 | - if (cardno < 0) { |
3510 | - error("Cannot find soundcard '%s'...", cardname); |
3511 | - err = -ENODEV; |
3512 | - goto out; |
3513 | - } |
3514 | + err = snd_card_iterator_sinit(&iter, cardname); |
3515 | + if (err < 0) |
3516 | + goto out; |
3517 | + while ((cardname1 = snd_card_iterator_next(&iter)) != NULL) { |
3518 | + /* error is ignored */ |
3519 | + init_ucm(initflags | FLAG_UCM_FBOOT, iter.card); |
3520 | /* do a check if controls matches state file */ |
3521 | - if (do_init && set_controls(cardno, config, 0)) { |
3522 | - err = init(initfile, initflags, cardname); |
3523 | + if (do_init && set_controls(iter.card, config, 0)) { |
3524 | + err = init(cfgdir, initfile, initflags | FLAG_UCM_BOOT, cardname1); |
3525 | if (err < 0) { |
3526 | - initfailed(cardno, "init", err); |
3527 | + initfailed(iter.card, "init", err); |
3528 | finalerr = err; |
3529 | } |
3530 | } |
3531 | - if ((err = set_controls(cardno, config, 1))) { |
3532 | - initfailed(cardno, "restore", err); |
3533 | + if ((err = set_controls(iter.card, config, 1))) { |
3534 | if (!force_restore) |
3535 | - goto out; |
3536 | + finalerr = err; |
3537 | + initfailed(iter.card, "restore", err); |
3538 | } |
3539 | } |
3540 | - err = finalerr; |
3541 | + err = finalerr ? finalerr : snd_card_iterator_error(&iter); |
3542 | out: |
3543 | - snd_config_delete(config); |
3544 | + if (config) |
3545 | + snd_config_delete(config); |
3546 | snd_config_update_free_global(); |
3547 | return err; |
3548 | } |
3549 | diff --git a/alsactl/utils.c b/alsactl/utils.c |
3550 | index a83aa0a..a507972 100644 |
3551 | --- a/alsactl/utils.c |
3552 | +++ b/alsactl/utils.c |
3553 | @@ -30,8 +30,7 @@ |
3554 | #include <syslog.h> |
3555 | #include <sys/stat.h> |
3556 | #include <sys/mman.h> |
3557 | - |
3558 | -#include <alsa/asoundlib.h> |
3559 | +#include <limits.h> |
3560 | #include "alsactl.h" |
3561 | |
3562 | int file_map(const char *filename, char **buf, size_t *bufsize) |
3563 | @@ -92,12 +91,12 @@ void initfailed(int cardnumber, const char *reason, int exitcode) |
3564 | return; |
3565 | sprintf(sexitcode, "%i", exitcode); |
3566 | fp = open(statefile, O_WRONLY|O_CREAT|O_APPEND, 0644); |
3567 | - write(fp, str, strlen(str)); |
3568 | - write(fp, ":", 1); |
3569 | - write(fp, reason, strlen(reason)); |
3570 | - write(fp, ":", 1); |
3571 | - write(fp, sexitcode, strlen(sexitcode)); |
3572 | - write(fp, "\n", 1); |
3573 | + (void)write(fp, str, strlen(str)); |
3574 | + (void)write(fp, ":", 1); |
3575 | + (void)write(fp, reason, strlen(reason)); |
3576 | + (void)write(fp, ":", 1); |
3577 | + (void)write(fp, sexitcode, strlen(sexitcode)); |
3578 | + (void)write(fp, "\n", 1); |
3579 | close(fp); |
3580 | free(str); |
3581 | } |
3582 | @@ -193,3 +192,143 @@ void error_handler(const char *file, int line, const char *function, int err, co |
3583 | fprintf(stderr, "alsa-lib %s:%i:(%s) %s%s%s\n", file, line, function, |
3584 | buf, err ? ": " : "", err ? snd_strerror(err) : ""); |
3585 | } |
3586 | + |
3587 | +int load_configuration(const char *file, snd_config_t **top, int *open_failed) |
3588 | +{ |
3589 | + snd_config_t *config; |
3590 | + snd_input_t *in; |
3591 | + int err, stdio_flag, lock_fd = -EINVAL; |
3592 | + |
3593 | + *top = NULL; |
3594 | + if (open_failed) |
3595 | + *open_failed = 0; |
3596 | + err = snd_config_top(&config); |
3597 | + if (err < 0) { |
3598 | + error("snd_config_top error: %s", snd_strerror(err)); |
3599 | + return err; |
3600 | + } |
3601 | + stdio_flag = !strcmp(file, "-"); |
3602 | + if (stdio_flag) { |
3603 | + err = snd_input_stdio_attach(&in, stdin, 0); |
3604 | + } else { |
3605 | + lock_fd = state_lock(file, 10); |
3606 | + err = lock_fd >= 0 ? snd_input_stdio_open(&in, file, "r") : lock_fd; |
3607 | + } |
3608 | + if (err < 0) { |
3609 | + if (open_failed) |
3610 | + *open_failed = 1; |
3611 | + goto out; |
3612 | + } |
3613 | + err = snd_config_load(config, in); |
3614 | + snd_input_close(in); |
3615 | + if (err < 0) { |
3616 | + error("snd_config_load error: %s", snd_strerror(err)); |
3617 | +out: |
3618 | + if (lock_fd >= 0) |
3619 | + state_unlock(lock_fd, file); |
3620 | + snd_config_delete(config); |
3621 | + snd_config_update_free_global(); |
3622 | + return err; |
3623 | + } else { |
3624 | + if (lock_fd >= 0) |
3625 | + state_unlock(lock_fd, file); |
3626 | + *top = config; |
3627 | + return 0; |
3628 | + } |
3629 | +} |
3630 | + |
3631 | +void snd_card_iterator_init(struct snd_card_iterator *iter, int cardno) |
3632 | +{ |
3633 | + iter->card = cardno; |
3634 | + iter->single = cardno >= 0; |
3635 | + iter->first = true; |
3636 | + iter->name[0] = '\0'; |
3637 | +} |
3638 | + |
3639 | +int snd_card_iterator_sinit(struct snd_card_iterator *iter, const char *cardname) |
3640 | +{ |
3641 | + int cardno = -1; |
3642 | + |
3643 | + if (cardname) { |
3644 | + if (strncmp(cardname, "hw:", 3) == 0) |
3645 | + cardname += 3; |
3646 | + cardno = snd_card_get_index(cardname); |
3647 | + if (cardno < 0) { |
3648 | + error("Cannot find soundcard '%s'...", cardname); |
3649 | + return cardno; |
3650 | + } |
3651 | + } |
3652 | + snd_card_iterator_init(iter, cardno); |
3653 | + return 0; |
3654 | +} |
3655 | + |
3656 | +const char *snd_card_iterator_next(struct snd_card_iterator *iter) |
3657 | +{ |
3658 | + if (iter->single) { |
3659 | + if (iter->first) { |
3660 | + iter->first = false; |
3661 | + goto retval; |
3662 | + } |
3663 | + return NULL; |
3664 | + } |
3665 | + if (snd_card_next(&iter->card) < 0) { |
3666 | + if (!ignore_nocards && iter->first) |
3667 | + error("No soundcards found..."); |
3668 | + return NULL; |
3669 | + } |
3670 | + iter->first = false; |
3671 | + if (iter->card < 0) |
3672 | + return NULL; |
3673 | +retval: |
3674 | + snprintf(iter->name, sizeof(iter->name), "hw:%d", iter->card); |
3675 | + |
3676 | + return (const char *)iter->name; |
3677 | +} |
3678 | + |
3679 | +int snd_card_iterator_error(struct snd_card_iterator *iter) |
3680 | +{ |
3681 | + return iter->first ? (ignore_nocards ? 0 : -ENODEV) : 0; |
3682 | +} |
3683 | + |
3684 | +static int cleanup_filename_filter(const struct dirent *dirent) |
3685 | +{ |
3686 | + size_t flen; |
3687 | + |
3688 | + if (dirent == NULL) |
3689 | + return 0; |
3690 | + if (dirent->d_type == DT_DIR) |
3691 | + return 0; |
3692 | + |
3693 | + flen = strlen(dirent->d_name); |
3694 | + if (flen <= 5) |
3695 | + return 0; |
3696 | + |
3697 | + if (strncmp(&dirent->d_name[flen-5], ".conf", 5) == 0) |
3698 | + return 1; |
3699 | + |
3700 | + return 0; |
3701 | +} |
3702 | + |
3703 | +int snd_card_clean_cfgdir(const char *cfgdir, int cardno) |
3704 | +{ |
3705 | + char path[PATH_MAX]; |
3706 | + struct dirent **list; |
3707 | + int lasterr = 0, n, j; |
3708 | + |
3709 | + snprintf(path, sizeof(path), "%s/card%d.conf.d", cfgdir, cardno); |
3710 | + n = scandir(path, &list, cleanup_filename_filter, NULL); |
3711 | + if (n < 0) { |
3712 | + if (errno == ENOENT) |
3713 | + return 0; |
3714 | + return -errno; |
3715 | + } |
3716 | + for (j = 0; j < n; j++) { |
3717 | + snprintf(path, sizeof(path), "%s/card%d.conf.d/%s", cfgdir, cardno, list[j]->d_name); |
3718 | + if (remove(path)) { |
3719 | + error("Unable to remove file '%s'", path); |
3720 | + lasterr = -errno; |
3721 | + } |
3722 | + } |
3723 | + |
3724 | + return lasterr; |
3725 | +} |
3726 | diff --git a/alsaloop/Makefile.in b/alsaloop/Makefile.in |
3727 | index 9e2c6b5..71c3bdc 100644 |
3728 | --- a/alsaloop/Makefile.in |
3729 | +++ b/alsaloop/Makefile.in |
3730 | @@ -1,7 +1,7 @@ |
3731 | -# Makefile.in generated by automake 1.16.1 from Makefile.am. |
3732 | +# Makefile.in generated by automake 1.16.2 from Makefile.am. |
3733 | # @configure_input@ |
3734 | |
3735 | -# Copyright (C) 1994-2018 Free Software Foundation, Inc. |
3736 | +# Copyright (C) 1994-2020 Free Software Foundation, Inc. |
3737 | |
3738 | # This Makefile.in is free software; the Free Software Foundation |
3739 | # gives unlimited permission to copy and/or distribute it, |
3740 | @@ -94,7 +94,8 @@ bin_PROGRAMS = alsaloop$(EXEEXT) |
3741 | subdir = alsaloop |
3742 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
3743 | am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ |
3744 | - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
3745 | + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ |
3746 | + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
3747 | $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ |
3748 | $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ |
3749 | $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ |
3750 | @@ -262,8 +263,8 @@ MAINT = @MAINT@ |
3751 | MAKEINFO = @MAKEINFO@ |
3752 | MKDIR_P = @MKDIR_P@ |
3753 | MSGFMT = @MSGFMT@ |
3754 | -MSGFMT_015 = @MSGFMT_015@ |
3755 | MSGMERGE = @MSGMERGE@ |
3756 | +MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ |
3757 | NCURSESW_CFLAGS = @NCURSESW_CFLAGS@ |
3758 | NCURSESW_LIBS = @NCURSESW_LIBS@ |
3759 | NCURSES_CFLAGS = @NCURSES_CFLAGS@ |
3760 | @@ -343,6 +344,7 @@ prefix = @prefix@ |
3761 | program_transform_name = @program_transform_name@ |
3762 | psdir = @psdir@ |
3763 | rst2man_available = @rst2man_available@ |
3764 | +runstatedir = @runstatedir@ |
3765 | sbindir = @sbindir@ |
3766 | sharedstatedir = @sharedstatedir@ |
3767 | srcdir = @srcdir@ |
3768 | diff --git a/alsaloop/alsaloop.1 b/alsaloop/alsaloop.1 |
3769 | index 33fa4d1..6bacfd5 100644 |
3770 | --- a/alsaloop/alsaloop.1 |
3771 | +++ b/alsaloop/alsaloop.1 |
3772 | @@ -79,7 +79,7 @@ Default format is S16_LE. |
3773 | Channel count specification. Default value is 2. |
3774 | |
3775 | .TP |
3776 | -\fI\-c <rate>\fP | \fI\-\-rate=<rate>\fP |
3777 | +\fI\-r <rate>\fP | \fI\-\-rate=<rate>\fP |
3778 | |
3779 | Rate specification. Default value is 48000 (Hz). |
3780 | |
3781 | diff --git a/alsaloop/alsaloop.c b/alsaloop/alsaloop.c |
3782 | index 6a9ce58..06ffadf 100644 |
3783 | --- a/alsaloop/alsaloop.c |
3784 | +++ b/alsaloop/alsaloop.c |
3785 | @@ -85,12 +85,17 @@ static int create_loopback_handle(struct loopback_handle **_handle, |
3786 | if (device == NULL) |
3787 | device = "hw:0,0"; |
3788 | handle->device = strdup(device); |
3789 | - if (handle->device == NULL) |
3790 | + if (handle->device == NULL) { |
3791 | + free(handle); |
3792 | return -ENOMEM; |
3793 | + } |
3794 | if (ctldev) { |
3795 | handle->ctldev = strdup(ctldev); |
3796 | - if (handle->ctldev == NULL) |
3797 | + if (handle->ctldev == NULL) { |
3798 | + free(handle->device); |
3799 | + free(handle); |
3800 | return -ENOMEM; |
3801 | + } |
3802 | } else { |
3803 | handle->ctldev = NULL; |
3804 | } |
3805 | diff --git a/alsaloop/pcmjob.c b/alsaloop/pcmjob.c |
3806 | index 6a9aff4..4efdd63 100644 |
3807 | --- a/alsaloop/pcmjob.c |
3808 | +++ b/alsaloop/pcmjob.c |
3809 | @@ -556,13 +556,13 @@ static void buf_add_src(struct loopback *loop) |
3810 | if (capt->format == SND_PCM_FORMAT_S32) |
3811 | src_int_to_float_array((int *)(capt->buf + |
3812 | pos1 * capt->frame_size), |
3813 | - (void *)loop->src_data.data_in + |
3814 | + (float *)loop->src_data.data_in + |
3815 | pos * capt->channels, |
3816 | count1 * capt->channels); |
3817 | else |
3818 | src_short_to_float_array((short *)(capt->buf + |
3819 | pos1 * capt->frame_size), |
3820 | - (void *)loop->src_data.data_in + |
3821 | + (float *)loop->src_data.data_in + |
3822 | pos * capt->channels, |
3823 | count1 * capt->channels); |
3824 | count -= count1; |
3825 | @@ -1698,9 +1698,8 @@ int pcmjob_pollfds_init(struct loopback *loop, struct pollfd *fds) |
3826 | static snd_pcm_sframes_t get_queued_playback_samples(struct loopback *loop) |
3827 | { |
3828 | snd_pcm_sframes_t delay; |
3829 | - int err; |
3830 | |
3831 | - if ((err = snd_pcm_delay(loop->play->handle, &delay)) < 0) |
3832 | + if (snd_pcm_delay(loop->play->handle, &delay) < 0) |
3833 | return 0; |
3834 | loop->play->last_delay = delay; |
3835 | delay += loop->play->buf_count; |
3836 | diff --git a/alsamixer/Makefile.in b/alsamixer/Makefile.in |
3837 | index ba4c05d..2467f53 100644 |
3838 | --- a/alsamixer/Makefile.in |
3839 | +++ b/alsamixer/Makefile.in |
3840 | @@ -1,7 +1,7 @@ |
3841 | -# Makefile.in generated by automake 1.16.1 from Makefile.am. |
3842 | +# Makefile.in generated by automake 1.16.2 from Makefile.am. |
3843 | # @configure_input@ |
3844 | |
3845 | -# Copyright (C) 1994-2018 Free Software Foundation, Inc. |
3846 | +# Copyright (C) 1994-2020 Free Software Foundation, Inc. |
3847 | |
3848 | # This Makefile.in is free software; the Free Software Foundation |
3849 | # gives unlimited permission to copy and/or distribute it, |
3850 | @@ -92,7 +92,8 @@ bin_PROGRAMS = alsamixer$(EXEEXT) |
3851 | subdir = alsamixer |
3852 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
3853 | am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ |
3854 | - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
3855 | + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ |
3856 | + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
3857 | $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ |
3858 | $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ |
3859 | $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ |
3860 | @@ -289,8 +290,8 @@ MAINT = @MAINT@ |
3861 | MAKEINFO = @MAKEINFO@ |
3862 | MKDIR_P = @MKDIR_P@ |
3863 | MSGFMT = @MSGFMT@ |
3864 | -MSGFMT_015 = @MSGFMT_015@ |
3865 | MSGMERGE = @MSGMERGE@ |
3866 | +MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ |
3867 | NCURSESW_CFLAGS = @NCURSESW_CFLAGS@ |
3868 | NCURSESW_LIBS = @NCURSESW_LIBS@ |
3869 | NCURSES_CFLAGS = @NCURSES_CFLAGS@ |
3870 | @@ -370,6 +371,7 @@ prefix = @prefix@ |
3871 | program_transform_name = @program_transform_name@ |
3872 | psdir = @psdir@ |
3873 | rst2man_available = @rst2man_available@ |
3874 | +runstatedir = @runstatedir@ |
3875 | sbindir = @sbindir@ |
3876 | sharedstatedir = @sharedstatedir@ |
3877 | srcdir = @srcdir@ |
3878 | diff --git a/alsamixer/alsamixer.1 b/alsamixer/alsamixer.1 |
3879 | index 8d34680..2d711cf 100644 |
3880 | --- a/alsamixer/alsamixer.1 |
3881 | +++ b/alsamixer/alsamixer.1 |
3882 | @@ -34,7 +34,7 @@ Toggle the using of colors. |
3883 | |
3884 | .SH MIXER VIEWS |
3885 | |
3886 | -The top-left corner of \fBalsamixer\fP is the are to show some basic |
3887 | +The top-left corner of \fBalsamixer\fP shows some basic |
3888 | information: the card name, the mixer chip name, the current view |
3889 | mode and the currently selected mixer item. |
3890 | When the mixer item is switched off, \fI[Off]\fP is displayed in its |
3891 | diff --git a/alsamixer/card_select.c b/alsamixer/card_select.c |
3892 | index a58c037..aac7b45 100644 |
3893 | --- a/alsamixer/card_select.c |
3894 | +++ b/alsamixer/card_select.c |
3895 | @@ -108,7 +108,7 @@ static int get_cards(void) |
3896 | int count, number, err; |
3897 | snd_ctl_t *ctl; |
3898 | snd_ctl_card_info_t *info; |
3899 | - char buf[16]; |
3900 | + char buf[32]; |
3901 | struct card *card, *prev_card; |
3902 | |
3903 | first_card.indexstr = "-"; |
3904 | @@ -125,7 +125,11 @@ static int get_cards(void) |
3905 | fatal_alsa_error(_("cannot enumerate sound cards"), err); |
3906 | if (number < 0) |
3907 | break; |
3908 | +#if defined(SND_LIB_VER) && SND_LIB_VER(1, 2, 5) <= SND_LIB_VERSION |
3909 | + sprintf(buf, "sysdefault:%d", number); |
3910 | +#else |
3911 | sprintf(buf, "hw:%d", number); |
3912 | +#endif |
3913 | err = snd_ctl_open(&ctl, buf, 0); |
3914 | if (err < 0) |
3915 | continue; |
3916 | diff --git a/alsamixer/cli.c b/alsamixer/cli.c |
3917 | index 23d34ad..f153f28 100644 |
3918 | --- a/alsamixer/cli.c |
3919 | +++ b/alsamixer/cli.c |
3920 | @@ -73,7 +73,7 @@ static void parse_options(int argc, char *argv[]) |
3921 | }; |
3922 | int option; |
3923 | int card_index; |
3924 | - static char name_buf[16]; |
3925 | + static char name_buf[24]; |
3926 | |
3927 | while ((option = getopt_long(argc, argv, short_options, |
3928 | long_options, NULL)) != -1) { |
3929 | @@ -88,7 +88,11 @@ static void parse_options(int argc, char *argv[]) |
3930 | fprintf(stderr, _("invalid card index: %s\n"), optarg); |
3931 | goto fail; |
3932 | } |
3933 | +#if defined(SND_LIB_VER) && SND_LIB_VER(1, 2, 5) <= SND_LIB_VERSION |
3934 | + sprintf(name_buf, "sysdefault:%d", card_index); |
3935 | +#else |
3936 | sprintf(name_buf, "hw:%d", card_index); |
3937 | +#endif |
3938 | selem_regopt.device = name_buf; |
3939 | break; |
3940 | case 'D': |
3941 | diff --git a/alsamixer/colors.c b/alsamixer/colors.c |
3942 | index 1a8cb8f..c81ebcf 100644 |
3943 | --- a/alsamixer/colors.c |
3944 | +++ b/alsamixer/colors.c |
3945 | @@ -50,11 +50,11 @@ void init_colors(int use_color) |
3946 | start_color(); |
3947 | use_default_colors(); |
3948 | |
3949 | - get_color_pair(COLOR_CYAN, COLOR_BLACK); // COLOR_PAIR(1) |
3950 | - get_color_pair(COLOR_YELLOW, COLOR_BLACK); |
3951 | + get_color_pair(COLOR_CYAN, -1); // COLOR_PAIR(1) |
3952 | + get_color_pair(COLOR_YELLOW, -1); |
3953 | get_color_pair(COLOR_WHITE, COLOR_GREEN); |
3954 | - get_color_pair(COLOR_RED, COLOR_BLACK); |
3955 | - get_color_pair(COLOR_WHITE, COLOR_BLACK); |
3956 | + get_color_pair(COLOR_RED, -1); |
3957 | + get_color_pair(COLOR_WHITE, -1); |
3958 | get_color_pair(COLOR_WHITE, COLOR_BLUE); |
3959 | get_color_pair(COLOR_RED, COLOR_BLUE); |
3960 | get_color_pair(COLOR_GREEN, COLOR_GREEN); |
3961 | diff --git a/alsamixer/configparser.c b/alsamixer/configparser.c |
3962 | index 93aa72a..7647987 100644 |
3963 | --- a/alsamixer/configparser.c |
3964 | +++ b/alsamixer/configparser.c |
3965 | @@ -155,7 +155,7 @@ const char *mixer_words = |
3966 | static unsigned int parse_words(const char *name, const char* wordlist, unsigned int itemlen, unsigned int *number) { |
3967 | unsigned int words = 0; |
3968 | unsigned int word; |
3969 | - unsigned int i; |
3970 | + int i; |
3971 | char buf[16]; |
3972 | char *endptr; |
3973 | |
3974 | @@ -181,7 +181,7 @@ static unsigned int parse_words(const char *name, const char* wordlist, unsigned |
3975 | word = W_NUMBER; |
3976 | } |
3977 | else if ((i = strlist_index(wordlist, itemlen, buf)) >= 0) |
3978 | - word = 2U << i; |
3979 | + word = i <= 30 ? (2U << i) : 0; |
3980 | else |
3981 | return 0; |
3982 | |
3983 | diff --git a/alsamixer/mixer_display.c b/alsamixer/mixer_display.c |
3984 | index 882781d..330fdd5 100644 |
3985 | --- a/alsamixer/mixer_display.c |
3986 | +++ b/alsamixer/mixer_display.c |
3987 | @@ -634,7 +634,7 @@ static void display_control(unsigned int control_index) |
3988 | |
3989 | static void display_scroll_indicators(void) |
3990 | { |
3991 | - int y0, y1, y; |
3992 | + int y0, y1; |
3993 | chtype left, right; |
3994 | |
3995 | if (screen_too_small) |
3996 | diff --git a/alsamixer/widget.c b/alsamixer/widget.c |
3997 | index 17f3ace..5fedaba 100644 |
3998 | --- a/alsamixer/widget.c |
3999 | +++ b/alsamixer/widget.c |
4000 | @@ -29,10 +29,6 @@ int screen_cols; |
4001 | |
4002 | static int cursor_visibility = -1; |
4003 | |
4004 | -static void widget_handle_key(int key) |
4005 | -{ |
4006 | -} |
4007 | - |
4008 | static void update_cursor_visibility(void) |
4009 | { |
4010 | const struct widget *active_widget; |
4011 | @@ -87,9 +83,6 @@ void widget_init(struct widget *widget, int lines_, int cols, int y, int x, |
4012 | set_panel_userptr(widget->panel, widget); |
4013 | } |
4014 | |
4015 | - //if (!widget->handle_key) |
4016 | - // widget->handle_key = widget_handle_key; |
4017 | - |
4018 | if (old_window) |
4019 | delwin(old_window); |
4020 | |
4021 | diff --git a/alsaucm/Makefile.in b/alsaucm/Makefile.in |
4022 | index 193c32a..27ba8f2 100644 |
4023 | --- a/alsaucm/Makefile.in |
4024 | +++ b/alsaucm/Makefile.in |
4025 | @@ -1,7 +1,7 @@ |
4026 | -# Makefile.in generated by automake 1.16.1 from Makefile.am. |
4027 | +# Makefile.in generated by automake 1.16.2 from Makefile.am. |
4028 | # @configure_input@ |
4029 | |
4030 | -# Copyright (C) 1994-2018 Free Software Foundation, Inc. |
4031 | +# Copyright (C) 1994-2020 Free Software Foundation, Inc. |
4032 | |
4033 | # This Makefile.in is free software; the Free Software Foundation |
4034 | # gives unlimited permission to copy and/or distribute it, |
4035 | @@ -93,7 +93,8 @@ bin_PROGRAMS = alsaucm$(EXEEXT) |
4036 | subdir = alsaucm |
4037 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
4038 | am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ |
4039 | - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
4040 | + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ |
4041 | + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
4042 | $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ |
4043 | $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ |
4044 | $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ |
4045 | @@ -257,8 +258,8 @@ MAINT = @MAINT@ |
4046 | MAKEINFO = @MAKEINFO@ |
4047 | MKDIR_P = @MKDIR_P@ |
4048 | MSGFMT = @MSGFMT@ |
4049 | -MSGFMT_015 = @MSGFMT_015@ |
4050 | MSGMERGE = @MSGMERGE@ |
4051 | +MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ |
4052 | NCURSESW_CFLAGS = @NCURSESW_CFLAGS@ |
4053 | NCURSESW_LIBS = @NCURSESW_LIBS@ |
4054 | NCURSES_CFLAGS = @NCURSES_CFLAGS@ |
4055 | @@ -338,6 +339,7 @@ prefix = @prefix@ |
4056 | program_transform_name = @program_transform_name@ |
4057 | psdir = @psdir@ |
4058 | rst2man_available = @rst2man_available@ |
4059 | +runstatedir = @runstatedir@ |
4060 | sbindir = @sbindir@ |
4061 | sharedstatedir = @sharedstatedir@ |
4062 | srcdir = @srcdir@ |
4063 | diff --git a/alsaucm/alsaucm.rst b/alsaucm/alsaucm.rst |
4064 | index 7890ba5..3098672 100644 |
4065 | --- a/alsaucm/alsaucm.rst |
4066 | +++ b/alsaucm/alsaucm.rst |
4067 | @@ -122,7 +122,7 @@ Available commands: |
4068 | the value of the `IDENTIFIER` argument can can be: |
4069 | |
4070 | - ``_devstatus/{device}`` |
4071 | - - ``_modtstaus/{device}`` |
4072 | + - ``_modstatus/{device}`` |
4073 | |
4074 | ``set`` `IDENTIFIER` `VALUE` |
4075 | set string value |
4076 | diff --git a/alsaucm/usecase.c b/alsaucm/usecase.c |
4077 | index d39a159..1dba1ca 100644 |
4078 | --- a/alsaucm/usecase.c |
4079 | +++ b/alsaucm/usecase.c |
4080 | @@ -58,7 +58,9 @@ enum uc_cmd { |
4081 | /* set/get */ |
4082 | OM_SET, |
4083 | OM_GET, |
4084 | + OM_GET_VAL, |
4085 | OM_GETI, |
4086 | + OM_GETI_VAL, |
4087 | |
4088 | /* misc */ |
4089 | OM_HELP, |
4090 | @@ -82,7 +84,9 @@ static struct cmd cmds[] = { |
4091 | { OM_LIST2, 1, 1, "list" }, |
4092 | { OM_SET, 2, 1, "set" }, |
4093 | { OM_GET, 1, 1, "get" }, |
4094 | + { OM_GET_VAL, 1, 1, "getval" }, |
4095 | { OM_GETI, 1, 1, "geti" }, |
4096 | + { OM_GETI_VAL, 1, 1, "getival" }, |
4097 | { OM_DUMP, 1, 1, "dump" }, |
4098 | { OM_HELP, 0, 0, "help" }, |
4099 | { OM_QUIT, 0, 0, "quit" }, |
4100 | @@ -328,6 +332,7 @@ static int do_one(struct context *context, struct cmd *cmd, char **argv) |
4101 | } |
4102 | break; |
4103 | case OM_GET: |
4104 | + case OM_GET_VAL: |
4105 | err = snd_use_case_get(context->uc_mgr, argv[0], &str); |
4106 | if (err < 0) { |
4107 | fprintf(stderr, |
4108 | @@ -336,10 +341,14 @@ static int do_one(struct context *context, struct cmd *cmd, char **argv) |
4109 | snd_strerror(err)); |
4110 | return err; |
4111 | } |
4112 | - printf(" %s=%s\n", argv[0], str); |
4113 | + if (cmd->code == OM_GET) |
4114 | + printf(" %s=%s\n", argv[0], str); |
4115 | + else |
4116 | + printf("%s\n", str); |
4117 | free((void *)str); |
4118 | break; |
4119 | case OM_GETI: |
4120 | + case OM_GETI_VAL: |
4121 | err = snd_use_case_geti(context->uc_mgr, argv[0], &lval); |
4122 | if (err < 0) { |
4123 | fprintf(stderr, |
4124 | @@ -348,7 +357,10 @@ static int do_one(struct context *context, struct cmd *cmd, char **argv) |
4125 | snd_strerror(err)); |
4126 | return lval; |
4127 | } |
4128 | - printf(" %s=%li\n", argv[0], lval); |
4129 | + if (cmd->code == OM_GETI) |
4130 | + printf(" %s=%li\n", argv[0], lval); |
4131 | + else |
4132 | + printf("%li\n", lval); |
4133 | break; |
4134 | case OM_QUIT: |
4135 | context->do_exit = 1; |
4136 | diff --git a/amidi/Makefile.in b/amidi/Makefile.in |
4137 | index 4efa228..e50087b 100644 |
4138 | --- a/amidi/Makefile.in |
4139 | +++ b/amidi/Makefile.in |
4140 | @@ -1,7 +1,7 @@ |
4141 | -# Makefile.in generated by automake 1.16.1 from Makefile.am. |
4142 | +# Makefile.in generated by automake 1.16.2 from Makefile.am. |
4143 | # @configure_input@ |
4144 | |
4145 | -# Copyright (C) 1994-2018 Free Software Foundation, Inc. |
4146 | +# Copyright (C) 1994-2020 Free Software Foundation, Inc. |
4147 | |
4148 | # This Makefile.in is free software; the Free Software Foundation |
4149 | # gives unlimited permission to copy and/or distribute it, |
4150 | @@ -92,7 +92,8 @@ bin_PROGRAMS = amidi$(EXEEXT) |
4151 | subdir = amidi |
4152 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
4153 | am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ |
4154 | - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
4155 | + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ |
4156 | + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
4157 | $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ |
4158 | $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ |
4159 | $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ |
4160 | @@ -254,8 +255,8 @@ MAINT = @MAINT@ |
4161 | MAKEINFO = @MAKEINFO@ |
4162 | MKDIR_P = @MKDIR_P@ |
4163 | MSGFMT = @MSGFMT@ |
4164 | -MSGFMT_015 = @MSGFMT_015@ |
4165 | MSGMERGE = @MSGMERGE@ |
4166 | +MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ |
4167 | NCURSESW_CFLAGS = @NCURSESW_CFLAGS@ |
4168 | NCURSESW_LIBS = @NCURSESW_LIBS@ |
4169 | NCURSES_CFLAGS = @NCURSES_CFLAGS@ |
4170 | @@ -335,6 +336,7 @@ prefix = @prefix@ |
4171 | program_transform_name = @program_transform_name@ |
4172 | psdir = @psdir@ |
4173 | rst2man_available = @rst2man_available@ |
4174 | +runstatedir = @runstatedir@ |
4175 | sbindir = @sbindir@ |
4176 | sharedstatedir = @sharedstatedir@ |
4177 | srcdir = @srcdir@ |
4178 | diff --git a/amidi/amidi.c b/amidi/amidi.c |
4179 | index cde4697..90e7750 100644 |
4180 | --- a/amidi/amidi.c |
4181 | +++ b/amidi/amidi.c |
4182 | @@ -688,8 +688,11 @@ int main(int argc, char *argv[]) |
4183 | continue; |
4184 | read += length; |
4185 | |
4186 | - if (receive_file != -1) |
4187 | - write(receive_file, buf, length); |
4188 | + if (receive_file != -1) { |
4189 | + ssize_t wlength = write(receive_file, buf, length); |
4190 | + if (wlength != length) |
4191 | + error("write error: %s", wlength < 0 ? strerror(errno) : "short"); |
4192 | + } |
4193 | if (dump) { |
4194 | for (i = 0; i < length; ++i) |
4195 | print_byte(buf[i]); |
4196 | diff --git a/amixer/Makefile.am b/amixer/Makefile.am |
4197 | index b4526ca..46ec736 100644 |
4198 | --- a/amixer/Makefile.am |
4199 | +++ b/amixer/Makefile.am |
4200 | @@ -5,7 +5,7 @@ LDADD = -lm |
4201 | # CFLAGS += -g -Wall |
4202 | |
4203 | bin_PROGRAMS = amixer |
4204 | -amixer_SOURCES = amixer.c ../alsamixer/volume_mapping.c |
4205 | -noinst_HEADERS = amixer.h |
4206 | +amixer_SOURCES = amixer.c volume_mapping.c |
4207 | +noinst_HEADERS = amixer.h volume_mapping.h |
4208 | man_MANS = amixer.1 |
4209 | EXTRA_DIST = amixer.1 |
4210 | diff --git a/amixer/Makefile.in b/amixer/Makefile.in |
4211 | index 8d10466..b7de482 100644 |
4212 | --- a/amixer/Makefile.in |
4213 | +++ b/amixer/Makefile.in |
4214 | @@ -1,7 +1,7 @@ |
4215 | -# Makefile.in generated by automake 1.16.1 from Makefile.am. |
4216 | +# Makefile.in generated by automake 1.16.2 from Makefile.am. |
4217 | # @configure_input@ |
4218 | |
4219 | -# Copyright (C) 1994-2018 Free Software Foundation, Inc. |
4220 | +# Copyright (C) 1994-2020 Free Software Foundation, Inc. |
4221 | |
4222 | # This Makefile.in is free software; the Free Software Foundation |
4223 | # gives unlimited permission to copy and/or distribute it, |
4224 | @@ -93,7 +93,8 @@ bin_PROGRAMS = amixer$(EXEEXT) |
4225 | subdir = amixer |
4226 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
4227 | am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ |
4228 | - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
4229 | + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ |
4230 | + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
4231 | $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ |
4232 | $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ |
4233 | $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ |
4234 | @@ -130,10 +131,6 @@ am__maybe_remake_depfiles = depfiles |
4235 | am__depfiles_remade = ./$(DEPDIR)/amixer.Po \ |
4236 | ./$(DEPDIR)/volume_mapping.Po |
4237 | am__mv = mv -f |
4238 | -AM_V_lt = $(am__v_lt_@AM_V@) |
4239 | -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) |
4240 | -am__v_lt_0 = --silent |
4241 | -am__v_lt_1 = |
4242 | COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ |
4243 | $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) |
4244 | AM_V_CC = $(am__v_CC_@AM_V@) |
4245 | @@ -263,8 +260,8 @@ MAINT = @MAINT@ |
4246 | MAKEINFO = @MAKEINFO@ |
4247 | MKDIR_P = @MKDIR_P@ |
4248 | MSGFMT = @MSGFMT@ |
4249 | -MSGFMT_015 = @MSGFMT_015@ |
4250 | MSGMERGE = @MSGMERGE@ |
4251 | +MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ |
4252 | NCURSESW_CFLAGS = @NCURSESW_CFLAGS@ |
4253 | NCURSESW_LIBS = @NCURSESW_LIBS@ |
4254 | NCURSES_CFLAGS = @NCURSES_CFLAGS@ |
4255 | @@ -344,6 +341,7 @@ prefix = @prefix@ |
4256 | program_transform_name = @program_transform_name@ |
4257 | psdir = @psdir@ |
4258 | rst2man_available = @rst2man_available@ |
4259 | +runstatedir = @runstatedir@ |
4260 | sbindir = @sbindir@ |
4261 | sharedstatedir = @sharedstatedir@ |
4262 | srcdir = @srcdir@ |
4263 | @@ -358,8 +356,8 @@ xmlto_available = @xmlto_available@ |
4264 | AM_CFLAGS = -D_GNU_SOURCE |
4265 | AM_CPPFLAGS = -I$(top_srcdir)/include |
4266 | LDADD = -lm |
4267 | -amixer_SOURCES = amixer.c ../alsamixer/volume_mapping.c |
4268 | -noinst_HEADERS = amixer.h |
4269 | +amixer_SOURCES = amixer.c volume_mapping.c |
4270 | +noinst_HEADERS = amixer.h volume_mapping.h |
4271 | man_MANS = amixer.1 |
4272 | EXTRA_DIST = amixer.1 |
4273 | all: all-am |
4274 | @@ -470,20 +468,6 @@ am--depfiles: $(am__depfiles_remade) |
4275 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ |
4276 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
4277 | @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` |
4278 | - |
4279 | -volume_mapping.o: ../alsamixer/volume_mapping.c |
4280 | -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT volume_mapping.o -MD -MP -MF $(DEPDIR)/volume_mapping.Tpo -c -o volume_mapping.o `test -f '../alsamixer/volume_mapping.c' || echo '$(srcdir)/'`../alsamixer/volume_mapping.c |
4281 | -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_mapping.Tpo $(DEPDIR)/volume_mapping.Po |
4282 | -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../alsamixer/volume_mapping.c' object='volume_mapping.o' libtool=no @AMDEPBACKSLASH@ |
4283 | -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
4284 | -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o volume_mapping.o `test -f '../alsamixer/volume_mapping.c' || echo '$(srcdir)/'`../alsamixer/volume_mapping.c |
4285 | - |
4286 | -volume_mapping.obj: ../alsamixer/volume_mapping.c |
4287 | -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT volume_mapping.obj -MD -MP -MF $(DEPDIR)/volume_mapping.Tpo -c -o volume_mapping.obj `if test -f '../alsamixer/volume_mapping.c'; then $(CYGPATH_W) '../alsamixer/volume_mapping.c'; else $(CYGPATH_W) '$(srcdir)/../alsamixer/volume_mapping.c'; fi` |
4288 | -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_mapping.Tpo $(DEPDIR)/volume_mapping.Po |
4289 | -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../alsamixer/volume_mapping.c' object='volume_mapping.obj' libtool=no @AMDEPBACKSLASH@ |
4290 | -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
4291 | -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o volume_mapping.obj `if test -f '../alsamixer/volume_mapping.c'; then $(CYGPATH_W) '../alsamixer/volume_mapping.c'; else $(CYGPATH_W) '$(srcdir)/../alsamixer/volume_mapping.c'; fi` |
4292 | install-man1: $(man_MANS) |
4293 | @$(NORMAL_INSTALL) |
4294 | @list1=''; \ |
4295 | diff --git a/amixer/amixer.1 b/amixer/amixer.1 |
4296 | index 76007d2..0bac82b 100644 |
4297 | --- a/amixer/amixer.1 |
4298 | +++ b/amixer/amixer.1 |
4299 | @@ -44,11 +44,12 @@ value, respectively. |
4300 | The parameters \fIcap, nocap, mute, unmute, toggle\fP are used to |
4301 | change capture (recording) and muting for the group specified. |
4302 | |
4303 | -The optional modifiers can be put as extra parameters to specify |
4304 | -the stream direction or channels to apply. |
4305 | +The optional modifiers can be put as extra parameters before the value to |
4306 | +specify the stream direction or channels to apply. |
4307 | The modifiers \fIplayback\fP and \fIcapture\fP specify the stream, |
4308 | -and the modifiers \fIfront, rear, center, woofer\fP are used to specify |
4309 | -channels to be changed. |
4310 | +and the modifiers \fIfront, frontleft, frontright, frontcenter, center, |
4311 | +rear, rearright, rearleft, woofer\fP are used to specify channels to be |
4312 | +changed. |
4313 | |
4314 | A simple mixer control must be specified. Only one device can be controlled |
4315 | at a time. |
4316 | diff --git a/amixer/amixer.c b/amixer/amixer.c |
4317 | index b3b9b48..f9cbb89 100644 |
4318 | --- a/amixer/amixer.c |
4319 | +++ b/amixer/amixer.c |
4320 | @@ -1602,7 +1602,8 @@ static int events(int argc ATTRIBUTE_UNUSED, char *argv[] ATTRIBUTE_UNUSED) |
4321 | if (res >= 0) { |
4322 | printf("Poll ok: %i\n", res); |
4323 | res = snd_hctl_handle_events(handle); |
4324 | - assert(res > 0); |
4325 | + if (res < 0) |
4326 | + printf("ERR: %s (%d)\n", snd_strerror(res), res); |
4327 | } |
4328 | } |
4329 | snd_hctl_close(handle); |
4330 | @@ -1771,7 +1772,7 @@ static int exec_stdin(void) |
4331 | |
4332 | int main(int argc, char *argv[]) |
4333 | { |
4334 | - int morehelp, level = 0; |
4335 | + int badopt, retval, level = 0; |
4336 | int read_stdin = 0; |
4337 | static const struct option long_option[] = |
4338 | { |
4339 | @@ -1790,7 +1791,7 @@ int main(int argc, char *argv[]) |
4340 | {NULL, 0, NULL, 0}, |
4341 | }; |
4342 | |
4343 | - morehelp = 0; |
4344 | + badopt = 0; |
4345 | while (1) { |
4346 | int c; |
4347 | |
4348 | @@ -1805,10 +1806,14 @@ int main(int argc, char *argv[]) |
4349 | int i; |
4350 | i = snd_card_get_index(optarg); |
4351 | if (i >= 0 && i < 32) |
4352 | +#if defined(SND_LIB_VER) && SND_LIB_VER(1, 2, 5) <= SND_LIB_VERSION |
4353 | + sprintf(card, "sysdefault:%i", i); |
4354 | +#else |
4355 | sprintf(card, "hw:%i", i); |
4356 | +#endif |
4357 | else { |
4358 | - fprintf(stderr, "Invalid card number.\n"); |
4359 | - morehelp++; |
4360 | + fprintf(stderr, "Invalid card number '%s'.\n", optarg); |
4361 | + badopt++; |
4362 | } |
4363 | } |
4364 | break; |
4365 | @@ -1830,7 +1835,7 @@ int main(int argc, char *argv[]) |
4366 | break; |
4367 | case 'v': |
4368 | printf("amixer version " SND_UTIL_VERSION_STR "\n"); |
4369 | - return 1; |
4370 | + return 0; |
4371 | case 'a': |
4372 | smixer_level = 1; |
4373 | memset(&smixer_options, 0, sizeof(smixer_options)); |
4374 | @@ -1841,7 +1846,7 @@ int main(int argc, char *argv[]) |
4375 | smixer_options.abstract = SND_MIXER_SABSTRACT_BASIC; |
4376 | else { |
4377 | fprintf(stderr, "Select correct abstraction level (none or basic)...\n"); |
4378 | - morehelp++; |
4379 | + badopt++; |
4380 | } |
4381 | break; |
4382 | case 's': |
4383 | @@ -1854,49 +1859,55 @@ int main(int argc, char *argv[]) |
4384 | std_vol_type = VOL_MAP; |
4385 | break; |
4386 | default: |
4387 | - fprintf(stderr, "Invalid switch or option needs an argument.\n"); |
4388 | - morehelp++; |
4389 | + fprintf(stderr, "Invalid switch or option -%c needs an argument.\n", c); |
4390 | + badopt++; |
4391 | } |
4392 | } |
4393 | - if (morehelp) { |
4394 | - help(); |
4395 | + if (badopt) |
4396 | return 1; |
4397 | - } |
4398 | + |
4399 | smixer_options.device = card; |
4400 | |
4401 | - if (read_stdin) |
4402 | - return exec_stdin(); |
4403 | + if (read_stdin) { |
4404 | + retval = exec_stdin(); |
4405 | + goto finish; |
4406 | + } |
4407 | |
4408 | if (argc - optind <= 0) { |
4409 | - return selems(LEVEL_BASIC | level) ? 1 : 0; |
4410 | + retval = selems(LEVEL_BASIC | level) ? 1 : 0; |
4411 | + goto finish; |
4412 | } |
4413 | if (!strcmp(argv[optind], "help")) { |
4414 | - return help() ? 1 : 0; |
4415 | + retval = help() ? 1 : 0; |
4416 | } else if (!strcmp(argv[optind], "info")) { |
4417 | - return info() ? 1 : 0; |
4418 | + retval = info() ? 1 : 0; |
4419 | } else if (!strcmp(argv[optind], "controls")) { |
4420 | - return controls(level) ? 1 : 0; |
4421 | + retval = controls(level) ? 1 : 0; |
4422 | } else if (!strcmp(argv[optind], "contents")) { |
4423 | - return controls(LEVEL_BASIC | level) ? 1 : 0; |
4424 | + retval = controls(LEVEL_BASIC | level) ? 1 : 0; |
4425 | } else if (!strcmp(argv[optind], "scontrols") || !strcmp(argv[optind], "simple")) { |
4426 | - return selems(level) ? 1 : 0; |
4427 | + retval = selems(level) ? 1 : 0; |
4428 | } else if (!strcmp(argv[optind], "scontents")) { |
4429 | - return selems(LEVEL_BASIC | level) ? 1 : 0; |
4430 | + retval = selems(LEVEL_BASIC | level) ? 1 : 0; |
4431 | } else if (!strcmp(argv[optind], "sset") || !strcmp(argv[optind], "set")) { |
4432 | - return sset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 0, 0) ? 1 : 0; |
4433 | + retval = sset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 0, 0) ? 1 : 0; |
4434 | } else if (!strcmp(argv[optind], "sget") || !strcmp(argv[optind], "get")) { |
4435 | - return sset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 1, 0) ? 1 : 0; |
4436 | + retval = sset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 1, 0) ? 1 : 0; |
4437 | } else if (!strcmp(argv[optind], "cset")) { |
4438 | - return cset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 0, 0) ? 1 : 0; |
4439 | + retval = cset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 0, 0) ? 1 : 0; |
4440 | } else if (!strcmp(argv[optind], "cget")) { |
4441 | - return cset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 1, 0) ? 1 : 0; |
4442 | + retval = cset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 1, 0) ? 1 : 0; |
4443 | } else if (!strcmp(argv[optind], "events")) { |
4444 | - return events(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL); |
4445 | + retval = events(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL); |
4446 | } else if (!strcmp(argv[optind], "sevents")) { |
4447 | - return sevents(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL); |
4448 | + retval = sevents(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL); |
4449 | } else { |
4450 | fprintf(stderr, "amixer: Unknown command '%s'...\n", argv[optind]); |
4451 | + retval = 0; |
4452 | } |
4453 | |
4454 | - return 0; |
4455 | +finish: |
4456 | + snd_config_update_free_global(); |
4457 | + |
4458 | + return retval; |
4459 | } |
4460 | diff --git a/amixer/volume_mapping.c b/amixer/volume_mapping.c |
4461 | new file mode 100644 |
4462 | index 0000000..29ab061 |
4463 | --- /dev/null |
4464 | +++ b/amixer/volume_mapping.c |
4465 | @@ -0,0 +1,179 @@ |
4466 | +/* |
4467 | + * Copyright (c) 2010 Clemens Ladisch <clemens@ladisch.de> |
4468 | + * |
4469 | + * Permission to use, copy, modify, and/or distribute this software for any |
4470 | + * purpose with or without fee is hereby granted, provided that the above |
4471 | + * copyright notice and this permission notice appear in all copies. |
4472 | + * |
4473 | + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
4474 | + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
4475 | + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
4476 | + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
4477 | + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
4478 | + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
4479 | + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
4480 | + */ |
4481 | + |
4482 | +/* |
4483 | + * The functions in this file map the value ranges of ALSA mixer controls onto |
4484 | + * the interval 0..1. |
4485 | + * |
4486 | + * The mapping is designed so that the position in the interval is proportional |
4487 | + * to the volume as a human ear would perceive it (i.e., the position is the |
4488 | + * cubic root of the linear sample multiplication factor). For controls with |
4489 | + * a small range (24 dB or less), the mapping is linear in the dB values so |
4490 | + * that each step has the same size visually. Only for controls without dB |
4491 | + * information, a linear mapping of the hardware volume register values is used |
4492 | + * (this is the same algorithm as used in the old alsamixer). |
4493 | + * |
4494 | + * When setting the volume, 'dir' is the rounding direction: |
4495 | + * -1/0/1 = down/nearest/up. |
4496 | + */ |
4497 | + |
4498 | +#define _ISOC99_SOURCE /* lrint() */ |
4499 | +#include "aconfig.h" |
4500 | +#include <math.h> |
4501 | +#include <stdbool.h> |
4502 | +#include "volume_mapping.h" |
4503 | + |
4504 | +#define MAX_LINEAR_DB_SCALE 24 |
4505 | + |
4506 | +static inline bool use_linear_dB_scale(long dBmin, long dBmax) |
4507 | +{ |
4508 | + return dBmax - dBmin <= MAX_LINEAR_DB_SCALE * 100; |
4509 | +} |
4510 | + |
4511 | +static long lrint_dir(double x, int dir) |
4512 | +{ |
4513 | + if (dir > 0) |
4514 | + return lrint(ceil(x)); |
4515 | + else if (dir < 0) |
4516 | + return lrint(floor(x)); |
4517 | + else |
4518 | + return lrint(x); |
4519 | +} |
4520 | + |
4521 | +enum ctl_dir { PLAYBACK, CAPTURE }; |
4522 | + |
4523 | +static int (* const get_dB_range[2])(snd_mixer_elem_t *, long *, long *) = { |
4524 | + snd_mixer_selem_get_playback_dB_range, |
4525 | + snd_mixer_selem_get_capture_dB_range, |
4526 | +}; |
4527 | +static int (* const get_raw_range[2])(snd_mixer_elem_t *, long *, long *) = { |
4528 | + snd_mixer_selem_get_playback_volume_range, |
4529 | + snd_mixer_selem_get_capture_volume_range, |
4530 | +}; |
4531 | +static int (* const get_dB[2])(snd_mixer_elem_t *, snd_mixer_selem_channel_id_t, long *) = { |
4532 | + snd_mixer_selem_get_playback_dB, |
4533 | + snd_mixer_selem_get_capture_dB, |
4534 | +}; |
4535 | +static int (* const get_raw[2])(snd_mixer_elem_t *, snd_mixer_selem_channel_id_t, long *) = { |
4536 | + snd_mixer_selem_get_playback_volume, |
4537 | + snd_mixer_selem_get_capture_volume, |
4538 | +}; |
4539 | +static int (* const set_dB[2])(snd_mixer_elem_t *, snd_mixer_selem_channel_id_t, long, int) = { |
4540 | + snd_mixer_selem_set_playback_dB, |
4541 | + snd_mixer_selem_set_capture_dB, |
4542 | +}; |
4543 | +static int (* const set_raw[2])(snd_mixer_elem_t *, snd_mixer_selem_channel_id_t, long) = { |
4544 | + snd_mixer_selem_set_playback_volume, |
4545 | + snd_mixer_selem_set_capture_volume, |
4546 | +}; |
4547 | + |
4548 | +static double get_normalized_volume(snd_mixer_elem_t *elem, |
4549 | + snd_mixer_selem_channel_id_t channel, |
4550 | + enum ctl_dir ctl_dir) |
4551 | +{ |
4552 | + long min, max, value; |
4553 | + double normalized, min_norm; |
4554 | + int err; |
4555 | + |
4556 | + err = get_dB_range[ctl_dir](elem, &min, &max); |
4557 | + if (err < 0 || min >= max) { |
4558 | + err = get_raw_range[ctl_dir](elem, &min, &max); |
4559 | + if (err < 0 || min == max) |
4560 | + return 0; |
4561 | + |
4562 | + err = get_raw[ctl_dir](elem, channel, &value); |
4563 | + if (err < 0) |
4564 | + return 0; |
4565 | + |
4566 | + return (value - min) / (double)(max - min); |
4567 | + } |
4568 | + |
4569 | + err = get_dB[ctl_dir](elem, channel, &value); |
4570 | + if (err < 0) |
4571 | + return 0; |
4572 | + |
4573 | + if (use_linear_dB_scale(min, max)) |
4574 | + return (value - min) / (double)(max - min); |
4575 | + |
4576 | + normalized = pow(10, (value - max) / 6000.0); |
4577 | + if (min != SND_CTL_TLV_DB_GAIN_MUTE) { |
4578 | + min_norm = pow(10, (min - max) / 6000.0); |
4579 | + normalized = (normalized - min_norm) / (1 - min_norm); |
4580 | + } |
4581 | + |
4582 | + return normalized; |
4583 | +} |
4584 | + |
4585 | +static int set_normalized_volume(snd_mixer_elem_t *elem, |
4586 | + snd_mixer_selem_channel_id_t channel, |
4587 | + double volume, |
4588 | + int dir, |
4589 | + enum ctl_dir ctl_dir) |
4590 | +{ |
4591 | + long min, max, value; |
4592 | + double min_norm; |
4593 | + int err; |
4594 | + |
4595 | + err = get_dB_range[ctl_dir](elem, &min, &max); |
4596 | + if (err < 0 || min >= max) { |
4597 | + err = get_raw_range[ctl_dir](elem, &min, &max); |
4598 | + if (err < 0) |
4599 | + return err; |
4600 | + |
4601 | + value = lrint_dir(volume * (max - min), dir) + min; |
4602 | + return set_raw[ctl_dir](elem, channel, value); |
4603 | + } |
4604 | + |
4605 | + if (use_linear_dB_scale(min, max)) { |
4606 | + value = lrint_dir(volume * (max - min), dir) + min; |
4607 | + return set_dB[ctl_dir](elem, channel, value, dir); |
4608 | + } |
4609 | + |
4610 | + if (min != SND_CTL_TLV_DB_GAIN_MUTE) { |
4611 | + min_norm = pow(10, (min - max) / 6000.0); |
4612 | + volume = volume * (1 - min_norm) + min_norm; |
4613 | + } |
4614 | + value = lrint_dir(6000.0 * log10(volume), dir) + max; |
4615 | + return set_dB[ctl_dir](elem, channel, value, dir); |
4616 | +} |
4617 | + |
4618 | +double get_normalized_playback_volume(snd_mixer_elem_t *elem, |
4619 | + snd_mixer_selem_channel_id_t channel) |
4620 | +{ |
4621 | + return get_normalized_volume(elem, channel, PLAYBACK); |
4622 | +} |
4623 | + |
4624 | +double get_normalized_capture_volume(snd_mixer_elem_t *elem, |
4625 | + snd_mixer_selem_channel_id_t channel) |
4626 | +{ |
4627 | + return get_normalized_volume(elem, channel, CAPTURE); |
4628 | +} |
4629 | + |
4630 | +int set_normalized_playback_volume(snd_mixer_elem_t *elem, |
4631 | + snd_mixer_selem_channel_id_t channel, |
4632 | + double volume, |
4633 | + int dir) |
4634 | +{ |
4635 | + return set_normalized_volume(elem, channel, volume, dir, PLAYBACK); |
4636 | +} |
4637 | + |
4638 | +int set_normalized_capture_volume(snd_mixer_elem_t *elem, |
4639 | + snd_mixer_selem_channel_id_t channel, |
4640 | + double volume, |
4641 | + int dir) |
4642 | +{ |
4643 | + return set_normalized_volume(elem, channel, volume, dir, CAPTURE); |
4644 | +} |
4645 | diff --git a/amixer/volume_mapping.h b/amixer/volume_mapping.h |
4646 | new file mode 100644 |
4647 | index 0000000..d4251d6 |
4648 | --- /dev/null |
4649 | +++ b/amixer/volume_mapping.h |
4650 | @@ -0,0 +1,19 @@ |
4651 | +#ifndef VOLUME_MAPPING_H_INCLUDED |
4652 | +#define VOLUME_MAPPING_H_INCLUDED |
4653 | + |
4654 | +#include <alsa/asoundlib.h> |
4655 | + |
4656 | +double get_normalized_playback_volume(snd_mixer_elem_t *elem, |
4657 | + snd_mixer_selem_channel_id_t channel); |
4658 | +double get_normalized_capture_volume(snd_mixer_elem_t *elem, |
4659 | + snd_mixer_selem_channel_id_t channel); |
4660 | +int set_normalized_playback_volume(snd_mixer_elem_t *elem, |
4661 | + snd_mixer_selem_channel_id_t channel, |
4662 | + double volume, |
4663 | + int dir); |
4664 | +int set_normalized_capture_volume(snd_mixer_elem_t *elem, |
4665 | + snd_mixer_selem_channel_id_t channel, |
4666 | + double volume, |
4667 | + int dir); |
4668 | + |
4669 | +#endif |
4670 | diff --git a/aplay/Makefile.in b/aplay/Makefile.in |
4671 | index b3306bc..5fe4507 100644 |
4672 | --- a/aplay/Makefile.in |
4673 | +++ b/aplay/Makefile.in |
4674 | @@ -1,7 +1,7 @@ |
4675 | -# Makefile.in generated by automake 1.16.1 from Makefile.am. |
4676 | +# Makefile.in generated by automake 1.16.2 from Makefile.am. |
4677 | # @configure_input@ |
4678 | |
4679 | -# Copyright (C) 1994-2018 Free Software Foundation, Inc. |
4680 | +# Copyright (C) 1994-2020 Free Software Foundation, Inc. |
4681 | |
4682 | # This Makefile.in is free software; the Free Software Foundation |
4683 | # gives unlimited permission to copy and/or distribute it, |
4684 | @@ -93,7 +93,8 @@ bin_PROGRAMS = aplay$(EXEEXT) |
4685 | subdir = aplay |
4686 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
4687 | am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ |
4688 | - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
4689 | + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ |
4690 | + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
4691 | $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ |
4692 | $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ |
4693 | $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ |
4694 | @@ -259,8 +260,8 @@ MAINT = @MAINT@ |
4695 | MAKEINFO = @MAKEINFO@ |
4696 | MKDIR_P = @MKDIR_P@ |
4697 | MSGFMT = @MSGFMT@ |
4698 | -MSGFMT_015 = @MSGFMT_015@ |
4699 | MSGMERGE = @MSGMERGE@ |
4700 | +MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ |
4701 | NCURSESW_CFLAGS = @NCURSESW_CFLAGS@ |
4702 | NCURSESW_LIBS = @NCURSESW_LIBS@ |
4703 | NCURSES_CFLAGS = @NCURSES_CFLAGS@ |
4704 | @@ -340,6 +341,7 @@ prefix = @prefix@ |
4705 | program_transform_name = @program_transform_name@ |
4706 | psdir = @psdir@ |
4707 | rst2man_available = @rst2man_available@ |
4708 | +runstatedir = @runstatedir@ |
4709 | sbindir = @sbindir@ |
4710 | sharedstatedir = @sharedstatedir@ |
4711 | srcdir = @srcdir@ |
4712 | diff --git a/aplay/aplay.c b/aplay/aplay.c |
4713 | index 0a65ad6..cc51dcb 100644 |
4714 | --- a/aplay/aplay.c |
4715 | +++ b/aplay/aplay.c |
4716 | @@ -525,7 +525,7 @@ int main(int argc, char *argv[]) |
4717 | }; |
4718 | char *pcm_name = "default"; |
4719 | int tmp, err, c; |
4720 | - int do_device_list = 0, do_pcm_list = 0; |
4721 | + int do_device_list = 0, do_pcm_list = 0, force_sample_format = 0; |
4722 | snd_pcm_info_t *info; |
4723 | FILE *direction; |
4724 | |
4725 | @@ -612,6 +612,7 @@ int main(int argc, char *argv[]) |
4726 | } |
4727 | break; |
4728 | case 'f': |
4729 | + force_sample_format = 1; |
4730 | if (strcasecmp(optarg, "cd") == 0 || strcasecmp(optarg, "cdr") == 0) { |
4731 | if (strcasecmp(optarg, "cdr") == 0) |
4732 | rhwparams.format = SND_PCM_FORMAT_S16_BE; |
4733 | @@ -844,6 +845,14 @@ int main(int argc, char *argv[]) |
4734 | } |
4735 | } |
4736 | |
4737 | + if (!force_sample_format && |
4738 | + isatty(fileno(stdin)) && |
4739 | + stream == SND_PCM_STREAM_CAPTURE && |
4740 | + snd_pcm_format_width(rhwparams.format) <= 8) |
4741 | + fprintf(stderr, "Warning: Some sources (like microphones) may produce inaudiable results\n" |
4742 | + " with 8-bit sampling. Use '-f' argument to increase resolution\n" |
4743 | + " e.g. '-f S16_LE'.\n"); |
4744 | + |
4745 | chunk_size = 1024; |
4746 | hwparams = rhwparams; |
4747 | |
4748 | @@ -1528,6 +1537,19 @@ static void done_stdin(void) |
4749 | tcsetattr(fileno(stdin), TCSANOW, &term); |
4750 | } |
4751 | |
4752 | +static char wait_for_input(void) |
4753 | +{ |
4754 | + struct pollfd pfd; |
4755 | + unsigned char b; |
4756 | + |
4757 | + do { |
4758 | + pfd.fd = fileno(stdin); |
4759 | + pfd.events = POLLIN; |
4760 | + poll(&pfd, 1, -1); |
4761 | + } while (read(fileno(stdin), &b, 1) != 1); |
4762 | + return b; |
4763 | +} |
4764 | + |
4765 | static void do_pause(void) |
4766 | { |
4767 | int err; |
4768 | @@ -1546,7 +1568,7 @@ static void do_pause(void) |
4769 | return; |
4770 | } |
4771 | while (1) { |
4772 | - while (read(fileno(stdin), &b, 1) != 1); |
4773 | + b = wait_for_input(); |
4774 | if (b == ' ' || b == '\r') { |
4775 | while (read(fileno(stdin), &b, 1) == 1); |
4776 | if (snd_pcm_state(handle) == SND_PCM_STATE_SUSPENDED) |
4777 | @@ -1571,7 +1593,7 @@ static void check_stdin(void) |
4778 | while (read(fileno(stdin), &b, 1) == 1); |
4779 | fprintf(stderr, _("\r=== PAUSE === ")); |
4780 | fflush(stderr); |
4781 | - do_pause(); |
4782 | + do_pause(); |
4783 | fprintf(stderr, " \r"); |
4784 | fflush(stderr); |
4785 | } |
4786 | @@ -1651,7 +1673,8 @@ static void xrun(void) |
4787 | prg_exit(EXIT_FAILURE); |
4788 | } |
4789 | return; /* ok, data should be accepted again */ |
4790 | - } if (snd_pcm_status_get_state(status) == SND_PCM_STATE_DRAINING) { |
4791 | + } |
4792 | + if (snd_pcm_status_get_state(status) == SND_PCM_STATE_DRAINING) { |
4793 | if (verbose) { |
4794 | fprintf(stderr, _("Status(DRAINING):\n")); |
4795 | snd_pcm_status_dump(status, log); |
4796 | @@ -1914,22 +1937,46 @@ static void do_test_position(void) |
4797 | static snd_pcm_sframes_t minavail, mindelay; |
4798 | static snd_pcm_sframes_t badavail = 0, baddelay = 0; |
4799 | snd_pcm_sframes_t outofrange; |
4800 | - snd_pcm_sframes_t avail, delay; |
4801 | + snd_pcm_sframes_t avail, delay, savail, sdelay; |
4802 | + snd_pcm_status_t *status; |
4803 | int err; |
4804 | |
4805 | + snd_pcm_status_alloca(&status); |
4806 | err = snd_pcm_avail_delay(handle, &avail, &delay); |
4807 | if (err < 0) |
4808 | return; |
4809 | + err = snd_pcm_status(handle, status); |
4810 | + if (err < 0) |
4811 | + return; |
4812 | + savail = snd_pcm_status_get_avail(status); |
4813 | + sdelay = snd_pcm_status_get_delay(status); |
4814 | outofrange = (test_coef * (snd_pcm_sframes_t)buffer_frames) / 2; |
4815 | if (avail > outofrange || avail < -outofrange || |
4816 | delay > outofrange || delay < -outofrange) { |
4817 | - badavail = avail; baddelay = delay; |
4818 | - availsum = delaysum = samples = 0; |
4819 | - maxavail = maxdelay = 0; |
4820 | - minavail = mindelay = buffer_frames * 16; |
4821 | - fprintf(stderr, _("Suspicious buffer position (%li total): " |
4822 | - "avail = %li, delay = %li, buffer = %li\n"), |
4823 | - ++counter, (long)avail, (long)delay, (long)buffer_frames); |
4824 | + badavail = avail; baddelay = delay; |
4825 | + availsum = delaysum = samples = 0; |
4826 | + maxavail = maxdelay = 0; |
4827 | + minavail = mindelay = buffer_frames * 16; |
4828 | + fprintf(stderr, _("Suspicious buffer position (%li total): " |
4829 | + "avail = %li, delay = %li, buffer = %li\n"), |
4830 | + ++counter, (long)avail, (long)delay, (long)buffer_frames); |
4831 | + } else if (savail > outofrange || savail < -outofrange || |
4832 | + sdelay > outofrange || sdelay < -outofrange) { |
4833 | + badavail = savail; baddelay = sdelay; |
4834 | + availsum = delaysum = samples = 0; |
4835 | + maxavail = maxdelay = 0; |
4836 | + minavail = mindelay = buffer_frames * 16; |
4837 | + fprintf(stderr, _("Suspicious status buffer position (%li total): " |
4838 | + "avail = %li, delay = %li, buffer = %li\n"), |
4839 | + ++counter, (long)savail, (long)sdelay, (long)buffer_frames); |
4840 | + } else if (stream == SND_PCM_STREAM_CAPTURE && avail > delay) { |
4841 | + fprintf(stderr, _("Suspicious buffer position avail > delay (%li total): " |
4842 | + "avail = %li, delay = %li\n"), |
4843 | + ++counter, (long)avail, (long)delay); |
4844 | + } else if (stream == SND_PCM_STREAM_CAPTURE && savail > sdelay) { |
4845 | + fprintf(stderr, _("Suspicious status buffer position avail > delay (%li total): " |
4846 | + "avail = %li, delay = %li\n"), |
4847 | + ++counter, (long)savail, (long)sdelay); |
4848 | } else if (verbose) { |
4849 | time(&now); |
4850 | if (tmr == (time_t) -1) { |
4851 | @@ -1940,19 +1987,27 @@ static void do_test_position(void) |
4852 | } |
4853 | if (avail > maxavail) |
4854 | maxavail = avail; |
4855 | + if (savail > maxavail) |
4856 | + maxavail = savail; |
4857 | if (delay > maxdelay) |
4858 | maxdelay = delay; |
4859 | + if (sdelay > maxdelay) |
4860 | + maxdelay = sdelay; |
4861 | if (avail < minavail) |
4862 | minavail = avail; |
4863 | + if (savail < minavail) |
4864 | + minavail = savail; |
4865 | if (delay < mindelay) |
4866 | mindelay = delay; |
4867 | + if (sdelay < mindelay) |
4868 | + mindelay = sdelay; |
4869 | availsum += avail; |
4870 | delaysum += delay; |
4871 | samples++; |
4872 | - if (avail != 0 && now != tmr) { |
4873 | + if ((maxavail != 0 || maxdelay != 0) && now != tmr) { |
4874 | fprintf(stderr, "BUFPOS: avg%li/%li " |
4875 | "min%li/%li max%li/%li (%li) (%li:%li/%li)\n", |
4876 | - (long)(availsum / samples), |
4877 | + (long)(availsum / samples), |
4878 | (long)(delaysum / samples), |
4879 | (long)minavail, (long)mindelay, |
4880 | (long)maxavail, (long)maxdelay, |
4881 | @@ -1961,6 +2016,10 @@ static void do_test_position(void) |
4882 | tmr = now; |
4883 | } |
4884 | } |
4885 | + if (verbose == 1) { |
4886 | + fprintf(stderr, _("Status(R/W) (standalone avail=%li delay=%li):\n"), (long)avail, (long)delay); |
4887 | + snd_pcm_status_dump(status, log); |
4888 | + } |
4889 | } |
4890 | |
4891 | /* |
4892 | @@ -2495,7 +2554,9 @@ static void voc_play(int fd, int ofs, char *name) |
4893 | } |
4894 | } /* while(1) */ |
4895 | __end: |
4896 | - voc_pcm_flush(); |
4897 | + if (!in_aborting) { |
4898 | + voc_pcm_flush(); |
4899 | + } |
4900 | free(buf); |
4901 | } |
4902 | /* that was a big one, perhaps somebody split it :-) */ |
4903 | @@ -2810,9 +2871,11 @@ static void playback_go(int fd, size_t loaded, off64_t count, int rtype, char *n |
4904 | written += r; |
4905 | l = 0; |
4906 | } |
4907 | - snd_pcm_nonblock(handle, 0); |
4908 | - snd_pcm_drain(handle); |
4909 | - snd_pcm_nonblock(handle, nonblock); |
4910 | + if (!in_aborting) { |
4911 | + snd_pcm_nonblock(handle, 0); |
4912 | + snd_pcm_drain(handle); |
4913 | + snd_pcm_nonblock(handle, nonblock); |
4914 | + } |
4915 | } |
4916 | |
4917 | static int read_header(int *loaded, int header_size) |
4918 | @@ -3268,7 +3331,7 @@ static void playbackv_go(int* fds, unsigned int channels, size_t loaded, off64_t |
4919 | do { |
4920 | r = safe_read(fds[0], bufs[0], expected); |
4921 | if (r < 0) { |
4922 | - perror(names[channel]); |
4923 | + perror(names[0]); |
4924 | prg_exit(EXIT_FAILURE); |
4925 | } |
4926 | for (channel = 1; channel < channels; ++channel) { |
4927 | @@ -3288,9 +3351,11 @@ static void playbackv_go(int* fds, unsigned int channels, size_t loaded, off64_t |
4928 | r = r * bits_per_frame / 8; |
4929 | count -= r; |
4930 | } |
4931 | - snd_pcm_nonblock(handle, 0); |
4932 | - snd_pcm_drain(handle); |
4933 | - snd_pcm_nonblock(handle, nonblock); |
4934 | + if (!in_aborting) { |
4935 | + snd_pcm_nonblock(handle, 0); |
4936 | + snd_pcm_drain(handle); |
4937 | + snd_pcm_nonblock(handle, nonblock); |
4938 | + } |
4939 | } |
4940 | |
4941 | static void capturev_go(int* fds, unsigned int channels, off64_t count, int rtype, char **names) |
4942 | diff --git a/axfer/Makefile.in b/axfer/Makefile.in |
4943 | index b25a28e..7b9f1ce 100644 |
4944 | --- a/axfer/Makefile.in |
4945 | +++ b/axfer/Makefile.in |
4946 | @@ -1,7 +1,7 @@ |
4947 | -# Makefile.in generated by automake 1.16.1 from Makefile.am. |
4948 | +# Makefile.in generated by automake 1.16.2 from Makefile.am. |
4949 | # @configure_input@ |
4950 | |
4951 | -# Copyright (C) 1994-2018 Free Software Foundation, Inc. |
4952 | +# Copyright (C) 1994-2020 Free Software Foundation, Inc. |
4953 | |
4954 | # This Makefile.in is free software; the Free Software Foundation |
4955 | # gives unlimited permission to copy and/or distribute it, |
4956 | @@ -95,7 +95,8 @@ bin_PROGRAMS = axfer$(EXEEXT) |
4957 | subdir = axfer |
4958 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
4959 | am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ |
4960 | - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
4961 | + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ |
4962 | + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ |
4963 | $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ |
4964 | $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ |
4965 | $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ |
4966 | @@ -337,8 +338,8 @@ MAINT = @MAINT@ |
4967 | MAKEINFO = @MAKEINFO@ |
4968 | MKDIR_P = @MKDIR_P@ |
4969 | MSGFMT = @MSGFMT@ |
4970 | -MSGFMT_015 = @MSGFMT_015@ |
4971 | MSGMERGE = @MSGMERGE@ |
4972 | +MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ |
4973 | NCURSESW_CFLAGS = @NCURSESW_CFLAGS@ |
4974 | NCURSESW_LIBS = @NCURSESW_LIBS@ |
4975 | NCURSES_CFLAGS = @NCURSES_CFLAGS@ |
4976 | @@ -418,6 +419,7 @@ prefix = @prefix@ |
4977 | program_transform_name = @program_transform_name@ |
4978 | psdir = @psdir@ |
4979 | rst2man_available = @rst2man_available@ |
4980 | +runstatedir = @runstatedir@ |
4981 | sbindir = @sbindir@ |
4982 | sharedstatedir = @sharedstatedir@ |
4983 | srcdir = @srcdir@ |
4984 | diff --git a/axfer/container.c b/axfer/container.c |
4985 | index 566acd0..8c88d5c 100644 |
4986 | --- a/axfer/container.c |
4987 | +++ b/axfer/container.c |
4988 | @@ -143,8 +143,8 @@ static int set_nonblock_flag(int fd) |
4989 | return 0; |
4990 | } |
4991 | |
4992 | -int container_parser_init(struct container_context *cntr, |
4993 | - const char *const path, unsigned int verbose) |
4994 | +int container_parser_init(struct container_context *cntr, int fd, |
4995 | + unsigned int verbose) |
4996 | { |
4997 | const struct container_parser *parsers[] = { |
4998 | [CONTAINER_FORMAT_RIFF_WAVE] = &container_parser_riff_wave, |
4999 | @@ -157,8 +157,7 @@ int container_parser_init(struct container_context *cntr, |
5000 | int err; |
The diff has been truncated for viewing.
Conflict in debian/changelog patches/ alsa-info_ call_home. patch patches/ series patches/ udev_test_ alsactl. patch patches/ unset_pulse_ internal. patch
Conflict in debian/
Conflict in debian/
Conflict in debian/
Conflict in debian/
do you not have these on your end?